网站大量收购独家精品文档,联系QQ:2885784924

南昌大学编译原理实验报告1.doc

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)

135****3598 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档