设计一个给定文法和对应的firstvt和lastvt集,能依据依据文法和firstvt和lastvt生成算符优先分析表

上传人:小** 文档编号:89256239 上传时间:2019-05-22 格式:DOC 页数:12 大小:126KB
返回 下载 相关 举报
设计一个给定文法和对应的firstvt和lastvt集,能依据依据文法和firstvt和lastvt生成算符优先分析表_第1页
第1页 / 共12页
设计一个给定文法和对应的firstvt和lastvt集,能依据依据文法和firstvt和lastvt生成算符优先分析表_第2页
第2页 / 共12页
设计一个给定文法和对应的firstvt和lastvt集,能依据依据文法和firstvt和lastvt生成算符优先分析表_第3页
第3页 / 共12页
设计一个给定文法和对应的firstvt和lastvt集,能依据依据文法和firstvt和lastvt生成算符优先分析表_第4页
第4页 / 共12页
设计一个给定文法和对应的firstvt和lastvt集,能依据依据文法和firstvt和lastvt生成算符优先分析表_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《设计一个给定文法和对应的firstvt和lastvt集,能依据依据文法和firstvt和lastvt生成算符优先分析表》由会员分享,可在线阅读,更多相关《设计一个给定文法和对应的firstvt和lastvt集,能依据依据文法和firstvt和lastvt生成算符优先分析表(12页珍藏版)》请在金锄头文库上搜索。

1、实验二 算符优先分析器#include stdio.h#include stdlib.h#include iostream.hchar data2020; /算符优先关系char s100; /模拟符号栈s char lable20; /文法终极符集char input100; /文法输入符号串char string2010; /用于输入串的分析int k; char a; int j; char q; int r; /文法规则个数int r1; /转化后文法规则个数char st1030; /用来存储文法规则char first1010; /文法非终结符FIRSTVT集char last10

2、10; /文法非终结符LASTVT集int fflag10=0; /标志第i个非终结符的FIRSTVT集是否已求出int lflag10=0; /标志第i个非终结符的LASTVT集是否已求出int deal(); /对输入串的分析int zhongjie(char c); /判断字符c是否是终极符int xiabiao(char c); /求字符c在算符优先关系表中的下标void out(int j,int k,char *s); /打印s栈void firstvt(char c); /求非终结符c的FIRSTVT集void lastvt(char c); /求非终结符c的LASTVT集voi

3、d table(); /创建文法优先关系表void main()int i,j,k=0; printf(请输入文法规则数:);scanf(%d,&r);printf(请输入文法规则:n);for(i=0;ir;i+)scanf(%s,sti); /存储文法规则,初始化FIRSTVT集和LASTVT集*/ firsti0=0; /*firsti0和lasti0分别表示sti0非终极符的FIRSTVT集和LASTVT集中元素的个数*/lasti0=0;for(i=0;ir;i+) /判断文法是否合法for(j=0;stij!=0;j+)if(sti0Z)printf(不是算符文法!n); exit

4、(-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(每个非终结符的FIRSTVT集为:n); /输出每个非终结符的FIRSTVT集for(i=0;ir;i+)printf(%c: ,sti0);for(j=0;jfirsti0;j+)printf(%c ,firstij+1);printf(n);pri

5、ntf(每个非终结符的LASTVT集为:n); /输出每个非终结符的LASTVT集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);printf(n); for(i=0;ik+1;i+)printf(%ct,lablei);for(j=0;jk+1;j+)printf(%ct,dataij);printf(n);printf(请输入文法输入符号串以#结束:);s

6、canf(%s,input); deal();void table()char text2010;int i,j,k,t,l,x=0,y=0;int m,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);for(i=0;ix;i+) /输出转化后的文法规则串printf(%sn,texti);for(i=0;i后的转化文法,用于最后的规约)*/stringi0=texti0;for(j=3,l=1;textij!=0

7、;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(textij+2)&!zhongjie(textij+1)m=xiabiao(textij);n=xiabiao(textij+2);datamn=;if(zhongjie(textij)&!zhongjie

8、(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=xiabiao(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=;void firstvt(char c)

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

当前位置:首页 > 商业/管理/HR > 管理学资料

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