资源描述:
《预测分析实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、北师范大学计算机科学与工程学院学生实验报告学号专业计算机科学与技术班级姓名课程名称计算机编译原理课程类型必修课实验名称实验四应用预测分析技术识别句子实验目的:1.根据某一文法编制调试LL(1)分析程序,以便对任意输入的符号串进行分析2.构造预测分析表,并利用分析表和一个栈來实现对上述程序没计语言的分析程序。实验要求:输入:任意的LL(1)文法及其待识别的符号串。输出:预测分析表及识别结论即输入符号串是否所给文法的句子、相应的推导。实验过程:LL(1)分析法属于确定的自顶向下分析方法。LL(1)的含义是:第一个L表明自顶向下分析是从左向右扫描输入串,第2个L表明分析过程中将使用最左推导,1表
2、明只需向右看一个符号便可决定如何推导,即选择哪个产生式(规则)进行推导。LL(1)文法的判别需要依次计算FIRST集、FOLLOW集和SELLECT集,然后判断是否为LL(1)文法,最后再进行句子分析。功能模块分解图输入要分析的字符串夠断字符串是杏正确XY▼出错主程序流程图实验内容:测试实例:输入文法G::=NULLF::=iE::=TGT::=FSG::=+TGS::=*FSS::=NULLF::=(E)源程序代码#include#include#includecharA[20];/*分析栈*/charB[20];/*剩余串*/比
3、3!^1[20]={7,,+,,’*,,’(?),,’#,};/*终结符*/charv2[20]={’E,’G•,’T?S?F’};/*非终结符*/intj=0,b=0,top=0,l;/*L为输入串长度*/typedefstructtype/*产生式类型定义*/{charorigin;/*大写字符*/chararray[5];/*产生式右边字符*/intlength;/*字符个数*/}type;typee,t,g,gl,s,sl,f,fl;/*结构体变量*/typeC[10][10];/*预测分析表*/voidprint()/*输出分析栈*/{inta;/*指针*/for(a=0;a<=
4、top+l;a++)printf(n%c’’,A[a]);printf(nttu);}/*print*/voidprint1()/*输出剩余串*/{intj;fOr(j=0;j
5、j]);printf("ttt");}/*printl*/intmain(){intm,n,k=0,flag=0,finish=0;charch,x;typecha;/*用来接受C[m][n]*//*把文法产生式赋值结构体*/e.origin=’E’;strcpy(e.array,’’TG”)
6、;e.length=2;t.origin='T';strcpy(t.array,*'FS");t.length=2;g.origin=’G’;strcpy(g.array,"+TG");g.length=3;gl.origin=’G’;gl.array
7、O
8、-A,;gl.length=l;s.origin-S1;strcpy(s.array,’’*FSn);s.length=3;si.origin-S';si.array[0]='A,;sl.length=l;f.origin=,F,;strcpy(f.array,"(E)H);f.length=3;fl.origin='F';fl.arr
9、ay[0]=T;fljength=l;for(m=0;m<=4;m++)/*初始化分析表*/for(n=0;n<=5;n++)C[m][n].origin=’N’;/*全部赋为空*//*填充分析表*/C[0][0]=e;C[0][3]=e;C
10、l
11、
12、l
13、=g;C[lI
14、4
15、=gl;C[l
16、[5]=gl;C[2][0]=t;C[2][3]=t;C[3][l]=sl;C[3][2]=s;C[3][4]=C[3][5]=sl;C[4][0]=fl;C[4][3]=f;printff提示:木程序只能对由?,
17、+7*7(丁构成的以’#’结束的字符串进行分析,");printf("请输入要分析的
18、字符串?’);do/*读入分析串*/{scanf("%c”,&ch);if((ch!=Y)&&(ch!=’+,)&&(ch!=’*’)&&(ch!=’(’)&&(ch!=,)’)&&(ch!=,#,)){printff’输入串中有非法字符”);exit(l);}B[j]=ch;j++;}while(ch!-#');I=j;/*分析串长度*/ch=B[O];/*当前分析字符*/AltopKAAb+topKE;/*'#•