版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
**哈尔滨理工大学软件与微电子学院实验报告(2017-2018第二学期)**课程名称: 编译原理班级:软件16-1班学号:1614010102姓 名: 曹妍实验名称 实验一、算符优先分析表的构造程序 专 业 软件工程感谢阅读161401010姓 名 曹妍 学 号 班 级 软件16-1班2一、实验目的:通过设计编制调试构造FIRSTVT集、LASTVT集和构造算符优先表,了解构造算符优先分精品文档放心下载析表的步骤,对文法的要求,生成算符优先关系表的算法。精品文档放心下载二、实验内容:1.编写算符优先分析表的构造程序,求出给定的算符优先文法中的非终结符的FirstVT集合精品文档放心下载和LastVT集合。2.构造算符优先表。三、实验设备及软件环境:**PC机,主机操作系统为windows;C编译器等软件谢谢阅读四、实验过程及结果:在存放文法的文件in.txt内输入待判断文法产生式(文件已输入教材116页文法),格式精品文档放心下载E->a|S,注意左部和右部之间是“->”,每个产生式一行,ENTER键换行。文法结束再输入感谢阅读一行G->#E#。1.先做文法判断,即可判断文法情况。2.若是算符优先文法,则在优先表栏显示优先表。实验样例:图中给出了终结符号表,非终结符号表,计算FirstVT和LastVT集合,并给出感谢阅读了算符优先关系矩阵。代码和实验结果分析:#include<stdio.h>#include<stdlib.h>#include<iostream>chardata[20][20]; //算符优先关系感谢阅读chars[100]; //模拟符号栈scharlable[20]; //文法终极符集charinput[100]; //文法输入符号串谢谢阅读charstring[20][10]; //用于输入串的分析谢谢阅读intk;chara;intj;**charq;intr; //文法规则个数intr1; //转化后文法规则个数charst[10][30]; //用来存储文法规则谢谢阅读charfirst[10][10]; //文法非终结符FIRSTVT集精品文档放心下载charlast[10][10]; //文法非终结符LASTVT集谢谢阅读intfflag[10]={0}; //标志第i个非终结符的FIRSTVT集是否谢谢阅读已求出intlflag[10]={0}; //标志第i个非终结符的LASTVT集是否感谢阅读已求出intdeal(); //对输入串的分析intzhongjie(charc); //判断字符c是否是终极符精品文档放心下载intxiabiao(charc); //求字符c在算符优先关系表中的下标感谢阅读voidout(intj,intk,char*s); //打印s栈感谢阅读voidfirstvt(charc); //求非终结符c的FIRSTVT集谢谢阅读voidlastvt(charc); //求非终结符c的LASTVT集感谢阅读voidtable(); //创建文法优先关系表intmain(){inti,j,k=0;printf("请输入文法规则数:");scanf("%d",&r);**printf("请输入文法规则:\n");for(i=0;i<r;i++){scanf("%s",st[i]); //存储文法规则,初始化FIRSTVT集和LASTVT精品文档放心下载集first[i][0]=0; /*first[i][0]和last[i][0]分别表示st[i][0]非终极符谢谢阅读的FIRSTVT集和LASTVT集中元素的个数*/谢谢阅读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])&&!zho精品文档放心下载ngjie(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;elsej=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;}}elseif(zhongjie(s[m]))if(s[m]==string[N][n]){**s[j+1]=string[N][0];break;}}}k=j+1;if(k==2&&a=='#'){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 档案员竞聘演讲稿
- 读书心得体会
- 龙年元旦联欢晚会闭幕词(9篇)
- 新教材高考地理二轮复习一8类识图技法专项训练技法8区域分布图判读含答案
- 第二十五章 锐角的三角比(单元重点综合测试)
- 统编版语文二年级上学期期末备考真题分类汇编专题04 名篇名句默写 (含答案)
- 陕西省西安市曲江第一小学2024-2025学年三年级上学期期中学业水平测试科学试题(无答案)
- 广东省汕尾市华大实验学校2024-2025学年第一学期期中考试九年级化学试卷
- 采矿权购买合同范本
- 广州居民租房协议格式
- JJF 2159-2024零气发生器校准规范
- 海底探测用自动潜航器相关项目实施方案
- 期中检测卷(试题)-2024-2025学年统编版二年级语文上册
- 2024年江苏省气象系统事业单位招聘61人历年高频难、易错点500题模拟试题附带答案详解
- 2024年《中华人民共和国监察法》知识测试题库及答案
- Unit 2 Hobbies Welcome to the unit 教学设计2024-2025学年牛津译林版英语七年级上册
- 无人驾驶航空器安全操作理论复习测试附答案
- 盐城市中小学“让学引思”课堂教学改革行动方案
- 2024江苏江南水务股份限公司招聘17人高频500题难、易错点模拟试题附带答案详解
- 2024年广东2024年客运从业资格证模拟考试题库
- DB11T 1481-2024生产经营单位生产安全事故应急预案评审规范
评论
0/150
提交评论