实验一
一、实验名称:词法分析器的设计与实现
二、实验学时:4
三、实验内容和目的:
内容:
实现求n!的极小语言的词法分析程序,返回二元式作为输出。
目的:
通过设计词法分析器的实验,使同学们了解和掌握词法分析程序设计的原理及相应的程序设计方法,同时提高编程能力。
四、实验原理:
1.编译程序要求对高级语言编写的源程序进行分析和合成,生成目标程序。词法分析是对源程序进行的首次分析,实现词法分析的程序为词法分析程序。
2.词法分析的功能是从左到右逐个地扫描源程序字符串,按照词法规则识别出单词符号作为输出,对识别过程中发现的词法错误,输出相关信息。
3.状态转换图是有限有向图,是设计词法分析器的有效工具。
五、实验器材(设备、元器件)
1. 操作系统:Windows 8 Professional
2. 开发工具:Visual Studio 2013 Community
六、实验步骤:
(1)启动VS2013,建立新工程;
(2) 编写输入输出、错误处理、初始化等函数
(3)根据状态转换图、单词符号与种别对照表编写相应的词法分析函数;
(4)编写输入文件*.pas;
(5)编译与调试以上程序;
(6)生成相应的*.dyd文件,作为后面语法分析的输入文件。
七、实验数据及结果分析:
输入文件:test.pas
运行词法分析器,参数为test.pas
输出文件:test.dyd,内容为二元式
错误文件:test.err,因为没有错误,所以文件为空
八、实验结论、心得体会和改进建议:
实验结论:
本实验程序较好地完成了词法分析程序的设计与实现,能够对所给文法的程序进行词法分析,在没有词法错误的时候生成相应的二元式文件。该实验程序可一次性给出源程序中的词法错误。
心得体会:
(1)刚开始token数组没设置长度,在把字符串连接到token中时导致越界;
(2)case里面刚开始只考虑到小写字母,没考虑到大写字母;
(3)主函数里面刚开始是想把词法分析函数放到while循环的判断条件中,然后一直循环直到输入文件结束,但因为没写空循环体,导致只执行一次,与预期目标不符。
改进建议:
当前的错误处理函数只能输出行号和错误性质,可以改进同时输出出现错误的字符。
实验二
一、实验名称:递归下降分析器的设计与实现
二、实验学时:4
三、实验内容和目的:
内容:
根据给定的方法,编写相应的递归下降的语法分析程序,实现对词法分析后的单词序列的语法检查和程序结构的分析,生成相应的变量名表和过程名表,并将编译中语法检查出来的错误写入相应的文件。
语法错分类:
(1)缺少符号错;
(2)符号匹配错;
(3)符号无定义或重复定义。
目的:
通过设计递归下降分析器的设计与实现实验,使同学们掌握自上而下的递归分析法的语法分析原理和程序设计方法。
四、实验原理:
1.语法分析是对源程序经过词法分析后转换成的单词流按方法规则进行判断,对能构成正确句子的单词流,给出相应的语法树;对不能构成正确句子的单词流判断其语法错误并做出相应处理。
2.语法分析方法有自上而下和自下而上的分析方法。在不含左递归的文法G中,如果对每一个非终结符的所有候选式的第一个终结符都是两两不相交的(即无公共左因子),则可能构造出一个不带回溯的自上而下的分析程序,这个分析程序由一组递归过程组成,每个过程对应文法的一个非终结符。这样的分析程序称为递归下降分析程序。
五、实验器材(设备、元器件):
1.操作系统:Windows 8
2.开发工具:VS2013 Community
六、实验步骤:
(1)启动VS2013,创建新工程
(2)消除文法中的左递归;
(3)根据文法产生式实现各个对应函数,进行递归向下的分析过程;
(4)利用词法分析器生成的二元式文件*.dyd进行语法分析;
(5)编译与调试以上程序;
七、实验数据及结果分析:
运行语法分析程序,参数为词法分析生成的test.dyd
输入文件test.dyd,内容为二元式