Nella dragon book, LL grammatica è definita come segue:Perché una grammatica LL non può essere lasciata ricorsiva?
Una grammatica è LL se e solo se per qualsiasi produzione A -> a|b
, valgono le seguenti due condizioni.
FIRST(a)
eFIRST(b)
sono disgiunti. Ciò implica che essi non possono entrambi trarreEMPTY
Se
b
può derivareEMPTY
, quindia
non può trarre alcun stringa che inizia conFOLLOW(A)
, cioèFIRST(a)
eFOLLOW(A)
devono essere disgiunti.
E so che LL grammatica non può essere lasciato ricorsivo, ma qual è la ragione formale? Suppongo che la grammatica ricorsiva a sinistra contraddica la regola 2, giusto? per esempio, ho scritto seguente grammatica:
S->SA|empty
A->a
Perché FIRST(SA) = {a, empty}
e FOLLOW(S) ={$, a}
, poi FIRST(SA)
e FOLLOW(S)
non sono disgiunti, in modo da questa grammatica non è LL. Ma non so se è la ricorsione a sinistra a fare FIRST(SA)
e FOLLOW(S)
non disgiunti, o c'è qualche altra ragione? Mettilo in un altro modo, è vero che ogni grammatica ricorsiva a sinistra avrà una produzione che violerà la condizione 2 della grammatica LL?
'' FIRST [1] (SA) '' è '' {a} ''. – Apalala
Il problema teorico è che '' LA (S-> SA) '' e '' LA (S-> e) '' entrambi contengono '' a''. Vedi la mia risposta per una spiegazione più intuitiva. – Apalala