В книге драконов грамматика LL определяется следующим образом:
Грамматика LL тогда и только тогда, когда для любого произведения A -> a|b
применяются следующие два условия:
-
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. Но я не знаю, является ли это левая рекурсия make FIRST(SA)
и FOLLOW(S)
непересекающейся, или есть какая-то другая причина? Положите это по-другому, верно ли, что каждая леворекурсивная грамматика будет иметь произведение, которое нарушит условие 2 грамматики LL?