【发布时间】:2013-04-16 10:21:43
【问题描述】:
在dragon book中,LL语法定义如下:
当且仅当对于任何产生式A -> a|b,满足以下两个条件时,语法才是 LL。
FIRST(a)和FIRST(b)不相交。这意味着它们不能同时派生EMPTY-
如果
李>b可以派生EMPTY,那么a不能派生任何以FOLLOW(A)开头的字符串,即FIRST(a)和FOLLOW(A)必须是不相交的。
而且我知道 LL 语法不能递归,但形式上的原因是什么?我猜左递归语法会与规则 2 相矛盾,对吧?例如,我写了以下语法:
S->SA|empty
A->a
因为FIRST(SA) = {a, empty}和FOLLOW(S) ={$, a},那么FIRST(SA)和FOLLOW(S)不是不相交的,所以这个语法不是LL。但是不知道是不是左递归使得FIRST(SA)和FOLLOW(S)不相交,还是有其他原因?换句话说,每个左递归文法都会有一个违反LL文法条件2的产生式吗?
【问题讨论】:
-
FIRST[1](SA)是{a}。 -
理论上的问题是
LA(S->SA)和LA(S->e)都包含a。请参阅我的答案以获得更直观的解释。
标签: grammar ll left-recursion