武汉理工大学《编译原理》课程设计说明书
16
武汉理工大学《编译原理》课程设计说明书
17
武汉理工大学《编译原理》课程设计说明书
2. if1 {m>n} then i=i*3
else
b=b-1 测试的结果如下所示:
18
武汉理工大学《编译原理》课程设计说明书
9 分析本次设计
这次设计大体上还是自己动脑筋去想了,去做了。所以觉得并不是那么的难。关键
的步骤就是三个,设计词法分析程序,语法分析程序,及语义分析程序和中间代码的输
19
武汉理工大学《编译原理》课程设计说明书
出程序。词法分析程序由于上次实验做过了,所以这次做起来还是比较的顺手,只是这次的单词设计的比较简单,如关键字就只有三个,if、else和then;用户自定义变量的标识符也没有考虑以下划线开头的部分。
我做的语法分析方法是ll(1)的分析方法,这个方法的关键首先要构造一个if else语句的文法,然后将其转换为ll(1)文法,再根据每个产生式的select集构造预测分析表。然后就是相应的分析。构造一个分析栈和一个输入串队列,栈的初始内容是文法的开始符号和“#”,输入串队列则是输入串的内容。然后根据预测分析表做出相应的推导和匹配动作,最后如果栈里的内容和队列里的内容都是以“#”号的形式匹配的话,这个语句就分析成功。我这次主要只是考虑了表达式的分析过程,而没有把if else then这些关键字的分析过程加入进来。因为我们这次设计也是针对一个特定的语句(如我的if else语句)来进行分析的,所以我就假设所有的输入串当中都在相应的位置有那些关键字了。所以程序做起来就比较简单,容易实现。
而语义分析则是要识别这句话要做什么,并且将其要做的事情用三地址的形式翻译出来。这个对我来说的确有点困难,所以见参考了一下其他同学的设计方法。这个也是这次设计的不足之处,望老师见谅----。
10 参考文献
1. 张素琴、吕映芝、蒋维杜、戴桂兰等.编译原理(第2版).清华大学出版社.2005年2月参考书:
2. 《程序设计语言编译原理》 国防工业出版社 陈火旺著 3. 《编译原理习题与解析》 清华大学出版社出版社 伍春香著
11 源程序清单
#include
char VN[11]={'K','L','P','S','E','G','T','R','F','Q','\\0'}; //产名生式头 char VT[16]={'i','=','<','>','+','-','*','/','(',')','f','t','e',';','\\0'}; //特征字符集 char
p[18][8]={\E)\\0\产生式集合数组 char stack[MAX];
20