- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
词法剖析实验报告
一、实验目的与要求:
1、认识字符串编码构成的词的内涵,感觉一下字符串编码的方法和解读
、认识和掌握自动机理论和正规式理论在词法剖析程序和控制理论中的应用
二、实验内容:
结构一个自己设计的小语言的词法剖析器:
、这个小语言能说明一些简单的变量
辨别诸如begin,end,if,while等保存字;辨别非保存字的一般表记符(有下划线、
字符、数字,且第一个字符不可以是数字)。辨别数字序列(整数和小数);辨别:=,=,=之类的特别符号以及;,(,)等界符。
2、有关过程(函数):
Scanner( )词法扫描程序,提取表记符并填入display表中
、这个小语言有次序结构的语句
、这个小语言能表达分支结构的语句
、这个小语言能够输出结果
总之这个小语言词法剖析器能供给以上所说明到的语法描绘的功能
三、实验步骤:
1、测试评论
1)、测试1:能说明一些简单的变量,如重点字、一般表记符、界符等;
2)、测试2:能输出结果:单词符号(内码形式)、各样信息表(如符号表、常量表等);
3)、测试程序:
varx,y,z;
begin
x:=2;
y:=3;
if(x+5=y*y)then
begin
z:=y*y-x;
z:=z+x*x;
end
else
z:=x+y;
prnz;
end.
4)、结果:①、从键盘读入;
部分结果以下:
(种类:该表记符所属的种类,如重点字,变量等;下标:该表记符所对应表(如变量表记符表,常量表记符表等)中其相应的地点,下同)
②、从文件读入,输出到文件;
部分结果以下:
其余测试及结果以下:
③、犯错办理;
注:如有错误,则只指犯错误,不输出各个表;
(5)、评论:
这个小语言程序基本上能达成词法剖析阶段的工作,辨别诸如begin,if等保存字;识
别非保存字的一般表记符(有下划线、字符、数字,且第一个字符不可以是数字)。辨别数字
序列(整数和小数);辨别:=,=,=之类的特别符号以及;,(,)等界符。在扫描源程序串
的同时,能进行一些简单的办理,如删除空格、tab、换行等无效字符,也进行了一些基本
的错误办理,如变量长度的鉴别等。
碰到的问题:(a)、鉴别表记符超出规定长度(20)时,未输出办理结果;(b)、整数长
度过长输出结果仍为整数种类3;(c)、关于小数如﹒045,被解说为界符和整数;(d)、对
以数字开头的一般表记符的办理,如100nuts被解说为整数种类和表记符,未给犯错误提示。
如上测试,出现前两个问题时已报错并输出所内行,尔后两个问题待解决。
2、对小语言的词法例则(正规式)画出一个确立的有限自动机(见附录2、3)
四、实验的源代码:(见附录1)
五、实验中发现的问题和碰到的困难及解决方法:
因为从前不曾接触过编译原理,在该实验的设计中,确实碰到必定的困难。主假如
display表结构的设计,因为语法剖析和语义剖析还未学习,没法站在全局的角度兼备兼备,
在表结构设计时,不知该往表结构体中增添哪些内容,能够为后续的工作做铺垫,这是刚开
始就碰到的最大的困难,也是最难的。
经过剖析,我们在现有限制性的基础上,设计出一种折中的表结构,即在表结构中只添
加表记符在其相应表中的对应下表,标记符种类码等重点的几处,这样既能独一确立一标
识符,达到该实验的要求,同时又为表保存了很好的扩大性,以达到后续实验的要求。表结
构设计好后,其余的工作就是提取字符串和写入display表,在提取单字符仍是双字符构成
的运算符时有些麻烦,可是利用数据结构的有关知识也是简单做到。
六、总结:
词法剖析是结构编译器的开端阶段,也是相应比较简单的一个环节。词法剖析的主要任
务是:依据结构的状态变换图,从左到右逐一字符地対源程序进行扫描,辨别开源程序中拥有独立含义的最小语法单位——符号或单词,如变量表记符,重点字,常量,运算符,界符
等。
而后将提拿出的表记符之内码的形式表示,即用int种类的数字来表示其种类和在
display表中的地点,而不必保存本来表记符自己的字符串,这不单节俭了内存空间,也有益于下一阶段的剖析工作。
自然,在扫描源程序串的同时,进行一些简单的办理,如删除空格、tab、换行等无效字符,也进行了一些基本的错误办理,如变量长度的鉴别,有些不合词法例则的表记符鉴别等。总之,严格说来,词法剖析程序只进行和词法剖析有关的工作。
七、实验感想:
经过此次实验,让我认识到怎样设计、编制并调试词法剖析程序,加深对词法剖析原理
的理解;熟习了结构词法剖析程序的手工方式的有关原理,使用某种高级语言(比如
C++语
言)直接编写此法剖析程序。此外,也让我从头熟习了C++语言的有关内容,加深了对
C++
语言的用途的理解。
附录1(代码)
#includeiostream
#includefs
文档评论(0)