语法分析器作业.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验报告 实验三语法分析器 1.实验目的 熟悉并掌握语法分析器的工作原理和一般设计方法。通过本实验,进一?步提 高实际问题分析与解决的能力,以及程序设计能力。 2?实验要求: (1) 简单语言的语法规则如下: ①②③④⑤S - i := E ; ①②③④⑤ S f if C then S S f wh 订 e C do S C E E C - E = E 以C语言系统为工具,用递归子程序法设计并实现上述简单语言的语法 分析器,实现以下功能: 对于给定的简单语言的“句子”,经语法分析,能输出分析过程产生的 “产生式”序列(或“语法树”)。能调用“词法分析器”识别出简单语言源 程序屮的一个个单词符号。 (2) 对如JL简单语言设计测试用例,使用“简单语言语法分析器”,对该 测试用例进行语法分析,给出测试用例的语法分析结果。 3?实验模块 (1)词法分析,识别单词符号 空白 字母戎数字 空白 字母戎数字 单词符号的转换图 (2)语法分析器能识别由加+减?乘宕除/乘方人括号()操作数所组成的算 术表达式,其文法如下: ①s - ? i := E ; ②s - f if C then S ③s - wh 订 e C do S ④C - - E E ⑤C - - E = E 使用的算法可以是:预测分析法;递归下降分析法;算符优先分析法; LR分析法等。 中间代码生成器 产生上述算术表达式的中间代码(四元式序列) 4.实现过程说明 语法分析器主程序图 5 ?实验结果戳屏 测试用例为 while (a+15)0 do if x2 = 7 then i= z; -INT10 -E1E2 -IDN -INT10 -E1=E2 -IDN -ID := E -IF C THEN SI 一WHILE C DO SI .Code:H0O2f i 9 gL i12 XLL tlo oX2o .Code: H 0 O2f i 9 gL i 12 XLL tlo o X2 o t :03 L3L1 i:=z oto: oto :Li x: 6?实验总结 通过这次实验,我对词法分析器有了进一步的了解,把理论知识应用于实验 屮。也让我重新熟悉了 C和C++语言的相关内容,加深了对C、C++语言知识的 深化和用途的理解。通过这次语义分析的实验,我对高级语言的学习有了更深的 认识,了解得更透彻。 我了解了高级语言转化为H标代码或汇编指令的过程,。对今后的学习将起 很大的作用,对以后的编程有很大的帮助.并且通过此次实验,我了解了 LR语法 分析的实质和过程。实验虽然只是完成了一个简单的程序,并且程序的主要框架 课本上有给出,但在组织程序结构和深入了确上学到了很多,加深对编译原理的 理解,掌握编译程序的实现方法和技术。巩I古I 了前面所学的知识。 7 ?程序源代码 词法分析器 #include stdafx. h #include Word, h //构造函数,对数据成员初始化,并将关键字以及运算符读入 Word::Word() {//打开关键字文件 f st ream keywordf i leCkeyword. txt^); if (ikeywordfile) cout?/rerror ! cant open keywordfi le!/y?endl; system(pause); } 〃设量临时变量将关键字、符号文件中的内容存储 string tempword; int tempencode; string tempre; int tempvalue; 〃开始读关键字文件 whi le(! (keywordf i le. eof ())) ( keywordf i 16tempwordtempencode?tempretempva I ue; keyword I ist. push_back (tempword); keywordencode. push_back(tempencode); keywordre. push_back (tempre); keywordcodevalue. push_back(tempvaIue); } 〃关闭关键字文件 keywordf i I e. c I ose (); for(int i=0;ikeywordIist. size0;i++) (cout?setw(16)?keywordI ist[订?setw(16)?keywordencode[订?setw(12)?key wordre[i]?setw(12)?keywordcodevaIue[订?endI; } fstream signwordfiIe(s ignword. txt^); if(Isignwordfile) { cout?zzerror ! c

文档评论(0)

ggkkppp + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档