- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
华中科技大学软件学院
《编译技术》
课程设计报告
实验名称 C/C++语言编译器设计
姓名
学号
班级
指导教师
2010年 11月 22日
编译技术课程设计报告
实验题目
实验概述:用C语言对下述文法和单词表定义的语言设计编制一个编译器。
具体要求:
单词符号及种别表
单词符号 种别编码 单词值 main 1 int 2 float 3 double 4 char 5 if 6 else 7 do 8 while 9 l(l|d)* 10 内部字符串 ( +|-|ε ) d*(.dd* | ε)( e ( +|-|ε ) dd*|ε) 20 二进制数值表示 = 21 + 22 - 23 * 24 / 25 ( 26 ) 27 { 28 } 29 , 30 ; 31 32 = 33 34 = 35 == 36 != 37 单词符号及其种别表
2) 语法结构定义
程序 ::= main()语句块
语句块 ::= ‘{‘语句串’}’
语句串::=语句{;语句};
语句::=赋值语句|条件语句|循环语句
赋值语句::=ID=表达式
条件语句::=if条件语句块[else 语句块]
循环语句::=do 语句块while 条件
条件::=表达式关系运算符表达式
表达式 ::= 项{ +项|-项}
项 ::= 因子{*因子|/因子}
因子 ::=ID|num|(表达式)
num::= ( +|-|ε ) 数字*(.数字数字* | ε)( e ( +|-|ε ) 数字数字*|ε)
ID::=字母(字母|d数字)*
字母::=a|b|c…|z|A|B|C…|Z
数字::=0|1|2…|9
关系运算符 ::= |=||=|==|!=
实验目的
通过该课程设计,熟练应用编译原理的基本理论和方法
学会用C/C++高级程序设计语言设计一个编译器的技术
加深对编译原理的分析理论的理解,培养动手实践能力
通过设计、编制、调试一个编译器,掌握其设计方法和技术,提高解决实际问题的综合素质
实验要求
处理用户提交的符合上述文法的源代码序列,生成四元式中间代码或X86平台上的目标代码。
实验步骤
画出识别上述语言单词的状态转换图
用C/C++语言编写词法分析程序(应考虑能被语法分析程序调用)
预处理,去除注释、多余空格、回车换行符等
设计实现语法分析程序(调用上述词法程序分析单词)
设计构造属性文法及中间代码序列结构
采用语法制导翻译法,完成语义分析程序设计,生成四元式中间代码
或将生成的四元式中间代码转换成X86平台上的目标代码
设计若干用例,上机测试并通过所设计实现的编译器
实验方案设计实现
总体设计思想
本课设的任务是完成一个完整的编译器,处理用户提交的符合所定文法的源程序代码,生成四元式中间代码,进而翻译成等价的X86平台上汇编语言的目标程序。
编译程序的工作过程划分为下列5个过程:词法分析,语法分析,语义分析和中间代码生成,代码优化,目标代码生成。
其中,词法分析阶段的基本任务是从以字符串表示的源程序中识别出具有独立意义的单词符号,并以二元组的形式输出,以作为语法分析阶段的输入。语法分析阶段的基本任务是将词法分析阶段产生的二元组作为输入,根据语言的语法规则,识别出各种语法成分,并判断该单词符号序列是否是该语言的一个句子。语义分析的任务是首先对每种语法单位进行静态的语义审查,然后分析其含义,并用另一种语言形式 (本课设采用四元式) 来描述这种语义。代码优化的任务是对前阶段产生的中间代码进行等价变换或改造,以期获得更为高效即省时间和空间的目标代码。目标代码生成的任务是将中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码(本课设生成汇编指令代码)。
在词法分析阶段,通过DOS环境手动输入字符串序列(以’#’作为结束标志)作为带分析的源程序,调用词法扫描子程序将字符串以二元组的形式输出(若有不属于该语言单词符号出现,则进行出错处理),词法扫描子程序包括了对源程序的预处理(忽略多余空格、回车换行符等,使用属性文法为工具来描述程序设计语言的语义( +|-|ε ) dd*(.dd* | ε)( e ( +|-|ε ) dd*|ε)
⑵ 词法分析程序状态转换图:
语法分析器(递归下
文档评论(0)