本文档为《编译原理》课程的实验报告,包含第1部分和第2部分的内容。经过测试与调试,已形成可直接运行版本,便于学生理解和实践编译器的设计及实现过程。
实验一:词法分析程序(2学时)
**目的**
理解词法分析在编译过程中的作用;深入掌握有穷自动机模型的概念;学会设计并实现词法分析器的方法和技术。
**内容**
选择部分C语言的语法成分,编写其词法分析程序。该程序应能够识别关键字、运算符、分隔符、标识符和整型常量等,并处理注释及复合运算符号(如>=)。单词输出格式为二元式形式;同时输出有错误的单词及其所在行号。
**要求**
1. 待解析语法包含以下元素:
- 关键字:begin, if, then, while, do, end...
- 运算符和分隔符::= + - * / < <= > >= <> = == ; ( ) # , ...
- 其他单词为标识符(id)和整型常数(num),定义如下:
- id=l(l|d)* (l代表字母,d代表数字)
- num=dd*
2. 在词法分析中移除空格、注释。
3. 待解析的源程序示例包括正确的和错误的例子。
实验二:预测分析程序(2学时)
**目的**
掌握LL(1)文法规则的理解;学会构建预测分析器的方法和技术。
**内容**
设计并实现一个可以识别表达式的预测分析程序。
**要求**
1. 总体上,需根据给定的文法手工或通过编程方式构造出预测分析表;
2. 使用代码生成LL(1)表时需要计算First()和Follow()集合,这一步有一定难度;
3. 根据构建好的预测分析表设计并实现一个总控程序来完成自上而下的语法解析。
4. 文法的定义可以根据给定示例或自行选择其他文法规则;
5. 分析过程举例:输入串为(i1+i2)*(i3+i4),输出该表达式的分析流程,包括栈、剩余输入和使用的产生式等信息。