编译原理实验报告——词法分析器和LL文法 联系客服

发布时间 : 星期日 文章编译原理实验报告——词法分析器和LL文法更新完毕开始阅读

int l=1; //符号栈大小 int k=1; //分析输入串的第几个字符 int how; //利用哪个产生式 int step=1; //步骤 int length=0; printf(\请输入一串字符串,以#结尾:\); do { scanf(\,&cha); str[length]=cha; str1[length]=cha; length++; }while(cha!='#'); printf(\步骤\\t符号栈\\t\\t输入串\\t\\t所用产生式\\n\); do { cha=str1[k-1]; printf(\,step); for(i=0;i<=l;i++) printf(\,ch[i]); //输出符号栈 printf(\); for(i=k-1;i

if(ch[l]!=cha) { if(ch[l]!=39) { switch(ch[l]) { case 'E': m=0;break; case 'T': m=2;break; case 'F': m=4;break; default: m=-1;break; } } else { switch(ch[l-1]) { case 'E': m=1;break; case 'T': m=3;break; default: m=-1;break; } } } if(m!=-1) { if(ch[l]!=cha) { how=ll1[m][j]; if(how==1) { printf(\); n=3; l=l+n-1; ch[l]='T'; ch[l-1]=39; ch[l-2]='E'; step=step+1; } 14

else if(how==2) { printf(\); n=4; l=l+n-2; ch[l]='+'; ch[l-1]='T'; ch[l-2]=39; ch[l-3]='E'; step=step+1; } else if(how==3) { printf(\ε?\\n\); l=l-2; step=step+1; } else if(how==4) { printf(\); n=3; l=l+n-1; ch[l]='F'; ch[l-1]=39; ch[l-2]='T'; step=step+1; } else if(how==5) { printf(\); n=4; l=l+n-2; ch[l]='*'; ch[l-1]='F'; ch[l-2]=39; ch[l-3]='T'; step=step+1; } else if(how==6) { printf(\ε?\\n\); l=l-2; step=step+1; } 15

else if(how==7) { printf(\); n=3; l=l+n-1; ch[l]='('; ch[l-1]='E'; ch[l-2]=')'; step=step+1; } else if(how==8) { printf(\); n=1; l=l+n-1; ch[l]='i'; step=step+1; } else { printf(\错误!\\n\); break; } } else { if(cha=='#' && ch[l]=='#') { printf(\成功!\\n\); break; } else { printf(\); l=l-1; k=k+1; step=step+1; } } } else { printf(\错洙?误ó!\); break; 16