计算机专业类课程
实
验
报
告
课程名称:编译原理
学
专
院:计算机科学与工程学院
业:计算机科学与技术专业
学生姓名:戴一伟
学
号:
指导教师:陈昆
日
期: 2017 年 5 月 14 日
电子科技大学计算机学院实验中心
电 子 科 技 大 学
实 验 报 告
实验一
一、实验名称:词法分析器的设计与实现
二、实验学时:4
三、实验内容和目的:
(一)实验内容:
1.源语言:求 n!的极小语言
2.输入输出:源程序*.pas 文件作为输入,经过自己编程实现的词法分析器进行处理,
生成二元式,保存到*.dyd 文件中,如下图所示。
(二)实验目的:
通过设计词法分析器的实验,使同学们了解和掌握词法分析程序设计的原理及相应的程
序设计方法,同时提高编程能力。
四、实验原理:
(一) 结合“数据结构”进行分析:
1. 二元式文件*.dyd
(1) 二元式形式:
分析:由输出二元式形式可知,使用 printf 输出可以很方便达到要求:
(2) 每行后加一
分析:对输入文件中的换行符“\n”,要采取相应的策略:
(3) 文件结尾加
分析:对于文件末尾的“EOF”,要采取相应的策略:
2. 错误信息文件:*.err
(1) 错误信息格式
分析:设置出错处理的函数,并且需要记录错误行号、错误性质:
(2) 注意:进入每一阶段, 首先打开 .err, 如果无错误, 则 .err 为空。
电子科技大学计算机学院实验中心
(二) 词法分析的实现方法——利用状态转换
分析:根据状态转化图,编写读到不同的内容时的状态转化函数,是设计词
法分析器的核心。
(三) 对“输入输出”文件的分析——文件相关操作
因为需要读写文件,并生成错误文件,涉及许多文件相关操作,通过相关函
数函数实现功能:
五、实验器材(设备、元器件)
(一) 操作系统:Windows 8 Professional
(二) 开发工具:Visual Studio 2015
(三) 编程语言:C
六、实验步骤:
(一) 启动 Visual Studio 2015,新建一个项目 LxicalAnalyzer
(二) 编写 LxicalAnalyzer.h 文件,声明项目将要用到的自定义函数:
(三) 编写 LxicalAnalyzer.cpp 文件,根据“状态转化图”、“单词符号与种别对照表”
实现 LxicalAnalyzer.h 中声明的函数(详细代码附在实验报告最后);
(四) 编写 main.cpp 文件,完成编码;
(五) 根据给出的测试程序,编写输入文件 test.pas
(六) 运行写好的词法分析器程序,并结合输出文件 test.err、test.dyd 进行调试;
(七) 完成实验。
七、实验数据及结果分析:
(一) 输入文件 test.pas
电子科技大学计算机学院实验中心
(二) 执行词法分析器程序
(三) 检查输出文件 test.err
因为输入文件中测试程序没有错误,所以文件为空:
(四) 检查输出文件 test.dyd
检查可知,输出文件内容为符合实验要求的二元式:
(五) 修改输入文件,在输入文件中添加错误
(六) 再次执行词法分析器程序
(七) 重新检查输出文件 test.err
可见,本词法分析器成功实现检查多处词法错误:
八、实验结论、心得体会和改进建议:
(一) 实验结论
通过编码与反复调试,成功完成了词法分析器的设计与实现,能够对给出文
法的测试程序进行正确的词法分析,按要求输出二元式的*.dyd 文件。同时,也
可以检测出所给源程序中的多处词法错误。
(二) 心得体会
1. 对于这种需要多次重复同一操作的实验,将相应的操作写成函数,可以方便
编码,减少错误和代码行数。
2. 第一次编码忽略了状态转化之后的回退工作,导致 bug 的出现,以后需要吸
取经验教训。
3. 尽量在第一次编写程序时,写出较多的提示信息和注释,便于发现 bug 后的
调试。
(三) 改进建议
上课使用的教材 P134 页“第六章 词法分析”中的内容对本实验的完成有很
大帮助,认真阅读后思路更加清晰。
*********为便于老师评阅报告,两次实验代码都添加底纹后放在在文档最后部分*********
电子科技大学计算机学院实验中心
电 子 科 技 大 学
实 验 报 告
实验二
一、实验名称:递归下降分析器的设计与实现
二、实验学时:4
三、实验内容和目的:
(一)实验内容:
根据给定的方法,编写相应的递归下降的语法分析程序,实现对词法分析后的单词序列
的语法检查和程序结构的分析,生成相应的变量名表和过程名表,并将编译中语法检查出来
的错误写入相应的文件。
语法错分类:
(1)缺少符号错;
(2)符号匹配错;
(3)符号无定义或重复定义。
(二)实验目的:
通过设计递归下降分析器的设计与实现实验,使同学们掌握自上而下的递归分析法的语
法分析原理和程序设计方法。
四、实验原理:
(一)语法分析的定义和功能
语法分析是根据语法规则,将单词符号构成各类语法单位,并进行语法检查。
在本实验中,对源程序经过词法分析后转换成的单词流按方法规则进行判断,对能
构成正确句子的单词流,给出相应的语法树;对不能构成正确句子的单词流判断其语法
错误并做出相应处理。