实验二求文法中每个非终结符的FIRSTVT集Word格式文档下载.docx
- 文档编号:13936553
- 上传时间:2022-10-15
- 格式:DOCX
- 页数:8
- 大小:15.77KB
实验二求文法中每个非终结符的FIRSTVT集Word格式文档下载.docx
《实验二求文法中每个非终结符的FIRSTVT集Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验二求文法中每个非终结符的FIRSTVT集Word格式文档下载.docx(8页珍藏版)》请在冰豆网上搜索。
string.h>
usingnamespacestd;
#defineMAX100
structSTACK
{
intleft;
intright;
};
intsearch(chart,char*str,intnum)
inti;
for(i=0;
i<
num;
i++)
{
if(t==str[i])
returni;
}
return-1;
}
intmain()
charwenfa[MAX][MAX];
//00个长度为100的产生式
charstr[MAX];
charzhongjiefu[MAX];
charfeizhongjiefu[MAX];
chartemp[MAX];
inti,j,k;
intflag1=0,flag2=0,flag3=0;
boolF[MAX][MAX];
STACKS[MAX];
inttop=-1;
memset(F,false,sizeof(F));
cout<
<
"
请输入产生式,最后以end结束"
endl;
while(cin>
>
str&
&
strcmp(str,"
end"
))//只要str不等end,返回值就不为0;
strcmp(constchar*s1,constchar*s2);
说明:
当s1<
s2时,返回值<
0当s1=s2时,返回值=0当s1>
s2时,返回值>
0
strcpy(wenfa[flag1++],str);
//------------求出不重复的非终结符集和终结符集------------for(i=0;
flag1;
i++)//取非终结符;
if(i==0)
{
feizhongjiefu[flag2++]=wenfa[i][0];
//存法产生式的非终结符
}
else
for(j=0;
j<
flag2;
j++)
{
if(wenfa[i][0]==feizhongjiefu[j])
{
break;
}
}
if(j==flag2)
feizhongjiefu[flag2++]=wenfa[i][0];
i++)//取终结符
intcount=0;
for(j=3;
strlen(wenfa[i]);
temp[count++]=wenfa[i][j];
temp[count]='
\0'
;
if(strcmp(temp,"
digit"
)==0)
if(i==0)
zhongjiefu[flag3++]='
'
else
for(j=0;
flag3;
if(zhongjiefu[j]=='
)
{
break;
}
if(j==flag3)
zhongjiefu[flag3++]='
for(j=3;
if(j==3&
(wenfa[i][j]>
'
Z'
||wenfa[i][j]<
A'
)&
flag3==0)
zhongjiefu[flag3++]=wenfa[i][j];
else
for(k=0;
k<
k++)
if(wenfa[i][j]==zhongjiefu[k])
{
break;
}
if(k==flag3&
))
zhongjiefu[flag3++]=wenfa[i][j];
//开始
inta,b;
if(wenfa[i][3]>
||wenfa[i][3]<
intcount=0;
temp[count++]=wenfa[i][j];
temp[count]='
if(strcmp(temp,"
a=search(wenfa[i][0],feizhongjiefu,flag2);
b=search('
zhongjiefu,flag3);
F[a][b]=true;
top++;
S[top].left=a;
S[top].right=b;
b=search(wenfa[i][3],zhongjiefu,flag3);
for(j=4;
))//避免后续所指单词没有内容。
if(strcmp(temp,"
a=search(wenfa[i][0],feizhongjiefu,flag2);
b=search('
F[a][b]=true;
top++;
S[top].left=a;
S[top].right=b;
if(wenfa[i][4]>
||wenfa[i][4]<
a=search(wenfa[i][0],feizhongjiefu,flag2);
b=search(wenfa[i][4],zhongjiefu,flag3);
F[a][b]=true;
top++;
S[top].left=a;
S[top].right=b;
while(top!
=-1)
charB,a;
intt1;
B=feizhongjiefu[S[top].left];
a=zhongjiefu[S[top].right];
t1=S[top].right;
for(i=0;
intt;
t=search(wenfa[i][0],feizhongjiefu,flag2);
if(wenfa[i][3]==B&
B!
=wenfa[i][0]&
F[t][t1]==false)
F[t][t1]=true;
S[top].left=t;
S[top].right=t1;
top--;
cout<
FIRSTVT("
feizhongjiefu[i]<
)={"
for(j=0;
flag3-1;
if(F[i][j]==true)
if(zhongjiefu[j]=='
cout<
digit,"
cout<
zhongjiefu[j]<
"
if(zhongjiefu[j]=='
cout<
zhongjiefu[j];
}"
endl<
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 文法 每个 终结 FIRSTVT