计算机13-3班实验报告_第1页
计算机13-3班实验报告_第2页
计算机13-3班实验报告_第3页
计算机13-3班实验报告_第4页
计算机13-3班实验报告_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、编译原理实验合肥工业大学计算机科学与技术:班级:计算机科学与技术 13-3 班学号:2013211682指导教师:完成日期:2015.6.18实验一词法分析设计一、实验功能:对输入的 txt 文件内的内容进行词法分析:由文件流输入 test.txt 中的内容,对文件中的各类字符进行词法分析打印出分析后的结果;二、程序结构描述:(源代码见附录)1.构造 K 表 ,关键字构造 S0 表,存放分界符构造 S1 表,存放算数运算符构造 S2 表, 存放关系符建 ci id 表,存放变量名和常数变量 line,row 保存行列将2.的字符串存入 instring,将要输出的放入 outtaken构造 i

2、s_k,is_s0,is_s1,is_s2 函数,返回类型为 bool 型,属于 K,S0,S1,S2 表。一个字符,判断该字符是否构造 word 函数,返回一个字符串,该字符串可能为变量名可能为关键字构造 is_num 函数,用于识别数字,识别的数字通过,传址的参数返回,函数返回 bool型3.主函数通过 fstream 库相关函数和类型打开和文件1111.txt,每一个字符判断字符类型,根据字符类型的不同,调用相关函数,将的词和相关属性存入 outtaken,准备后来输出。三、实验结果实验总结:词法分析的程序在三个实验中算最简单的,但由于时间。c+并不好,所以也耗费了比较多的1、首先要文件

3、的内容,由于fstream 库并不熟悉,所以花费了相当多的时间在这里,内容。最终确定了 get 和peek 函数用来2、在实现行数和列数打印时要考虑到 row+和 line+应该放在什么位置上才可以,如当读取一个n 时 line 要增加一,而 row 需要归 0 处理,在一;3、对每个字符都应对每个表进行判断,一旦出现某一字符串或字符后 row 需要加字符就标记为 ERROR 放入输出缓存4、编译原来是所学的几门比较难得科目之一,对于编译原理这门课,应该花费的时间来学习,才能正确理解其中的算法,。实验二 LL(1)分析法一、实验原理:1、写出 LL(1)分析法的:当一个文法满足 LL(1)条件

4、时,就可以为它构造一个不带回溯的自上而下的分析程序,这个分析程序是有一组递归过程组成的,每个过程对应文法的一个非终结符。实现 LL(1)分析的一种有效的方法分析表是一个 MA,a形式的矩是使用一张分析表和一个站进行联合控制。阵,着分析规则;栈 STACK 用于存放文法符号。从栈顶取符号,按照分析表给出的规则进行有步骤的分析。2.实验要求实现的文法:(1)E-TG(2)G-+TG|TG(3)G-(4)T-FS(5)S-*FS|/FS(6)S-(7)F-(E)(8)F-i二、程序结构:各个模块:定义部分:定义符号栈,输入串等数据。初始化:事先算出分析表存入 string 数组,以供后来分析使用。控

5、制部分:从键盘输入一个表达式符号串;利用 LL(1)分析算法进行表达式处理:根据 LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。程序各个部分的实现:1.2.用 init 函数进行初始化,将#和输入串放入栈主函数获取输入串,规定输入串以#结束,同时若发现输入串有信号。字符,则输出错误3.4.5.若输入串没有字符,开始对输入串进行分析。根据输入串栈顶和符号栈顶的元素,选择不同的操作。若需要分,则查找分析表,选择适当的位置进行分析。三、实验结果:测试方法:运行程序,输入需要分析的语句如下:四、实验总结:1、出现下列两种情况说明遇到了语法错误: (1)

6、栈顶的终结符与当前的输入符号不匹配。(2)非终结符 A 处于栈顶,输入符号为 a,但分析表 M 中MA,a为空。当程序发现输入串的错误时,既停止程序,输出错误标志。2、由于个人水平有限,本实验有人输入了分析表,而没有实现程序根据文法直接生成分析表,这是比较遗憾的,我会在以后的学习中更加完善自己的能力。3、本实验的各行的对其也比较麻烦,在验收时善的。4、编译原理的作业到这里已经比较难了,我在实验验收前只凭自己的能力做到这一步,第三个实验则参考了同学的代码。程序输出并没有对其,而是在验收后完实验三 LR(1)分析法一实验原理LR(1)分析法实验设计及算法(1)总控程序,也可以称为驱动程序。对所有的

7、 LR 分析器总控程序都是相同的。 (2)分析表或分析函数,不同的文法分析表将不同,同一个文法采用的 LR 分析器不同时,分析表将不同,分析表又可以分为动作表(ACTION)和状态转换(GOTO)表两个部分,它们都可用二维数组表示。(3)分析栈,包括文法符号栈和相应的状态栈,它们均是先进后出栈。分析器的动作就是由栈顶状态和当前输入符号所决定。二、程序结构其中:SP 为栈指针,Si为状态栈,Xi为文法符号栈。状态转换表用 GOTOi, X=j 表示,规定当栈顶状态为 i,遇到当前文法符号为 X 时应转向状态 j,X 为终结符或非终结符。ACTIONi,a规定了栈顶状态为 i 时遇到输入符号 a

8、应执行。动作有四种可能:(1)移进:actioni,a= Sj:状态 j 移入到状态栈,把 a 移入到文法符号栈,其中 i,j 表示状态号。归约:actioni,a=rk:当在栈顶形成句柄时,则归约为相应的非终结符 A,即文法中有 A- B 的产生式,若 B 的长度为 R(即|B|=R),则从状态栈和文法符号栈中自顶向下去掉 R 个符号,即栈指针 SP 减去 R,并把 A 移入文法符号栈内, j=GOTOi,A移进状态栈,其中 i 为修改指针后的栈顶状态。接受 acc:当归约到文法符号栈中只剩文法的开始符号 S 时,并且输入符号串已结束即当前输入符是#,则为分析成功。报错:当遇到状态栈顶为某一

9、状态下出现不该遇到的文法符号时,则报错,说明输入端不是该文法能接受的符号串。同样这个实验的分析表我没有用程序自动生成,而是人工根据分析表选择相关的操作。三、实验结果:程序测试:输入需要规约的字符串:四、实验总结相较于前两个实验,第三个实验的难度更大,因为 LR(1)文法比 LL(1)更复杂一些,同样因为我个人的水平较差,我参考了同学的代码,这个实验同样没能让程序自动生成分析表,而是根据所给出的分析表,用人工确定要执行的操作,编写相关的函数,根据输入串使用switch 来确定使用什么函数,以此来分析输入串。编译原理确实很难,但越难就应该越认真的去学才能理解编译器的原理,写出更高效,和更少错误的程

10、序。不可否认我对编译原理的学习还不够好,但是我将在以后的学习中循序渐进的学习编译原理,掌握一个计算机系学生应该掌握的知识。附录:实验一源代码:#include #include #include #include #include #include using namespatd;string k8=do,end,for,if,prf,scanf,then,while;/关键字表1char s06=,;,(,),;/分界符表 2pair p1(10H,+); pair p2(11H,-); pair p3(20H,*); pair p4(21H,/);pair s14=p1,p2,p3,p4;

11、/算术运算符表3pair ps1(00H,); pair ps2(01H,=); pair ps3(02H,=); pair ps4(03H,); pair ps5(04H,=);pair ps6(05H,);pair s26=ps1,ps2,ps3,ps4,ps5,ps6;/关系运算符表4vector ci;vector id;/常数表5/标识符表 6vector instring;/源程序的输入缓存struct out_taken string word=;num=0;string quality=; string type=;/用于输出条目row1=0,line1=0;is_error=

12、0;vector outtaken;/输出缓存instring_poer=0;row=1,line=1;/用于定位的行列bool is_s0(char c)for(i=0;i6;i+) if(c=s0i)return true;return false;bool is_s1(char c)for(i=0;i4;i+) if(c=s1i.second)return true;return false;bool is_s2(char c) string s=; s=s+c;for(i=0;i6;i+) if(s=s2i.second)return true;return false;bool is

13、_k(string s)for(i=0;i8;i+) if(s=ki)return true;return false;string word(vector instring)vector temp;/识别单词时的临时变量 string s=;while(!(is_s0(instringinstring_poer)|is_s1(instringinstring_po oer)&instringinstring_poer!=er)|is_s2(instringinstring_p&instringinstring_poer!=t&instringinstring_poer!=n)temp.pus

14、h_back(instringinstring_poer); instring_poer+;for(i=0;itemp.size();i+)s=s+tempi;return s;bool is_num(vector instring,string &s) vector temp;/识别单词时的临时变量isnum=0;while(!(is_s0(instringinstring_poer)|is_s1(instringinstring_poer)|is_s2(instringinstring_p oer)&instringinstring_poer!=&instringinstring_poer

15、!=t&instringinstring_poer!=n)if(instringinstring_poer=0&instringinstring_poer=9)temp.push_back(instringinstring_poinstring_poer+;er);elsetemp.push_back(instringinstring_po instring_poer+; isnum=1;for(i=0;itemp.size();i+) s=s+tempi;if(isnum=0) return true;return false;er);main() ifstream fin;fin.open

16、(G:file1111.txt); while(fin.peek()!=EOF)instring.push_back(fin.get();fin.close();while (instring_poer=a&instringinstring_po A&instringinstring_poer=Z)string s=word(instring); if(is_k(s)out_taken otn;otn.word=s;er=otn.num=1;otn.quality=s;oype=关键字;otn.line1=line; otn.row1=row; outtaken.push_back(otn);

17、line+;elseout_taken otn; otn.word=s; otn.num=6; otn.quality=s;oype=标识符;otn.line1=line; otn.row1=row; outtaken.push_back(otn); id.push_back(s);line+;else if (instringinstring_poer=0&instringinstring_po string c=;if(is_num(instring,c) out_taken otn; otn.word=c; otn.num=5;otn.quality=c;er=9)oype=常数;otn

18、.line1=line; otn.row1=row; outtaken.push_back(otn); ci.push_back(c);line+;else out_taken otn; otn.word=c; otn.num=5; otn.quality=c;otn.is_error=1;oype=ERROR;otn.line1=line;otn.row1=row;outtaken.push_back(otn);else if(is_s0(instringinstring_poer) out_taken otn; otn.word=otn.word+instringinstring_po o

19、tn.num=2;otn.quality=otn.word;er;oype=分界符;otn.line1=line; otn.row1=row; outtaken.push_back(otn); line+;instring_poer+;else if(is_s1(instringinstring_poer) string s=; s=s+instringinstring_poer;if(is_s1(instringinstring_poer+1) s=s+instringinstring_poer+1; out_taken otn;otn.word=s; otn.num=5; otn.qual

20、ity=s;otn.is_error=1;oype=ERROR;otn.line1=line; otn.row1=row; outtaken.push_back(otn); line+;instring_poer=instring_poelse out_taken otn; otn.word=s; otn.num=3; otn.quality=s;er+2;oype=算数运算符;otn.line1=line; otn.row1=row; outtaken.push_back(otn); line+;instring_poer+;else if(is_s2(instringinstring_po

21、er) string s2s=; s2s=s2s+instringinstring_poer;if(is_s2(instringinstring_poer+1) s2s=s2s+instringinstring_poer+1;if(s2s=|s2s=)out_taken otn; otn.word=s2s; otn.num=4; otn.quality=s2s;oype=关系运算符;otn.line1=line; otn.row1=row; outtaken.push_back(otn); line=line+2;instring_poer=instring_poer+2;elseout_ta

22、ken otn; otn.word=s2s; otn.num=4;otn.quality=s2s;oype=关系运算符;otn.line1=line; otn.row1=row; outtaken.push_back(otn); line+;instring_poer+;else if (instringinstring_po row+;line=1;instring_poer+;else if(instringinstring_po instring_poer+;elseer=n)er= |instringinstring_poer=t)string ss=; ss=ss+instringi

23、nstring_poout_taken otn;er;otn.word=ss; otn.num=4;otn.quality=ss;oype=ERROR;otn.is_error=1; otn.line1=line; otn.row1=row; outtaken.push_back(otn); instring_poer+;line+;cnt=0;coutsetw(10) 单词setw(17) 二元序列setw(12) 类型setw(13)(行,列)endl; while(cntouttaken.size()if(outtakencnt.is_error=1)coutsetw(10)outtak

24、encnt.wordsetw(17)ERRORsetw(12)ERROR(setw(5)outtakencnt.row1,setw(5)outtakencnt.line1)endl;elsecoutsetw(10)outtakencnt.word(setw(7)outtakencnt.num,setw(7)outta kencnt.quality)setw(12)outtakencnt.type(setw(5)outtakencnt.row1,setw(5)outtakencnt.line1)endl; cnt+;return 0;实验二源代码:#include #include #inclu

25、de #include #include using namespatd;string pr_list68=+,-,*,/,(, ) ,i,#,error,error,error,error,E-TG,error,E-TG,error,/ EG-+TG,G-TG,error,error,error,G-z,error,G-z,/Gerror,error,error,error,T-FS,error,T-FS,error,/TS-z,S-z,S-*FS,S-/FS,error,S-z,error,S-z,error,error,error,error,F-(E),error,F-i,error;

26、/F/S构造分析表vector input;/输入串 vector sign_stack;/符号站 vector in_stack;/输入串cnt; struct RSsteps=0;stringsign_s=,in_s=,s=,behave=;void init(vector input) sign_stack.push_back(#); sign_stack.push_back(E); RS rs;for(i=input.size()-1;i=0;i-) in_stack.push_back(inputi);cnt=0;cout步骤setw(8) 符号栈setw(14) 输入串setw(1

27、1) 所用产生式setw(12)动作endl;t;for(i=0;i=0;i-)rs.in_s=rs.in_s+in_stacki;rs.behave=初始化;coutrs.stepssetw(8) trs.sign_ssetw(8) trs.in_ssetw(16) ttrs.behaveendl;cnt+;main() char c;while(1)se=0;c= cin.get();if(c=#)input.push_back(c);break;if(c!=i)&(c!=+)&(c!=-)&(c!=*)&(c!=/)&(c!=()&(c!=) cout输入串存在错误!endl;se=-1

28、; break;input.push_back(c);if(se=0)init(input);char sign_c,in_c;while(in_stackin_stack.size()-1!=#|sign_stacksign_stack.size()-1!=#)in_c=in_stackin_stack.size()-1;sign_c=sign_stacksign_stack.size()-1;if(in_c=sign_c) char a=in_c; RS rs;vector :iterator its=sign_stack.end()-1; vector :iterator iti=in_

29、stack.end()-1; sign_stack.erase(its);in_stack.erase(iti);t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in_stacki;rs.behave=GETNEXT(; rs.behave=rs.behave+a; rs.behave=rs.behave+); coutrs.stepssetw(8)trs.in_ssetw(8) tttrs.behaveendl; cnt+;elseif(sign_c=E)trs.sign_ssetw(8)string s=,p;s=s+in_c;c=0,j=0;for(i=0;i8;i+

30、)if(pr_list1i!=error&s=pr_list0i)j=1;vector :iterator its=sign_stack.end()-1; sign_stack.erase(its);p=pr_list1i; while(pr_list1ipr_list1i.size()-j!=)if(pr_list1ipr_list1i.size()-j!=z) sign_stack.push_back(pr_list1ipr_list1i.size()-j); j+;elsec=-1; j+;if(c=0)RS rs;t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in

31、_stacki;rs.behave=POP,PUSH(;for(i=0;ij-1;i+)rs.behave=rs.behave+sign_stacksign_stack.size()-(i+1);rs.behave=rs.behave+); rs.s=p; coutrs.stepssetw(8)trs.sign_ssetw(8)trs.behaveendl;trs.in_ssetw(8)trs.ssetw(8)cnt+;elseRS rs;t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in_stacki;rs.behave=POP; rs.s=p;coutrs.steps

32、setw(8)trs.sign_ssetw(8)trs.behaveendl;trs.in_ssetw(8)trs.ssetw(8)cnt+;break;if(j=0)cout错误!该字符串不符合本文法!endl;break;else if(sign_c=G)string s=,p; s=s+in_c;c=0,j=0;for(i=0;i8;i+)if(pr_list2i!=error&s=pr_list0i) j=1;vector :iterator its=sign_stack.end()-1; sign_stack.erase(its);p=pr_list2i; while(pr_list

33、2ipr_list2i.size()-j!=)if(pr_list2ipr_list2i.size()-j!=z) sign_stack.push_back(pr_list2ipr_list2i.size()-j); j+;elsec=-1; j+;if(c=0)RS rs;t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in_stacki;rs.behave=POP,PUSH(;for(i=0;ij-1;i+)rs.behave=rs.behave+sign_stacksign_stack.size()-(i+1);rs.behave=rs.behave+); rs.s=

34、p;coutrs.stepssetw(8)trs.sign_ssetw(8)trs.behaveendl;trs.in_ssetw(8)trs.ssetw(8)cnt+;elseRS rs;t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in_stacki;rs.behave=POP; rs.s=p;coutrs.stepssetw(8)trs.sign_ssetw(8)trs.behaveendl;trs.in_ssetw(8)trs.ssetw(8)cnt+;break;if(j=0)cout错误!该字符串不符合本文法!endl;break;else if (sign_

35、c=T)string s=,p;c=0,j=0; s=s+in_c;for(i=0;i8;i+)if(pr_list3i!=error&s=pr_list0i) j=1;vector :iterator its=sign_stack.end()-1; sign_stack.erase(its);p=pr_list3i; while(pr_list3ipr_list3i.size()-j!=)if(pr_list3ipr_list3i.size()-j!=z) sign_stack.push_back(pr_list3ipr_list3i.size()-j); j+;elsec=-1;j+;if

36、(c=0)RS rs;t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in_stacki;rs.behave=POP,PUSH(;for(i=0;ij-1;i+)rs.behave=rs.behave+sign_stacksign_stack.size()-(i+1);rs.behave=rs.behave+); rs.s=p; coutrs.stepssetw(8)trs.sign_ssetw(8)trs.behaveendl;trs.in_ssetw(8)trs.ssetw(8)cnt+;elseRS rs;t;for(i=0;i=0;i-) rs.in_s=rs.in

37、_s+in_stacki;rs.behave=POP; rs.s=p;coutrs.stepssetw(8)trs.sign_ssetw(8)trs.behaveendl;trs.in_ssetw(8)trs.ssetw(8)cnt+;break;if(j=0)cout 错误!该字符串不符合本文法! endl;break;else if(sign_c=S)string s=,p;c=0,j=0; s=s+in_c;for(i=0;i8;i+)if(pr_list4i!=error&s=pr_list0i) j=1;vector :iterator its=sign_stack.end()-1;

38、 sign_stack.erase(its);p=pr_list4i; while(pr_list4ipr_list4i.size()-j!=)if(pr_list4i3=z) c=-1;j+;elsesign_stack.push_back(pr_list4ipr_list4i.size()-j);j+;if(c=0)RS rs;t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in_stacki;rs.behave=POP,PUSH(;for(i=0;ij-1;i+)rs.behave=rs.behave+sign_stacksign_stack.size()-(i+1)

39、;rs.behave=rs.behave+); rs.s=p; coutrs.stepssetw(8)trs.sign_ssetw(8)trs.behaveendl;trs.in_ssetw(8)trs.ssetw(8)cnt+;elseRS rs;t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in_stacki;rs.behave=POP; rs.s=p;coutrs.stepssetw(8)trs.sign_ssetw(8)trs.in_ssetw(8) trs.behaveendl;cnt+;break;trs.ssetw(8)if(j=0)cout错误!该字符串不

40、符合本文法!endl; break;else if (sign_c=F)string s=,p;c=0,j=0; s=s+in_c;for(i=0;i8;i+)if(pr_list5i!=error&s=pr_list0i) j=1;vector :iterator its=sign_stack.end()-1; sign_stack.erase(its);p=pr_list5i; while(pr_list5ipr_list5i.size()-j!=)if(pr_list5ipr_list5i.size()-j!=z) sign_stack.push_back(pr_list5ipr_lis

41、t5i.size()-j); j+;elsec=-1; j+;if(c=0)RS rs;t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in_stacki;rs.behave=POP,PUSH(;for(i=0;ij-1;i+)rs.behave=rs.behave+sign_stacksign_stack.size()-(i+1);rs.behave=rs.behave+); rs.s=p; coutrs.stepssetw(8)trs.sign_ssetw(8)trs.behaveendl;trs.in_ssetw(8)trs.ssetw(8)cnt+;elseRS r

42、s;t;for(i=0;i=0;i-) rs.in_s=rs.in_s+in_stacki;rs.behave=POP; rs.s=p;coutrs.stepssetw(8)trs.sign_ssetw(8)trs.behaveendl;trs.in_ssetw(8)trs.ssetw(8)cnt+;break;if(j=0)cout错误!该字符串不符合本文法!endl; break;return 0;实验三源代码:#include #includeusing namespatd;const const char ch;char Y;MaxLen = 20;Length = 20;string

43、 strToken;bool flag = true;po=0;step = 1;class stackpublic:stack()count = 0;stack()bool empty()const if(count = 0)return true; return false;bool full()constif(count = MaxLen) return true;return false;bool get_top(char &c)const/获取栈顶符号 if(empty()return false;elsec = dount-1;return true;bool push(const

44、 char c)/压栈 if(full()return false;dount+ = c;return true;bool pop()/出栈 if(empty()return false; count-;return true;void out()/输出栈中元素 for(i=0;icount;i+)coutdatai; coutt;void out_1()for(i=0;icount;i+) cout()datai;coutt;private:count;/栈长度char dataMaxLen;/栈中元素;stack S,X;/S:状态栈 X:符号栈void pr(i,string c)/输出

45、剩余的输入串 for(j=i;jc.size();j+)coutcj; coutt;void Goto(i,char c)if(i = 0)if(c = E)S.push(1);cout,GOTO(0,E)=1 入栈endl;else if(c = T)S.push(2);cout,GOTO(0,T)=2 入栈endl;else if(c = F)S.push(3);cout,GOTO(0,F)=3 入栈endl;elseflag = false;else if(i = 4)if(c = E)S.push(8);cout,GOTO(4,E)=8 入栈endl;else if(c = T)S.p

46、ush(2);cout,GOTO(4,T)=2 入栈endl;else if(c = F)S.push(3);cout,GOTO(4,F)=3 入栈endl;elseflag = false;else if(i = 6)if(c = T)S.push(9);cout,GOTO(6,T)入栈endl;else if(c = F)S.push(3);cout,GOTO(6,F)=3 入栈endl;elseflag = false;else if(i=7)if(c=F)S.push(10);cout,GOTO(7,F)=10 入栈endl;elseflag = false;void Action_0

47、()/状态为 0if(ch = i)coutstep+t; S.out_1();X.out();pr(po-1,strToken); coutACTION0,i=S5,状态 5 入栈endl; S.push(5);X.push(ch);ch = strTokenpo+;else if(ch = () coutstep+t; S.out_1();X.out();pr(po-1,strToken); coutACTION0,(=S4,状态 4 入栈endl; S.push(4);X.push(ch);ch = strTokenpo+;elseflag = false;void Action_1()

48、/状态为 1 if(ch = +)coutstep+t; S.out_1();X.out();pr(po-1,strToken); coutACTION0,+=S6,状态 6 入栈endl; S.push(6);X.push(ch);ch = strTokenpo+;else if(ch = #) flag = false;coutstep+t; S.out_1();X.out();pr(po-1,strToken); coutAcc:分析成功endl;elseflag = false;void Action_2()/状态为 2 if(ch = *)coutstep+t; S.out_1();

49、X.out();pr(po-1,strToken); coutACTION2,*=S7,状态 7 入栈endl; S.push(7);X.push(ch);ch = strTokenpo+;else if(ch = + | ch = ) | ch = #) coutstep+t;S.out_1();X.out();X.pop(); X.push(E);pr (po -1,strToken); coutT 规约; S.pop();S.get_top(Y); Goto( (Y),E);elseflag = false;void Action_3()/状态为 3if(ch = + | ch = *

50、| ch= ) | ch = #) coutstep+t;S.out_1();X.out();X.pop(); X.push(T);pr (po -1,strToken); coutF 规约; S.pop();S.get_top(Y); Goto( (Y),T);elseflag = false;void Action_4_6_7(if(ch = i)x)/状态为 4,6,7coutstep+t; S.out_1();X.out();pr(po-1,strToken); coutACTION;coutx,i=S5,状态 5 入栈endl; S.push(5);X.push(ch);ch = s

51、trTokenpo+;else if(ch = () coutstep+t; S.out_1();X.out();pr(po-1,strToken); coutACTION;coutx,(=S4,状态 4 入栈endl; S.push(4);X.push(ch);ch = strTokenpo+;elseflag = false;void Action_5()/状态为 5if( (ch = +) | (ch = *) | (ch = ) | (ch = #) coutstep+t;S.out_1();X.out();X.pop(); X.push(F);pr(po-1,strToken); couti 规约; S.pop();S.get_top(Y); Goto(Y),F);elseflag = false;void Action_8()/状态为 8 if(ch = +)coutstep+t; S.out_1();X.out();pr(po-1,strToken); coutACTION8,+=S6,状态 6 入栈endl; S.push(6);X.push(ch);ch = strTokenpo+;else if(ch = ) coutstep+t; S.out_1();X.out();pr(po-1,strToken

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论