欢迎来到天天文库
浏览记录
ID:44668398
大小:235.45 KB
页数:16页
时间:2019-10-24
《语法分析源代码》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、#include#ineludeusingnamespacestd;//**************************************************************************************************classGrammar{public:Grammar();Grammar(constGrammar&);//复制构造函数Grammar&operator=(constGrammar&);//赋值函数friendostream&operatorvv
2、(ostream&output,constGrammar&rs)〃输出文法{output«"结终符:"«rs.zhong«endl;output«"非结终符:"«rs.fei«endl;output«"文法内容(共"«rs.number«"条):"vvendl;inti=0;while(i3、l;outputvv啡终结符ttFIRST集合ttFOLLOW集合"«endl;for(unsignedintj=O;j4、=O;j5、input,Grammar&rs)//输入文法{unsignedintj=0;cout«"请输入文法:"«endl;cout«,'(请按文法次序输入,使用推导符“・>蔦每一句一行撮后一行请以#开头,£'使用s'表示!每一行一条文法句。)"«endl;while(l){unsignedinti=0;input»rs.end;rs.content[j++]=rs.end;if(rs.end[O]=='#')break;rs.fei.append(l,rs.end[0]);while(i6、7、'8、9、rs.end[i]==,A,);elseif(i==l11i==2)i++;elseif(rs.end[i]!=rs.end[0])rs.zhong.append(l,rs.end[i]);i++;}}rs.number=j-l;//记录文法长度rs.Checkstr(rs.fei);rs.Checkstr(rs.zhong);for(intm=O;m10、rs.FirstAndFollow();rs.CreateTable();returninput;}intFindid(char);//在文法中查找某个非终结符intCheck();//检查文法的正确性stringCheckstr(string&);//去除字符串中重复字符stringDelchar(char,string&);//去除字符中某个字符intFindchar(char,string&);//查找字符中是否存在某个字符:可用string::find(...)intStrNum(conststring&);//计算字符串有多少个产生式c11、harRandChar();〃随机产生一个大写字母,为非终结符stringGetSubfint,conststring&,char);/
3、l;outputvv啡终结符ttFIRST集合ttFOLLOW集合"«endl;for(unsignedintj=O;j4、=O;j5、input,Grammar&rs)//输入文法{unsignedintj=0;cout«"请输入文法:"«endl;cout«,'(请按文法次序输入,使用推导符“・>蔦每一句一行撮后一行请以#开头,£'使用s'表示!每一行一条文法句。)"«endl;while(l){unsignedinti=0;input»rs.end;rs.content[j++]=rs.end;if(rs.end[O]=='#')break;rs.fei.append(l,rs.end[0]);while(i6、7、'8、9、rs.end[i]==,A,);elseif(i==l11i==2)i++;elseif(rs.end[i]!=rs.end[0])rs.zhong.append(l,rs.end[i]);i++;}}rs.number=j-l;//记录文法长度rs.Checkstr(rs.fei);rs.Checkstr(rs.zhong);for(intm=O;m10、rs.FirstAndFollow();rs.CreateTable();returninput;}intFindid(char);//在文法中查找某个非终结符intCheck();//检查文法的正确性stringCheckstr(string&);//去除字符串中重复字符stringDelchar(char,string&);//去除字符中某个字符intFindchar(char,string&);//查找字符中是否存在某个字符:可用string::find(...)intStrNum(conststring&);//计算字符串有多少个产生式c11、harRandChar();〃随机产生一个大写字母,为非终结符stringGetSubfint,conststring&,char);/
4、=O;j5、input,Grammar&rs)//输入文法{unsignedintj=0;cout«"请输入文法:"«endl;cout«,'(请按文法次序输入,使用推导符“・>蔦每一句一行撮后一行请以#开头,£'使用s'表示!每一行一条文法句。)"«endl;while(l){unsignedinti=0;input»rs.end;rs.content[j++]=rs.end;if(rs.end[O]=='#')break;rs.fei.append(l,rs.end[0]);while(i6、7、'8、9、rs.end[i]==,A,);elseif(i==l11i==2)i++;elseif(rs.end[i]!=rs.end[0])rs.zhong.append(l,rs.end[i]);i++;}}rs.number=j-l;//记录文法长度rs.Checkstr(rs.fei);rs.Checkstr(rs.zhong);for(intm=O;m10、rs.FirstAndFollow();rs.CreateTable();returninput;}intFindid(char);//在文法中查找某个非终结符intCheck();//检查文法的正确性stringCheckstr(string&);//去除字符串中重复字符stringDelchar(char,string&);//去除字符中某个字符intFindchar(char,string&);//查找字符中是否存在某个字符:可用string::find(...)intStrNum(conststring&);//计算字符串有多少个产生式c11、harRandChar();〃随机产生一个大写字母,为非终结符stringGetSubfint,conststring&,char);/
5、input,Grammar&rs)//输入文法{unsignedintj=0;cout«"请输入文法:"«endl;cout«,'(请按文法次序输入,使用推导符“・>蔦每一句一行撮后一行请以#开头,£'使用s'表示!每一行一条文法句。)"«endl;while(l){unsignedinti=0;input»rs.end;rs.content[j++]=rs.end;if(rs.end[O]=='#')break;rs.fei.append(l,rs.end[0]);while(i6、7、'8、9、rs.end[i]==,A,);elseif(i==l11i==2)i++;elseif(rs.end[i]!=rs.end[0])rs.zhong.append(l,rs.end[i]);i++;}}rs.number=j-l;//记录文法长度rs.Checkstr(rs.fei);rs.Checkstr(rs.zhong);for(intm=O;m10、rs.FirstAndFollow();rs.CreateTable();returninput;}intFindid(char);//在文法中查找某个非终结符intCheck();//检查文法的正确性stringCheckstr(string&);//去除字符串中重复字符stringDelchar(char,string&);//去除字符中某个字符intFindchar(char,string&);//查找字符中是否存在某个字符:可用string::find(...)intStrNum(conststring&);//计算字符串有多少个产生式c11、harRandChar();〃随机产生一个大写字母,为非终结符stringGetSubfint,conststring&,char);/
6、
7、'
8、
9、rs.end[i]==,A,);elseif(i==l11i==2)i++;elseif(rs.end[i]!=rs.end[0])rs.zhong.append(l,rs.end[i]);i++;}}rs.number=j-l;//记录文法长度rs.Checkstr(rs.fei);rs.Checkstr(rs.zhong);for(intm=O;m10、rs.FirstAndFollow();rs.CreateTable();returninput;}intFindid(char);//在文法中查找某个非终结符intCheck();//检查文法的正确性stringCheckstr(string&);//去除字符串中重复字符stringDelchar(char,string&);//去除字符中某个字符intFindchar(char,string&);//查找字符中是否存在某个字符:可用string::find(...)intStrNum(conststring&);//计算字符串有多少个产生式c11、harRandChar();〃随机产生一个大写字母,为非终结符stringGetSubfint,conststring&,char);/
10、rs.FirstAndFollow();rs.CreateTable();returninput;}intFindid(char);//在文法中查找某个非终结符intCheck();//检查文法的正确性stringCheckstr(string&);//去除字符串中重复字符stringDelchar(char,string&);//去除字符中某个字符intFindchar(char,string&);//查找字符中是否存在某个字符:可用string::find(...)intStrNum(conststring&);//计算字符串有多少个产生式c
11、harRandChar();〃随机产生一个大写字母,为非终结符stringGetSubfint,conststring&,char);/
此文档下载收益归作者所有