- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验报告
学生姓名: 学 号: 专业班级
实验类型:□ 验证 □ 综合 √设计 □ 创新 实验日期: 实验成绩:
词法分析程序的设计
一、实验项目名称:词法分析程序的设计
二、实验目的
掌握计算机语言的词法分析程序的开发方法。?
三、实验基本原理
1、根据以下的正规式,编制正规文法,画出状态图;
标识符 字母(字母|数字字符)*
十进制整数 0 | ((1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)*)
八进制整数 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)*
十六进制整数 0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)*
运算符和界符 + - * / = ( ) ;
关键字 if then else while do
2、根据状态图,设计词法分析函数int scan( ),完成以下功能:
从文本文件中读入测试源代码,根据状态转换图,分析出一个单词,
以二元式形式输出单词单词种类,单词属性
其中单词种类用整数表示:
0:标识符
1:十进制整数
2:八进制整数
3:十六进制整数
运算符和界符,关键字采用一字一符,不编码
其中单词属性表示如下:
标识符,整数由于采用一类一符,属性用单词表示
运算符和界符,关键字采用一字一符,属性为空
3、编写测试程序,反复调用函数scan( ),输出单词种别和属性。
四、主要仪器设备及耗材
PC微机
DOS操作系统或 Windows 操作系统
Eclipse
五、实验步骤
根据正规式,画出状态转换图;
根据状态图,设计词法分析算法;
3、 采用C或C++语言,设计函数scan( ),实现该算法;
4、 编制测试程序(主函数main);
5、调试程序:读入文本文件,检查输出结果。
六、实验数据及处理结果
输入数据:
编辑一个文本文件program.txt,在文件中输入如下内容:
if data+920x3f thendata=data+01;
if data+920x3f then
data=data+01;
else
data=data-01;
正确结果:
if , -
if , -
0 , data
+ , -
1 , 92
, -
3 , 3f
then , -
0 , data
= ,
0 , data
+ , -
2 , 1
; ,-
else , -
0 , data
= , -
0 , data
- , -
2 , -
; , -
Java程序类图如下:
结果如下:
七、思考讨论题
1、词法分析能否采用空格来区分单词?
答:不能,在词法分析中,处理不光有标识符还有连接符,而连接符和其他的标识符是可以连在一起出现的。如果用空格来区分单词的话,就会使连接符和标识符无法区分。
2、程序设计中哪些环节影响词法分析的效率?如何提高效率?
答:整个程序都由状态转换图而来。由递归方法实现的状态转换图,影响了整个词法分析器的分析效率,可以考虑使用栈来非递归的实现词法分析。
八、实验心得
此次实验让我了解了如何设计、编译并调试词法分析程序,并加深了我对词法分析器原理的理解;熟悉了直接构造词法分析器的方法和相关原理,并学会使用Java语言直接编写词法分析器;同时更熟练的掌握用java语言编写程序,实现一定的实际功能。?通过本次实验,使我更深层次的掌握了词法分析。从刚开始的无从下手到后来渐渐的突破了各个难关,虽然花了大量的时间和精力,但在我看来这绝对是值得的。起码让我明白了,光有理论是苍白无力的,我们必须将他附注于实践才能升华。
文档评论(0)