1、StepStackStringRule1#Sm+m*m#AT10#TUmm*m#M匹配2#TAA-BU11#TU*m#U-*BU3#TUBB-m12#TUB*匹配413m#5+m*m#$146#TT-+AT15#7#TA+匹配16817接受9五、提示本实验重点有两个:一是如何用适当的数据结构实现预测分析表存储和使用;二是如何实现各规则右部串的逆序入栈处理。建议:使用结构体数组。六、分析与讨论1、若输入串不是指定文法的句子,会出现什么情况?2、总结预测语法分析程序的设计和实现的一般方法。代码:#includestdlib.hstring.hwindows.hstruct stack1 char
2、stack10;sta7= 0,+*()m#,SATABUT+AT$B(S)U*BU;/struct stack *head;char stack_110=0,stack_210=,stack_310=int i,j,k,len_1,len_2,len_3,mark=0;void main()/ void c_stack(); void analyze_stack(); void surplus_str(); int rules();/ printf(%st,sta01.stack);/ printf(n); while(1) / system(clsmark=0; printf(请输入串:
3、gets(stack_3); if(stack_30=0) break; stack_10=S; len_3=strlen(stack_3); if(stack_3len_3-1!=# printf(字符串输入错误,字符串不以#号结束! continue; 分析栈tt剩余串tttttt规则n for(i=0;i=100;i+) analyze_stack(); surplus_str(); rules(); if(mark=1) break; if(stack_10=&stack_30= printf(#tt#tttttt成功接受n break; void analyze_stack()/分析
4、栈#%-15s,stack_1); len_1=strlen(stack_1);void surplus_str()/剩余串/注意拼写的正确性,写成surlpus_str()报错,unresolved sxternal symbol_surplus_str;%-48s,stack_3);int rules()/所用规则 int p,q,h; char temp;/ printf(%d,len_1); if(stack_1len_1-1=stack_30) printf(%c匹配n,stack_30); stack_1len_1-1= for(h=1;h=len_3-1;h+) stack_3h
5、-1=stack_3h; stack_3len_3-1= else if(stack_1len_1-1Z报错n mark=1; return 0; else if(stack_1len_1-1stack_1len_1-1 for(j=1;j=6) mark=1; return 0; for(k=1;k=7) if(stapq.stack0= printf( mark=1; return 0; strcpy(stack_2,stapq.stack); len_2=strlen(stack_2);%c-%sn,stack_1len_1-1,stack_2); if(stack_20=$ else for(h=0;len_2/2; temp=stack_2h; stack_2h=stack_2len_2-1-h; stack_2len_2-1-h=temp; strcat(stack_1,stack_2); return 0;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1