全球旧事资料 分类
块,结构如下:DeclearL_Begi

parser为主程序模块,Declear为说明语句分析模块,L_begi
为复合语句分析模块。其中L_begi
结构图如下:
4
fL_Begi

L_A
alize
L_Let
L_If
L_While
E_A
alize
B_A
alize
经常使用的过程和函数:经常使用的过程和函数:ge
i
topi
tai
tbi
tr:生成一个四元式NewTemp:产生一个临时变量,返回其在符号表中的入口地址BackPatchi
taddri
taddr2:回填函数,完成四元式转移目标的回填voidgetbuf:获取文件中的一组数据voidprogram:程序由程序首部、程序体和组成voidproghead:程序首部:program标识符;voidblock:程序体部分,常量说明、变量说明、语句部分实验算法思想(包含主程序的示意图)实验算法思想(包含主程序的示意图)(1)主程序的示意图如下图所示:
程序首部
调用getbuf获取文本文档中的下一组字符
调用block
E
d
(2)递归下降分析程序示意图如下图所示:
5
f(3)语法串分析过程示意图如下图所示:
6
f(4)stateme
t语句分析函数示意图如下图所示:
(5)expressio
表达式分析函数如下图所示:
7
f(6)term分析函数示意图如下图所示:
(7)factor分析过程示意图如下图所示:
(8)语义分析器:设置语义过程1、emitcharresultcharag1charopcharag2
该函数的功能是生成一个三地址语句送到四元式表中。
8
f四元式表的结构如下:
structcharresult8charag18charop8charag28quad202char
ewtemp该函数回送一个新的临时变量名,临时变量名产生的顺序为T1,T2,…char
ewtempvoidcharpcharm8pcharmalloc8kitoakm10strcpyp1mp0’t’retur
p2、设计思想函数lrparser在语法分析的基础上插入相应的语义动作:将输入串翻译成四元式序列。分析程序可知,需要进行四元式翻译的只有赋值语句、表达式和if语句、while语句等控制语句。在实现时,我采用这样的方法:先建立一个关于四元式的结构体,并建立一个存放这样的结构体的向量。当遇到赋值号时,声明一个结构体,并把这个结构体插入向量中。由于在赋值号前必然是一个变量ID,可以在遇到一个变量ID时,就把这个ID的值存入临时变量tmp。由于在后面可能要用到也可能用不到,所以不用担心tmp值覆盖的问题。在向量中插入结构体变量后,需要将ID填入对应的项中,然后可以继续遍历。遇到下一个ID则写入。若后面是一个表达式,则可以在再新建一个结构体变量,在其中处理表达式的四元式生成。然后把所得的地址存入上一层的对应位置。
实验总结这次的实验比较难。刚刚拿到手的时候感觉无从r
好听全球资料 返回顶部