编译原理实验二语法分析

编译原理实验二语法分析

ID:15784666

大小:77.50 KB

页数:5页

时间:2018-08-05

编译原理实验二语法分析_第1页
编译原理实验二语法分析_第2页
编译原理实验二语法分析_第3页
编译原理实验二语法分析_第4页
编译原理实验二语法分析_第5页
资源描述:

《编译原理实验二语法分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、编译原理实验报告实验二实验题目:语法分析指导老师:任姚鹏专业班级:计算机科学与技术系网络工程方向1002班姓名:杨飞(2010100246)2013年05月09日5实验类型验证性实验室_软件实验室二一、实验目的和任务:1.熟悉文法的机内表示;2.掌握利用预测分析法或递归子程序法进行语法分析的原理;3.掌握语法分析器的设计与调试。二、实验内容:1.语法分析和词法分析合在一起实现。2.把语法分析器设计成一个独立的过程。3.根据已建立的分析表,对下列输入串:i+i*i#进行语法分析,判断其是否符合文法。三、要求

2、:1.根据已有的文法规则建立LL(1)分析表;2.输出分析过程。四、实验代码:#include#include#includecharstr[100];//存储待分析的句子constcharT[]="a^(),#";//终结符,分析表的列符constcharNT[]="STW";//非终结符,分析表的行符/*指向产生式右部符号串*/constchar*p[]={/*0.S→a*/"a",/*1.S→^*/"^",/*2.S→(T)*/"(T)",/

3、*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()//输入待分析的句子5{printf("请输入待分析的句子(以$结束):");scanf("%s",str);}intlin(cha

4、rc);//非终结符转换为行号intcol(charc);//终结转换为列号boolisNT(charc);//isNT判断是否是非终结符boolisT(charc);//isT判断是否是终结符。voidmain(void){inti,j=0;intflag=1,flag2=0;charA;//设置指示句子的当前字符charstack[20]={'#','S'};//栈赋初值inttop=1;//设置栈顶指针charX='';//存储栈顶字符init();A=str[0];printf("t步数t分析

5、栈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){printf("t%d",M[lin(X)][col(A)]);flag2=0;}//出栈X

6、=stack[top--];if(X=='#')//是结束符{if(X==A)//是结束符{printf("tAcc");5}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>=0;i--){stack[++top]=*(p[M[lin(X)][col(A)]]+

7、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(c==T[i])returni;}printf("Errorincol()>%c"

8、,c);exit(0);5}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(c==T[i]){returntrue;}}returnfalse;}五

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

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

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