欢迎来到天天文库
浏览记录
ID:56912374
大小:394.00 KB
页数:38页
时间:2020-07-23
《华中科技大学编译原理课设.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、华中科技大学软件学院《编译技术》课程设计报告实验名称C/C++语言编译器设计姓名学号班级指导教师2010年11月22日编译技术课程设计报告一、实验题目实验概述:用C语言对下述文法和单词表定义的语言设计编制一个编译器。具体要求:1)单词符号及种别表单词符号种别编码单词值main1 int2 float3 double4 char5 if6 else7 do8 while9 l(l
2、d)*10内部字符串(+
3、-
4、ε)d*(.dd*
5、ε)(e(+
6、-
7、ε)dd*
8、ε)20二进制数值表示=21 +22-23 *2
9、4 /25 (26 )27 {28 }29 ,30 ;31 >32 >=33 <34 <=35 ==36 !=37 单词符号及其种别表2)语法结构定义<程序>::=main()<语句块><语句块>::=‘{‘<语句串>’}’<语句串>::=<语句>{;<语句>};<语句>::=<赋值语句>
10、<条件语句>
11、<循环语句><赋值语句>::=ID=<表达式><条件语句>::=if<条件><语句块>[else<语句块>]<循环语句>::=do<语句块>while<条件><条件>::=<表达式><关系运算符><表达式
12、><表达式>::=<项>{+<项>
13、-<项>}<项>::=<因子>{*<因子>
14、/<因子>}<因子>::=ID
15、num
16、(<表达式>)num::=(+
17、-
18、ε)数字*(.数字数字*
19、ε)(e(+
20、-
21、ε)数字数字*
22、ε)ID::=字母(字母
23、d数字)*字母::=a
24、b
25、c…
26、z
27、A
28、B
29、C…
30、Z数字::=0
31、1
32、2…
33、9<关系运算符>::=<
34、<=
35、>
36、>=
37、==
38、!=一、实验目的1)通过该课程设计,熟练应用编译原理的基本理论和方法2)学会用C/C++高级程序设计语言设计一个编译器的技术3)加深对编译原理
39、的分析理论的理解,培养动手实践能力4)通过设计、编制、调试一个编译器,掌握其设计方法和技术,提高解决实际问题的综合素质二、实验要求处理用户提交的符合上述文法的源代码序列,生成四元式中间代码或X86平台上的目标代码。一、实验步骤1)画出识别上述语言单词的状态转换图2)用C/C++语言编写词法分析程序(应考虑能被语法分析程序调用)3)预处理,去除注释、多余空格、回车换行符等4)设计实现语法分析程序(调用上述词法程序分析单词)5)设计构造属性文法及中间代码序列结构6)采用语法制导翻译法,完成语义分析程序设计,生
40、成四元式中间代码7)或将生成的四元式中间代码转换成X86平台上的目标代码8)设计若干用例,上机测试并通过所设计实现的编译器二、实验方案设计实现1.总体设计思想本课设的任务是完成一个完整的编译器,处理用户提交的符合所定文法的源程序代码,生成四元式中间代码,进而翻译成等价的X86平台上汇编语言的目标程序。编译程序的工作过程划分为下列5个过程:词法分析,语法分析,语义分析和中间代码生成,代码优化,目标代码生成。其中,词法分析阶段的基本任务是从以字符串表示的源程序中识别出具有独立意义的单词符号,并以二元组的形式输
41、出,以作为语法分析阶段的输入。语法分析阶段的基本任务是将词法分析阶段产生的二元组作为输入,根据语言的语法规则,识别出各种语法成分,并判断该单词符号序列是否是该语言的一个句子。语义分析的任务是首先对每种语法单位进行静态的语义审查,然后分析其含义,并用另一种语言形式(本课设采用四元式)来描述这种语义。代码优化的任务是对前阶段产生的中间代码进行等价变换或改造,以期获得更为高效即省时间和空间的目标代码。目标代码生成的任务是将中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码(本课设生成汇编指
42、令代码)。在词法分析阶段,通过DOS环境手动输入字符串序列(以’#’作为结束标志)作为带分析的源程序,调用词法扫描子程序将字符串以二元组的形式输出(若有不属于该语言单词符号出现,则进行出错处理),词法扫描子程序包括了对源程序的预处理(忽略多余空格、回车换行符等空白字符),以及对单词的识别和分类,以形成(单词种别,单词自身的值)形式的二元组,并将用户自定义变量信息存入程序变量信息表。在语法分析阶段,采用自上而下的递归下降分析法,从文法的开始符号出发,根据文法规则正向推导出给定句子。根据递归下降分析函数编写规
43、则来编写相应的函数,在各个函数的分析过程中调用词法分析程序中的扫描程序,发出“取下一个单词符号”的命令,以取得下一个单词符号作语法分析。在语义分析和中间代码生成阶段,采用语法制导翻译法,使用属性文法为工具来描述程序设计语言的语义。首先审查词法分析得到的每个语法结构的静态语义,如果静态语义正确再生成中间代码(本课设中采用四元式)。使用属性文法作为描述程序设计语言语义的工具,采用语法制导翻译法完成对语法成分的翻译工作,即在语法分析
此文档下载收益归作者所有