收藏 分享(赏)

自下而上语法分析程序LR分析程序.doc

上传人:buyk185 文档编号:6563100 上传时间:2019-04-17 格式:DOC 页数:4 大小:51KB
下载 相关 举报
自下而上语法分析程序LR分析程序.doc_第1页
第1页 / 共4页
自下而上语法分析程序LR分析程序.doc_第2页
第2页 / 共4页
自下而上语法分析程序LR分析程序.doc_第3页
第3页 / 共4页
自下而上语法分析程序LR分析程序.doc_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

1、#include#includevoid prin() printf(“n“);printf(“+ + + + 自下而上语法分析程序/LR 分析程序 + + + +n“);printf(“+ + + + 仅供参考版权fo0ol + + + +n“);printf(“+ + + + 输入一以#结束的符号串(包括()+-*/): + + + +n“); char *action126=“S5#“,NULL,NULL,“S4#“,NULL,NULL, /*ACTION 表*/NULL,“S6#“,NULL,NULL,NULL,“acc“,NULL,“r2#“,“S7#“, NULL,“r2#“,“r

2、2#“, NULL,“r4#“,“r4#“, NULL,“r4#“,“r4#“, “S5#“,NULL,NULL, “S4#“,NULL,NULL, NULL,“r6#“,“r6#“, NULL,“r6#“,“r6#“, “S5#“,NULL,NULL, “S4#“,NULL,NULL, “S5#“,NULL,NULL, “S4#“,NULL,NULL, NULL,“S6#“,NULL, NULL,“S11#“,NULL, NULL,“r1#“,“S7#“, NULL,“r1#“,“r1#“,NULL,“r3#“,“r3#“, NULL,“r3#“,“r3#“,NULL,“r5#“,“r5#“

3、, NULL,“r5#“,“r5#“;int goto1123=1,2,3, /*QOTO 表*/0,0,0,0,0,0,0,0,0,8,2,3,0,0,0,0,9,3,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0;char vt6=i,+,*,(,),#; /*存放终结符*/char vn3=E,T,F; /*存放非终结符*/char *LR7=“M-E#“,“E-E+T#“,“E-T#“,“T-T*F#“,“T-F#“,“F-(E)#“,“F-i#“;/*存放产生式*/int a20;/数组 a 实现状态栈char b20,c20,c1;/数组 b 实现符号栈,数组 c 存

4、放输入的字符串int top1,top2,top3,top,m,n;void main()int g,h,i,j,k,l,p,y,z,count;char x,copy20,copy120;top1=0;top2=0;top3=0;top=0;a0=0;y=a0;b0=#;count=0;z=0; prin();doscanf(“%c“,ctop3=c1; /字符数组 c10存放输入的字符串top3=top3+1;/最后 top3=5while(c1!=#);/输出分析结果printf(“步骤t 状态栈tt 符号栈tt 输入串ttACTIONtGOTOn“);doy=z;m=0;n=0; /*

5、y,z 指向状态栈栈顶*/g=top;j=0;k=0;x=ctop; /将输入符号赋给 xcount+;printf(“%dt“,count);/输出步骤序号while(m=10) / printf(“%d“,am);/elseprintf(“%d“,am);m=m+1;printf(“tt“);while(n=top2) /*输出符号栈*/printf(“%c“,bn);n=n+1;printf(“tt“);while(g=top3) /*输出输入串*/printf(“%c“,cg);g=g+1;printf(“tt“);while(x!=vtjif(j=5return;if(actiony

6、j=NULL)/?printf(“errorn“);return;elsestrcpy(copy,actionyj);/if(copy0=S) /*处理移进*/z=copy1-0;/因为状态从 0 开始top1=top1+1;top2=top2+1;atop1=z;/数组 a 实现状态栈btop2=x;/数组 b 实现符号栈top=top+1;/输入符号串数组 c 的顶i=0;while(copyi!=#)/例 “S3#“ 输出 ACTIONprintf(“%c“,copyi);i+;printf(“n“);/if(copy0=r) /*处理归约*/i=0;while(copyi!=#)/例 “S3#“ 输出 ACTIONprintf(“%c“,copyi);i+;h=copy1-0;/因为状态从 0 开始strcpy(copy1,LRh);while(copy10!=vnk) /获取当前 k 值k+;l=strlen(LRh)-4;/top1=top1-l+1;top2=top2-l+1;y=atop1-1;p=goto1yk;atop1=p;btop2=copy10;z=p;printf(“t“);printf(“%dn“,p);while(actionyj!=“acc“);printf(“accn“);

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

当前位置:首页 > 外语学习 > 语法

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


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

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

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