资源描述:
《2_实验项目指导书》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、小型C语言编译器设计实验项目指导书—、实验目的1.构造一小型C语言SimpleC的编译器软件,达到综合理解和运用编译原理课程所讲解的关键过程(词法分析、语法分析、静态语义分析、代码生成)及相关算法的目的。2.通过木实验理解和掌握一般编译程序的程序组织方法和测试方法。二、实验环境1.硕件环境:1台PentiumPC机/人2.软件环境:WindowsXP/2000/2003、Linux操作系统、VisualC++6.0/7.0C/C++IDE或EclipseIDEforGCC三、实验内容和要求1.语法分析以下小型C语言SimpleC并实现屮间代码生成:SimpleC为标准C的一个了集,其
2、语法特征如F:1)基本数据类型BasicType:int2)变量声明:BasicTypeavariable;3)函数定义:BasicTypefoo(BasicTypeparaml,BasicTypeparam2,・・・)4)四则运算:+,-,/,*5)赋值:二6)返冋:return,returnBasicTypeValue7)逻辑判断:if,else(含复合语句)8)循环:while(含复合语句)9)复合语句块标记:{}在由词法分析程序分析SimpleC产生的token文件、符号表文件的基础上,完善语法和词法分析,产生相应的中间代码-四元式序列。2.编译程序组织的参考结构:木编译程序
3、组织的参考结构,如图1-1所示。图1-1本编译程序组织的参考结构在图1-1屮,整个编译程序结构以语法分析组件为屮心,在语法分析组件对句子结构生成或归约的控制下,其调用词法分析组件从输入的SimpleC源程序字符流屮识别单词,完成语法树的逐步构造,其间词法分析程序、语法分析程序将对符号表进行操纵。在语法树构造完成后,调用语义分析对语法树进行静态语义分析,当通过静态语义分析(即表明源程序无静态语义错误)后,调用代码生成组件完成屮间代码(四元式)的生成。岀错检查和处理程序服务于词法分析、语法分析和代码生成组件。1.SimpleC的参考EBNF文法SimpleC的参考EBNF文法如下:<程序
4、〉-〉<主函数><子函数><变量说明〉<主函数〉-〉(void
5、int)main<参数><复合语句〉<子函数〉->(〈声明头部>
6、void<标识符〉)<参数><复合语句〉<参数〉-〉<参数表》)'<参数表〉-><表达式〉{z<表达式〉I<空〉}<复合语句〉-〉z{7<常量说明><变量说明><语句列〉V〈变量说明〉->〈声明头部〉{,<标识符>}<声明头部〉->int<标识符〉<语句序列〉-><语句〉{<语句>}<语句〉->〈条件语句〉I<循环语句〉l<f{f<语句序列》},I<子函数调用语句〉;
7、<赋值语句〉;丨<返回语句〉;Iv读语句>;1<写语句〉;丨<空><赋值语句〉-><标识
8、符>=<表达式〉<条件语句〉->if'('<条件〉「Y语句〉
9、elsez(z<条件〉')Y语句〉<循环语句〉->while<条件><语句〉<读语句〉->scarify<标识符》V<写语句〉-〉printfr(r<标识符>,),<返回语句〉->return'('<表达式〉〈子函数调用语句〉-〉(<声明头部>
10、void<标识符>)<参数〉<表达式〉->{+〔-}<项〉{<加法运算><项>}<项〉-><
11、大I子〉{<乘除法运算><因子〉}<因子〉-〉〈标识符>『(,<表达式整数>
12、<子函数调用语句〉<标识符〉->V字符>{<字符>1<数字>}<字符〉->a
13、b
14、
15、z<数字〉->0<非零数字
16、〉<非零数字〉->1
17、2
18、3
19、4
20、5
21、6
22、7
23、8
24、9<字符串〉-〉〃{<字符>丨〈数字>}〃<加减法运算〉-〉+1-<乘除法运算〉->*1/<关系运算符〉->I>=丨!=丨==1.四元式的参考操作码SimpleC编译器后端所产生的四元式的参考操作代码及其解释如下:操作码Opl0p2Result+XYX和Y相加—XYX和Y相减*XYX和Y相乘/XYX和Y相除—YY赋值XYX大于Y1=■XYX不等于Y<=XYX小于等于Y>二XYX大于等于Y——XYX等于YJMP跳转到result所指标签RED从终端输入一个值放到resu11WRIX将X输出到终端四、实验报告要
25、求1.提供实现SimpleC编译器的源代码、运行结果。语法分析可采用LL(1)或LR(1)O源代码应尽可能增加释,以清楚解释程序设计意图。2.作为测试用例,至少提供一个用SimpleC写的输入源程序及其编译后的输出四元式文件。程序的调试信息可以输出到终端或特定的文件,以便捕捉和修正程序的错误。1.鼓励使用不同的编程语言如Java、Python等实现多种算法,并尝试在不同平台环境进行比较。鼓励采用规范的软件工程方法,通过UML活动图、序列图或I•办作图描述算