目录
1选题背景 1
2系统关键定义 2
2.1单词文法描述 2
2.2语句文法描述 3
2.3 符号表结构描述 4
2.4 错误类型码描述 5
3系统设计与实现 6
3.1编译程序符号表结构 6
3.2编译程序报错功能 7
3.3词法语法分析器(实验一) 7
3.4语义分析(实验二) 8
4系统测试与评价 10
4.1 测试用例 10
4.2 正确性测试 11
4.3 报错功能测试 15
4.4 系统的优点 20
4.5 系统的缺点 20
5实验小结或体会 21
参考文献 22
附件:源代码 23
附录一 GNU Flex 工具说明 76
附录二 GNU Bison 工具说明 77
附录三 抽象语法树(AST) 80
附录四 作用域与符号表操作 83
1选题背景
本次课程设计是构造一个高级语言的子集的编译器,目标代码可以是汇编语言也可以是其他形式的机器语言。按照任务书,实现的方案可以有很多种选择。
可以根据自己对编程语言的定义选择实现语言的特定功能。建议大家选用decaf语言。
编译器的语法和词法分析采用课程的课堂实验的结果,重点在语义分析、符号表结构设计、中间代码、目标代码存储结构设计、代码优化等阶段的实现。
课设的任务主要是通过对简单编译器的完整实现,加深课程中关键算法的理解,提高自己对系统软件编写的兴趣。
实验内容:
源语言定义:或采用教材中Decaf语言,或采用C语言(或C++语言或C#语言
JAVA语言)部分关键语法规则。源语言要求至少包含的语言成分如下:
数据类型至少包括char类型、int类型和float类型
基本运算至少包括算术运算、比较运算、逻辑运算、自增自减运算和复合赋值运算
控制语句至少包括if语句和while语句
其它选项:数组、结构,for循环等等
实验内容:完整可运行的自定义语言编译器
2系统关键定义
2.1单词文法描述
词法分析程序的主要任务是将输入文件中的字符流组织成为词法单元流,在某些字符不符合程序设计语言词法规范时要有能力报告相应的错误,本次实验采用词法生成器自动化生成工具GNU Flex(见附录一),具体要求以正则表达式(正规式)的形式给出词法规则,遵循上述技术线路,Flex自动生成给定的词法规则的词法分析程序。于是,设计能准确识别各类单词的正则表达式就是关键。