Mal eben schnell einen Parser für eine einfache Syntax bauen

Für die im letzten Artikel erwähnt Lernsoftware (über die ich sicher auch noch einen Artikel schreiben werde), brauchte ich einen Parser. Also ein Stück Software, das dazu in der Lage ist Java-Code zu lesen und in strukturierter Form (Abstract Syntax Tree) aufzubereiten.

Da ich keinen der üblichen Parser-Generatoren verwenden wollte (der Parser sollte zu Laufzeit gebaut werden) und ich recht bewandert im Compiler- bzw. Parser-Bau bin (schließlich hatte ich 2003 meinen eigenen Pascal zu Assembler Compiler in Java geschrieben), beschloß ich meinen eigenen Parser-Generator zu bauen. Dieser sollte wie gesagt nicht wie üblich Code generieren sondern einfach zur Laufzeit eine Syntax einlesen und diese dann parsen können. Nach Durchsicht meiner alten Aufzeichnungen hatte ich aber keine Lust wie damals wieder einen vollständigen SLR-Parser zu bauen (es war damals schon meiner Faulheit geschuldet, dass es keine LALR-Parser geworden ist ;) ), also baute ich einen einfachen Recursive Decent Parser. Der ist zwar nicht ganz so mächtig wie der SLR-Parser, aber für einfache Syntax reicht es. Nämlich genau für solche Syntax bei der man immer schon am ersten Token erkennen kann, in welche Regel abgestiegen werden muss.

Dieser Parser-Library befindet sich mittlerweile im Maven Central Repository und der Quellcode ist bei github einsehbar. Da ich leider auch nicht groß darin bin Dokumentationen zu schreiben, muss ich hier auf meine Implementierung der 7GUIs verweisen, bei der ich diesen einfachen Parser-Generator verwendet habe um Excel ähnliche Ausdrücke einzulesen. Zu sehen in der FormulaSyntax.java.

Über das 7GUIs Projekt werde ich nochmal gesondert schreiben, da ich hier einen (wie ich finde) sehr interessanten Ansatz zur GUI-Programmierung getestet habe, mit dem ich mich in letzter Zeit viel beschäftige. Functional Reactive Programming… Oder kurz auch FRP genannt. Aber dazu später mehr.