语法分析器作业.doc

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
语法分析器作业

编译原理实验报告 ——实验三语法分析器 实验目的 熟悉并掌握语法分析器的工作原理和一般设计方法。通过本实验,进一步提高实际问题分析与解决的能力,以及程序设计能力。 实验要求: 简单语言的语法规则如下: ① S → i := E ; ② S → if C then S ③ S → while C do S ④ C → E E ⑤ C → E = E 以C语言系统为工具,用递归子程序法设计并实现上述简单语言的语法分析器,实现以下功能: 对于给定的简单语言的“句子”,经语法分析,能输出分析过程产生的“产生式”序列(或“语法树”)。能调用“词法分析器”识别出简单语言源程序中的一个个单词符号。 对如上简单语言设计测试用例,使用“简单语言语法分析器”,对该测试用例进行语法分析,给出测试用例的语法分析结果。 实验模块 (1)词法分析,识别单词符号 单词符号的转换图 (2)语法分析器 能识别由加+ 减- 乘* 除/ 乘方^ 括号()操作数所组成的算术表达式,其文法如下: ①S → i := E ; ② S → if C then S ③ S → while C do S ④ C → E E ⑤ C → E = E 使用的算法可以是:预测分析法; 5.实验结果截屏 测试用例为while (a+15)0 do if x2 = 7 then i= z; 6.实验总结 通过这次实验,我对词法分析器有了进一步的了解,把理论知识应用于实验中。也让我重新熟悉了C和C++语言的相关内容,加深了对C、C++语言知识的深化和用途的理解。通过这次语义分析的实验, 我对高级语言的学习有了更深的认识 ,了解得更透彻。 我了解了高级语言转化为目标代码或汇编指令的过程,。对今后的学习将起很大的作用,对以后的编程有很大的帮助. 并且通过此次实验,我了解了LR语法分析的实质和过程。实验虽然只是完成了一个简单的程序,并且程序的主要框架课本上有给出,但在组织程序结构和深入了确上学到了很多,加深对编译原理的理解,掌握编译程序的实现方法和技术。巩固了前面所学的知识。 7.程序源代码 词法分析器 #include stdafx.h #include Word.h //构造函数,对数据成员初始化,并将关键字以及运算符读入 Word::Word() {//打开关键字文件 fstream keywordfile(keyword.txt); if(!keywordfile) { couterror ! cant open keywordfile!endl; system(pause); exit(1); } //设置临时变量将关键字、符号文件中的内容存储 string tempword; int tempencode; string tempre; int tempvalue; //开始读关键字文件 while(!(keywordfile.eof())) { keywordfiletempwordtempencodetempretempvalue; keywordlist.push_back(tempword); keywordencode.push_back(tempencode); keywordre.push_back(tempre); keywordcodevalue.push_back(tempvalue); } //关闭关键字文件 keywordfile.close(); for(int i=0;ikeywordlist.size();i++) {coutsetw(16)keywordlist[i]setw(16)keywordencode[i]setw(12)keywordre[i]setw(12)keywordcodevalue[i]endl; } fstream signwordfile(signword.txt); if(!signwordfile) { couterror ! cant open signwordfile!endl; system(pause); exit(1); } //开始读符号文件 while(!(signwordfile.eof())) { signwordfiletempwordtempencodetempretempvalue; signlist.push_back(tempword); si

文档评论(0)

kaiss + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档