资源描述:
《小型c语言编译器设计》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
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并实现中间
2、代码生成:SimpleC为标准C的一个子集,其语法特征如下:1)基本数据类型BasicType:int2)变量声明:BasicTypeavariable;3)函数定义:BasicTypefoo(BasicTypeparam1,BasicTypeparam2,...)4)四则运算:+,-,/,*5)赋值:=6)返回:return,returnBasicTypeValue7)逻辑判断:if,else(含复合语句)8)循环:while(含复合语句)9)复合语句块标记:{}在由词法分析程序分析SimpleC产生的token文件、符号表文件的基础上
3、,完善语法和词法分析,产生相应的中间代码-四元式序列。2.编译程序组织的参考结构:本编译程序组织的参考结构,如图1-1所示。图1-1本编译程序组织的参考结构在图1-1中,整个编译程序结构以语法分析组件为中心,在语法分析组件对句子结构生成或归约的控制下,其调用词法分析组件从输入的SimpleC源程序字符流中识别单词,完成语法树的逐步构造,其间词法分析程序、语法分析程序将对符号表进行操纵。在语法树构造完成后,调用语义分析对语法树进行静态语义分析,当通过静态语义分析(即表明源程序无静态语义错误)后,调用代码生成组件完成中间代码(四元式)的生成。
4、出错检查和处理程序服务于词法分析、语法分析和代码生成组件。3.SimpleC的参考EBNF文法SimpleC的参考EBNF文法如下:<程序>-><主函数><子函数><变量说明><主函数>->(void
5、int)main<参数><复合语句><子函数>->(<声明头部>
6、void<标识符>)<参数><复合语句><参数>->’(’<参数表>’)’<参数表>-><表达式>{,<表达式>
7、<空>}<复合语句>->’{’<常量说明><变量说明><语句列>’}’<变量定义>->int<标识符>=<整数>{,<标识符>=<整数>}<变量说明>-><声明头
8、部>{,<标识符>}<声明头部>->int<标识符><语句序列>-><语句>{<语句>}<语句>-><条件语句>
9、<循环语句>
10、<’{’<语句序列>’}’
11、<子函数调用语句>;
12、<赋值语句>;
13、<返回语句>;
14、<读语句>;
15、<写语句>;
16、<空><赋值语句>-><标识符>=<表达式><条件语句>->if’(’<条件>’)’<语句>
17、else’(’<条件>’)’<语句><循环语句>->while<条件><语句><读语句>->scanf’(’<标识符>’)’<写语句>->printf’(’<标识符>’)’<返回语句>->return’(’<表达
18、式>’)’<子函数调用语句>->(<声明头部>
19、void<标识符>)<参数><表达式>->{+
20、-}<项>{<加法运算><项>}<项>-><因子>{<乘除法运算><因子>}<因子>-><标识符>
21、’(’<表达式>’)’
22、<整数>
23、<子函数调用语句><标识符>-><字符>{<字符>
24、<数字>}<字符>->a
25、b
26、………..
27、z<数字>->0
28、<非零数字><非零数字>->1
29、2
30、3
31、4
32、5
33、6
34、7
35、8
36、9<字符串>->”{<字符>
37、<数字>}”<加减法运算>->+
38、-<乘除法运算>->*
39、/<关系运算符>-><
40、<=
41、>
42、>=
43、!=
44、==4.
45、四元式的参考操作码SimpleC编译器后端所产生的四元式的参考操作代码及其解释如下:操作码Op1Op2Result+XYX和Y相加-XYX和Y相减*XYX和Y相乘/XYX和Y相除=YY赋值XYX大于Y!=XYX不等于Y<=XYX小于等于Y>=XYX大于等于Y==XYX等于YJMP跳转到result所指标签RED从终端输入一个值放到resultWRIX将X输出到终端一、实验报告要求1.提供实现SimpleC编译器的源代码、运行结果。语法分析可采用LL(1)或LR(1)。源代码应尽可能增加释,以清楚解释程序设计意图。2.作为测
46、试用例,至少提供一个用SimpleC写的输入源程序及其编译后的输出四元式文件。程序的调试信息可以输出到终端或特定的文件,以便捕捉和修正程序的错误。3.鼓励使用不同的编程语言如Java、Pyth