1 / 11
文档名称:

语法分析 实验报告.doc

格式:doc   大小:86KB   页数:11页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

语法分析 实验报告.doc

上传人:ttteee8 2020/8/3 文件大小:86 KB

下载得到文件列表

语法分析 实验报告.doc

文档介绍

文档介绍:编译原理词法分析实验"报告实验二语法分析一、 实验目的通过完成预测分析法的语法分析程序,了解预测分析法和递归子程序法的区别和联系。了解语法分析的功能,掌握语法分析程序设计的原理和构造方法,训练学生掌握开发应用程序的基本方法。有利于提高学生的专业素质,为培养适应社会多方面需要的能力。二、 实验内容根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号冷进行分析。构造预测分析表,并利用分析表和一个栈来实现对上述程序设计语言的分析程序。分析法的功能是利用LL(1)控制程序根据显示栈栈顶内容、向前看符号以及LL(1)分析表,对输入符号串自上而下的分析过程。三、 LL(1)分析法实验设计思想及算法♦ 模块结构:定义部分:定义常量、变量、数据结构。初始化:设立LL(1)分析表、初始化变量空间(包括堆栈、结构体、数组、临时变量等);控制部分:从键盘输入一个表达式符号申;利用LL(1)分析算法进行表达式处理:根据LL(1)分析表对表达式符号串进行堆栈(或其他)操作,输出分析结果,如果遇到错误则显示错误信息。进入程序初始化栈及分析表判断类型X==伊&&X==aSentence(xpa)是舌产生式POP(x);PUSH(Yk,Yk-1,...Y2,Y1);4§产生式写出■判断行数9决定是否分屏显示▼保存结果并显示程序结束#include<>LL⑴分析法的实验源程序代码如下:#include<>#include<>#include<>#include<>charA[20];charBf201;charvl[20]=charv2[20]={E,G,T,S,F};charvl[20]=/*分析栈*//*剩余串*//*终结符*//*非终结符*/intj=0,b=0,top=(),l;/*L为输入串长度*/classtype{public:/*产生式类型定义*/charorigin;chararray[5J;intlength;/*大竺字符*//*产生式右边字符*//*字符个数*/);typee,t,g,gl,s,sl,f,fl;typeCHOJllOJ;voidprint(){inta;for(a=0;a<=top+1;a++)cout«A[a];cout«"\t\tn;}voidprint1(){intj;for(j=0;j<b;j++)coutvv””;for(j=b;jv=[;j++)cout«B[j];cout«”\t\t\t”;}voidmain()(intm,n,k=0,flag=0,finish=0;charch,x;typecha;/*把文法产生式如:值结构体*/=E*;strcpy(/'TG");length=2;=T;strcpy(,nFSn);=2;=Gf;strcpy(,"+TG");=3;=,G,;]=,A,;=l;='S';strcpy(,n*FS");=3;=S;[0]='A,;=l;origin=F';/*类对象*//*预测分析表*//*输出分析栈*//*输出剩余串〃/*输出对齐符*/strcpy(f・array,”(E)”);=3;='F;[OJ='i';=l;for(m=0;m<=4;m++) /字初始化分析表字/for(n=0;n<=5;n++)C[m][n].origin=N; /*全部赋为空*//*填充分析表*/CfOl[O]=e;CfO][3]=e;C[l][l]=g;C[l][4]=gl;C[l][5]=gl;C⑵[0]=t;C[2][3]=t;C[3][l]=sl;C[3]⑵=s;C[3][4]=C[3][5]=sl;C[4][0]=fl;C[4][3]=f;coutvv”提示:本程序只能对由构成的以'#'结束的字符串进行分析,\n”;cout«H请输入要分析的字符串:”;do/*读入分析串*/(cin»ch;if((ch!='i')&&(ch!='+')&&(ch!=*)&&(ch!='(')&&(ch!=))&&(ch!='#'))(coutvv”输入串中有非法字符\n“;exit(l); 〃强制退出程序}Bfjl=ch;j++;}while(ch!='#');l=j;/*分析串长度*/ch=B[O]y*当前分析字符*/A[top]=样;A[++top]=E;/*#,E进栈*/c