88问答网
所有问题
当前搜索:
文法的左递归包括循环递归吗
若一个
文法
是
递归
的,则它产生的句子个数是
答:
如果一个文法是递归的(
左递归
或右递归),则产生的句子个数可能是无限的,因为可以通过不断递归调用规则,产生无限长的句子。
递归文法
是指在其规则的推导过程中,出现了它本身或者其前导符号。通常被认为递归文法使得描述语言变得简单,但它也可能会导致死
循环
或无限递归,从而使得
文法的
句子个数变为无穷。
如何消除
左递归
答:
一个
左递归的
语法通常有这样的形式 : A-> Aa .而自顶向下的语法分析是无法处理
左递归语法的
。为什么呢?无论是递归分析还是预测分析或者是LL文法分析,在碰到左递归这种语法时都会陷入死
循环
当中。如果我们用递归分析,那么在分析A这个非终结符号的时候就会调用functionA,functionA将A分解成A,a,然后...
自上而下分析
法的
详细解析
答:
首先,是文法的左递归性问题。
一个文法是含有左递归的
,如果存在非终结符P含有左递归的文法将使上述的自上而下的分析过程陷入无限循环。即当试图用P去匹配输入串时,我们会发现,在没有识别任何输入符号的情况下,又得重新要求P去进行新的匹配。其次,由于回溯就碰到一大堆麻烦事情。如果我们走了一大段...
什么是
左递归
答:
左递归
在计算机科学里面,左递归是一种递归的特殊状况。在上下文无关
文法
内里的说法,,若一个非终端符号(non-terminal)r有任何直接的文法规则或者透过多个文法规则,推导出的句型(sentential form)其中最左边的符号 又会出现r,则我们说这个非终端符号r是左递归的。使用类似的方式我们可以定义出某文法本身...
为什么递归下降分析中要消除
左递归
?
答:
A -> Ab -> Abb -> Abbb -> ... 这种无限
循环
显然违反了LL(1)分析法的初衷。为了确保解析器的每一次读取都能产生明确的解析步骤,消除
左递归
就显得尤为必要。因此,一个有效的策略是将
文法
转换为非左递归形式,如:A -> aB (规则1修改) B -> bB | ε (规则2)在这个修改后的文法中,...
为什么在自上而下的
语法
分析中,
文法
不能含有
左递归
和公共左因子_百度知 ...
答:
如果有
左递归
的话,将会陷入不停扩展的死
循环
。如果有公共左因子的话,也无法判断该选择哪个扩展。比如E->EF,
语法
分析程序应该是 E(){ E();F();} 这样,明显是个无限递归。再比如E->aA|aB,当读到a时,分析器无法知道下一步该调用A的扩展函数还是B的扩展函数。
编译原理中
的左递归
答:
1.A->Aa 2.A->Ba B->Ab (A和B属于非终结符,a和b属于终结符)通俗点讲:
左递归
就是情况1所说的“->”两边都含有同一个非终结符;情况2所说的A->Ba中“->”后面的B 与 B->Ab中“->”前面的B是相同的非终结符 这两种情况就叫作左递归。
消除
左递归
及提取左公因子
答:
如果一个
文法
中有一个非终结符号A使得对某个串α存在一个推导A=》Aα,那么这个文法就是
左递归
的。递归分为立即左递归和非立即左递归。立即左递归单步即可看出来,非立即左递归 举个例子:消除立即左递归只需要遵循以下规律进行转换就ok。立即左递归:非立即左递归:和数学中的公因子含义相同,就...
【编译原理】自顶向下LL(1)分析中,消除
左递归
和提取左因子的目的是什么...
答:
通常LL(1) 是以函数递归调用来实现的 如
文法
: A -> A + a | a 代码实现则为:function A(){ A();match('+');Term(a);} 这样你可以看得出死
循环
了吧...?将文法消除
左递归
后 A -> aA'A' -> +aA'则可以避免这一问题 提出公因式 就像楼上说的一样,避免程序回溯,消除二义性....
消除
左递归
的途径:()
答:
消除
左递归
的途径主要有两种,即直接消除左递归和使用左递归的等价变换。首先,左递归是指在一个
文法
规则中,非终结符的展开式以自身开头的情况。例如,在形式语言与自动机理论中,如果有一个文法规则A→Aα|β,那么规则A就是左递归的。消除左递归的方法主要有两种:1. 直接消除左递归:通过改写文法...
1
2
3
4
5
6
7
涓嬩竴椤
其他人还搜
编译原理语法循环的长度
语法分析编译原理
lr文法需要消除左递归吗
消除左递归和回溯
文法的左递归有哪些
编译原理大作业语法分析
编译原理左递归
求first集需要消除左递归吗
左递归和右递归