编译原理--实验四

编译原理--实验四

ID:44111520

大小:176.58 KB

页数:4页

时间:2019-10-18

编译原理--实验四_第1页
编译原理--实验四_第2页
编译原理--实验四_第3页
编译原理--实验四_第4页
资源描述:

《编译原理--实验四》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、河南工业大学实验报告课程编译原理实验名称实验四LR(1)分析法院系信息科学与工程学院专业班级姓名学号指导老师:日期2016/5/18•实验目的1•掌握LR(1)分析法的基本原理;2.学握LR(1)分析表的构造方法;3.掌握LR(1)驱动程序的构造方法。实验内容及要求根据某一文法编制调试LR(1)分析程序,以便对任意输入的符号串进行分析。本次实验的目的主要是加深对LR(1)分析法的理解。对下列文法,用LR(1)分析法对任意输入的符号串进行分析:(0)E->S(1)S->BB(2)B->aB(3)B->b程序输入一以#结束的符号串(包括a、b、#),如:abb#。输出过程如下:步骤状态栈符号栈

2、输入串ACTIONGOTO10#abb#S3••••••••••••••••••三•实验过程及结果实验源代码:#include#include/^ACTION表*/char*action[10][3]={{〃S3#〃,〃S4#〃,NULL),{NULL,NULL,〃acc〃},{〃S6#〃,〃S7#〃,NULL},{〃S3#〃,〃S4#〃,NULL},z/r3#NULL},{NULL,NULL,,{〃S6#〃,〃S7#〃,NULL},{NULL,NULL,〃r3#〃},{〃r2#〃,〃r2#〃,NULL},{NULL,NULL,〃r2#〃}};int

3、gotoo[10][2]={1,2},{0,0},{0,5},{0,8},{0,0},{o,0},{0,9},{0,0},{0,0},{0,0}};charvt[3]={'『,5','#'};/*存放终结符*/charvn[2]={'S','B'};/*存放非终结符*/char*LR[4]={"E->S#","S->BB#〃,“;/*存放产生式*/inta[10];charb[10],c[10],cl;intoneTop,twoTop,triTop,top,m,n;intmain()intg,h,i,j,k,q,p,y,z,count;charx,copy[10],oneCopy[10];

4、oneTop=0;twoTop=0;triTop=0;top=0;a[0]=0;y=a[0];b[0]='#';count=0;z=0;printf(‘‘*****************************************〃);printfCCl]根据某一文法编制调试LR(1)分析程序,以便对任意输入的符号串进行分析『);printfC[2]司如言201316010508计科F⑶l");printf(z/请输入(待解析)表达式:rT);/*输出状态栈、符号栈、输入串*/doseanf("%c",&cl);c[triTop]=cl;triTop二triTop+1

5、;}while(cl!='#');printf(〃步骤t状态栈tt符号栈tt输入串ttACTIONtGOTO〃);do{y二z;iifO;n=0;/*y,z指向状态栈栈顶*/g二top;j=0;k=0;x=c[top];c()unt++;printf(,z%dt,z,count);while(m<=oneTop)/*输出状态栈*/{printfa[m]);m=m+l;}printfCzttz,);while(n<=twoTop)/*输出符号栈*/{printf(〃%c",b[n]);n二n+1;}printf("tt");while(g<=triTop)/*输

6、出输入串*/printf("%c",c[g]);g二g+1;}printf("tt");while(x!=vt[j]&&j<=2)j++;if(j==2&&x!=vt[j]){printf("eiTor'n");return-1;}if(action[y][j]二二NULL){printf(z,error");returnT;}elsestrcpy(copy,action[y][j]);if(copy[0]=='S')/*处理移进*/{z二copy[1]-'O';oneTop二oneTop+1;twoTop=twoTop+l;a[oneTop]=z;b[twoTop]二x;top二

7、top+1;i=0;while(copy[i]!='#'){printfC%cz,,copy[i]);i++;}printfC,z);}if(copy[0]==,r)/*处理归约*/{i=0;while(copy[i]!='#'){printf("%c",copy[i]);i++;}h=copy[1]-'O';strcpy(oneCopy,LR[h]);while(oneCopy[0]!=vn[k])k++;q=st

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

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

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