摘 要
本次毕设,我们组采用 LR(1)分析法,经过完整的五大编译步骤,将类 C 语言翻译为
8086 汇编语言,并在 DOS 环境下运行,并调用 debug-t-g-d 查看程序运行后内存值,验证编译过程是否正确。
文法支持整数类型及判断语句中产生的布尔类型,函数的定义与调用,if、else 分支语句,while 循环语句等功能,并允许各模块之间相互嵌套使用。
本组毕设最主要的特点是 LR(1)分析以及采用机械构表方法,即给定文法后由函数自动生成转移表,既避免了人工推导分析表的复杂性,又保证了文法的可扩充性。
此外,本组毕设在每个编译步骤中都有一定广度扩展:语法语义分析中共有 77 条文法
产生式、112 个状态语法状态、26 个语义动作;词法语法语义分析报错系统精确到行的具体位置;包含 3 种情况的中间代码优化;目标代码运行验证等等。
关键词:LR(1),机械构表,函数,优化,目标代码运行验证……
目 录
摘要 4
1 概述 6
2 毕设设计任务及要求 7
2.1 设计目的 7
2.2 设计任务 7
2.3 设计要求 7
3 编译系统总体设计 8
3.1 编译器结构设计 8
3.2 文法设计 8
3.3 符号表设计 13
4 编译器前端设计 14
4.1 词法分析器与常数处理机 14
4.2 词法分析注释处理,词法分析、语法语义分析报错 18
4.3 文法的数值化及 LR(1)分析表的生成 22
4.4 语法分析,语义分析控制器,四元式与符号表生成 31
5 编译器后端设计 36
5.1 四 元 式 的 优 化 36
5.2 目 标 代 码 具 体 实 现 36
5.3 在 DOS 下运行汇编代码,并用 debug 验证正确性 38
6 结论 41
7 参考文献 41
8 收获体会和建议 42