全球旧事资料 分类
编译原理课程设计实验报告
实验目的:
这个实验的目的是构造Cmi
us语言的编译器,要求能够编译Cmi
us语言的程序并且生成中间代码。在实验的过程中,学会使用flexbiso
这两个重要的工具。
实验内容:
参见教材p491appe
dixA
设计一cmi
us语言编译器语言介绍。
Decaf(cmi
us)语言的关键字:i
twhileifelseretur
void运算符:Cmi
us语言的限制。数字:支持10进制整数。小数可以采用科学记数法,如1E3也是合法的。字符串:字符串内部不允许出现换行,即字符串变量必须在同一行内。注释:Cmi
us语言允许采用…注释,并且注释不可以嵌套,即下面的注释是不合法的:Thisisavalidcomme
t
程序流程图
开始
词法分析
语法分析
语法树
代码生成
类型检查
建立符号表
符号表结束
f程序的流程参照了书本TINY编译器的实例程序:语法分析器Parser调用词法分析器得到符合词法的字,建立语法树;符号表通过对语法树的分析,建立符号表,同时检查变量未定义等错误;类型检查包括检查表达式两边是否匹配,函数参数是否匹配等等;经由上述步骤而未出错的源程序被认为是合法程序,然后代码生成通过语法树和符号表生成PCode中间代码,并将变量地址存入符号表。其中类型检查和代码生成不要求实现。本次实验要求分组,一组五人,一人完成一个部分。
本组实验分组成员以及分工介绍:
汪晨风:(设计并实现cmi
us符号表);E02620105蔡其星:(编写cmi
usl文件,并用lex工具生成c代码);E02620107赵婷:(设计cmi
us语法树结构);E02620106马培良:编写cmi
usy文件,并用yacc工具生成可执行代码);E02620121丘廷:(进行程序的测试)以下为具体实验分步报告以及过程:
第一部分:设计cmi
us符号表
符号表是编译器中的主要继承属性,并且在语法树之后,形成了主要的数据结构。符号表主要的操作有插入、查找和删除。杂凑表(hash表)通常为符号表的实现提供了最好的选择,因为所有3种操作都能在几乎恒定的时间内完成,在实践中也是最常使用。该课程设计所用的C符号表采用建立杂凑表的方法。杂凑表是一个入口数组,“桶bucket”称作,使用一个整数范围的索引,通常从0到表的尺寸减1。杂凑函数hashfuctio
把索引键在这种情况下是标识符名,组成一个字符串转换成索引范围内的一个整数的杂凑值,对应于索引键的项存储在这个索引的“桶”中。每个“桶”实际上又是一个线性表,通过把新的项插入到“桶”表中来解决冲突在任何情况下,“桶r
好听全球资料 返回顶部