...
Jinak spis nez Yacc doporucuju pouzivat ANTLR a sousivejici materialy (maji je na webu).
U nás jsme na ANTLR přešli komplet před cca dvěma lety. Jsou tam tři chytáky:
1. Je to LL. Pokud tazatel už má hotovou gramatiku ve verzi pro YACC (který je LALR), tak bude muset investovat trochu času do přepsání pro ANTLR. Pokud se jedná o hodně jednoduchý DSL, tak by té práce nemělo být hodně.
2. ANTLR má vlastní lexer. A nám se moc nepodařilo ho přesvědčit, aby ho nechtěl. Vzdali jsme to zejména proto, že jeho lexer je vlastně hodně silný. Napsat pravidla pro něj nakonec bylo docela triviální.
3. ANTLR není určen k tomu, aby překládal. Do gramatiky se nepíší instrukce o tom, co se má zapsat na výstup. Styl práce je v tom, že vám ANTLR parsuje vstup a vytváří parse tree. To můžete ihned procházet přes visitora nebo později přes listener. Je to trochu jiný styl práce než YACC, protože si musíte přímo napsat kód, který bude řešit "vstoupil jsem do terminálu WHILE, co s tím?"
Přijde mi, že to je docela dost odlišností od YACC. S ohledem na původní dotaz nejspíš až příliš.
Já přechodu na ANTLR nelituji, ale jednoduché to nebylo. Používáme to třebas na parsování PL/SQL - generuje nám to komplet dokumentaci včetně referencí odkud je co voláno, kde co z čeho čte, co mění a co zapisuje, syntax highlighted převod do HTML apod. Času a práce je v tom utopeno hodně, ale ANTLR v tom pomohl.