资源描述:
《算符分析程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、编译原理:算符分析的实现实验报告姓名:胡峰学号:20127366班级:计算机2班指导老师:何大德日期:2014.12.83一. 实验目的 加深对语法分析器工作过程的理解;加强对算符优先分析法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。二. 实验要求 1.对语法规则有明确的定义; 2.编写的分析程序能够对实验二的结果进行正确的语法分析;3.对于遇到的语法错误,能够做出简单的错误处理,给出简单的错误提示,保证顺利完成语法分析过程: 4.实验报告要求用文法的形式对语法定义做出详细说明,说明语法分析程序的工作过
2、程,说明错误处理的实现.三. 实验原理①:对文法G进行语法分析,文法G如下所示:1:E→E+T2:E→T3:T→T*F4:T→F5:F→i6:F→(E)③:表达式优先关系表(“>”表示优先高于,“<”表示优先低于,“=”表示同等优先)i+*()#i><<<>>+>><<>>*>>>>(<<<<=)>>>>#<<<<=3四.C语言实现①:流程图算符分析的流程图②:程序实现#include#includecharVt_Vecter[6]={'+','*','i','(',')','#'};//终结符数组charInString[10];//输入串
3、intx_In_Vt(charx){//判x是否终结符函数inti;for(i=0;i<6;i++)if(x==Vt_Vecter[i])return1;return0;}charYouXianBiao[6][6]={//优先关系表数组,'*'表空白'>','<','<','<','>','>','>','>','<','<','>','>','>','>','*','*','>','>','<','<','<','<','=','*','>','>','*','*','>','>','<','<','<','<','*','='};//以下是终结符转换为行列号函数intVt_T
4、rans(charx){inti;for(i=0;i<6;i++)if(x==Vt_Vecter[i])returni;}voiderror(){printf("error!");return;}//错误处理函数main(){3chara,Q,*pc;charstack[20]={'*','#'};intk=1,j,hh,lh;scanf("%s",InString);pc=InString;a=*pc++;while(a!='#'){if(x_In_Vt(stack[k]))j=k;elsej=k-1;hh=Vt_Trans(stack[j]);lh=Vt_Trans(a);w
5、hile(YouXianBiao[hh][lh]=='>'){do{Q=stack[j];if(x_In_Vt(stack[j-1]))j=j-1;elsej=j-2;}while(YouXianBiao[Vt_Trans(stack[j])][Vt_Trans(Q)]=='=');k=j+1;stack[k]='N';hh=Vt_Trans(stack[k-1]);}hh=Vt_Trans(stack[j]);lh=Vt_Trans(a);if(YouXianBiao[hh][lh]=='<'
6、
7、YouXianBiao[hh][lh]=='='){k=k+1;stack[k]=
8、a;}else{error();gotoL;}a=*pc++;}printf("分析成功");L:;}五:程序调试①:以输入串i*(i+i)#进行调试,结果如下:②:以输入串i(i+i)#进行调试,结果如下:3