您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 农林大学-编译原理课程设计
福建农林大学计算机与信息学院计算机类课程设计结果评定评语:成绩:指导教师签字:任务下达日期:评定日期:目录1正则表达式·································································································11.1正则表达式························································································11.2确定化(化简)后的状态转换图································································11.3分析程序代码·····················································································11.4程序运行截图·····················································································11.5小结···································································································22LL(1)分析···········································································错误!未定义书签。2.1LL(1)文法·························································································32.2LL(1)预测分析表················································································32.3分析程序代码·····················································································42.4程序运行截图·····················································································62.5小结·································································································73算符优先分析······························································································73.1算符优先文法·····················································································83.2算符优先关系表··················································································83.3分析程序代码·····················································································83.4程序运行截图····················································································173.5小结································································································184LR分析·····································································································194.1LR文法····························································································194.2LR分析表·························································································194.3分析程序代码····················································································194.4程序运行截图····················································································224.5小结································································································22参考文献:·····································································································2211正则表达式1.1正则表达式(a|b)*(aa|bb)(a|b)*(注:该正规式为示例,可更改)1.2确定化(化简)后的状态转换图1.3分析程序代码#includestdio.hints[7][2]={{1,2},{3,2},{1,4},{3,5},{6,4},{6,4},{3,5}};//状态转换图voidmain(){printf(★★★★★★有限自动机★★★★★★\n);printf(文法规则:\n);printf((a|b)*(aa|bb)*(a|b)*\n\n);printf(----------------------------------------------------------\n);printf(请输入字符串:\n);charch;inti,j,t,flag;i=0;t=1;//判断输入是否正确flag=0;//判断句子是否正确while((ch=getchar())!='\n'){if(ch=='a')j=0;if(ch=='b')j=1;if(ch!='a'&&ch!='b'){t=0;//输入有误break;}i=s[i][j];}flag=i;if(flag=3&&t)//flag2时可终结printf(\n输入字符串正确!\n\n);elseprintf(\n输入字符串错误!\n\n);}1.4程序运行截图1、输入正确的字符串:abCBADababab22、输入错误的字符串:1.5小结在这次课程设计,对正则文法和状态转换图和有限自动机的理论有了更深的了解,将理论应用于实际应用中。32、LL(1)分析2.1LL(1)文法E→TE'(注:该文法为示例,可更改)E'→+TE'|εT→FT'T'→*FT'|εF→(E)|i2.2LL(1)预测分析表i+*()#EE→TE'E→TE'E'E'→+TE'E'→εE'→εTT→FT'T→FT'T'T'→εT'→*FT'T'→εT'→εFF→iF→(E)2.3分析程序代码#includeiostream#includecstdio#includecstdlib#includecstring#includestackusingnamespacestd;//存储分析预测表每个位置对应的终结符,非终结符,产生式structNode1{charvn;charvt;chars[10];}MAP[20];intk;//用R代表E',W代表T',e代表空charG[10][10]={E-TR,R-+TR,R-e,T-FW,W-*FW,W-e,F-(E),F-i};//存储文法中的产生式charVN[6]={'E','R','T','W','F'};//存储非终结符charVT[6]={'i','+','*','(',')','#'};//存储终结符charSELECT[10][10]={(,i,+,),#,(,i,*,+,),#,(,i};//存储文法中每个产生式对应的SELECT集charRight[10][8]={-TR,-+TR,-e,-FW,-*FW,-e,-(E),-i};stackcharstak,stak1,stak2;4boolcompare(char*a,char*b)//比较字符{inti,la=strlen(a),j,lb=strlen(b);for(i=0;ila;i++)for(j=0;jlb;j++){if(a[i]==b[j])return1;}return0;}char*Find(charvn,charvt){inti;for(i=0;ik;i++){if(MAP[i].vn==vn&&MAP[i].vt==vt)returnMAP[i].s;}returnerror;}char*Analyse(char*word){charp,action[10],output[10];inti=1,j,l=strlen(word),k=0,l_act,m;while(!stak.empty())stak.pop();stak.push('#');stak.push('E');printf(________________________________________________________________________________\n);printf(\n对符号串%s的分析过程\n,word);printf(步骤栈顶元素剩余输入串推到所用产生式或匹配\n);p=stak.top();while(p!='#'){printf(%7d,i++);p=stak.top();stak.pop();printf(%6c,p);for(j=k,m=0;jl;j++)output[m++]=word[j];//推导出相同字符,出栈output[m]='\0';printf(%10s,output);if(p==word[k])//在输入的字符串在首尾加#是用于判断否结束{if(p=='#'){printf(接受\n);return成功;}printf(%c匹配\n,p);k++;}else{strcpy(action,Find(p,word[k]));if(strcmp(action,error)==0){printf(没有可用的产生式\n);returnERROR;}printf(%c%s\n,p,action);intl_act=strlen(action);if(action[l_act-1]=='e')5continue;for(j=l_act-1;j1;j--)stak.push(action[j]);}}if(strcmp(output,#)!=0)return错误;}intmain(){charsource[100];inti,j,flag,l,m;printf(LL(1)文法\n);printf(\n★★★★★★为了区分E'和后面的”,用R
本文标题:农林大学-编译原理课程设计
链接地址:https://www.777doc.com/doc-3547929 .html