编译原理实验报告《LL语法分析器构造》(文档).docVIP

编译原理实验报告《LL语法分析器构造》(文档).doc

  1. 1、本文档共15页,可阅读全部内容。
  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文档。上传文档
查看更多
编译原理实验报告《LL(1)语法解析器构造》(介绍文档) 编译原理实验报告《LL(1)语法解析器构造》(介绍文档) 编译原理实验报告《LL(1)语法解析器构造》(介绍文档) 《LL(1)解析器的构造》实验报告 一、实验名称 LL(1)解析器的构造 二、实验目的 设计、编制、调试一个LL(1)语法解析器,利用语法解析器对符号串的鉴别,加深对语法解析原理的理解。 三、实验内容和要求 设计并实现一个LL(1)语法解析器,实现对算术文法: G[E]:E-E+T|T T-T*F|F F-(E)|i 所定义的符号串进行鉴别,比方符号串i+i*i为文法所定义的句子,符号串ii+++*i+不是文法所定义的句子。 实验要求: 、检测左递归,若是有则进行除掉; 、求解FIRST集和FOLLOW集; 、成立LL(1)解析表; 、成立LL解析程序,对于用户输入的句子,能够利用所构造的解析程序进行解析,并显示出解析过程。 四、主要仪器设备 硬件:微型计算机。 软件:Codeblocks(也能够是其他集成开发环境)。 五、实验过程描述 1、程序主要框架 程序中编写了以下函数,各个函数实现的作用以下: voidinput_grammer(string*G);//输入文法G voidpreprocess(string*G,string*P,stringU,stringu,intn,intt,intk); 1 //将文法G预办理获得产生式会集P,非终结符、终结符会集U、u, inteliminate_1(string*G,string*P,stringU,string*GG);//除掉文法G中所有直接左递归获得文法GGint*ifempty(string*P,stringU,intk,intn);//判断各非终结符可否能推导为空 string*FIRST_X(string*P,stringU,stringu,int*empty,intk,intn);求所有非终结符的FIRST集stringFIRST(stringU,stringu,string*first,strings);//求符号串s=X1X2...Xn的FIRST集string**create_table(string*P,stringU,stringu,intn,intt,intk,string*first);//构造解析表 voidanalyse(string**table,stringU,stringu,intt,strings);//解析符号串s 2、编写的源程序 #includecstdio #includecstring #includeiostream usingnamespacestd; voidinput_grammer(string*G)//输入文法G,n个非终结符 { inti=0;//计数 charch=y; while(ch==y){ cinG[i++]; cout连续输入?(y/n)\n; cinch; } } voidpreprocess(string*G,string*P,stringU,stringu,intn,intt,intk)//将文法G预办理产生式会集P, 非终结符、终结符会集U、u, { inti,j,r,temp;//计数 charC;//记录规则中()后的符号 intflag;//检测到() n=t=k=0; for(i=0;i50;i++)P[i]=;//字符串若是不初始化,在使用P[i][j]=a时将不能够改变,能够 用P[i].append(1,a) U=u=;//字符串若是不初始化,无法使用U[i]=a赋值,能够用U.append(1,a) for(n=0;!G[n].empty();n++) {U[n]=G[n][0]; }//非终结符会集,n为非终结符个数 for(i=0;in;i++) { for(j=4;jG[i].length();j++) { if(U.find(G[i][j])==string::nposu.find(G[i][j])==string::npos) if(G[i][j]!=|G[i][j]!=^) //if(G[i][j]!=(G[i][j]!=)G[i][j]!=|G[i][j]!=^) u[t++]=G[i][j]; 2 } }//终结符会集,t为终结符个数 for(i=0;in;i++) { flag=0;r=4; for(j=4;jG[i].length();j++) { P[k][0]=U[i];P[k][1]=:;P[k][2]=:;P[k][3]==; /*if(G[i][j]==() {j++;flag=1;for(temp=j;G[i][temp]!=);temp++); C=G[i][temp+1]

文档评论(0)

134****4868 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档