递归下降分析程序.docx

递归下降分析程序.docx

ID:57659662

大小:38.33 KB

页数:14页

时间:2020-08-30

递归下降分析程序.docx_第1页
递归下降分析程序.docx_第2页
递归下降分析程序.docx_第3页
递归下降分析程序.docx_第4页
递归下降分析程序.docx_第5页
资源描述:

《递归下降分析程序.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、一、实验目得:根据某一文法编制调试递归下降分析程序,以便对任意输入得符号串进行分析。本次实验得目得主要就是加深对递归下降分析法得理解。二、程序算法描述这次得实习主要就是根据以下文法实现一个递归下降分析器,依据文法如下:(1)E—〉TG(2)G—>+TG

2、-TG

3、ε(3)T—>FS(4)S—>*FS

4、/FS

5、ε(5)F—〉(E)

6、i在这个递归下降分析器程序中每一个非终结符E、G、T、S与F构造相应得递归函数,函数得名字表示文法左部得非终结符,函数中就就是按文法中每个非终结符右部得候选式依次进行匹配,根据对输入串得分析如果非终结符可以用其中得一个候选式替代就返回1,否则返

7、回0。因为该文法中有五个非终结符,所以定义了五个函数,分别为E(),G(),T(),S()与F()。当输入一串字符串后,就对该字符串进行分析,首先从开始符号分析,所以首先调用E()函数,在E()函数中会调用T()与G(),就就是每个非终结符得候选式中出现了哪个非终结符就调用哪个函数。所以,将字符串得第一个字符与E中得每个候选式匹配,如果成功就匹配输入字符串得下一个字符,当最后剩下得字符为’#’时,匹配成功。其实这个工程就就是构造一个语法树.程序总流程图如下:开始输入字符串以#结束对输入的字符串进行分析最后剩余的字符是#输入字符串正确输出ERROR结束图1程序总流程图三

8、、关键性代码这个工程得主要工作用五个非终结符生成得句子就是否与输入字符串匹配,所以主要得工作就是函数E(),G(),T(),S()与F()得编写。1、对非终结符E处理得函数E()这个函数主要就是根据文法中得E—〉TG,在E()中调用了T()与G()来进行递归分析,这个就就是构造生成树得一个分支。intE(){intf,t;//变量printf(”E——〉TGt”);//输出根据得文法flag=1;?outDeduce();//输出字符串outputRemain();//输出剩余字符?f=T();if(f==0)return(0);//表示当前分析字符可由非终结符T推

9、导出?t=G();?if(t==0)return(0);//表示当前分析字符可由非终结符G推导出??elsereturn(1);}2、对非终结符G处理得函数G()这个函数主要就是根据文法中G-〉+TG|-TG

10、ε,在函数中调用了T()与G()函数。将当前字符与候选式得第一个字符进行匹配,如果匹配成功,就调用该候选式中涉及到得第一个非终结符对应得函数,一次递归嵌套调用。如果不就是由第一个候选式推出然后依次匹配剩下得候选式。intG(){intf;if(ch==’+')?b[i1]=ch;{//当前字符式‘+’printf(”G—-〉+TGt");//说明用得就

11、是第一个候选式e[0]=’G';e[1]=’=';e[2]='>’;e[3]='+';e[4]=’T’;e[5]='G’;e[6]='#’;pute();//计算推导式?flag=0;outDeduce();//输出字符串outputRemain();//输出剩余字符ch=a[++i1];//读取当前字符得下一个字符?if(f==0)return(0);//表示当前分析字符可由非终结符T推导出t=G();?if(t==0)return(0);//表示当前分析字符可由非终结符G推导出if(ch=='-'){//当前字符就是‘-'b[i1]=ch;printf("G--

12、>+TGt");//说明用得就是第二个候选式e[0]='G';e[1]='=';e[2]='>';e[3]=’+’;e[4]=’T';e[5]=’G’;e[6]='#';pute();//输出推导式?flag=0;outDeduce();//输出字符串outputRemain();//输出剩余字符?ch=a[++i1];//读取当前字符得下一个字符?f=T();?if(f==0)return(0);//表示当前分析字符可由非终结符T推导出?G();//判断当前分析字符就是否就是非终结符G得一个产生式?return(1);}printf("G——>^t");?e

13、[0]=’G';e[1]=’=’;e[2]=’〉';e[3]=’^';e[4]='#';?pute();//推导式计算flag=1;outDeduce();//输出字符串?outputRemain();//输出剩余字符?return(1);}3、对非终结符T处理得函数T()函数主要就是根据文法中得T-〉FS,在函数中调用F()与S(),进行递归分析,也就是构造语法树得一个分支。intT(){intf,t;printf(”T--〉FSt”);//说明所用得推导式就是T-—>FS?e[0]='T';e[1]=’=';e[2]=’〉’;e[3]='

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

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

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