版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验名称:实验任务:对下述描述算符表达式的算符优先文法G[E],给出算符优先分析的实验结果。实验内容:有上下无关文法如下:E->E+T|E-T|TT->T*F|T/F|FF->(E)|i说明:优先关系矩阵的构造过程:(1)=关系由产生式F->(E)知‘(’=‘)’FIRSTVT集及LASTVT集FIRSTVT(E)={+,-,*,/,(,i}FIRSTVT(F)={(,i}FIRSTVT(T)={*,/,(,i}LASTVT(E)={+,-,*,/,),i}LASTVT(F)={),i}LASTVT(T)={*,/,),i}(2)<关系+T则有:+<FIRSTVT(T)-T则有:-<FIRSTVT(T)*F则有:*<FIRSTVT(F)/F则有:/<FIRSTVT(F)(E则有:(<FIRSTVT(E)(3)>关系E+则有:LASTVT(E)>+E-则有:LASTVT(E)>-T*则有:LASTVT(T)>*T/则有:LASTVT(T)>/E)则有:LASTVT(E)>)(4)请大家画出优先关系矩阵终结符之间的优先关系是唯一的,所以该文法是算符优先文法。程序的功能描述:程序由文件读入字符串(以#结束),然后进行算符优先分析,分析过程中如有错误,则终止程序并报告错误位置,最终向屏幕输出移近——规约过程。 last[i][0]=0; } for(i=0;i<r;i++)//判断文法是否合法 { for(j=0;st[i][j]!='\0';j++) { if(st[i][0]<'A'||st[i][0]>'Z') { printf("不是算符文法!\n"); exit(-1); } if(st[i][j]>='A'&&st[i][j]<='Z') { if(st[i][j+1]>='A'&&st[i][j+1]<='Z') { printf("不是算符文法!\n"); exit(-1); } } } }for(i=0;i<r;i++) { for(j=0;st[i][j]!='\0';j++) { if((st[i][j]<'A'||st[i][j]>'Z')&&st[i][j]!='-'&&st[i][j]!='>'&&st[i][j]!='|') lable[k++]=st[i][j]; } } lable[k]='#'; lable[k+1]='\0'; table(); printf("每个非终结符的FIRSTVT集为:\n");//输出每个非终结符的FIRSTVT集 for(i=0;i<r;i++) { printf("%c:",st[i][0]); for(j=0;j<first[i][0];j++) { printf("%c",first[i][j+1]); } printf("\n"); } printf("每个非终结符的LASTVT集为:\n");//输出每个非终结符的LASTVT集 for(i=0;i<r;i++) { printf("%c:",st[i][0]); for(j=0;j<last[i][0];j++) { printf("%c",last[i][j+1]); } printf("\n"); } printf("算符优先分析表如下:\n"); for(i=0;lable[i]!='\0';i++) printf("\t%c",lable[i]); printf("\n"); for(i=0;i<k+1;i++) { printf("%c\t",lable[i]); for(j=0;j<k+1;j++) { printf("%c\t",data[i][j]); } printf("\n"); } printf("请输入文法输入符号串以#结束:"); scanf("%s",input); deal();}voidtable(){ chartext[20][10]; inti,j,k,t,l,x=0,y=0; intm,n; x=0; for(i=0;i<r;i++) { firstvt(st[i][0]); lastvt(st[i][0]); } for(i=0;i<r;i++) { text[x][y]=st[i][0]; y++; for(j=1;st[i][j]!='\0';j++) { if(st[i][j]=='|') { text[x][y]='\0'; x++; y=0; text[x][y]=st[i][0]; y++; text[x][y++]='-'; text[x][y++]='>'; } else { text[x][y]=st[i][j]; y++; } } text[x][y]='\0'; x++; y=0; } r1=x; printf("转化后的文法为:\n"); for(i=0;i<x;i++)//输出转化后的文法规则串 { printf("%s\n",text[i]); } for(i=0;i<x;i++)/*求每个终结符的推导结果(去掉"->"后的转化文法,用于最后的规约)*/ { string[i][0]=text[i][0]; for(j=3,l=1;text[i][j]!='\0';j++,l++) string[i][l]=text[i][j]; string[i][l]='\0'; } for(i=0;i<x;i++) { for(j=1;text[i][j+1]!='\0';j++) { if(zhongjie(text[i][j])&&zhongjie(text[i][j+1])) { m=xiabiao(text[i][j]); n=xiabiao(text[i][j+1]); data[m][n]='='; } if(text[i][j+2]!='\0'&&zhongjie(text[i][j])&&zhongjie(text[i][j+2])&&!zhongjie(text[i][j+1])) { m=xiabiao(text[i][j]); n=xiabiao(text[i][j+2]); data[m][n]='='; } if(zhongjie(text[i][j])&&!zhongjie(text[i][j+1])) { for(k=0;k<r;k++) { if(st[k][0]==text[i][j+1]) break; } m=xiabiao(text[i][j]); for(t=0;t<first[k][0];t++) { n=xiabiao(first[k][t+1]); data[m][n]='<'; } } if(!zhongjie(text[i][j])&&zhongjie(text[i][j+1])) { for(k=0;k<r;k++) { if(st[k][0]==text[i][j]) break; } n=xiabiao(text[i][j+1]); for(t=0;t<last[k][0];t++) { m=xiabiao(last[k][t+1]); data[m][n]='>'; } } } } m=xiabiao('#'); for(t=0;t<first[0][0];t++) { n=xiabiao(first[0][t+1]); data[m][n]='<'; } n=xiabiao('#'); for(t=0;t<last[0][0];t++) { m=xiabiao(last[0][t+1]); data[m][n]='>'; } data[n][n]='=';}voidfirstvt(charc)//求FIRSTVT集{ inti,j,k,m,n; for(i=0;i<r;i++) { if(st[i][0]==c) break; } if(fflag[i]==0) { n=first[i][0]+1; m=0; do { if(m==2||st[i][m]=='|') { if(zhongjie(st[i][m+1])) { first[i][n]=st[i][m+1]; n++; } else { if(zhongjie(st[i][m+2])) { first[i][n]=st[i][m+2]; n++; } if(st[i][m+1]!=c) { firstvt(st[i][m+1]); for(j=0;j<r;j++) { if(st[j][0]==st[i][m+1]) break; } for(k=0;k<first[j][0];k++) { intt; for(t=0;t<n;t++) { if(first[i][t]==first[j][k+1]) break; } if(t==n) { first[i][n]=first[j][k+1]; n++; } } } } } m++; }while(st[i][m]!='\0'); first[i][n]='\0'; first[i][0]=--n; fflag[i]=1; }}voidlastvt(charc)//求LASTVT集{ inti,j,k,m,n; for(i=0;i<r;i++) { if(st[i][0]==c) break; } if(lflag[i]==0) { n=last[i][0]+1; m=0; do { if(st[i][m+1]=='\0'||st[i][m+1]=='|') { if(zhongjie(st[i][m])) { last[i][n]=st[i][m]; n++; } else { if(zhongjie(st[i][m-1])) { last[i][n]=st[i][m-1]; n++; } if(st[i][m]!=c) { lastvt(st[i][m]); for(j=0;j<r;j++) { if(st[j][0]==st[i][m]) break; } for(k=0;k<last[j][0];k++) { intt; for(t=0;t<n;t++) { if(last[i][t]==last[j][k+1]) break; } if(t==n) { last[i][n]=last[j][k+1]; n++; } } } } } m++; }while(st[i][m]!='\0'); last[i][n]='\0'; last[i][0]=--n; lflag[i]=1; }}intdeal(){ inti,j; intx,y; intz;//输入串的长度 k=1; s[k]='#';//栈置初值 for(i=0;input[i]!='\0';i++);//计算输入串的长度 z=i--; i=0; while((a=input[i])!='\0') { if(zhongjie(s[k])) j=k; else j=k-1; x=xiabiao(s[j]); y=xiabiao(a); if(data[x][y]=='>') { out(1,k,s); printf("%c",a); out(i+1,z,input); printf("规约\n"); do { q=s[j]; if(zhongjie(s[j-1])) j=j-1; elsej=j-2; x=xiabiao(s[j]); y=xiabiao(q); }while(data[x][y]!='<'); intm,n,N; for(m=j+1;m<=k;m++) { for(N=0;N<r1;N++) for(n=1;string[N][n]!='\0';n++) { if(!zhongjie(s[m])&&!zhongjie(string[N][n])){if(zhongjie(s[m+1])&&zhongjie(string[N][n+1])&&s[m+1]==string[N][n+1]) { s[j+1]=string[N][0]; break; } } else if(zhongjie(s[m])) if(s[m]==string[N][n]) { s[j+1]=string[N][0]; break; } } }k=j+1; if(k==2&&a=='#') { out(1,k,s); printf("%c",a); out(i+1,z,input); printf("结束\n"); printf("输入串符合文法的定义!\n"); return1;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年乡村旅游厕所废弃物处理与环境保护报告
- 莆田辅警面试题目及答案
- 智能农业设备2025年十年技术:精准种植报告
- 2025年社区助浴服务发展现状报告
- 书屋借阅制度
- 学生安全教育课件
- 内江市公安局高新技术开发区分局2025年第三次招聘警务辅助人员备考题库及答案详解1套
- 久治县公安局2026年面向社会公开招聘警务辅助人员备考题库完整参考答案详解
- 2026年温州市瓯海区司法局招聘编外人员的备考题库及完整答案详解一套
- 2026年招商局检测认证(重庆)有限公司招聘备考题库及1套参考答案详解
- 云南师大附中2026届高三1月高考适应性月考卷英语(六)含答案
- 2026湖北随州农商银行科技研发中心第二批人员招聘9人笔试备考试题及答案解析
- 骑行美食活动方案策划(3篇)
- 2026年上海市松江区初三语文一模试卷(暂无答案)
- 酒精体积分数质量分数密度对照表优质资料
- 落地式钢管脚手架工程搭拆施工方案
- 办公室节能减排措施
- 数字信号处理课程实验教学大纲
- 2023年黑龙江省哈尔滨市中考化学试卷及解析
- 深基坑施工专项方案
- 禾川x3系列伺服说明书
评论
0/150
提交评论