收藏 分享(赏)

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

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

1、实验二 算符优先分析器#include “stdio.h“#include “stdlib.h“#include “iostream.h“char 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集cha

2、r last1010; /文法非终结符 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);

3、/求非终结符 c的 LASTVT集void table(); /创建文法优先关系表void main()int i,j,k=0;printf(“请输入文法规则数:“);scanf(“%d“,printf(“请输入文法规则:n“);for(i=0;iZ)printf(“不是算符文法!n“);exit(-1);if(stij=Alablek=#;lablek+1=0; table();printf(“每个非终结符的 FIRSTVT集为:n“); /输出每个非终结符的 FIRSTVT集for(i=0;i;elsetextxy=stij;y+;textxy=0;x+;y=0;r1=x;printf(“

4、转化后的文法为:n“);for(i=0;i“后的转化文法,用于最后的规约)*/stringi0=texti0;for(j=3,l=1;textij!=0;j+,l+)stringil=textij;stringil=0;for(i=0;i;m=xiabiao(#);for(t=0;t;datann=;void firstvt(char c) /求 FIRSTVT集int i,j,k,m,n;for(i=0;i)out(1,k,s);printf(“%c“,a);out(i+1,z,input);printf(“规约n“);doq=sj;if(zhongjie(sj-1)j=j-1;else j

5、=j-2;x=xiabiao(sj);y=xiabiao(q);while(dataxy!=);int m,n,N;for(m=j+1;m=k;m+)for(N=0;Nr1;N+)for(n=1;stringNn!=0;n+)if(!zhongjie(sm)break;elseif(zhongjie(sm)if(sm=stringNn)sj+1=stringN0;break;k=j+1;if(k=2printf(“%c“,a);out(i+1,z,input);printf(“结束n“);printf(“输入串符合文法的定义!n“);return 1; /输入串符合文法的定义elseif(da

6、taxy=|dataxy=) /移进out(1,k,s);printf(“%c“,a);out(i+1,z,input);printf(“移进n“);k+;sk=a;i+;elseprintf(“nflase“);return 0;printf(“nflase“);return 0;void out(int j,int k,char *s)int n=0;int i;for(i=j;i=k;i+)printf(“%c“,si);n+;for(;n15;n+)printf(“ “);int xiabiao(char c) /求字符 c在算符优先关系表中的下标int i;for(i=0;lablei!=0;i+)if(c=lablei)return i;return -1;int zhongjie(char c) /判断字符 c是否是终极符int i;for(i=0;lablei!=0;i+)if(c=lablei)return 1;return 0;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报