Ho usato lex/yacc e ora sto cercando di passare a ANTLR. La principale preoccupazione è che ANTLR è un parser LL (*) a differenza di yacc che è LALR. Sono abituato a pensare dal basso e non so esattamente quale sia il vantaggio delle grammatiche LL. La gente dice che le grammatiche LL sono più facili da capire e più popolari in questi giorni. Ma sembra che i parser LR siano più potenti per es. I parser LL non sono in grado di gestire le ricorsioni a sinistra, anche se sembrano esserci alcuni rimedi.parser LALR vs LL
Quindi la domanda è qual è il vantaggio delle grammatiche LL su LALR? Lo apprezzerei se qualcuno potesse darmi qualche esempio. Anche i collegamenti ad articoli utili sarebbero fantastici.
Grazie per il vostro aiuto in anticipo!
(vedo questa è una grande risorsa:. What advantages do LL parsers have over LR parsers?, ma sarebbe stato meglio con alcuni esempi)
Se qualcuno ti dà il generatore di parser, per definizione quello che fa è "facile da implementare". In tal caso, scegli il generatore di parser che gestisce facilmente la più ampia classe di lingue, per ridurre al minimo i tuoi sforzi. Dal punto di vista, IMHO, LR vince abbastanza bene su LL. GLR vince abbastanza bene su LR. –
Sono d'accordo, ma tuttavia LL è ancora facile da implementare. Stavo rilevando che LR di solito richiede l'uso di uno strumento. Trovo molto interessante il fatto che tu possa scrivere a mano una discesa ricorsiva e che il codice e la grammatica vadano di pari passo. –
Sì, i suoi intriganti e parser che costruiscono le persone dovrebbero conoscerli. Man mano che le tue grammatiche diventano grandi, è scomodo forzarle in LL, e in alcuni punti (piuttosto piccoli) la convenienza di LR vince sulla semplicità concettuale nella tua testa. LR è abbastanza facile da capire se non stai costruendo il generatore di parser, e non è come se non ce ne fossero molti in giro. –