编译原理-实验5-LR(1)分析法.doc

编译原理-实验5-LR(1)分析法.doc

ID:57068646

大小:44.50 KB

页数:6页

时间:2020-07-31

编译原理-实验5-LR(1)分析法.doc_第1页
编译原理-实验5-LR(1)分析法.doc_第2页
编译原理-实验5-LR(1)分析法.doc_第3页
编译原理-实验5-LR(1)分析法.doc_第4页
编译原理-实验5-LR(1)分析法.doc_第5页
资源描述:

《编译原理-实验5-LR(1)分析法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、《编译原理》实验报告项目名称LR(1)分析法设计与实现专业班级学号姓名实验成绩:批阅教师:年月日实验5《LR(1)分析法设计与实现》实验学时:2实验地点:实验日期:一、实验目的构造LR(1)分析程序,利用它进行语法分析,判断给出的符号串是否为该文法识别的句子,了解LR(K)分析方法是严格的从左向右扫描,和自底向上的语法分析方法。二、实验内容程序输入/输出示例(以下仅供参考):对下列文法,用LR(1)分析法对任意输入的符号串进行分析:(1)E-E+T(2)E-E—T(3)T-T*F(4)T-T/F(5)F-

2、(E)(6)F-i输出的格式如下:(1)LR(1)分析程序,编制人:姓名,学号,班级(2)输入一个以#结束的符号串(包括+—*/()i#):在此位置输入符号串(3)输出过程如下:步骤状态栈符号栈剩余输入串动作10#i+i*i#移进(4)输入符号串为非法符号串(或者为合法符号串)备注:1.在“所用产生式”一列中如果对应有推导则写出所用产生式;如果为匹配终结符则写明匹配的终结符;如分析异常出错则写为“分析出错”;若成功结束则写为“分析成功”。2.在此位置输入符号串为用户自行输入的符号串。注意:1.表达式中允许

3、使用运算符(+-*/)、分割符(括号)、字符i,结束符#;2.如果遇到错误的表达式,应输出错误提示信息(该信息越详细越好);3.对学有余力的同学,测试用的表达式事先放在文本文件中,一行存放一个表达式,同时以分号分割。同时将预期的输出结果写在另一个文本文件中,以便和输出进行对照。三、实验方法用C语言,通过对LR(1)文法的正确理解编写代码。四、实验步骤1.对语法规则有明确的定义;2.编写的分析程序能够对实验一的结果进行正确的语法分析;3.对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺

4、利完成语法分析过程。五、实验结果六、实验结论#include#includechar*action[10][3]={"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#"};i

5、ntgoto1[10][2]={1,2,/*QOTO*/0,0,0,5,0,8,0,0,0,0,0,9,0,0,0,0,0,0};charvt[3]={'a','b','#'};/*存放非终结符*/charvn[2]={'S','B'};/*存放终结符*/char*LR[4]={"E->S#","S->BB#","B->aB#","B->b#"};/*存放产生式*/inta[10];charb[10],c[10],c1;inttop1,top2,top3,top,m,n;voidmain(){intg,h

6、,i,j,k,l,p,y,z,count;charx,copy[10],copy1[10];top1=0;top2=0;top3=0;top=0;a[0]=0;y=a[0];b[0]='#';count=0;z=0;printf("----------------请输入表达式(以#结尾)--------------");do{scanf("%c",&c1);c[top3]=c1;top3=top3+1;}while(c1!='#');printf("步骤t状态栈tt符号栈tt输入串ttA

7、CTIONtGOTO");do{y=z;m=0;n=0;/*y,z指向状态栈栈顶*/g=top;j=0;k=0;x=c[top];count++;printf("%dt",count);while(m<=top1){/*输出状态栈*/printf("%d",a[m]);m=m+1;}printf("tt");while(n<=top2){/*输出符号栈*/printf("%c",b[n]);n=n+1;}printf("tt");while(g<=top3){/*输出输入串*/printf

8、("%c",c[g]);g=g+1;}printf("tt");while(x!=vt[j]&&j<=2)j++;if(j==2&&x!=vt[j]){printf("error");return;}if(action[y][j]==NULL){printf("error");return;}elsestrcpy(copy,action[y][j]);if(copy[0]=='S'){/*处理移进*/z=copy[

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。