编译原理实验报告四剖析.docVIP

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
编译原理实验报告 题 目 表达式语法分析程序的构造 学 院 专 业 班 级 学 号 学生姓名 指导教师 西安思源学院教务处制 二〇一 年 实验四 表达式语法分析程序的构造 实验目的 1掌握C++语言编译的语法分析程序 2分别掌握LL(1)、算符优先、LR等语法分析方法的构造。 实验环境 Microsoft Visual C++ 6.0 实验内容 给定某一文法,试构造其简单优先矩阵(或LL(1)矩阵),并编制程序。 给出相应句子的语法分析过程,判其正确性。 例如:给定文法G: E→T E1 E1→+TE1/ε T→FT1 T1→*F/ε F→id/(E) (1)先构造其SELECT集合,判定其是否为LL(1)文法 (2)是则构造其分析表 (3)给出句子id+id*id$的语法分析过程 设计说明 LL(1): #includestdio.h #includestring typedef int datatype; char a[N3]={$,E}; char c[N4]={$,z,*,z,+,z}; char *B[N1][N2]={ , z , + , * , ( , ), $ , E , xT, , , xT, , , x , , xT+, , , , , T , yF, , , yF , , , y , , , yF*, , , , F , z, , , )E(, , , }; void FXB() { int i,j; cout分析表为: endl; for(i=0;iN1;i++) { for(j=0;jN2;j++) {coutB[i][j] ; } coutendl;}} void WF() { int s; char *w[5]={E-TE,E-TE/e,T-FT,T-*F/e,F-(E)/id}; cout文法为: endl; for(s=0;s5;s++) {coutw[s]endl;} } void SELECT() { coutSELECT集合为:endl; cout1. select(E-TE)=FIRST(TE)={(,id}endl; cout2. select(E-+TE)=FIRST(+TE)={+}endl; cout3. select(E-e)=FIRST(E)UFOLLOW(E)-{e}={$,)}endl; cout4. select(T-FT)={(,id}endl; cout5. select(T-*F)={*}endl; cout6. select(T-e)={+,),$}endl; cout7. select(F-(E))={(}endl; cout8. select(F-id)={id}endl; cout为LL(1)文法endl; } void showa() { int i; cout分析栈为:endl; for(i=0;iN3;i++) {if(a[i]!=0) couta[i];} coutendl;} void showb() { int j; cout输入流为:endl; for(j=0;jN4;j++) {if(c[j]!=NULL) coutc[j];} coutendl; } void FX() { cout分析如下:endl; showa();showb(); int i,j,m,n; i=I();j=J();m=M();n=N(); while(a[m]!=$) { if ((a[m]!=c[n])(B[i][j]!=NULL)) { a[m]=B[i][j][0]; a[m+1

您可能关注的文档

文档评论(0)

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

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

版权声明书
用户编号:5341224344000002

1亿VIP精品文档

相关文档