LL语法排除左递归的正式原因



我现在正在业余时间阅读龙之书。书上说文法是LL 当且仅当对于任何产物a -> a|b,满足以下两个条件。

1) FIRST(a)和FIRST(b)不相交。这意味着它们不能同时派生出EMPTY

2)如果'b'可以派生EMPTY,那么'a'不能派生任何以FOLLOW(a)

开头的字符串

我知道LL解析器一般不能处理左递归,但是如果我创建一个语法

S -> S(S) | EMPTY,

FIRST(S) = {'('} and FOLLOW(S) = {EOF}。这似乎与两条规则都不矛盾,我错过了什么吗?

提前谢谢你,迈克尔。

已经有一段时间了,但我认为following (S) = {EOF,')','('}。

最新更新