编译原理实验实验名称:Chomsky文法类型判断姓名:学号:教师签字:成绩:Chomsky文法类型判断实验目的:编写程序,判断文法的类型。实验要求:输入一组任意的规则,输出相应的Chomsky文法的类型。实验原理:1.0型文法产生式特点:a-B。2.1型文法产生式特点:|a|《=|B|,除S-#外。3.2型文法产生式的特点:A-r,除S-#外。4.3型文法产生式的特点:A-aB|a(右线性)A-Ba|a(左线性)实验代码:#includeiostream#includecstringusingnamespacestd;//*********************************charb[10][10];//******************************boolwenfa0(intk)//0型文法判断{inti,j,k1=0;for(j=0;j=k;j++)for(i=0;istrlen((b[j]));i++){if(b[j][i]!='-'){if(b[j][i]='A'&&b[j][i]='Z'){k1++;break;}}elsebreak;}if(k1==k+1)returntrue;elsereturnfalse;}//********************************boolwenfa1(intk,charc)//1型文法判断{inti,j,len;boolflag1=false,flag2=false;for(i=0;i=k;i++){len=strlen((b[i]));for(j=0;jlen;j++){if(b[i][j]=='-'){if(len-(2*j+1)0)returnfalse;elseflag2=true;}if(b[i][j]==c&&!flag2){flag1=true;}if(flag2&&b[i][j]=='#'){returnfalse;}}}returntrue;}//******************************boolwenfa2(intk)//2型文法判断{inti,j,len;for(i=0;i=k;i++){len=strlen(b[i]);for(j=0;jlen;j++){if(b[i][j]=='-'){break;}if(b[i][j]='a'&&b[i][j]='z'||j1)returnfalse;}}returntrue;}//**********************boolwenfa3(intk)//3型文法判断{inti,j,len;boolflag=false;for(i=0;i=k;i++){len=strlen(b[i]);coutb[i]endl;for(j=0;jlen;j++){if(flag){if(b[i][j]='A'&&b[i][j]='Z'&&j==len-2&&b[i][j+1]='A'&&b[i][j+1]='Z')returnfalse;if(!(b[i][j]='A'&&b[i][j]='Z')&&j==len-2&&!(b[i][j+1]='A'&&b[i][j+1]='Z'))returnfalse;if(b[i][j]='A'&&b[i][j]='Z'&&j==len-1&&b[i][j-1]=='-')returnfalse;}if(!flag&&b[i][j]=='-'){if(len-j-1=2)flag=true;elsereturnfalse;}}flag=false;}returntrue;}//**********************************intmain(){chara[100],c,w=3,h=0;inti=0,j,len,k;cout*********************Chomsky文法类型判断***********************endl;{cout请输入产生式endl;gets(a);cout请输入识别符;cinc;len=strlen(a);k=0;j=0;for(i=0;ilen;i++){if(a[i]==''){b[k][j]='\0';j=0;k++;}elseb[k][j++]=a[i];}if(wenfa0(k)){if(wenfa1(k,c)){if(wenfa2(k)){if(wenfa3(k)){cout该文法是3型文法endl;}elsecout该文法是2型文法endl;}elsecout该文法是1型文法endl;}elsecout该文法是0型文法endl;}elsecout该文法不是0型文法endl;}return0;}实验截屏: