77问答网
所有问题
当前搜索:
编译原理左递归消除
编译原理左递归消除
?
答:
间接
左递归
转直接左递归 B代入A:A ->(Sb|b)c|a -> Sbc|bc|a A代入S:S -> S(Sbc|bc|a)|(Sbc|bc|a)b|b|c -> SSbc|Sbc|Sa|Sbcb|bcb|ab|b|c
消除
直接左递归 S->bcbS'|abS'|bS'|cS'S'->SbcS'|bcS'|aS'|bcbS'|ε S'还是有直接左递归,继续消除 S'->bcS'T|aS'T|...
编译原理
的
消除左递归
是怎么回事啊?
答:
就是有
左递归
,语法分析里的递归下降法和LL(1)就不能处理啦,因为程序会陷入递归而无法前进。而CFG A -> bA'A' -> bA'|e 和前面一个表达的语言是一样的,但所有语法的第一项都是终结符,就消除了左递归。有消除左递归的算法,一般
编译原理
书上会有介绍,不是很复杂。
编译原理
语法分析中
消除左递归
的问题。比如A→Ab|c中为什么说它是左递归...
答:
c∈FIRST(A),所以当预测分析的栈顶出现非终结符A,而输入字符串最左边为c时,就不知道用产生式A->Ab还是A->c了。无法构造预测分析表。比如输入字符串为cbb,我们人当然容易知道是A->Ab->Abb->cbb了,但是电脑没那么聪明,如果不
消除左递归
,只有回溯了。
编译原理
中的
左递归
答:
通俗点讲:
左递归
就是情况1所说的“->”两边都含有同一个非终结符;情况2所说的A->Ba中“->”后面的B 与 B->Ab中“->”前面的B是相同的非终结符 这两种情况就叫作左递归。
消除
下列文法G[S]的
左递归
,获得与其等价的、无左递归的文法G’[S]。
答:
1)Q→Rb︱b (2)R→Sa︱a (3)将第1个式子带入第3个式子,再将第2个式子也带入,得 R->Rbca|bca|ca|a 对其
消除左递归
,得 R->(bca|ca|a)R'R'->bcaR'|ε 最终文法变为:S->Qc|c Q->Rb|b R->(bca|ca|a)R'R'->bcaR'|ε 参考资料:《
编译原理
》张素琴等人编著 ...
编译原理
语法分析中,求first,follow集合时,要
消除左递归
吗
答:
如果题目是单纯求first、follow集合,不需要
消除左递归
.但是,如果求first、follow集合是为了判断文法是否为LL(1)文法的话,可以直接得出否定的结论(因为含有左递归的文法绝对不是LL(1)文法).可以先对文法进行改写,一般是消除左递归和提取左公共因子,然后再判断.
编译原理
中,经过
消除左递归
的文法就一定是LL1文法么?
答:
不一定,还有回溯等其他的情况,判断文法是不是LL1需要计算每个产生式的select集,根据计算结果才能确定
【
编译原理
】自顶向下LL(1)分析中,
消除左递归
和提取左因子的目的是什么...
答:
通常LL(1) 是以函数递归调用来实现的 如文法: A -> A + a | a 代码实现则为:function A(){ A();match('+');Term(a);} 这样你可以看得出死循环了吧...?将文法
消除左递归
后 A -> aA'A' -> +aA'则可以避免这一问题 提出公因式 就像楼上说的一样,避免程序回溯,消除二义性....
编译原理
题,在建立LL(1)语法分析器时,提左因子和
消除左递归
的目的是什么...
答:
消除左递归
是因为LL文法不能处理含有左递归的文法。提左因子只是推后产生式的选择决定,等到获取足够多的输入再作选择。
编译原理
G[S]: S::=a|b|(T) T::=T,S|S怎么消去
左递归
答:
T::=T,S|S 转化为以下两个式子 T::=SK K::=,SK|空 这样就
消除左递归
了~不懂的可以继续问我~
1
2
3
涓嬩竴椤
其他人还搜
编译原理消除左递归的方法
编译原理消除左递归例题
编译原理什么是左递归
编译原理的间接左递归
编译原理消除二义性
编译原理消除回溯的方法
编译原理消除回溯例题
如何消除左递归
消除左递归实现