程序级结果学习资料学习资料.docx

上传人:scccc 文档编号:13376196 上传时间:2021-12-24 格式:DOCX 页数:14 大小:125.99KB
返回 下载 相关 举报
程序级结果学习资料学习资料.docx_第1页
第1页 / 共14页
程序级结果学习资料学习资料.docx_第2页
第2页 / 共14页
程序级结果学习资料学习资料.docx_第3页
第3页 / 共14页
程序级结果学习资料学习资料.docx_第4页
第4页 / 共14页
程序级结果学习资料学习资料.docx_第5页
第5页 / 共14页
点击查看更多>>
资源描述

《程序级结果学习资料学习资料.docx》由会员分享,可在线阅读,更多相关《程序级结果学习资料学习资料.docx(14页珍藏版)》请在三一文库上搜索。

1、.#include<iostream>#include<string>using namespace std;const int stacksize=32;class stackpublic:initstack();void push(char);char pop();bool isempty();void showstack();stack();private:int top;int base;char *istack;stack:initstack()istack=new charstacksize;top=base=0;void stack:push(char t

2、oken)if(top-base>=stacksize)cout<<"Overflow!"<<endl;exit(1);top+;istacktop-1=token;char stack:pop()if(top=base) cout<<"Empty!"<<endl;exit(1);top-;return istacktop;bool stack:isempty()if(top=base) return true;else return false;void stack:showstack()for(i

3、nt i=base;i<top;i+)cout<<istacki;stack:stack()base=top=0;delete istack;/*void main()stack s;s.initstack();s.push('e');s.push('r');if(!s.isempty() s.showstack();cout<<endl;char d=s.pop();cout<<d;*/stack s;void init()s.initstack();s.push('#');s.push('E&

4、#39;);char nt5='E','P','T','Q','F' /定义非终结符char t6='i','+','*','(',')','#' /定义终结符bool isterminal(char c)for(int i=0;i<5;i+)if(c=nti) return 0;return 1;void derivation_E()s.push('P');s.push('T');

5、void derivation_P()s.push('P');s.push('T');s.push('+');void derivation_T()s.push('Q');s.push('F');void derivation_Q()s.push('Q');s.push('F');s.push('*');void derivation_F()s.push('i');void derivation_F1()s.push(')');s.pu

6、sh('E');s.push('(');void LL1(string str)intl=str.length();int step=0,j=0,k=0,n=0;char ch,ter;init();cout<<"步骤"<<"t栈"<<"t输入缓冲区"<<"t输出"<<endl; cout<<" "<<step+;cout<<" t"s.showst

7、ack();cout<<" t"<<str<<endl;doch=s.pop(),ter=strj;if(!isterminal(ch)&&isterminal(ter)switch(ch)case 'E':switch(ter)case 'i':derivation_E();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<

8、<str<<" t E TP"<<endl;break;case '(':derivation_E();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<endl;break;default:break;break;case 'P':switch(ter)case '+':derivation_P();

9、cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t P +TP"<<endl;ch=s.pop();for(k=0,n=1;k<l-1,n<l;k+,n+)strk=strn;ter=str0;cout<<" "<<step+;cout<<" t"s.showstack();

10、cout<<" t"<<str<<endl;break; case ')':cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t Q "<<endl;ch=s.pop();if(ch=')')for(k=0,n=1;k<l-1,n<l;k+,n+)strk=strn

11、;ter=str0;cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<endl;else cout<<"编译失败!"<<endl;exit(1);break;case '#':cout<<" "<<step+;cout<<" t"s.showstack();cout

12、<<" t"<<str<<" t Q "<<endl;ch=s.pop();if(isterminal(ch)if(ch!='#') cout<<"编译失败!"<<endl;exit(1);else s.push(ch);break;default:break;break;case 'T':switch(ter)case 'i':derivation_T();cout<<" "<

13、<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t T FQ"<<endl;break; case '(':derivation_T();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t T

14、 FQ"<<endl;break;default:break;break;case 'Q':switch(ter)case '+':cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t Q "<<endl;break; case '*':derivation_Q();cout<<&q

15、uot; "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t Q *FQ"<<endl;ch=s.pop(); for(k=0,n=1;k<l-1,n<l;k+,n+)strk=strn;ter=str0;cout<<" "<<step+;cout<<" t"s.showstack();cout<<&

16、quot; t"<<str<<endl;break;case ')':cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t Q "<<endl;break;case '#':cout<<" "<<step+;cout<<" t&quo

17、t;s.showstack();cout<<" t"<<str<<" t Q "<<endl;break;default:break;break;case 'F':switch(ter)case 'i':derivation_F();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<

18、;" t F i "<<endl;ch=s.pop();for(k=0,n=1;k<l-1,n<l;k+,n+)strk=strn;ter=str0;cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<endl;break;case '(':derivation_F1();cout<<" "<<st

19、ep+;cout<<" t"s.showstack();cout<<" t"<<str<<" t F (E) "<<endl;ch=s.pop();for(k=0,n=1;k<l-1,n<l;k+,n+)strk=strn;ter=str0;cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<

20、str<<endl;break;default:break;break;default:cout<<"ERROR!"break;while(ch!='#');if(ter!='#') cout<<"编译不成功!"<<endl;else cout<<"编译成功!"<<endl;void main()cout<<"本实验的LL(1)文法为表达式文法:n"cout<<"tE E+T |

21、 Tn" cout<<"tT T*F | Fn" cout<<"tF i | (E)n"cout<<"消除E和T的左递归得到文法:n"cout<<"tE TPn"cout<<"tP +TP| n" cout<<"tT FQn"cout<<"tQ *FQ| n" cout<<"tF i | (E)n"string str;cout&l

22、t;<"输入表达式符号串(包含i+*()并以#结束):"cin>>str;cout<<"对输入串"<<str<<"进行预测分析过程为:"<<endl;LL1(str);#include<iostream>#include<string>using namespace std;const int stacksize=32;class stackpublic:initstack();void push(char);char pop();bool is

23、empty();void showstack();stack();private:int top;int base;char *istack;stack:initstack()istack=new charstacksize;top=base=0;void stack:push(char token)if(top-base>=stacksize)cout<<"Overflow!"<<endl;exit(1);top+;istacktop-1=token;char stack:pop()if(top=base) cout<<"

24、;Empty!"<<endl;exit(1);top-;return istacktop;bool stack:isempty()if(top=base) return true;else return false;void stack:showstack()for(int i=base;i<top;i+)cout<<istacki;stack:stack()base=top=0;delete istack;stack s;void init()s.initstack();s.push('#');s.push('E');c

25、har nt5='E','P','T','Q','F' /定义非终结符char t6='i','+','*','(',')','#' /定义终结符bool isterminal(char c)for(int i=0;i<5;i+)if(c=nti) return 0;return 1;void derivation_E()s.push('P');s.push('T');void de

26、rivation_P()s.push('P');s.push('T');s.push('+');void derivation_T()s.push('Q');s.push('F');void derivation_Q()s.push('Q');s.push('F');s.push('*');void derivation_F()s.push('i');void derivation_F1()s.push(')');s.push('

27、;E');s.push('(');void LL1(string str)intl=str.length();int step=0,j=0,k=0,n=0;char ch,ter;string str1;init();cout<<"步骤"<<"t栈"<<"t输入缓冲区"<<" 输出"<<endl; cout<<" "<<step+;cout<<" t"s.s

28、howstack();cout<<" t"<<str<<endl;doch=s.pop(),ter=strj;if(!isterminal(ch)&&isterminal(ter)switch(ch)case 'E':switch(ter)case 'i':derivation_E();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"

29、;<<str<<"t E TP"<<endl;break;case '(':derivation_E();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<endl;break;default:break;break;case 'P':switch(ter)case '+':derivation_

30、P();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t P +TP"<<endl;ch=s.pop();/for(k=0,n=1;k<l-1,n<l;k+,n+)strk=strn;str1=str1;for(k=2;k<l;k+) str1+=strk;str=str1;l-;ter=str0;cout<<" &qu

31、ot;<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<endl;break; case ')':cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t Q "<<endl;ch=s.pop();if(c

32、h=')')/for(k=0,n=1;k<l-1,n<l;k+,n+)strk=strn;str1=str1;for(k=2;k<l;k+) str1+=strk;str=str1;l-;ter=str0;cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<endl;else cout<<"编译失败!"<<endl;exit

33、(1);break;case '#':cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t Q "<<endl;ch=s.pop();if(isterminal(ch)if(ch!='#') cout<<"编译失败!"<<endl;exit(1);else s.push(ch);break

34、;default:break;break;case 'T':switch(ter)case 'i':derivation_T();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<"t T FQ"<<endl;break; case '(':derivation_T();cout<<" "

35、<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t T FQ"<<endl;break;default:break;break;case 'Q':switch(ter)case '+':cout<<" "<<step+;cout<<" t"s.showstack();cout<<"

36、t"<<str<<" t Q "<<endl;break; case '*':derivation_Q();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t Q *FQ"<<endl;ch=s.pop(); /for(k=0,n=1;k<l-1,n<l;k+,n+)s

37、trk=strn;str1=str1;for(k=2;k<l;k+) str1+=strk;str=str1;l-;ter=str0;cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<endl;break;case ')':cout<<" "<<step+;cout<<" t"s.showstack()

38、;cout<<" t"<<str<<" t Q "<<endl;break;case '#':cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<" t Q "<<endl;break;default:break;break;case 'F':swit

39、ch(ter)case 'i':derivation_F();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<"t F i "<<endl;ch=s.pop();/for(k=0,n=1;k<l-1,n<l;k+,n+)strk=strn;str1=str1;for(k=2;k<l;k+) str1+=strk;str=str1;l

40、-;ter=str0;cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<endl;break;case '(':derivation_F1();cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<&

41、lt;" t F (E) "<<endl;ch=s.pop();/for(k=0,n=1;k<l-1,n<l;k+,n+)strk=strn;str1=str1;for(k=2;k<l;k+) str1+=strk;str=str1;l-;ter=str0;cout<<" "<<step+;cout<<" t"s.showstack();cout<<" t"<<str<<endl;break;default:bre

42、ak;break;default:cout<<"ERROR!"break;while(ch!='#');if(ter!='#') cout<<"编译不成功!"<<endl;else cout<<"编译成功!"<<endl;void main()cout<<"本实验的LL(1)文法为表达式文法:n"cout<<"tE E+T | Tn" cout<<"tT T*

43、F | Fn" cout<<"tF i | (E)n"cout<<"消除E和T的左递归得到文法:n"cout<<"tE TPn"cout<<"tP +TP| n" cout<<"tT FQn"cout<<"tQ *FQ| n" cout<<"tF i | (E)n"string str;cout<<"输入表达式符号串(包含i+*()并以#结束):"cin>>str;cout<<"对输入串"<<str<<"进行预测分析过程为:"<<endl;LL1(str);:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1