自下而上语法分析程序LR分析程序.doc_第1页
自下而上语法分析程序LR分析程序.doc_第2页
自下而上语法分析程序LR分析程序.doc_第3页
自下而上语法分析程序LR分析程序.doc_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#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#,r2#, 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#, 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存放输入的字符串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(); do scanf(%c,&c1); ctop3=c1; /字符数组c10存放输入的字符串 top3=top3+1;/最后top3=5 while(c1!=#); /输出分析结果 printf(步骤t状态栈tt符号栈tt输入串ttACTIONtGOTOn); do y=z;m=0;n=0; /*y,z指向状态栈栈顶*/ g=top;j=0;k=0; x=ctop; /将输入符号赋给x count+; printf(%dt,count);/输出步骤序号 while(m=10) /printf(%d,am); /else printf(%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!=vtj&j=5) /获取当前x对应j的值 j+; if(j=5&x!=vtj)/如果x不是终结符则报错 printf(errorn); return; if(actionyj=NULL)/? printf(errorn); return; else strcpy(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# 输出ACTION printf(%c,copyi); i+; printf(n); / if(copy0=r) /*处理归约*/ i=0; while(copyi!=#)/例 S3# 输出ACTION printf(%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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论