云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 编译原理实验报告《LL(1)语法分析器构造》(推荐文档)

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

  • 62 次阅读
  • 3 次下载
  • 2025/6/27 20:42:24

x=stack[i];stack.erase(i,1);i--;//取栈顶符号x,并从栈顶退出 //cout<

if(u.find(x)!=string::npos)//x是终结符的情况 {

if(x==a) {

s.erase(0,1);a=s[0];//栈顶符号与当前输入符号匹配,则输入下一个符号 cout<<\ \\n\未使用产生式,输出空 } else {

cout<<\

cout<

}

if(x=='#') {

if(a=='#') {flag=1;cout<<\成功\\n\栈顶和余留输入串都为#,匹配成功 else {

cout<<\

cout<

if(U.find(x)!=string::npos)//x是非终结符的情况 {

p=U.find(x); q=u.find(a); if(a=='#') q=t; temp=table[p][q];

cout<

r=9;

while(temp[r]==' ') r--; while(r>3) {

if(temp[r]!='^') {

stack.append(1,temp[r]);//将X::=x1x2...的规则右部各符号压栈 i++; }

9

r--;

} } else {

cout<<\

cout<

}

step++; }

if(flag) cout<

int main() {

int i,j;

string *G=new string[50];//文法G

string *P=new string[50];//产生式集合P

string U,u;//文法G非终结符集合U,终结符集合u int n,t,k;//非终结符、终结符个数,产生式数

string *GG=new string[50];//消除左递归后的文法GG string *PP=new string[50];//文法GG的产生式集合PP string UU,uu;//文法GG非终结符集合U,终结符集合u

int nn,tt,kk;//消除左递归后的非终结符、终结符个数,产生式数 string** table;//分析表

cout<<\ 欢迎使用LL(1)语法分析器!\\n\\n\\n\

cout<<\请输入文法(同一左部的规则在同一行输入,例如:E::=E+T|T;用^表示空串)\\n\ input_grammer(G);

preprocess(G,P,U,u,n,t,k);

cout<<\该文法有\个非终结符:\\n\ for(i=0;i

cout<<\该文法有\个终结符:\\n\ for(i=0;i

cout<<\ 左递归检测与消除\\n\\n\ if(eliminate_1(G,P,U,GG))

10

{

preprocess(GG,PP,UU,uu,nn,tt,kk);

cout<<\该文法存在左递归!\\n\\n消除左递归后的文法:\\n\\n\ for(i=0;i

cout<<\新文法有\个非终结符:\\n\ for(i=0;i

cout<<\新文法有\个终结符:\\n\ for(i=0;i

//cout<<\新文法有\个产生式:\\n\ //for(i=0;i

{cout<<\该文法不存在左递归\\n\

GG=G;PP=P;UU=U;uu=u;nn=n;tt=t;kk=k; }

cout<<\ 求解FIRST集\\n\\n\ int *empty=ifempty(PP,UU,kk,nn);

string* first=FIRST_X(PP,UU,uu,empty,kk,nn); for(i=0;i

cout<<\ \

cout<<\ 求解FOLLOW集\\n\\n\ for(i=0;i

cout<<\ \

cout<<\ 构造文法分析表\\n\\n\ table=create_table(PP,UU,uu,nn,tt,kk,first); cout<<\ \

for(i=0;i

cout<

cout<<\ 分析符号串\\n\\n\ string s;

11

cout<<\请输入要分析的符号串\\n\ cin>>s;

analyse(table,UU,uu,tt,s); return 0; }

3、程序演示结果 (1)输入文法

(2)消除左递归

(3)求解FIRST和FOLLOW集

12

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

x=stack[i];stack.erase(i,1);i--;//取栈顶符号x,并从栈顶退出 //cout<

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com