(编译原理实验二预测分析法.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文档。上传文档
查看更多
(编译原理实验二预测分析法

实验二 预测分析法 一、实验项目名称 预测分析法 二、实验目的 根据某一LL(1)文法编制调试预测分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对预测分析法的理解。 三、实验环境 Win8系统,VC++6.0软件,C语言开发工具 四、实验内容 本次实验的LL(1)文法为表达式文法: E→E+T | T T→T*F | F F→i | (E) 编写识别表达式文法的合法句子的预测分析程序,对输入的任意符号串,给出分析过程及分析结果。分析过程要求输出步骤、分析栈、剩余输入串和所用产生式。如果该符号串不是表达式文法的合法句子,要给出尽量详细的错误提示。 五、实验步骤 首先将终结符和非终结符以及预测分析表计算出来,并保存到数组中 然后对输入的字符进行分析,将一个个终结符进行分配 在分配的过程中输出每一步步骤 对错误处,显示步骤数和错误字符 六、源程序清单、测试数据、结果 源程序: #includeiostream.h #includestdio.h #includestring using namespace std; char zhong[6]={i,+,*,(,),#}; char fzhong[5]={E,R,T,Y,F}; char shu[20]; //R代表E Y代表T string biao[5][6]={ {TR,,,TR,,}, {,+TR,,,@,@}, //@代表空 {FY,,,FY,,}, {,@,*FY,,@,@}, {i,,,(E),,} }; #define N 20; typedef char type; typedef struct { type *base; type *top; int stacksize; }sqstack; void initstack(sqstack s) { s.base=new type[2]; if(!s.base) cout错误; s.top=s.base; s.stacksize=N; } void push(sqstack s,type e) { if(s.top-s.base==s.stacksize) cout栈满; *s.top++=e; } void pop(sqstack s,type e) { if(s.top==s.base) cout栈空; e=*--s.top; } type gettop(sqstack s) { if(s.top==s.base) cout栈空; return *(s.top-1); } int find1(char x) { for(int i=0;i5;i++) { if(x==fzhong[i]) { break; } } return i; } int find2(char x) { for(int i=0;i6;i++) { if(x==zhong[i]) { break; } } return i; } void showstack(sqstack fen) { char a; sqstack x; initstack(x); while(fen.top!=fen.base) { pop(fen,a); push(x,a); } while(x.top!=x.base) { pop(x,a); couta; } } void fenxi(sqstack fen) { string str; int i=0,row=1,j; char ch1,ch2; // ch1=gettop(fen); while(1) { if(gettop(fen)==shu[i]gettop(fen)!=#) { coutendlrow++ ; showstack(fen); j=i; cout ; while(shu[j]!=#) { coutshu[j]; j++; } cout# shu[i]被分配endl; i++; pop(fen,ch2); } else if(gettop(fen)==#) { coutrow # # 被接受; break; } else { str=biao[find1(gettop(fen))][find2(shu[i])]; if(biao[find1(gettop(fen))][find2(shu[i])]==) { cout第row行

文档评论(0)

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

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

1亿VIP精品文档

相关文档