编译原理 语法分析实验报告

上传人:第*** 文档编号:34594427 上传时间:2018-02-26 格式:DOC 页数:12 大小:171.93KB
返回 下载 相关 举报
编译原理 语法分析实验报告_第1页
第1页 / 共12页
编译原理 语法分析实验报告_第2页
第2页 / 共12页
编译原理 语法分析实验报告_第3页
第3页 / 共12页
编译原理 语法分析实验报告_第4页
第4页 / 共12页
编译原理 语法分析实验报告_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《编译原理 语法分析实验报告》由会员分享,可在线阅读,更多相关《编译原理 语法分析实验报告(12页珍藏版)》请在金锄头文库上搜索。

1、中北大学软件学院实 验 报 告专 业 课程名称 学 号 姓 名 辅导教师 成绩 实验日期 2014.12.03 实验时间 10:0011:301、实验名称 语法分析器的设计与实现2、实验目的掌握自上而下语法分析方法、自下而上语法分析方法3、实验要求(1)实验内容:四选一 设计及实现能够识别表达式的预测分析程序。文法如下:GE:E-E+T|TT-T*F|FF-(E)|i 设计及实现能够识别表达式的 LR 分析程序。文法如下:GE:E-E+T|TT-T*F|FF-(E)|i 设计及实现能够识别表达式的算符优先分析程序。文法如下:GE:E-E+T|TT-T*F|FF-PF|PP-(E)|i设计及实现

2、计算表达式的计算器。表达式中可包含+、-、*、/、 (、 )运算符。(2)实验要求:对已给的一个二元式形式表达式,能够检查有无语法错误。并指定出错位置。将表达式的语法树输出(或将语法分析过程输出) 。4、实验原理根据自上而下和自下而上的语法分析思想实现语法分析程序。5、实验步骤(1)根据文法构造语法分析表。(2)编写总控程序实现语法分析。6、状态转换图及词法分析程序(1)状态转换图否(2)语法分析器源代码#include#includechar *action126=S5#,NULL,NULL,S4#,NULL,NULL, /*ACTION 表*/NULL,S6#,NULL,NULL,NULL

3、,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, LL(1)文法?报错判断句型有效? 结束读入文法开 始 NULL,S6#,NULL, NULL,S11#,NULL, NULL,r1#,S7#, NULL,r1#,r1#,NULL,r3#,r3#, NULL,r3#,r3#,NULL,r5#

4、,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 top

5、1,top2,top3,top,m,n;int 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;/输入要识别的字符串printf(请输入表达式n);doscanf(%c,ctop3=c1; /字符数组 c10存放输入的字符串top3=top3+1;/最后 top3=5while(c1!=#);/输出分析结果printf(步骤t 状态栈tt 符号栈tt 输入串ttACTIONtGOTOn);doy=z;m=0;n=0; /*y

6、,z 指向状态栈栈顶*/g=top;j=0;k=0;x=ctop; /将输入符号赋给 xcount+;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=5) /获取当前 x 对应 j 的值j+;if(j=5&x!=vtj)/如果 x 不是终结符

7、则报错 printf(errorn);return 0;if(actionyj=NULL)printf(errorn); return 0;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)return 0;i+;printf(n);if(co

8、py0=r) /*处理归约*/i=0; while(copyi!=#)/例 S3# 输出 ACTIONprintf(%c,copyi)return 0;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);getc

9、har();7、测试及结果确定是否为 LL(1)文法8、心得通过本次的实验,使我真正的了解语法分析器的实现过程,让我更加深刻领悟语法分析器的实现原理。虽然在本次实验中遇到了各种各样的困难和错误,但在老师和同学们的帮助下我都一一克服了,使得语法分析器能够正确的识别相应的语法和表达式。在做实验的过程中,发现自己在编写程序过程中,总是会忽略各种细节,从而导致经常修改一些很小的低级错误才能使程序正常运行,不仅浪费时间,还影响对其他地方的修改,并且在很多步骤处理上,方法不正确。使结果不能符合要求,深刻体会到了自己在编程方面与别人的差距,在今后的学习中,我会注意改正自己在这方面的缺点,促使自己的编程水平不断进步。编译原理是一门专业学科,对于现阶段的我来说,只能掌握它的一些基本原理和概念,对于一些更深层的知识还是有很多难以理解的地方。但在这次实验过程中,锻炼了自己的思考能力,也锻炼了自己的动手编程能力,对于将知识的转化有了很大的帮助。

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

当前位置:首页 > 办公文档 > 解决方案

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