编译原理实验报告(2)

2019-08-30 19:44

3.3 语法分析程序设计

Token文件Program标识符const处理常量说明varbeginForend处理程序结束部分处理赋值语句处理程序头部beginvar处理for语句处理变量说明begin根据读取的前导字对语句进行分类if处理if语句输出文件while处理while语句其他图 2 语法分析总流程

不断地读入token文件中的单词,根据不同的语句,使用不同的方法进行分析,直到token文件的结束。程序头部以program开头,变量说明以var开头,常量说明是以const开头的,从begin开始就是可执行语句,可执行语句分为五种:for语句(以for语句开头),while语句(以while开头),if语句(以if开头),repeat语句(以repeat开头),赋值语句(以标识符开头) 。每当读到前导词,表明一个新的语法结构的开始,以此识别该语法单位是否符合定义。 3.4 语义分析和中间代码生成程序的设计

4. 结果及测试分析

4.1软件运行环境及限制

程序是使用C#语言编写的,开发软件是VS2013。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台。使用VS调试程序会很方便,可以实时观察程序的运行状态。用VS制作界面会显得非常地简单,但是也存在一定的缺点。VS的集成度比较高,所以要修改封装好的一些函数不会太简单。

4

4.2测试数据说明

输入数据:

program example1; const

a:=1;b:=3;c:='fasdf'; var

a,b,c:integer; x:char;

begin a:=3; b:=12;

if(a+3*c>b) then c:=3; while a>b do c:=5;

repeat a:=10; until a+3>b; for x:=1+2 to 3 do b:=100;

end.

这是sample语言的一个比较简单的测试程序,它有着sample语言最基本的格式,如函数头部、常量说明、变量说明、执行语句、条件语句,循环语句等等。用这个测试程序来观察程序的效果。 4.3运行结果及功能说明

图 3 词法分析结果

图3是正常词法分析的结果,可以看出,程序会将每个单词显示到token文件显示区,同时显示单词在源文件的位置。并且会将标识符和常量添加到符号表

5

并显示到符号表显示区。下面的图4是当测试程序有错误时的情况。

图 4 词法分析有错误的程序

可以看到当我在b:=12;后面加上一个 “’”后,会出现报错。并且if语句位置上少了个“)”也会出现报错,实现了词法分析的相关功能。

图 5语法分析结果

6

从图5看到,语法分析能够正确地处理token串,并分析出各类语句,直到程序的结束。输出结果的显示层次感不强,没有按照一级级地缩进,这里是语法分析的一点问题。下面的图6是语法分析处理错误的功能演示。

图 6 语法分析错误处理

我修改了程序的部分地方,通过语法分析就能够检测到错误的地方,并显示出错误可能的原因,并且能够在错误的前提下继续执行后面的程序,直到语法分析结束。

5.总结及心得体会

通过编译原理实验课,我掌握了什么是编译程序,编译程序工作的基本过程及其各阶段的基本任务,熟悉了编译程序总流程框图,了解了编译程序的生成过程、构造工具及其相关的技术对课本上的知识有了更深的理解,课本上的知识是机械的,表面的。通过把该算法的内容,算法的执行顺序在计算机上实现,把原来以为很深奥的书本知识变的更为简单,对实验原理有更深的理解。

然而,我认为自己在实验课上做的并不够好。首先,在总体实验内容来说,我没能够完成所有的内容,只完成了词法分析和语法分析的程序;其次,就完成的两个实验来说,功能上还是不够完善,有一些bug。最后,运行界面上过于简陋,不够美观。由于时间的有限性,这些不足是无法继续改善了。这也让我意识到对于做每一件事,你的付出时间和你的成果是成正比的。所以,对于做一件事,要舍得花时间,肯花时间,这样最后的效果才会更好。对于编译原理,整体看下来自己做得不算好。意识到不足,我更加地明白自己能力不够强。在今后的学习里,需要更加地努力才行,能力越强,自己的提升空间就会越大,完成一件事的效率也才会更高。争取在以后做一个高效率,强能力的人。

7


编译原理实验报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:(精华)2019高考成语教案: 望文生义类成语

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: