- 1、本文档共19页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验全集
目录
实验1 词法分析 2
1.1. 目的 2
1.2. 内容 2
1.3. 知识 2
1.4. 步骤 2
1.5. 问题及解答 4
1.6. 实验报告要求 5
实验2 自顶向下的语法分析 6
2.1. 目的 6
2.2. 知识 6
2.3. 内容 8
2.4. 步骤 12
2.5. 问题及解答 13
2.6. 提高 13
2.7. 实验报告要求 13
实验3 自底向上的语法分析 14
3.1. 目的 14
3.2. 内容 14
3.3. 步骤 16
3.4. 问题 16
3.5. 实验报告要求 17
实验4 语义分析 18
4.1. 目的 18
4.2. 知识 18
4.3. 内容 20
4.4. 步骤 22
4.5. 实验报告要求 22
实验5 中间代码生成
实验6 代码优化与代码生成
相关说明
实验1、2要求独立完成。实验3、实验4的实现代码(VC++工程)均已调试成功,打包在目录中(lab3,lab4)。希望认真学习的同学多看看。由于时间关系,许多地方还没来得及做好,本手册的内容可能比较繁琐。欢迎大家提出问题和意见。时间比较紧的同学也请关注每个实验末尾的实验报告要求。期末实验占10分。
词法分析
目的
构造词法分析器,熟悉编译程序词法分析过程。掌握 LEX 自动生成工具的使用。
内容
从本实验开始,用C语言实现一个编译系统。词法分析是其第一步。采用Lex工具自动生成大大简化了其中的内容。因此本实验的重心并不在如何操作,而是在于怎样编写Lex源程序。而要编写Lex源程序,首先要定义源语言,即该编译系统所实现的语言。这里作为例子,我们以C++为基础,采用其部分单词,因此不妨将我们定义的这种语言称之为Mini C++。
知识
Lex是一个词法分析器的自动构造工具。相关资料较多。
步骤
在编写LEX源程序前,首先要定义一种高级语言。找出其中所有单词。并进行编码。高级语言可以是已经存在的一种语言,如,C,Pascal,Basic。也可以是自己构造的一种语言。当然,考虑到后续实现的难度,可以简化许多内容。如不考虑数组,不考虑For循环等。将定义好的单词编码用一个表表达出来。如我们这里的Mini C++的单词定义如下:
? 保留字 内部编码 运算符号 内部编码 其他符号 内部编码 if 1 + 8 ( 19 else 2 - 9 ) 20 while 3 * 10 ; 21 cout 4 / 11 { 22 cin 5 ** 12 } 23 (输入) 6 == 13 = 24 (输出) 7 14 数字 25 ? ? 15 标识符 26 ? ? = 16 , 27 ? ? = 17 var 28? ? ? 18 ? ? 说明:
由于只允许数字,所以不作变量类型。所有类型都是var。
单词编码无任何约束,只要方便可行。要知道,我们构造的是一个独立的自包含的系统。所有的东西都是我们自己定义的。而编码只是便于机器内部识别。只要后面的语法分析,语义分析都按这个编码即可。
将flex.rar展开在一个目录中,如E:\flex。
根据上述单词编码编写LEX源程序。LEX源程序是纯文本文件,任何文本编辑器均具备这一功能(如用记事本打开即可)。保存时文件名任取。这里假设命名为LexDemo.txt。为后续操作简便,将该文件保存在E:\flex子目录中。
编译LEX源程序。生成lexyy.c。
使用C语言环境打开lexyy.c。编译运行,最终生成lexyy.exe。根据我们现有的情况,可以使用三种方案,任选其一。(建议使用命令行工具,实际上更简单。)
使用VC建立一个工程(Project),将lexyy.c加入到该工程。实际上,最好拷贝lexyy.c到相应的目录。然后编译,产生的lexyy.exe文件在该工程目录下的Debug子目录中。
使用VC的命令行工具。
格式为:VC的安装路径\bin\CL lexyy.c
如:VC安装在D:\”Program Files”下。则命令为:
D:\Program Files\Microsoft Visual Studio\VC98\Bin\CL lexyy.c
使用TC命令行工具。
TC的安装路径\bin\TCC lexyy.c
D:\TC20\bin\TCC lexyy.c
写一段该语言测试代码进行测试。
如:While (i2)
{Cout10;}
则输出序列为:
3, 0
19, 0
15, 0
……
根据单词编码序列对照上面的表进行验证。
每个单词对应一对数,第一个数为其编码。第二个数为该单词的附加属性。如无该属性
文档评论(0)