编译原理 语法分析实验报告

编译原理 语法分析实验报告

ID:41054138

大小:171.93 KB

页数:12页

时间:2019-08-15

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

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

1、中北大学软件学院实验报告专业课程名称学号姓名辅导教师成绩实验日期2014.12.03实验时间10:00—11:301、实验名称语法分析器的设计与实现2、实验目的掌握自上而下语法分析方法、自下而上语法分析方法3、实验要求(1)实验内容:四选一①设计及实现能够识别表达式的预测分析程序。文法如下:G[E]:E->E+T

2、TT->T*F

3、FF->(E)

4、i②设计及实现能够识别表达式的LR分析程序。文法如下:G[E]:E->E+T

5、TT->T*F

6、FF->(E)

7、i③设计及实现能够识别表达式的算符优先分析程序。文法如下:G[E]:E->E+T

8、TT->T*F

9、FF->P↑F

10、PP-

11、>(E)

12、i④设计及实现计算表达式的计算器。表达式中可包含+、-、*、/、(、)运算符。(2)实验要求:对已给的一个二元式形式表达式,能够检查有无语法错误。并指定出错位置。将表达式的语法树输出(或将语法分析过程输出)。4、实验原理根据自上而下和自下而上的语法分析思想实现语法分析程序。5、实验步骤(1)根据文法构造语法分析表。(2)编写总控程序实现语法分析。6、状态转换图及词法分析程序(1)状态转换图开始读入文法结束判断句型LL(1)文法?有效?报错否(2)语法分析器源代码#include#includechar*action[12][

13、6]={"S5#",NULL,NULL,"S4#",NULL,NULL,/*ACTION表*/NULL,"S6#",NULL,NULL,NULL,"acc",NULL,"r2#","S7#",NULL,"r2#","r2#",NULL,"r4#","r4#",NULL,"r4#","r4#","S5#",NULL,NULL,"S4#",NULL,NULL,NULL,"r6#","r6#",NULL,"r6#","r6#","S5#",NULL,NULL,"S4#",NULL,NULL,"S5#",NULL,NULL,"S4#",NULL,NULL,NULL,"S6#",N

14、ULL,NULL,"S11#",NULL,NULL,"r1#","S7#",NULL,"r1#","r1#",NULL,"r3#","r3#",NULL,"r3#","r3#",NULL,"r5#","r5#",NULL,"r5#","r5#"};intgoto1[12][3]={1,2,3,/*QOTO表*/0,0,0,0,0,0,0,0,0,8,2,3,0,0,0,0,9,3,0,0,10,0,0,0,0,0,0,0,0,0,0,0,0};charvt[6]={'i','+','*','(',')','#'};/*存放终结符*/charvn[3]={'E','T','

15、F'};/*存放非终结符*/char*LR[7]={"M->E#","E->E+T#","E->T#","T->T*F#","T->F#","F->(E)#","F->i#"};/*存放产生式*/inta[20];//数组a实现状态栈charb[20],c[20],c1;//数组b实现符号栈,数组c存放输入的字符串inttop1,top2,top3,top,m,n;intmain(){intg,h,i,j,k,l,p,y,z,count;charx,copy[20],copy1[20];top1=0;top2=0;top3=0;top=0;a[0]=0;y=a[0];b[

16、0]='#';count=0;z=0;//输入要识别的字符串printf("请输入表达式");do{scanf("%c",&c1);c[top3]=c1;//字符数组c[10]存放输入的字符串top3=top3+1;//最后top3=5}while(c1!='#');//输出分析结果printf("步骤t状态栈tt符号栈tt输入串ttACTIONtGOTO");do{y=z;m=0;n=0;/*y,z指向状态栈栈顶*/g=top;j=0;k=0;x=c[top];//将输入符号赋给xcount++;printf("%dt",count);//输出

17、步骤序号while(m<=top1){/*输出状态栈*/printf("%d",a[m]);m=m+1;}printf("tt");while(n<=top2){/*输出符号栈*/printf("%c",b[n]);n=n+1;}printf("tt");while(g<=top3){/*输出输入串*/printf("%c",c[g]);g=g+1;}printf("tt");while(x!=vt[j]&&j<=5)//获取当前x对应j的值j++;if(j==5&&x!=vt[j])//如果x不是终结符则报错{p

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

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

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