七月网

递归下降(递归下降识别器)

七月网4410

一、求解编译原理题 构造递归下降分析程序

1、兄弟,其实这个问题不难,只是我感觉你给的问题不完全,不知道怎么给你解决,要不我给你个递归下降分析方法分析文法的例子吧,你先看看。我估计你看了这个后绝对就明白整体的分析思想了~

递归下降(递归下降识别器)

2、S->do s1 begin s2 end while s2

3、B->VAL//VAL是所有非关键字的字符字符组和数字

4、m->+|-|*|/|>|<|=

5、/////////////*语法递归分析*/////////////////

6、 else{cout<<"error'B'"<<endl;return 0;}

7、 else{cout<<"error'A'"<<endl;return 0;}

8、 else{cout<<"error'OP'"<<endl;return 0;}

9、 else{cout<<"条件语句右部出错"<<endl;return 0;}

10、 else{cout<<"条件语句缺少运算符"<<endl;return 0;}

11、 else{cout<<"条件语句左部出错"<<endl;return 0;}

12、 else{cout<<"循环语句右部出错"<<endl;return 0;}

13、 else{cout<<"循环语句缺少运算符"<<endl;return 0;}

14、 else{cout<<"循环语句左部出错"<<endl;return 0;}

15、 cout<<"语法分析成功!"<<endl;

16、 else{cout<<"error'while'"<<endl; return 0;}

17、 else{cout<<"error'end'"<<endl; return 0;}

18、 else{cout<<"error'begin'"<<endl; return 0;}

19、 else{cout<<"error'do'"<<endl; return 0;}

20、///////////////////////语法分析结束////////////////////////

21、词法分析中单词代号词法分析中可识别到的所有单词

22、5除关键字以外的所有字符或字符串

23、自己好好琢磨琢磨吧,其实思想挺简单的~

二、递归下降分析方法是一种(50)方法。

本题考查编译原理知识点。递归下降法(RecursiveDescentMethod),是指对文法的每一非终结符号,都根据相应产生式各候选式的结构,为其编写一个子程序(或函数),用来识别该非终结符号所表示的语法范畴。递归下降法是一种语法分析方法,下降即自上而下之意。本题选择B选项。

三、为什么说递归效率低

1、(2)个别问题的递归解法,其算法的低效性。

2、通常递归的深度很大造成的。对于这一点当然应该有程序员编码时,来衡量和把握。win32中一个新建的线程,默认的栈通常在 1 MB大小。那么如果你的递归函数,深度很大,显然程序员应该对这种情况有预估,和对风险的避免。

3、这就和你选择,把内存分配在栈上还是堆上,会考虑到分配的内存大小的因素一样。

4、当然,如果在函数内分配很大的栈上空间,在函数体内定义一个很大的数组,这样不需要很深的深度,也会让栈溢出。这当然也是程序员自己应该控制的。

5、(2)个别问题的递归解法,算法的低效。

6、这个低效主要在于这个问题的算法本身。而不是在递归这种方法上。比如说求斐波那契的某一项,子问题会大量重复出现,会产生很多重复计算,这个是很多算法书上,是用来引导出动态规划或者查表法的。

7、这主要是算法本身的效率问题,而不是递归的问题。这一点是必须应该明确的。

8、(3)我们可以看到,在和树有关的算法中,经常会有递归函数。

9、例如,遍历文件夹,删除注册表的某一个 key(及其所有子key)。

10、尤其对一般树的前序,后序遍历,二叉树的中序遍历。

11、这主要原因是因为树的定义,就是“递归性”的:

12、树就是,某一个节点有多个子节点,每个子节点是一个树。

13、我们再此可以看到,递归的显著优点,是对解的描述的直观性,代码的简洁性。

递归下降的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于递归下降识别器、递归下降的信息别忘了在本站进行查找哦。