编译原理预测分析法实验报告(C语言编写)

编译原理预测分析法实验报告(C语言编写)

ID:40269362

大小:87.50 KB

页数:6页

时间:2019-07-30

编译原理预测分析法实验报告(C语言编写)_第1页
编译原理预测分析法实验报告(C语言编写)_第2页
编译原理预测分析法实验报告(C语言编写)_第3页
编译原理预测分析法实验报告(C语言编写)_第4页
编译原理预测分析法实验报告(C语言编写)_第5页
资源描述:

《编译原理预测分析法实验报告(C语言编写)》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、编译原理实验报告实验名称:预测分析法姓名:专业班级:计科学号:指导老师:日期:2011年6月1日目的要求1.构造文法的语法分析程序,要求采用预测分析法对输入的字符串进行语法分析。2.加深对预测分析LL(1)分析法的理解和掌握。实验内容对文法G进行语法分析,文法G如下所示:*0.S→a*/*1.S→^*2.S→(T)*3.T→SW**4.W→,SW*5.W→ε;并对任给的一个输入串进行语法分析检查。程序要求能对输入串进行预测分析,能判别程序是否符合已知的语法规则,如果不符合(编译出错),则输出错误信息。程

2、序输入/输出示例:输入:一个以#结束的符号串:例如:(a,a)#输出:步数分析栈输入串所用规则(1)#S(a,a))#2源程序://LL(1)预测分析控制程序#include#include#includecharstr[100];//存储待分析的句子constcharT[]="a^(),#";//终结符,分析表的列符constcharNT[]="STW";//非终结符,分析表的行符/*指向产生式右部符号串*/constchar*p[]={/*0

3、.S→a*/"a",/*1.S→^*/"^",/*2.S→(T)*/"(T)",/*3.T→SW*/"SW",/*4.W→,SW*/",SW",/*5.W→ε;*/""};//设M[i][j]=x,通过p[M[i][j]]=p[x]获取右部符号串。constintM[][6]={/*a^(),#*//*S*/{0,1,2,-1,-1,-1},/*T*/{3,3,3,-1,-1,-1},/*W*/{-1,-1,-1,5,4,-1}};voidinit()//输入待分析的句子{printf("请输入待分析的

4、句子(以$结束):");scanf("%s",str);}intlin(charc);//非终结符转换为行号intcol(charc);//终结转换为列号boolisNT(charc);//isNT判断是否是非终结符boolisT(charc);//isT判断是否是终结符。voidmain(void){inti,j=0;intflag=1,flag2=0;charA;//设置指示句子的当前字符charstack[20]={'#','S'};//栈赋初值inttop=1;//设置栈顶指针charX='

5、';//存储栈顶字符init();A=str[0];printf("t步数t分析栈t输入串t所用规则");//在屏幕上输出列表标题while(1){printf("t(%d)t",++j);//输出当前执行步数for(i=0;i<=top;i++)//输出当前栈的内容(出栈前){printf("%c",stack[i]);}printf("t");for(i=flag-1;str[i]!='$';i++){printf("%c",str[i]);}if(flag2==1){prin

6、tf("t%d",M[lin(X)][col(A)]);flag2=0;}//出栈X=stack[top--];if(X=='#')//是结束符{if(X==A)//是结束符{printf("tAcc");}elseprintf("tERROR");break;}elseif(isT(X))//是终结符{A=str[flag++];}elseif(isNT(X))//是否是非终结符{flag2=1;//逆序入栈for(i=strlen(p[M[lin(X)][col(A)]])-1;i>=

7、0;i--){stack[++top]=*(p[M[lin(X)][col(A)]]+i);}}else{printf("Errorinmain()>%c",X);exit(0);}}}intlin(charc){for(inti=0;i<(int)strlen(NT);i++){if(c==NT[i]){returni;}}printf("Errorinlin()>%c",c);exit(0);}intcol(charc){for(inti=0;i<(int)strlen(T);i++){if

8、(c==T[i])returni;}printf("Errorincol()>%c",c);exit(0);}boolisNT(charc)//是否是非终结符{for(inti=0;i<(int)strlen(NT);i++){if(c==NT[i])returntrue;}returnfalse;}boolisT(charc)//是否是终结符(不包括'#'){for(inti=0;i<(int)strlen(T)-1;i++){if(

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

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

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