欢迎来到天天文库
浏览记录
ID:20466561
大小:191.00 KB
页数:10页
时间:2018-10-12
《编译原理实验报告--递归子程序》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、姓名:尹莉学号:E31314022专业:13级网络工程语法分析器1一、实现方法描述所给文法为G[E];E->TEZEb+TE'
2、空T->FTZr-〉*FT'
3、空F->i
4、(E)递归子程序法:首先计算出五个非终结符的first集合follow集,然后根据五个产生式定义了五个函数。定义字符数组vocabulary来存储输入的句子,字符指针ch指向vocabulary。从非终结符E函数出发,如果首字符属于E的first集,则依次进入T函数和E'函数,开始递归调用。在每个函数中,都要判断指针所指字符是否属于该非终结符的first集,属于则根据产生式进入下一个函数进行调用
5、,若first集中存空字符,还要判断是否属于该非终结符的follow集。以分号作为结束符。二、实现代码头文件shiyan3.h#include#include#includeusingnamespacestd;#definenum100charvocabulary[num];char*ch;voidjudge_E();voidjudge一EE(>;voidjudge一T();voidjudge_TT();voidjudge_F();源文件#include"shiyan3.h"voidjudge_E(){if(*
6、ch==';'){cout<<"该句子符合此文法!"«endl;inta=0;cout«"按1结朿程序"《endl;cin»a;if(a==l)exit(O);}else
7、{(*^=='('
8、
9、*ch==T){judge_T();judge_EE();}else{cout<<"该句子不匹配此文法!"«endl;inta=0;voidjudge_EE(){if(*ch==';'){cout«"该句子符合此文法!H«endl;inta=0;cout<<"按1结朿程序"《endl;cin»a;if(a==l)exit(O);}if(*ch=='+,){ch++;jud
10、ge_T();judge_EE();}elseif(*ch==
11、#
12、
13、
14、*ch==')
15、)return;else{cout<<"该句子不匹配此文法!"«endl;inta=0;cout<<"按1结束程序"<16、17、*ch==T)judge_F();judge_TT();}else{cout18、<〈"该句子不匹配此文法!"«endl;inta=0;cout<<"按1结束程序"《endl;cin»a;if(a==l)exit(O);}}voidjudge_TT(){if(*ch==';'){cout<<"该句子符合此文法!H«endl;inta=0;cout«"按1结束程序"《endl;cin»a;if(a==l)exit(O);}if(*ch=='*'){ch++;judge_F();judge_TT();}elseif(*ch==T19、20、*ch=='+,21、22、*ch==,#1)return;else{cout<〈"该句子不匹配此文法!"«endl;int23、a=0;voidjudge_F(){if(*ch==*;'){cout<<"该句子符合此文法!"«endl;inta=0;cout<<"按1结束程序"《endl;cin»a;if(a==l)exit(O);}if(*ch==,(,){ch++;judge_E();if(*ch==T){ch++;}else{cout<<"该句子不匹配此文法!*'«endl;inta=0;cout<<"按1结束程序"<24、文法!"<25、*cout<<"话•输入一个句子:"«endl;cin.getline(vocabulary,15);ch=vocabulary;judge_E();cout«endl;GOUt<<"**************木***木*****Ml,再见!木氺本木本*木氺木*氺本本木26、氺木木本氺木本本木氺本氺
16、
17、*ch==T)judge_F();judge_TT();}else{cout
18、<〈"该句子不匹配此文法!"«endl;inta=0;cout<<"按1结束程序"《endl;cin»a;if(a==l)exit(O);}}voidjudge_TT(){if(*ch==';'){cout<<"该句子符合此文法!H«endl;inta=0;cout«"按1结束程序"《endl;cin»a;if(a==l)exit(O);}if(*ch=='*'){ch++;judge_F();judge_TT();}elseif(*ch==T
19、
20、*ch=='+,
21、
22、*ch==,#1)return;else{cout<〈"该句子不匹配此文法!"«endl;int
23、a=0;voidjudge_F(){if(*ch==*;'){cout<<"该句子符合此文法!"«endl;inta=0;cout<<"按1结束程序"《endl;cin»a;if(a==l)exit(O);}if(*ch==,(,){ch++;judge_E();if(*ch==T){ch++;}else{cout<<"该句子不匹配此文法!*'«endl;inta=0;cout<<"按1结束程序"<24、文法!"<25、*cout<<"话•输入一个句子:"«endl;cin.getline(vocabulary,15);ch=vocabulary;judge_E();cout«endl;GOUt<<"**************木***木*****Ml,再见!木氺本木本*木氺木*氺本本木26、氺木木本氺木本本木氺本氺
24、文法!"<25、*cout<<"话•输入一个句子:"«endl;cin.getline(vocabulary,15);ch=vocabulary;judge_E();cout«endl;GOUt<<"**************木***木*****Ml,再见!木氺本木本*木氺木*氺本本木26、氺木木本氺木本本木氺本氺
25、*cout<<"话•输入一个句子:"«endl;cin.getline(vocabulary,15);ch=vocabulary;judge_E();cout«endl;GOUt<<"**************木***木*****Ml,再见!木氺本木本*木氺木*氺本本木
26、氺木木本氺木本本木氺本氺
此文档下载收益归作者所有