试验二求文法中每个非终结符的FIRSTVT集.docx
- 文档编号:4157891
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:8
- 大小:16.03KB
试验二求文法中每个非终结符的FIRSTVT集.docx
《试验二求文法中每个非终结符的FIRSTVT集.docx》由会员分享,可在线阅读,更多相关《试验二求文法中每个非终结符的FIRSTVT集.docx(8页珍藏版)》请在冰豆网上搜索。
试验二求文法中每个非终结符的FIRSTVT集
实验二算符优先文法及FIRSTVT集
1.实验目的:
掌握算符优先文法FIRSTVT集的求法
2.实验内容:
求以下文法所有非终结符的FIRSTVT集
LE
EE+T
ET
TT*F
TF
F(E)
Fdigit
3.实验要求:
a)文法可以在程序中指定,也可以在程序运行时从键盘输入;
b)digit表示终结符;
0在屏幕上输出最终结果;
编码:
#incIude
intIeft;
intright;
};
intsearch(chart,char
iritnum)
inti;
for(i=0;i { if(t==str[i]) returni; } return-1; } intmain() { char wenfa[MAX][MAX];//00 个长度为100的产生式charstr[MAX]; char zhongjiefu[MAX]; char feizhongjiefu[MAX];chartemp[MAX];inti,j,k; int flag1=0,flag2=0,fIag3 =0; boolF[MAX][MAX]; STACKS[MAX]; inttop二T; memset(F,faIse,sizeof(F)); cout«"请输入产生式,最后以end结束H«endl; whiIe(cin»str&&strcmp(str,"end"))//只要str不等end,返回值就不为0: strcmp(constchar*s1,constchar*s2);说明: 当s1 strcpy(wenfa[fIag1++],str); zhongjiefu[j]) if(wenfa[i][0]==fei //求出 不重复的非终结符集和终结符集 for(i二0;i { if(i==0) { feizhongjiefu[fIag2++]=wenfa[i][0];//存法产生式的非终结符 1 eIse for(j=0;j ) break; } } if(j==flag2) { feizhongjiefu[fIag2++]二wenfa[i][0]; 1 } } for(i=0;i )//取终结符 { intcount二0; for(j-3;j } temp[count]二,\(T; if(strcmp(temp,"digit”)=0) { if(i==0) { zhongjiefu[fIag3++] rr } eIse { for(j=0;j { if(zhongjiefu[j]==' { break; } } if(j二二flag3) zhongjiefu[fIag3++] V } } } eIse for(j-3;j if(j==3&&(wenfa[i][ j]>,Z,||wenfa[i][j]<' A')&&flag3=0) [i][j]>'Z‘||wenfa[i][jKA')) zhongjiefu[fIag3++]=wenfa[i][j]; } eIse for(k=0;k ) { if(wenfa[i][j]=zhongjiefu[k]) zhongjiefu[fIag3++]=wenfa[i][j]; } } } } } //开始 inta,b; for(i=0;i break; if(wenfa[i][3]>'Z'| }|wenfa[i][3] }{ intcount^O; if(k=fIag3&&(wenfa for(j二3;j { temp[count++]二wenfa } temp[count]二; if(strcmp(temp,"digit”)=0) { a二search(wenfa[i][0],feizhongjiefu,fIag2); b=search(' ',zhongjiefu,fIag3); F[a][b]二true; top++; S[top].Ieft二a; S[top].right=b; } eIse { a=search(wenfa[i][0],feizhongjiefu,fIag2); b=search(wenfa[i][3 ],zhongjiefu,fIag3);F[a][b]二true; top++; S[top].Ieft二a; S[top].right=b; } eIse intcount=0; for(j=4;j temp[count++]=wenfa } temp[count]二,\0,; if(strcmp(temp,""))//避免后续所指单词没有内容。 a=search(wenfa[i][0],feizhongjiefu,fIag2); b二search(' ',zhongjiefu,fIag3); F[a][b]二true; top++; S[top].Ieft二a; S[top].right=b; } eIse if(wenfa[i][4]>'Z'| |wenfa[i][4]<'A') if(strcmp(temp,"dig it”)=0) a=search(wenfa[i][0 ],feizhongjiefu,fIag2); b二search(wenfa[i][4],zhongjiefu,fIag3); F[a][b]二true; top++; S[top],left=a; S[top].right=b; } } } } while(top! =-1) { charB,a; int; op].left]; a二zhongjiefu[S[top] ・right]; 11=S[top].right; for(i=0;i { intt; t二search(wenfa[i][0],feizhongjiefu,fIag2); if(wenfa[订[3]=B&& B! =wenfa[i][0]&&F[t][ t1]—false) F[t][t1]=true; B二feizhongjiefu[S[t S[top].Ieft=t; if(zhongjiefu[j]~ S[top].right=t1; top++; } } top__; } for(i二0;i cout«,,FIRSTVT(,,«feizhongjiefu[i]«")={n for(j=0;j *) { cout«"digit,”; } eIse { cout«zhongjiefu[j] «n,n; } } } if(zhongjiefu[j]—'*) cout〈〈"digit”; eIse if(F[i][j]二二true) cout«zhongjiefu[j] cout«"}"«endI«endI«endI; } return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 试验 文法 每个 终结 FIRSTVT