算符优先文法实验报告.doc

算符优先文法实验报告.doc

ID:57676986

大小:53.00 KB

页数:8页

时间:2020-08-31

算符优先文法实验报告.doc_第1页
算符优先文法实验报告.doc_第2页
算符优先文法实验报告.doc_第3页
算符优先文法实验报告.doc_第4页
算符优先文法实验报告.doc_第5页
资源描述:

《算符优先文法实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、《编译原理》课程实验报告实验名称:算符优先文法姓名学号:地点:教师院系:计算机与通信工程学院专业:计算机科学与技术09-2一.实验目的设计、编制并调试一个算符优先法分析程序,加深对算符优先法分析原理的理解。二.实验内容算术表达式的文法:(1).E®E+T

2、E-T

3、T(2).T®T*F

4、T/F

5、F(3).F®i

6、(E)转化后的文法:(1).E®E+T(2).E®E-T(3).E®T(4).T®T*F(5).T®T/F(6).T®F(7).F®i(8).F®(E)根据表达式的文法,首先计算每个非终结符的FIRSTVT和LASTVT:执行算法逐条扫描文法规则,从而构造

7、出文法的算符优先关系表如图所示用算符优先分析法法对该文法进行分析,在每次归约成功后则输出四元式。四元式形式如下:(op,arg1,arg2,result)其中op是运算符,arg1,arg2分别是第一和第二个运算对象,当op是一目运算时,常常将运算对象定义为arg1.例如,表达式-C和赋值语句X=a的四元式可分别表示为(i)(@,C,-,T)(j)(=,a,-,X)三.源代码:#include#include#include#defineMAXSIZE64//栈的大小#defineN-10typedefc

8、hardatatype;//以char作为栈中元素typedefstruct//定义一个栈结构{datatypedata[MAXSIZE];inttop;}seqstack;seqstackOPR;//操作数栈OPRseqstackOPT;//申明操作符栈char*p;//全局变量指针,用来指向待分析字符串intmatrix[7][7]={{N,-1,-1,-1,-1,N,1},//算符优先矩阵{N,1,-1,-1,-1,1,1},{N,1,1,-1,-1,1,1},{1,1,1,N,N,1,1},{N,-1,-1,-1,-1,0,N},{N,1,1,N,N,1

9、,1},{-1,N,N,-1,N,N,0}};introw,line;//全局变量,分别来表示算符优先矩阵的行和列intcount=1;intcompare(charm,charn){//算符的优先级switch(m){case'=':row=0;break;case'+':row=1;break;case'*':row=2;break;case'i':row=3;break;case'(':row=4;break;case')':row=5;break;case'$':row=6;break;default:return-100;break;}switch(n

10、){case'=':line=0;break;case'+':line=1;break;case'*':line=2;break;case'i':line=3;break;case'(':line=4;break;case')':line=5;break;case'$':line=6;break;default:return-100;break;}returnmatrix[row][line];}//定义对操作数栈的基本操作voidOPRsetnull()//设置操作数栈空{OPR.top=-1;}boolOPRempty()//判断操作数栈是否为空{if(OP

11、R.top>=0)returnfalse;elsereturntrue;}voidOPRpush(charx)//往操作数栈push一个操作数i{if(OPR.top==MAXSIZE-1)printf("上溢!");else{OPR.top++;OPR.data[OPR.top]=x;}}datatypeOPRpop()//从操作数栈中pop出一个操作数{if(OPRempty()){printf("下溢!");returnNULL;}else{OPR.top--;return(OPR.data[OPR.top+1]);}}//定义对操作数栈的基本操作结束da

12、tatypeOPRtop()//获取操作数栈的栈顶的操作数{if(OPRempty()){returnNULL;}elsereturn(OPR.data[OPR.top]);}voidOPTsetnull()//设置操作符栈空{OPT.top=-1;}boolOPTempty()//判断操作符栈是否为空{if(OPT.top>=0)returnfalse;elsereturntrue;}voidOPTpush(charx)//往操作符栈push一个操作数{if(OPT.top==MAXSIZE-1)printf("上溢!");else{OPT.top++;OPT

13、.data[OPT.to

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

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

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