pyParse (bzw. jetzt pynetree)

Es gibt wieder was neues aus der Welt des Compilerbaus von mir:

Nachdem ich mir mal letzte Woche das Paper Packrat Parsers Can Support Left Recursion [Warth, Douglass, Millstein] durchgelesen hatte und den dort gezeigten Algorithmus implementierte, fiel der Groschen: Linksrekursive Grammatiken lassen sich nun DOCH mit einem Nicht-LR-Parser parsen! Also das, wonach ich die ganze Zeit gesucht hatte… oft war ich nah dran, aber es hat dann doch nicht gereicht oder anderweitige Probleme aufgezeigt, die das “proof of concept” nicht werden lassen wollten. Die Lösung ist nun ein modifizierter Packrat-Parser! So ungefährt muss es auch mein lieber Martin Stoilov mit seinem rpatk gelöst haben.

Da ich mir erst nicht so ganz sicher war, ob mein Ansatz jetzt wirklich funktioniert, musste ich zuerst noch ein paar Tests durchführen bzw. es etwas voranbringen… die waren aber diesmal wirklich erfolgreich! Man kann damit arbeiten wie mit einer Grammatik für einen LR-Parser. Einzig und allein die Reihenfolge der Produktionen ist hier zu beachten, was bei einem LR-Parser (wie z.B. libphorward) nicht der Fall ist.

Habe das ganze mal in Python ausprogrammiert und inzwischen schon zu einem kleinen Open Source Projekt gemacht, welches auf den Namen pyParse pynetree hört, und unter der MIT-Lizenz steht.

und gibt

aus.

pyparse kann inzwischen sogar eine BNF-Grammatik ähnlich der libphorward interpretieren (selbstverständlich ist der Parser dafür in pyParse entwickelt!)

pyParse wird wohl dann als erstes mal in ViUR eingebaut… GEIL! 😀