网站大量收购独家精品文档,联系QQ:2885784924

编译原理实验有穷自动机.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
编译原理实验有穷自动机

#includeiostream? #includestring? #includevector? using?namespace?std;? #define?max?100? struct?edge{? string?first;//边的初始结点 string?change;//边的条件 string?last;//边的终点 };? int?N;//NFA的边数 vectorint?value;?//求状态集合I的-闭包,用代替“空“ string?closure(string?a,edge?*b)? {?inti,j;? for(i=0;ia.length();i++)? {? for(j=0;jN;j++)? {? if(b[j].first[0]==a[i]b[j].change==)? {? a=a+b[j].last[0];? }? }? }? return?a;? }? //状态集合I的a弧转换? string?move(string?jihe,charch,edge?*b)? {? inti,j;? string?s=;? for(i=0;ijihe.length();i++)?? {? ?for(j=0;jN;j++) {? if(b[j].first[0]==jihe[i]b[j].change[0]==ch)? s=s+b[j].last;? }? }? return?s;? }? string?sort(string?t)? {? intk,i,j;? chartt;? for(i=0;it.length()-1;i++)? {? k=i;? for(j=i+1;jt.length();j++)? {? if(t[j]t[k])k=j;? }? tt=t[k];t[k]=t[i];t[i]=tt;? }? return?t; }? void?main()? {? inti,j,x=0,h,length,m,d=0;? string?Change;//输入符号 string?First,Last;//初态,终态, string?T[max],ss;? edge?*b=new?edge[max];? cout请输入各边信息:起点条件(空用表示)终点,以输入#结束。endl;? for(i=0;imax;i++)? {? cinb[i].first;? if(b[i].first==#)break;? else? ?cinb[i].changeb[i].last;? }? N=i;? cout请输入该NFA的初态及终态:endl;? cinFirstLast;? cout请输入此NFA状态中的输入符号即边上的条件:endl;? cinChange;? T[x]=closure(First,b);? T[x]=sort(T[x]);? value.push_back(0);? i=0;? while(value[i]==0value.size())? {? value[i]=1;? for(j=0;jChange.length();j++)? {? ss=;? ss=move(T[i],Change[j],b);? length=value.size();? ? for(h=0;hlength;h++)? {? ?if(T[h]==sort(closure(ss,b)))break;? }? if(h==length)? {? T[++x]=sort(closure(ss,b));? value.push_back(0);? ?} }? i++;? }? edge?*DFA=new?edge[max];? for(i=0;i=x;i++)//构造DFA的各边 {? for(j=0;jChange.length();j++)? {? DFA[d].first=T[i];? DFA[d].change=Change[j];? ss=;? ss=sort(closure(move(T[i],Change[j],b),b));? for(m=0;m=x;m++)? if(ss==T[m])DFA[d++].last=T[m];? }? }? cout此NFA构造的DFA的各边信息如下:endl起点条件终点endl;? for(i=0;id;i++)? { for(m=0;m=x;m++)? {? if(DFA[i].first==T[m])coutm?DF A[i].change;? } for(m=0;m=x;m++)? if(DFA[i].last==T[m])cout?mendl;;? }? cout该DFA的初态为:;? for(m=0

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档