В dragon book Л.Л. грамматика определяется следующим образом:Почему грамматика 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. Но я не знаю, является ли левая рекурсия FIRST(SA)
и FOLLOW(S)
не разделенной, или есть какая-то другая причина? Положите это по-другому, верно ли, что каждая леворекурсивная грамматика будет иметь производство, которое нарушит условие 2 грамматики LL?
'' FIRST [1] (SA) '' '' {a} ''. – Apalala
Теоретическая проблема заключается в том, что '' LA (S-> SA) '' и '' LA (S-> e) '' оба содержат '' a''. См. Мой ответ для более интуитивного объяснения. – Apalala