编译原理第一次实验报告1614010102曹妍

上传人:工**** 文档编号:502890810 上传时间:2023-06-02 格式:DOCX 页数:24 大小:99.52KB
返回 下载 相关 举报
编译原理第一次实验报告1614010102曹妍_第1页
第1页 / 共24页
编译原理第一次实验报告1614010102曹妍_第2页
第2页 / 共24页
编译原理第一次实验报告1614010102曹妍_第3页
第3页 / 共24页
编译原理第一次实验报告1614010102曹妍_第4页
第4页 / 共24页
编译原理第一次实验报告1614010102曹妍_第5页
第5页 / 共24页
点击查看更多>>
资源描述

《编译原理第一次实验报告1614010102曹妍》由会员分享,可在线阅读,更多相关《编译原理第一次实验报告1614010102曹妍(24页珍藏版)》请在金锄头文库上搜索。

1、哈尔滨理工大学软件与微电子学院实验报告(2017-2018第二学期)课程名称:编译原理班级:软件16-1班学号:02姓名:曹妞实验名称实验一、算符优先分析表的构造程序专业软件工程姓名曹妍学号02班级软彳16-1班一、实验目的:通过设计编制调试构造FIRSTVT集、LASTVT集和构造算符优先表,了解构造算符优先分析表的步骤,对文法的要求,生成算符优先关系表的算法。二、实验内容:1 .编写算符优先分析表的构造程序,求出给定的算符优先文法中的非终结符的FirstVT集合和LastVT集合。2 .构造算符优先表。三、实验设备及软件环境:PCM,主机操作系统为windows;C编译器等软件四、实验过程

2、及结果:在存放文法的文件内输入待判断文法产生式(文件已输入教材116页文法),格式E-a|S,注意左部和右部之间是“-”,每个产生式一行,ENTE蹴换行。文法结束再输入一行G-#E#1.先做文法判断,即可判断文法情况。3 .若是算符优先文法,则在优先表栏显示优先表。实验样例:图中给出了终结符号表,非终结符号表,计算FirstVT和LastVT集合,并给出了算符优先关系矩阵。代码和实验结果分析:#include#include算符优先关系模拟符号栈s 文法终极符集 文法输入符号用 用于输入用的分析#includechardata2020;/chars100;/charlable20;/chari

3、nput100;/charstring2010;/intk;chara;intj;charq;int r;/文法规则个数int r1;/char st1030;/char first1010;/char last1010;/int fflag10= 0;/是否已求出int lflag10= 0;/否已求出int deal();/int zhongjie(char c);/int xiabiao(char c);/标void out(int j,int k,char *s);/void firstvt(char c);/void lastvt(char c);/void table();/int

4、 main()转化后文法规则个数用来存储文法规则文法非终结符FIRSTVT集文法非终结符LASTV咪标志第i个非终结符的FIRSTVT集标志第i个非终结符的LASTV咪是对输入串的分析判断字符 c 是否是终极符求字符 c 在算符优先关系表中的下打印 s 栈求非终结符c的FIRSTVT集求非终结符c的LASTV磔创建文法优先关系表inti,j,k=0;printf(请输入文法规则数:);scanf(%d,&r);printf(请输入文法规则:n);for(i=0;ir;i+)scanf(%s,sti);/存储文法规则,初始化FIRSTVT!和LASTVT集firsti0=0;/*firsti0和

5、lasti0分别表示sti0非终极符的FIRSTVT集和LASTVT集中元素的个数*/lasti0=0;/判断文法是否合法for(i=0;ir;i+)for(j=0;stij!=0;j+)if(sti0Z)printf(不是算符文法!n);exit(-1);if(stij=A&stij=A&stij+1=Z)printf(不是算符文法!n);exit(-1);for(i=0;ir;i+)for(j=0;stij!=0;j+)if(stijZ)&stij!=-&stij!=&stij!=|)lablek+=stij;lablek=#;lablek+1=0;table();printf(每个非终结

6、符的FIRSTVT集为:n);/输出每个非终结符的FIRSTV磔for(i=0;ir;i+)printf(%c:,sti0);for(j=0;jfirsti0;j+)printf(%c,firstij+1);printf(n);printf(每个非终结符的LASTV咪为:n);/输出每个非终结符的LASTV咪for(i=0;ir;i+)printf(%c:,sti0);for(j=0;jlasti0;j+)printf(%c,lastij+1);printf(n);printf(算符优先分析表如下:n);for(i=0;lablei!=0;i+)printf(t%c,lablei);print

7、f(n);for(i=0;ik+1;i+)printf(%ct,lablei);for(j=0;jk+1;j+)printf(%ct,dataij);printf(n);printf(请输入文法输入符号串以#结束:);scanf(%s,input);deal();voidtable()chartext2010;inti,j,k,t,l,x=0,y=0;intm,n;x=0;for(i=0;ir;i+)firstvt(sti0);lastvt(sti0);for(i=0;i;elsetextxy=stij;y+;textxy=0;x+;y=0;r1=x;printf(转化后的文法为:n);输出转

8、化后的文法规则串for(i=0;ix;i+)/printf(%sn,texti);for(i=0;i后的转化文法,用于最后的规约)*/stringi0=texti0;for(j=3,l=1;textij!=0;j+,l+)stringil=textij;stringil=0;for(i=0;ix;i+)for(j=1;textij+1!=0;j+)if(zhongjie(textij)&zhongjie(textij+1)m=xiabiao(textij);n=xiabiao(textij+1);datamn=;if(textij+2!=0&zhongjie(textij)&zhongjie(

9、textij+2)&!zhongjie(textij+1)m=xiabiao(textij);n=xiabiao(textij+2);datamn=;if(zhongjie(textij)&!zhongjie(textij+1)for(k=0;kr;k+)if(stk0=textij+1)break;m=xiabiao(textij);for(t=0;tfirstk0;t+)n=xiabiao(firstkt+1);datamn=;if(!zhongjie(textij)&zhongjie(textij+1)for(k=0;kr;k+)if(stk0=textij)break;n=xiabia

10、o(textij+1);for(t=0;t;m=xiabiao(#);for(t=0;tfirst00;t+)n=xiabiao(first0t+1);datamn=;n=xiabiao(#);for(t=0;t;datann=;voidfirstvt(charc)/求FIRSTVT集inti,j,k,m,n;for(i=0;ir;i+)if(sti0=c)break;if(fflagi=0)n=firsti0+1;m=0;doif(m=2|stim=|)(if(zhongjie(stim+1)(firstin=stim+1;n+;else(if(zhongjie(stim+2)(firstin=stim+2;n+;if(stim+1!=c)(firstvt(stim+1);for(j=0;jr;j+)(if(stj0=stim+1)break;for(k=0;kfirstj0;k+)(intt;for(t=0;tn;t+)(break;if(t=n)firstin=firstjk+1;n+;m+;while(stim!=0);firstin=0;firsti0=-n;fflagi=1;voidlastvt(charc)/求LASTV咪

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 营销创新

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号