为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

递归下降分析法

2019-09-16 16页 doc 31KB 17阅读

用户头像

is_196623

暂无简介

举报
递归下降分析法递归下降分析法 实验2.1  递归下降分析法 一、实验目的 1. 根据某一文法编制递归下降分析程序,以便对任意输入的符号串进行分析。 2. 本次实验的目的是加深对递归下降分析法的理解。 二、实验平台 Windows + VC + Win32 Console 三、实验内容 对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E→TG (2)G→+TG|-TG (3)G→ε (4)T→FS (5)S→*FS|/FS (6)S→ε (7)F→(E) (8)F→i 程序输入/输出示例: 程序现有功能: 输入: ...
递归下降分析法
递归下降法 实验2.1  递归下降分析法 一、实验目的 1. 根据某一文法编制递归下降分析程序,以便对任意输入的符号串进行分析。 2. 本次实验的目的是加深对递归下降分析法的理解。 二、实验平台 Windows + VC + Win32 Console 三、实验内容 对下列文法,用递归下降分析法对任意输入的符号串进行分析: (1)E→TG (2)G→+TG|-TG (3)G→ε (4)T→FS (5)S→*FS|/FS (6)S→ε (7)F→(E) (8)F→i 程序输入/输出示例: 程序现有功能: 输入: 一个以 # 结束的符号串(包括 + * ( )i # ): 例如:i+i*i# 输出:    (1) 详细的分析步骤, 包括 每一步使用的产生式、已分析过的串、当前分析字符、剩余串, (2) 分析结果:accept 或者 error (3) 推导序列 需要完善的功能: (1)示例程序只能完成 + 、* 、(、)的语法分析, 请加入 - 和 / 的语法分析 (2)将示例程序输出的推导序列中的推导符号由 = 改为 => 四、程序代码 #include #include #include #include char a[50], b[50], d[200], e[10]; char ch; int numOfEq,i1=0,flag=1,n=6; int E(); int E1(); int T(); int G(); int S(); int F(); void input(); void input1(); void output(); //================================================ void main()                      /*递归分析*/ { int foe1,i=0; char x; d[0]='E'; d[1]='='; d[2]='>'; d[3]=' '; d[4]='T'; d[5]='G'; d[6]='#'; printf("请输入字符串(长度<50,以#号结束)\n"); do{ scanf("%c",&ch); a[i]=ch; i++; }while(ch!='#'); numOfEq=i; ch=b[0]=a[0]; printf("文法\t分析串\t\t分析字符\t剩余串\n"); foe1=E1(); if (foe1==0) return; if (ch=='#')  { printf("accept\n"); i=0; x=d[i]; while(x!='#') { printf("%c",x); i=i+1;x=d[i];          /*输出推导式*/ } printf("\n"); } else { printf("error\n"); printf("回车返回\n"); getchar();getchar(); return; } } //================================================ int E1() { int fot,fog; printf("E->TG\t"); flag=1; input();input1(); fot=T(); if (fot==0) return(0); fog=G(); if (fog==0) return(0); else return(1); } //================================================ int E() {  int fot,fog; printf("E->TG\t"); e[0]='E';e[1]='=';e[2]='>';e[3]=' ';e[4]='T';e[5]='G';e[6]='#'; output(); flag=1; input();input1(); fot=T(); if (fot==0) return(0); fog=G(); if (fog==0) return(0); else return(1); } //================================================ int T() { int fof,fos; printf("T->FS\t"); e[0]='T';e[1]='=';e[2]='>';e[3]=' ';e[4]='F';e[5]='S';e[6]='#'; output(); flag=1; input();input1(); fof=F(); if (fof==0) return(0); fos=S(); if (fos==0) return(0); else return(1); } //================================================ int G() {  int fot; if(ch=='+') {  b[i1]=ch; printf("G->+TG\t"); e[0]='G';e[1]='=';e[2]='>';e[3]=' ';e[4]='+';e[5]='T';e[6]='G';e[7]='#'; output(); flag=0; input();input1(); ch=a[++i1]; fot=T(); if (fot==0) return(0); G(); return(1); } else if(ch=='-') {  b[i1]=ch; printf("G->-TG\t"); e[0]='G';e[1]='=';e[2]='>';e[3]=' ';e[4]='-';e[5]='T';e[6]='G';e[7]='#'; output(); flag=0; input();input1(); ch=a[++i1]; fot=T(); if (fot==0) return(0); G(); return(1); } printf("G->^\t"); e[0]='G';e[1]='=';e[2]='>';e[3]=' ';e[4]='^';e[5]='#'; output(); flag=1; input();input1(); return(1); } //================================================ int S() { int fof,fos; if(ch=='*') { b[i1]=ch;printf("S->*FS\t"); e[0]='S';e[1]='=';e[2]='>';e[3]=' ';e[4]='*';e[5]='F';e[6]='S';e[7]='#'; output(); flag=0; input();input1(); ch=a[++i1]; fof=F(); if (fof==0) return(0); fos=S(); if (fos==0) return(0); else return(1); } else if(ch=='/') { b[i1]=ch;printf("S->/FS\t"); e[0]='S';e[1]='=';e[2]='>';e[3]=' ';e[4]='/';e[5]='F';e[6]='S';e[7]='#'; output(); flag=0; input();input1(); ch=a[++i1]; fof=F(); if (fof==0) return(0); fos=S(); if (fos==0) return(0); else return(1); } printf("S->^\t");○ e[0]='S';e[1]='=';e[2]='>';e[3]=' ';e[4]='^';e[5]='#'; output(); flag=1; a[i1]=ch; input();input1(); return(1); } //================================================ int F() {  int f; if(ch=='(') { b[i1]=ch;printf("F->(E)\t"); e[0]='F';e[1]='=';e[2]='>';e[3]=' ';e[3]='(';e[4]='E';e[5]=')';e[7]='#'; output(); flag=0; input();input1(); ch=a[++i1]; f=E(); if (f==0) return(0); if(ch==')') { b[i1]=ch;printf("F--(E)\t"); flag=0;input();input1();  ch=a[++i1]; } else { printf("error\n"); return(0); } } else if(ch=='i') { b[i1]=ch;printf("F->i\t"); e[0]='F';e[1]='=';e[2]='>';e[3]=' ';e[4]='i';e[5]='#'; output(); flag=0;input();input1(); ch=a[++i1]; } else { printf("error\n");return(0); } return(1); } //================================================ void input()                      { int i=0; for (;i<=i1-flag;i++) printf("%c",b[i]);                /*输出分析串*/ printf("\t\t"); printf("%c\t\t",ch);                  /*输出分析字符*/ 
/
本文档为【递归下降分析法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索