大佬们能帮忙分析下代码嘛,(比如注释什么的)萌新十分感谢,有偿

[复制链接]
查看11 | 回复0 | 2021-1-27 05:48:36 | 显示全部楼层 |阅读模式
#include
#include
chardata[20][20];//算符优先关系
chars[100];//模拟符号栈s
charlable[20];//文法终极符集
charinput[100];//文法输入符号串
charstring[20][10];//用于输入串的分析
intk;
chara;
intj;
charq;
intr;//文法规则个数
intr1;
intm,n,N;//转化后文法规则个数
charst[10][30];//用来存储文法规则
charfirst[10][10];//文法非终结符FIRSTVT集
charlast[10][10];//文法非终结符LASTVT集
intfflag[10]={0};//标志第i个非终结符的FIRSTVT集是否已求出
intlflag[10]={0};//标志第i个非终结符的LASTVT集是否已求出
intzhongjie(charc);//判断字符c是否是终极符
intxiabiao(charc);//求字符c在算符优先关系表中的下标
voidout(intj,intk,char*s);//打印s栈
voidfirstvt(charc);//求非终结符c的FIRSTVT集
voidlastvt(charc);//求非终结符c的LASTVT集
voidtable();//创建文法优先关系表
intmain()
{
inti,j,k=0;
printf("请输入文法规则数:");
scanf("%d",&r);
printf("请输入文法规则:\n");
for(i=0;i'Z')
{
printf("不是算符文法!\n");
exit(-1);
}
if(st[j]>='A'&&st[j]='A'&&st[j+1]'Z')&&st[j]!='-'&&st[j]!='>'&&st[j]!='|')
lable[k++]=st[j];
}
}
lable[k]='#';
lable[k+1]='\0';
table();
printf("每个非终结符的FIRSTVT集为:\n");//输出每个非终结符的FIRSTVT集
for(i=0;i'&&data[j]!=''&&data[j]!='\0')break;
elseif(data[j]=='='&&data[j]!='='&&data[j]!='\0')break;
}}
if(i==(k+1)&&j==(k+1))printf("该文法是算符优先文法。\n");
elseprintf("该文法不是算符优先文法。\n");
return0;
}
voidtable()
{
chartext[20][10];
inti,j,k,t,l,x=0,y=0;
intm,n;
x=0;
for(i=0;i';
}
else
{
text[x][y]=st[j];
y++;
}
}
text[x][y]='\0';
x++;
y=0;
}
r1=x;
printf("转化后的文法为:\n");
for(i=0;i';
}
}
}
}
m=xiabiao('#');
for(t=0;t';
}
data[n][n]='=';
}
voidfirstvt(charc)
{
inti,j,k,m,n;
for(i=0;i -->
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行