预测分析表-编译原理

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

#includestdio.h#includetchar.h#includestring.hintmain(intargc,char*argv[]){charsyn[15];//语法栈inttop;//栈顶指针charlookahead;//当前单词charexp[50];//表达式区intm=0;//表达式指针chars[4][5]={d,+,*,(};//表中有空白的符号charstring[3]={'E','T','F'};//表中有同步记号的的非终结符intll1[7][6]={{1,0,0,1,9,9},//LL(1)分析表,9表示同步记号,第6行是#,第7行是){0,2,0,0,3,3},{4,9,0,4,9,9},{0,6,5,0,6,6},{8,9,9,7,9,9},{12,12,12,12,12,10},{13,13,13,13,11,13}};inti,j;//表行和列intcode;//表项printf(************************语法分析器**********************\n);printf(请输入合法字符串:\n);scanf(%s,exp);top=1;lookahead=exp[m++];syn[0]='#';syn[1]='E';printf(***********************预测分析表*********************\n);printf(\ti\t*\t+\t(\t)\t#\n);printf(E\tE-TE'\t\t\tE-TE'\n);printf(E'\t\t\tE'-+TE'\tE'-ε\n);printf(T\tT-FT'\t\t\tT-FT'\t\n);printf(T'\t\tT'-*FT'\t\tT'-ε\t\n);printf(F\tF-d\t\t\tF-(E)\n\n);printf(调用规则顺序:\n);while(1){switch(syn[top])//行{case'E':i=0;break;case'e':i=1;break;case'T':i=2;break;case't':i=3;break;case'F':i=4;break;case'#':i=5;break;case')':i=6;break;}switch(lookahead)//列{case'd':j=0;break;case'+':j=1;break;case'*':j=2;break;case'(':j=3;break;case')':j=4;break;case'#':j=5;break;}code=ll1[i][j];if(code==10){printf(语法分析结束\n);//break;}else{switch(code){case0:{//printf(出错,用户多输入了%s,跳过%s\n,s[j],s[j]);if(j==0){//lookahead=exp[m++];lookahead=exp[m++];}elselookahead=exp[m++];break;}case1:{printf(E→TE′\n);syn[top]='e';syn[top+1]='T';top++;break;}case2:{printf(E′→+TE`\n);syn[top+1]='T';top++;lookahead=exp[m++];break;}case3:{printf(E′→ε\n);syn[top]='\0';top--;break;}case4:{printf(T→FT′\n);syn[top]='t';syn[top+1]='F';top++;break;}case5:{printf(T′→*FT′\n);syn[top+1]='F';top++;lookahead=exp[m++];break;}case6:{printf(T′→ε\n);syn[top]='\0';top--;break;}case7:{printf(F→(E)\n);syn[top]=')';syn[top+1]='E';top++;lookahead=exp[m++];break;}case8:{printf(F→d\n);syn[top]='\0';top--;lookahead=exp[m++];lookahead=exp[m++];break;}case9:{printf(弹栈,弹出非终结符%c,用户少输入了一个d\n,string[i/2]);syn[top]='\0';top--;break;}case11:{syn[top]='\0';top--;lookahead=exp[m++];break;}case13:{printf(弹栈,弹出终结符),用户少输入了一个右括号\n);syn[top]='\0';top--;break;}}}}return0;}

1 / 4
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功