logo资料库

编译原理语法分析.doc

第1页 / 共28页
第2页 / 共28页
第3页 / 共28页
第4页 / 共28页
第5页 / 共28页
第6页 / 共28页
第7页 / 共28页
第8页 / 共28页
资料共28页,剩余部分请下载后查看
计算机学院实验报告(电子版) 课程名称: 编译原理 2018 年 11 月 25 日 指导老师 班 级 成 绩 实验名称 姓 名 学 号 实验类型 验证型 实验地点 一、 实验目的和要求: 掌握基本的语法分析过程。 二、 实验内容: 1.调试语法分析程序 用模拟语言书写的源程序进行语法分析。 2.分析程序的功能 分析程序的语法分析功能,运行出结果。 3.编写语法分析实验报告 三、实验环境:C++
三、 实验步骤(程序清单与测试数据): #include #include #include #include char a[50] ,b[50],d[200],e[10]; char ch; int n1,i1=0,flag=1,n=5; int total=0; int E();// 功能识别函数 int E1();// 功能识别函数 int T();// 功能识别函数 int G();// 功能识别函数 int S();// 功能识别函数 int F();// 功能识别函数 void input();// 输入函数 void input1(); void output(); int main() { int f,p,j=0;
char x; d[0]='E'; d[1]='='; d[2]='>'; d[3]='T'; d[4]='G'; d[5]='#'; printf("请输入字符串(长度<50,以#号结束)\n"); do{ scanf("%c",&ch); a[j]=ch; j++; }while(ch!='#'); n1=j; ch=b[0]=a[0]; printf("步骤\t 文法\t 分析串\t\t 分析字符\t 剩余串\n"); f=E1(); if (f==0) return 0; if (ch=='#') { printf("accept\n"); p=0; x=d[p];
while(x!='#') { printf("%c",x);p=p+1;x=d[p]; } }else { printf("错误!\n"); printf("回车返回\n"); getchar(); getchar(); return 0; } printf("\n"); printf("回车返回\n"); getchar(); getchar(); } int E1() { int f,t; printf("%d\tE-->TG\t",total);total++; flag=1; input(); input1();
f=T(); if (f==0) return(0); t=G(); if (t==0) return(0); else return(1); } int E() { int f,t; printf("%d\tE-->TG\t",total);total++; e[0]='E';e[1]='=';e[2]='>';e[3]='T';e[4]='G';e[5]='#'; output(); flag=1; input(); input1(); f=T(); if (f==0) return(0); t=G(); if (t==0) return(0); else return(1); } int T()
{ int f,t; printf("%d\tT-->FS\t",total);total++; e[0]='T';e[1]='=';e[2]='>';e[3]='F';e[4]='S';e[5]='#'; output(); flag=1; input(); input1(); f=F(); if (f==0) return(0); t=S(); if (t==0) return(0); else return(1); } int G() { int f; if(ch=='+') { b[i1]=ch; printf("%d\tG-->+TG\t",total);total++; e[0]='G';e[1]='=';e[2]='>';e[3]='+';e[4]='T';e[5]='G';e[6]='#'; output(); flag=0;
input();input1(); ch=a[++i1]; f=T(); if (f==0) return(0); G(); return(1); } printf("%d\tG-->^\t",total);total++; e[0]='G';e[1]='=';e[2]='>';e[3]='^';e[4]='#'; output(); flag=1; input();input1(); return(1); } int S() { int f,t; if(ch=='*') { b[i1]=ch;printf("%d\tS-->*FS\t",total);total++; e[0]='S';e[1]='=';e[2]='>';e[3]='*';e[4]='F';e[5]='S';e[6]='#'; output(); flag=0; input();input1();
ch=a[++i1]; f=F(); if (f==0) return(0); t=S(); if (t==0) return(0); else return(1);} printf("%d\tS-->^\t",total);total++; e[0]='S';e[1]='=';e[2]='>';e[3]='^';e[4]='#'; output(); flag=1; a[i1]=ch; input();input1(); return(1); } int F() { int f; if(ch=='(') { b[i1]=ch;printf("%d\tF-->(E)\t",total);total++; e[0]='F';e[1]='=';e[2]='>';e[3]='(';e[4]='E';e[5]=')';e[6]='#'; output(); flag=0;
分享到:
收藏