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

上传人:豆*** 文档编号:166066809 上传时间:2022-10-31 格式:DOC 页数:12 大小:162KB
收藏 版权申诉 举报 下载
2023年编译原理语法分析实验报告_第1页
第1页 / 共12页
2023年编译原理语法分析实验报告_第2页
第2页 / 共12页
2023年编译原理语法分析实验报告_第3页
第3页 / 共12页
资源描述:

《2023年编译原理语法分析实验报告》由会员分享,可在线阅读,更多相关《2023年编译原理语法分析实验报告(12页珍藏版)》请在装配图网上搜索。

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

2、 设计及实现计算表达式的计算器。 表达式中可包含+、-、*、/、(、)运算符。(2)实验规定:对已给的一个二元式形式表达式,可以检查有无语法错误。并指定犯错位置。将表达式的语法树输出(或将语法分析过程输出)。4、实验原理根据自上而下和自下而上的语法分析思想实现语法分析程序。5、实验环节(1)根据文法构造语法分析表。(2)编写总控程序实现语法分析。6、状态转换图及词法分析程序(1)状态转换图 开 始读入文法 结束判断句型LL(1)文法?有效? 报错否(2)语法分析器源代码#include#includechar *action126=S5#,NULL,NULL,S4#,NULL,NULL, /*

3、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#,

4、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存放输

5、入的字符串int top1,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); do scanf(%c,&c1); ctop3=c1; /字符数组c10存放输入的字符串 top3=top3+1;/最后top3=5 while(c1!=#); /输出分析结果 printf(环节t状态栈tt符号栈tt输入串ttACTION

6、tGOTOn); do y=z;m=0;n=0; /*y,z指向状态栈栈顶*/ g=top;j=0;k=0; x=ctop; /将输入符号赋给x 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=5) /

7、获取当前x相应j的值 j+; if(j=5&x!=vtj)/假如x不是终结符则报错 printf(errorn); return 0; if(actionyj=NULL) printf(errorn); return 0; 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

8、 printf(%c,copyi)return 0; i+; printf(n); if(copy0=r) /*解决归约*/ i=0; while(copyi!=#)/例 S3# 输出ACTION printf(%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; prin

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

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!