您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > 有穷自动机与正规文法转换编译原理源代码
#includeiostreamusingnamespacestd;intmain(){intn,m;//n为自动机状态的总数目//m为自动机终结符的数目intn_midd_stat,n_final_stat;//n_midd_stat为中间状态的数目//n_final_stat为终态的数目cout请输入自动机共有的状态数目:;cinn;char*stat=newchar[n];cout请输入开始状态:;cinstat[0];cout请输入中间状态的个数:;cinn_midd_stat;cout请输入分别中间状态:endl;for(inti1=0;i1n_midd_stat;i1++){cinstat[i1+1];}n_final_stat=n-n_midd_stat-1;cout最后分别输入终态:endl;for(inti2=0;i2n_final_stat;i2++){cinstat[n_midd_stat+1+i2];}cout请输入终结符的数目:;cinm;char*terminal=newchar[m];cout请分别输入终结符:endl;for(inti3=0;i3m;i3++){cinterminal[i3];}coutendl;//构造自动机inti,j,k;char**f=newchar*[n];for(k=0;kn;k++){f[k]=newchar[n];}cout构造自动机:endl;for(i=0;in;i++){for(j=0;jn;j++){cout状态stat[i]能否直接推出状态stat[j];if((i==0)&&(j==0)){cout?(若能则输入相应的终结符,否则输入\0\);}else{cout?;}cinf[i][j];}}coutendl;//转换成对应的文法cout由此自动机转换成的对应的文法为:endl;coutG=({;//stat[0];for(inti4=0;i4n;i4++){if(i4!=0){cout,;}coutstat[i4];}cout},;cout{;for(inti5=0;i5m;i5++){if(i5!=0){cout,;}coutterminal[i5];}cout},;coutP,;coutstat[0]),;cout其中P为:endl;for(i=0;in;i++){for(j=0;jn;j++){if(f[i][j]!='0'){coutstat[i]-f[i][j]stat[j]endl;}}}//输出可接受状态增加的产生式,例如A-εfor(inti6=0;i6n_final_stat;i6++){coutstat[n_midd_stat+1+i6]-εendl;}return0;}
本文标题:有穷自动机与正规文法转换编译原理源代码
链接地址:https://www.777doc.com/doc-5629657 .html