正规文法转换成正规式(C++).doc

正规文法转换成正规式(C++).doc

ID:55710031

大小:16.50 KB

页数:7页

时间:2020-05-26

正规文法转换成正规式(C++).doc_第1页
正规文法转换成正规式(C++).doc_第2页
正规文法转换成正规式(C++).doc_第3页
正规文法转换成正规式(C++).doc_第4页
正规文法转换成正规式(C++).doc_第5页
资源描述:

《正规文法转换成正规式(C++).doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、#include#include#include#include#includeusingnamespacestd;multimapproduction;setunFinal;setfinal;charS;voidInput(){charch;stringstr;cout<<"非终结符(以0结尾):";while(cin>>ch&&ch!='0')unFinal.insert(ch);cout<<"终结符(以F结尾):";while(cin>>ch&&ch!=

2、'F')final.insert(ch);cout<<"开始符:";cin>>S;cout<<"产生式(以00结尾):"<>ch>>str&&ch!='0')production.insert(make_pair(ch,str));}stringsolve(charch){stringstr("(");stringre("");stringch_1[8];stringstr1[8],str2[8];intlen,i,j,flag=10,strlen,sslen,lslen,num=0;multimap::iteratoriter

3、=production.find(ch);intn=production.count(ch);for(i=0;isecond.size();str1[i].append(iter->second);str2[i]=str1[i];str2[i].replace(1,1,"

4、");ch_1[i]=iter->second.substr(len-1);}for(i=0;i="A"&&ch_1[i]<="Z"){for(j=i+1;j

5、r.push_back('(');str.append(str2[i].substr(0));str.append(str2[j].substr(0));for(;j

6、');}else{str.append(str1[i].substr(0));if(n>=2)//相同左部产生式个

7、数大于等于2个时,才输出"

8、"str.push_back('

9、');}}sslen=str.size();for(i=0;i

10、

11、ch_1[i]>"Z")num++;if(num>=2)str.push_back('(');for(i=0;i

12、

13、ch_1[i]>"Z"){str.append(ch_1[i]);if(i!=n-1)str.push_back('

14、');}if(num>=2)str.push_back(')');lslen=str.size();for(inti=0;i

15、;i++){if(unFinal.find(str[i])!=unFinal.end())//str[i]是非终结符if(str[i]!=ch){//是其他非终结符re=solve(str[i]);str.replace(i,1,re);i+=re.size()-1;//下标后移Notice!}else{//此非终结符就是chstr.replace(i,1,"*");str.replace(sslen-1,lslen-sslen+1,str.substr(sslen));}}str.push_back(')');returnstr;}intmain(){Input();cout<

16、dl<<"输出正规式:";stringstr=solve(S);cout<

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。