(最新版)编译原理词法分析器语法分析器实验报告 下载本文

内容发布更新时间 : 2024/11/18 19:54:28星期一 下面是文章的全部内容请认真阅读。

编译技术

班 级 网络 0802

学 号 姓 名 叶晨舟 指导老师 朱 玉 全

2011年 7 月 4 日

一、目的

编译技术是理论与实践并重的课程,而其实验课要综合运用一、二年级所学的多门课程的内容,用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解;培养学生对完整系统的独立分析和设计的能力,进一步培养学生的独立编程能力。

二、任务及要求

基本要求:

1. 词法分析器 产生下述小语言的单词序列

这个小语言的所有的单词符号,以及它们的种别编码和内部值如下表:

单词符号 DIM IF DO STOP END 标识符 常数(整) = + * ** , ( )

种别编码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 助记符 $DIM $IF $DO $STOP $END $ID $INT $ASSIGN $PLUS $STAR $POWER $COMMA $LPAR $RPAR 内码值 - - - - - - 内部字符串 标准二进形式 - - - - - - 对于这个小语言,有几点重要的限制:

首先,所有的关键字(如IF﹑WHILE等)都是“保留字”。所谓的保留字的意思是,用户不得使用它们作为自己定义的标示符。例如,下面的写法是绝对禁止的:

IF(5)=x

其次,由于把关键字作为保留字,故可以把关键字作为一类特殊标示符来处理。也就是说,对于关键字不专设对应的转换图。但把它们(及其种别编码)预先安排在一张表格中(此表叫作保留字表)。当转换图识别出一个标识符时,就去查对这张表,确定它是否为一个关键字。

再次,如果关键字、标识符和常数之间没有确定的运算符或界符作间隔,则必须至少用一个空白符作间隔(此时,空白符不再是完全没有意义的了)。例如,一个条件语句应写为

IF i>0 i= 1; 而绝对不要写成

IFi>0 i=1;

因为对于后者,我们的分析器将无条件地将IFI看成一个标识符。

这个小语言的单词符号的状态转换图,如下图:

2. 语法分析器 能识别由加+ 减- 乘* 除/ 乘方^ 括号()操作数所组成的

算术表达式,其文法如下:

E→E+T|E-T|T T→T*F|T/F|F F→P^F|P p→(E)|i

使用的算法可以是:预测分析法;递归下降分析法;算符优先分析法;

LR分析法等。

3. 中间代码生成器 产生上述算术表达式的中间代码(四元式序列)

三、实现过程

给出各题目的详细算法描述,数据结构和函数说明,流程图。

1、词法分析器的流程图