Recursive Descent Parser für Ausdrücke in Java

Home| JDBC| Sudoku| Applet| Produkte

Für wen ist dieser Code ?

Wer einen vollständigen Parser sucht, ist hier an der falschen Adresse. Der Code wurde geschrieben um zu zeigen, wie so ein Parser funktioniert, und nicht als Basis für weiterführende Projekte.

Was kann der Parser ?

Er nimmt einen String mit einem Ausdruck in der Form "(11+12)*13" und liefert dafür einen Syntaxbaum zurück. Als Operanden sind nur Integer erlaubt, als Operatoren "*", "/", "+" und "-".

Der Syntaxbaum besteht aus Knoten dieser Klasse:

public class Node
{
   /** Content of the node */
   protected String string ;

   /** Reference to the left subtree */
   protected Node left ;

   /** Reference to the right subtree */
   protected Node right ;

   // Konstruktor, Setter und Getter: siehe Source
}

Wie Sie sehen, gibt es hier bloss einen String, der den Operator oder den Operanden aufnimmt. Wegen dieser Vereinfachung gehen viele Informationen verloren, die der Parser herausgeknobelt hat.

Beachten Sie auch, dass der Eingabestring keinen Whitespace enthalten darf, sonst wird eine ParseException geworfen.

Sourcen

Wenn Sie jetzt noch lesen, dann wollen Sie vermutlich den Code mal genauer ansehen oder sogar ausprobieren. Hier ist er:

Der Code für den Node Der Parser ParseException für ungütige Expressions Ein simples main-Programm

Online-Dokumentation

Aus den Javadoc-Kommentaren in den Sourcen habe ich eine Online-Dokumentation generiert.

Verbesserungsvorschläge

Mit kleinem Aufwand könnte man den Parser stark verbessern:

Autor

Autor dieser Seite ist Peter Tellenbach von Heimetli Software AG