LR(1)分析法教程文件

上传人:go****e 文档编号:137400995 上传时间:2020-07-08 格式:DOC 页数:9 大小:77.50KB
返回 下载 相关 举报
LR(1)分析法教程文件_第1页
第1页 / 共9页
LR(1)分析法教程文件_第2页
第2页 / 共9页
LR(1)分析法教程文件_第3页
第3页 / 共9页
LR(1)分析法教程文件_第4页
第4页 / 共9页
LR(1)分析法教程文件_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《LR(1)分析法教程文件》由会员分享,可在线阅读,更多相关《LR(1)分析法教程文件(9页珍藏版)》请在金锄头文库上搜索。

1、LR(1)分析法精品文档河南工业大学实验报告课 程 编译原理 实验名称 LR(1)分析法 系 别_河南工业大学信息科学与工程学院 _ 专业班级_计科0905_ 实验日期 2012 年 5 月10 日姓 名_杨金锋_ 学 号_200948140512_ 实验指导教师_ _阎娟_ _一、实验目的和要求1掌握LR(1)分析法的基本原理2掌握LR(1)分析表的构造方法3掌握LR(1)驱动程序的构造方法二、实验内容构造LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。(1)LR(1)分析程序,编制人:姓名

2、,学号,班级(2)输入一以#结束的符号串(包括+*/()i#):i*i+i#(3)输出过程如下:步骤 状态栈 符号栈 剩余输入串动作10#i+i*i#移进(4)输入符号串为非法符号串(或者为合法符号串)三、实验步骤基于实验的内容,构造程序所需的模块全局变量与表:char *action103=S3#,S4#,NULL, /*ACTION表*/ NULL,NULL,acc, S6#,S7#,NULL, S3#,S4#,NULL, r3#,r3#,NULL, NULL,NULL,r1#, S6#,S7#,NULL, NULL,NULL,r3#, r2#,r2#,NULL, NULL,NULL,r2

3、#;int goto1102=1,2, /*QOTO表*/ 0,0, 0,5, 0,8, 0,0, 0,0, 0,9, 0,0, 0,0, 0,0;char vt3=a,b,#; /*存放非终结符*/char vn2=S,B; /*存放终结符*/char *LR4=E-S#,S-BB#,B-aB#,B-b#;/*存放产生式*/int a10;char b10,c10,c1;int top1,top2,top3,top,m,n;主函数:void main()printf(LR(1)分许程序:姓名:杨金锋 学号:200948140512 班级:计科0905n);int g,h,i,j,k,l,p,

4、y,z,count;char x,copy10,copy110;top1=0;top2=0;top3=0;top=0;a0=0;y=a0;b0=#;count=0;z=0;printf(请输入表达式);doscanf(%c,&c1);ctop3=c1;top3=top3+1;while(c1!=#);printf(步骤t状态栈tt符号栈tt输入串ttACTIONtGOTOn);doy=z;m=0;n=0; /*y,z指向状态栈栈顶*/g=top;j=0;k=0;x=ctop;count+;printf(%dt,count);while(m=top1) /*输出状态栈*/printf(%d,am

5、); 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=2) j+;if(j=2&x!=vtj) printf(errorn); return; if(actionyj=NULL)printf(errorn);return;elsestrcpy(copy,actionyj);if(copy0=S) /*处理移进*/z=copy1-0; top1=top1+1;to

6、p2=top2+1;atop1=z;btop2=x;top=top+1;i=0;while(copyi!=#)printf(%c,copyi);i+;printf(n);if(copy0=r) /*处理归约*/i=0;while(copyi!=#)printf(%c,copyi);i+;h=copy1-0;strcpy(copy1,LRh);while(copy10!=vnk) 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(

7、%dn,p);while(actionyj!=acc);printf(accn);四、实验过程记录:程序源代码:#include#includechar *action103=S3#,S4#,NULL, /*ACTION表*/ NULL,NULL,acc, S6#,S7#,NULL, S3#,S4#,NULL, r3#,r3#,NULL, NULL,NULL,r1#, S6#,S7#,NULL, NULL,NULL,r3#, r2#,r2#,NULL, NULL,NULL,r2#;int goto1102=1,2, /*QOTO表*/ 0,0, 0,5, 0,8, 0,0, 0,0, 0,9,

8、 0,0, 0,0, 0,0;char vt3=a,b,#; /*存放非终结符*/char vn2=S,B; /*存放终结符*/char *LR4=E-S#,S-BB#,B-aB#,B-b#;/*存放产生式*/int a10;char b10,c10,c1;int top1,top2,top3,top,m,n;void main()printf(LR(1)分许程序:姓名:杨金锋 学号:200948140512 班级:计科0905n);int g,h,i,j,k,l,p,y,z,count;char x,copy10,copy110;top1=0;top2=0;top3=0;top=0;a0=0

9、;y=a0;b0=#;count=0;z=0;printf(请输入表达式);doscanf(%c,&c1);ctop3=c1;top3=top3+1;while(c1!=#);printf(步骤t状态栈tt符号栈tt输入串ttACTIONtGOTOn);doy=z;m=0;n=0; /*y,z指向状态栈栈顶*/g=top;j=0;k=0;x=ctop;count+;printf(%dt,count);while(m=top1) /*输出状态栈*/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=2) j+;if(j=2&x!=vtj) printf(errorn); return; if(actionyj=NULL)printf(errorn);return;elsestrcpy(copy,actionyj);if(copy0=S) /*处理移进*/z=copy1-0; top1=top1+1;top2=top2+1;atop1=z;

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

当前位置:首页 > 幼儿/小学教育 > 其它小学文档

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