欢迎来到天天文库
浏览记录
ID:44671410
大小:286.41 KB
页数:8页
时间:2019-10-24
《递归下降分析设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实验题目:算术表达式递归下降分析程序设计实验内容:编程实现给定算术表达式的递归下降分析器。算术表达式文法如下:ETE+TITTTT*FIFFT(E)Ii实验设计:(1)首先,将文法改写为LL(1)文法LL(1)文法如下:ETTE1E1T+TE1I£TTFT1TlfFTlIeFT(E)li(2)其次,要用到的非终结符的FOLLOW集:FOLLOW(El)={},#},FOLLOW(Tl)={+,},#}(3)然后,为每一个非终结符,构造相应的递归过程,过程的名字表示规则左部的非终结符;过程体按规则右部符号串的顺序编写。(4)文法编程规则:①当遇到终结符aII寸,则编写语句if(
2、当前读来的输入符号二二a)读下一个输入符号②当遇到非终结符A时,则编写语句调用A()③当遇到»规则时,则编写语句if(当前读来的输入符号不屈于FOLLOW(A))error()④当某个非终结符的规则有多个候选式时,按LL(1)文法的条件能惟一地选择一个候选式进行推导源程序代码#includeusingnamespacestd;charsym;charj[128];inti=0;voidE();voidEl();voidT();voidT1();voidF();voidinput();〃输入表达式函数voidadvance();〃读取下一个字符函数voide
3、rror();〃出错处理函数voidmain(){for(intk=O;;k++){input();advance();E();if(sym==^#^)cout«"表达式属于该文法!"«endl;elsecout«H表达式不属于该文法!"«endl;i=0;}}voidE(){T();El();}voidE1(){if(sym=='+,)advance();T();El();elseif(sym!=)'&&sym!=*#'){error();exit(O);}voidT(){F();Tl();}voidTl(){if(sym==*){advance();F();Tl();}e
4、lseif(sym!=*4-'&&sym!=,)'&&sym!=*#'){error();exit(O);}}voidF(){if(sym=='('){advance();E();if(sym==,)*)advance();else{error();exit(O);}elseif(sym=='i*)advance();else{error();exit(O);}}voidinput(){cout«"请输入表达式:"vvendl;cin»j;}voidadvance(){sym=j[i];i卄;}voiderror(){coutvv”表达式不属于该文法!H«endl;}测试用例
5、:(1)当表达式符合文法产生式FTi时(2)当表达式符合文法产生式FT(E)时cT*C:VDocwientsandSettingsAdBinistrator^面递归下降分析法Debugj§
6、fi下降分.
7、请输入表达式:#裹达式属于该文法?请输入表达式:#I表达式不属于该文法?Pressanykeytocontinue,!□!x
8、(4)当表达式符合文法产生式i*(i)吋ci*C:DocuaentsandSettingsVAdaiiiistrator面递归下降分祈法Debug递归下降分.犢输入表达式:表执式属于该文法?请输入表达式:表达式不属于该
9、文法?Pressanykeytocontimie(3)当表达式符合文法产生式i+(i)时-
10、q
11、x
12、(1)当表达式符合文法产生式i+i时ca*C:DociuientsandSettingsAdainistrator桌面递归下降分析法Debug递归下降分析法.
13、请输入表达式:i*i#表达式属于该文法?情输入表达式:i+i+itt表达式属于该文法?情输入美达无展达式不属于该文法?Pressanykeytocontinue(5)当表达式符合文法产生式i*i时ca*C:DocuBentsandSettingsVAdainistratorV桌面'谨归下降分析法Ddbu讥
14、谨归下降分析.犢输入表达式:i*i#表送或属于该文法?情输入美在丸:袅达式属于该文法?情输入美送丸展达式不属于该文法?[Pressanykeytocontinue(6)当表达式符合文法产生式i+i*i时c:Docu*entsandSettingsAdainistrator桌面'谨归下降分析法Debugj§^fi下降分析•・X
15、请输入表达式:i+i*itt表达式属于该文法?请输入表达式:i+i+i*i#表达式属于该文法?请输入表达式:i*i+i*i*i*i*i#表达式属于该文法?请输入表达式:
此文档下载收益归作者所有