大连理工大学软件学院编译原理第四次作业-语法分析.docVIP

大连理工大学软件学院编译原理第四次作业-语法分析.doc

  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文档。上传文档
查看更多
第4次上机—语法分析2 目的:熟练掌握自下而上的语法分析方法,并能用程序实现。 要求: 1. 使用如下文法: E ? E+T | T T ? T*F | F F ? (E) | id 2. 对于任意给定的输入串(词法记号流)进行语法分析,要求采用LR分析器来完成。手工构造LR分析表,利用移进-归约分析算法(P69 图3.12)输出(P70 表3.8)对应的动作部分。如: 输入:id*+id/(id+id)# 输出:移进 按 F-id归约 移进 error …… 3. 要有一定的错误处理功能。即对错误能提示,并且能在一定程度上忽略尽量少的记号来进行接下来的分析。 例如: 从状态0开始的记号流为:bm 将b移进之后,栈里的情况应该为: 0 b 2 此时查表发现 action[2,m]=error 输出打印:error 把A和状态1相继压入栈,用户指针后移到FOLLOW(A)对应的元素继续分析。 0 0 . . . . . . 栈 .. . . . a . . A 发现错误 I0 : C?a ·Ac A?· bn . . . I 1 C?a A ·c . . . A I 2 A?b · n . . . b 扩展: 1.利用P92页的表3.13的方式将错误进行分类提示,即给出具体的出错信息。 2. 在已有文法的基础上再加上减法“-”和除法“/”对应的产生式构成最终的文法。从而使得记号流可以处理带括号的加、减、乘、除四则运算。 #includeiostream #includefstream #includestring #includestack using namespace std; stackint astack; int i=0,b,c,a;//a为输入符号,即table数组列,b为table数组行 char temp[1000]; string wenfa[6]={按E-E+T规约,按E-T规约,按T-T*F规约,按T-F规约,按F-(E)规约,按F-id规约}; int table[12][9]= {/*数组列,id=0,+=1,*=2,(=3,)=4,$=5,E=6,T=7,F=8 ;行为状态, 表中所存数字0~11代表移进;12~17代表按1~6产生式规约,-1代表接受状态*/ 5,-2,-2,4,-3,-2,1,2,3, -4,6,-4,-4,-3,-1,-2,-2,-2, 13,13,7,13,13,13,-2,-2,-2, 15,15,15,15,15,15,-2,-2,-2, 5,-2,-2,4,-3,-2,8,2,3, 17,17,17,17,17,17,-2,-2,-2, 5,-2,-2,4,-3,-2,-2,9,3, 5,-2,-2,4,-3,-2,-2,-2,10, -4,6,-4,-4,11,-5,-2,-2,-2, 12,12,7,12,12,12,-2,-2,-2, 14,14,14,14,14,14,-2,-2,-2, 16,16,16,16,16,16,-2,-2,-2 }; void Analysis() { i=0; while(#!=temp[i]) { if(i==temp[i]) a=0; if(+==temp[i]) a=1; if((==temp[i]) a=3; if()==temp[i]) a=4; if(*==temp[i]) a=2; if($==temp[i]) a=5; if(E==temp[i]) a=6; if(T==temp[i]) a=7; if(F==temp[i]) a=8; b=astack.top(); c=table[b][a]; if(-1==c) { cout接受endl;break; } if(c=0c=11) { cout移进endl; astack.push(c); if(0==a) i++; i++; } if(c=12) { coutwenfa[c-12]endl; if(c==12||c==14||c==16) {astack.pop(); astack.pop();astack.pop();} else {astack.pop();} b=astack.top(); astack.push(table[b][c/2]); } if(-2==c) { cout

文档评论(0)

小教资源库 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档