@renee, betreffs Unterschied YAPP, RecDescent.
Beides sind Parser-Generatoren.
YAPP ist quasi eine Perl-Implementierung des (bekannten?) YACC.
Ist quasi ein standalone-Programm, was aus einer entsprechenden Eingabe ein Perl-Modul erstellt, das man dann in seinem Skript used. Der erzeugte Parser ist ein tabellengesteuerter LALR-Parser aber der Anwender muss einen eigenen Lexer (Tokenizer) zur Verfügung stellen. Zwar gibt es
ParseLex (analog zu YACC) aber bei den Möglichkeiten, die Perl mit Regexen bieten lohnt das m. E. nicht, außer man hat schon fertige YACC und LEX-Dateien vor sich.
RecDescent generiert ebenfalls einen Parser, aber dynamisch im Konstruktor, dabei werden die Grammatik-Regeln direkt in Funktionen (Methoden) umgesetzt. Der Lexer entfällt, da direkt Strings oder Regexp in die Produktionen geschrieben werden.
Aufgrund des Ansatzes ist ein YAPP-Parser in der Ausführung schneller als ein durch RecDescent erzeugter. RecDescent ist aber schneller in der Vorbereitung und für Prototypen und kleine Applikationen allemal brauchbar.
Der erwähnte yagg ist wohl kein Parsergenerator, sondern er erzeugt zu einer Grammatik aller daraus herleitbaren Strings bis zu einer vorgegebenen Länge, während ein Parser ja einen String nimmt und prüft, ob er durch eine gegebene Grammatik erzeugt werden kann und durch welchen Ableitungsbaum.
I sense a soul in search of answers.