资源描述:
《算符优先文法实验报告.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