《编译技术课程设计报告-词法分析、语法分析、中间代码生成-公开DOC·毕业论文》由会员分享,可在线阅读,更多相关《编译技术课程设计报告-词法分析、语法分析、中间代码生成-公开DOC·毕业论文(34页珍藏版)》请在金锄头文库上搜索。
1、编译技术课程设计 班 级 学 号 姓 名 指导老师 年 月目 录 一、目的-2 二、任务及要求-2 三、实验环境-4 四、实现过程说明-4 1.词法分析器-4 (1)单词符号表-4 (2)数据结构-5 (3)函数说明-5 (4)流程图-6 2.语法分析器-6 (1)分析方法说明-6 (2)文法-6 (3)数据结构-7 (4)函数说明-7 3.中间代码生成器-10 (1)属性文法-10 (2)数据结构-11 (3)函数说明-11 (4)流程图-11 五、程序运行结果-12 六、总结-16一、目的是理论与实践并重的课程,而其课程设计要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序
2、。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。二、任务及要求基本要求:1 词法分析器 产生下述小语言的单词序列这个小语言的所有的单词符号,以及它们的种别编码和内码值如下表:单词符号种别编码助记符内码值while1whileif2ifelse3elseswitch4switchcase5case标识符6id符号表入口地址常数7num常数表入口地址=8=+9+*10*11*-12-/13/14relopMT=14relopME14relopLT0 i= 1;而绝对不要写成 ifi0 i=
3、1;因为对于后者,我们的分析器将无条件地将ifi看成一个标识符。这个小语言的单词符号的状态转换图,如下图: 2 语法分析器 能识别由加+ 乘* 乘方* 括号()操作数所组成的算术表达式,其文法如下:EE+T|TTT*F|FFP*F|PP(E)|i 使用的算法可以是:预测分析法;递归下降分析法;LR分析法等。3 中间代码生成器 产生上述算术表达式的中间代码(四元式序列)较高要求:1 扩充上述小语言的单词;2 增加语法分析器的功能,能识别条件语句和循环语句等;3 增加中间代码生成器的功能,能产生条件语句和循环语句等的中间代码(四元式序列)4 报错基础上增加错误信息;5 将中间代码翻译成汇编语言。三
4、、实验环境开发环境VC+;Visual Studio;Java开发环境语言C;C+;C#;Java说明:课程设计可以使用任何一种语言工具,课程设计报告中请按照自己实际采用的开发工具及技术来写。四、实现过程说明1.词法分析器(1)单词符号表单词符号种别编码助记符内码值while1whileif2ifelse3elseswitch4switchcase5case标识符6id符号表入口地址常数7num常数表入口地址=8=+9+9+=9+= *10*11*-12-/13/=13/=14relopMT=14relopME14relopLT=14relopLE=14relopEQ!=14relopUEQ;
5、15;,16,(17(LB)17)RB!18!20202121:22: 24 (2) 数据结构用words10存放构成单词符号的字符串,并且用于判断是否为关键字。flags500 存放单词符号的种别码。Number存放整数值,words存放标识符,关键字或者其他符号。cntnum按顺序存放读到的字符,为下面语义分析做准备。Status用于判断是否为关键字,1是,0不是。(3) 函数说明在Scan ()子函数中,先全部初始化,然后读一个字符,分析它是什么类型:如果是字母类型,则接着往下读,直到读到非字母的字符,存入words10中,依次对比关键字表中的元素,如果相同,则将flags置为相应的种别
6、码,如果全都扫描后没发现相同的关键字,则为普通的标识符,返回主函数输出。如果是数字类型,首先分析第一个符号,接着读下一个字符串,直到读到一个不是数字的字符串位置,每读一个数字字符,就将他们转化为相应的数字,使用辗转相乘法,每次都让number先自乘10,然后加上这个数字,这样就将字符串表示的数字转化成了相应的数,返回主函数输出。如果是其他单词表的符号,则将他们的flags置为相应的种别码,并将字符存到words 中返回主函数输出。(4) 流程图 2.语法分析器(1)分析方法说明 采用递归下降分析法(2) 文法EE+T|E-T|TTT*F|E/F|FFP*F|PP(E)|i改造后的文法ETE|TEE+TE|E-TE|TFT|FT