资源描述:
《语法分析C语言程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验内容:可选择LL1分析法、算符优先分析法、LR分析法实现如下表达式文法的语法分析器:(1)E-E+TIE-TIT(2)T->T*FIT/FIF(3)F-*PAFIP(4)Pf(E)li实验环境:WindowsXP实验分析:(1)定义部分:定义常量、变量、数据结构。(2)初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);(3)控制部分:从键盘输入一个表达式符号串;(4)利用LL(1)分析算法进行表达式处理:根据I丄(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分实验分析表:•1+*()#EE->
2、TE'E->TE,E,E'->+TE'E'->eE'->eTT-〉FT'T->FT,T,r->eT->*FTr->£r->£FF->iF->(E)实验程序:#include#includeusingnamespacestd;stacksymbol;stackstate;charsen[50];charsym[12][6]={//符号表}}1JJ1J1J}1JJr>>,r>>,s,r>>,r,t}r,r,r,r,r,r}>、>>>>>、r,r、r,r,rJ};charsnum[12][
3、6]={//数字表{5,1,1,4,2,1},{3,6,5,3,2,0},{2,2,7,2,2,2},{4,4,4,4,4,4},{5,1,1,4,2,1},{6,6,6,6,6,6},{5,1,1,4,2,1},{5,1,1,4,2,1},{3,6,5,3,11,4},{1,1,7,1,1,1},{3,3,3,3,3,3},{5,5,5,5,5,5}};intgo2[12][3]={//goto表{1,2,3},{0,0,0},{0,0,0},{0,0,0},{8,2,3},{0,0,0},{0,9,3},{0,0,10},{0,0,0
4、},{0,0,0},{0,0,0},{0,0,0}};voidaction(inti,char*&3,char&how,int&num,char&A,int&b)//action函数[i,a]{intj;switch(*a){case'i':j=0;break;case'+':j二1;break;case'*':j=2;break;case'(':j=3;break;case')':j=4;break;case'#':j=5;break;default:j二T;break;}if(j!=-l){how=sym[i][j];num二snum
5、[i][j];if(how二二'r'){switch(num){case1:A二'E',b=3;cout«zz按E->E+T规约z,«endl;break;case2:A='E',b=l;cout«,z按E->T规约z,«endl;break;case3:A='T',b=3;cout«,z按T->T*F规约,,<F规约/z«endl;break;case5:A二'F',b=3;cout«,/按F->(E)规约,z<6、b=l;cout<<,/按F_>id规约z,<7、到+,也或$,就假设已经输入id了,转到状态5state・push(5);symbol.push('i');//必须冇这个,如果假设输入id的话,符号栈里必须冇....cout<
8、号,假设已经输入右括号,转到状态11state,push(ll);symbol.pushC)');cout<<,?缺少右括号z,«endl;break;case5:a++;cout«,/*号无