编译技术
班级网络0802学号姓名叶晨舟
指导老师朱玉全2011年7月4日
f一、目的
编译技术是理论与实践并重的课程而其实验课要综合运用一、二年级所学的多门课程的内容用来完成一个小型编译程序。从而巩固和加强对词法分析、语法分析、语义分析、代码生成和报错处理等理论的认识和理解培养学生对完整系统的独立分析和设计的能力进一步培养学生的独立编程能力。
二、任务及要求
基本要求
1词法分析器产生下述小语言的单词序列
这个小语言的所有的单词符号以及它们的种别编码和内部值如下表
对于这个小语言有几点重要的限制
首先所有的关键字如IFWHILE等都是“保留字”。所谓的保留字的意思是用户不得使用它们作为自己定义的标示符。例如下面的写法是绝对禁止的
IF5x
其次由于把关键字作为保留字故可以把关键字作为一类特殊标示符来处理。也就是说对于关键字不专设对应的转换图。但把它们及其种别编码预先安排在一张表格中此表叫作保留字表。当转换图识别出一个标识符时就去查对这张表确定它是否为一个关键字。
再次如果关键字、标识符和常数之间没有确定的运算符或界符作间隔则必须至少用一个空白符作间隔此时空白符不再是完全没有意义的了。例如一个条件语句应写为
fIFi0i1
而绝对不要写成
IFi0i1
因为对于后者我们的分析器将无条件地将IFI看成一个标识符。
这个小语言的单词符号的状态转换图如下图
2语法分析器能识别由加减乘除乘方括号操作数所组成的
算术表达式其文法如下
E→ETETT
T→TFTFF
F→PFP
p→Ei
使用的算法可以是预测分析法递归下降分析法算符优先分析法
LR分析法等。
3中间代码生成器产生上述算术表达式的中间代码四元式序列
f三、实现过程
给出各题目的详细算法描述数据结构和函数说明流程图。
1、词法分析器的流程图
2、语法分析器主程序图
f3、中间代码生成器流程图
四、源程序
词法分析器
i
cludestri
gh
i
cludemalloch
fi
cludeiostream
usi
g
amespacestd
typedefstructtable分析表存储结构
charm100
table
tableM100100定义分析表
typedefstructstack
ode定义栈内元素节点带头结点为空的
chardata
structstack
ode
ext
stackk
voidi
itli
kstackks初始化新栈
sstackkmallocsizeofstackk
s
extNULL
voidpopli
kstackks顶元素出栈
stackkpcharv
ifs
extNULL
ps
ext
vpdata
s
extp
ext
freep
voidpushli
kstackkscharx新元素入栈
stackkp
pstackkmallocsizeofstackk
pdatax
p
exts
ext
s
extp
voiddisplaystackksr