Aufruf/Verwendung von Lexer, Parser und Interpreter

Wie man die Klassen Lexer, Parser und Interpreter benutzt, ist aus folgendem Testprogramm leicht ersichtlich:

public class InterpreterTest {
 
	/**
	 * @param args
	 */
	public static void main(String[] args) {
 
		try {
			/**
			 * Der Text wird hier Stringkonstante definiert. Er könnte ebenso
			 * gut gerade vom Benutzer eingegeben worden sein. Wichtig ist: Der
			 * Java-Compiler compiliert hier nichts. Es wird alles durch Lexer,
			 * Parser und Interpreter erledigt.
			 */
			String text = "1 + 2*(3 + a) - (7-b)";
 
			System.out.println("Eingabetext:\n" + text);
 
			/**
			 * Zerlegung des Programmtextes in Tokens:
			 */
			Lexer l = new Lexer(text);
			l.lex();
			System.out.println("\nTokens:\n" + l.toString());
 
			/**
			 * Bauen des Abstract Syntax Tree:
			 */
			Parser p = new Parser(l.getTokenListe());
 
			p.parse();
 
			System.out.println("\nParsebaum (abstract syntax tree):\n" + p.toString());
 
			/**
			 * Berechnung eines Termwerts für die Belegung a = 5 und b = 1 
			 */
 
			Interpreter i = new Interpreter();
			i.belegeVariable("a", 5);
			i.belegeVariable("b", 1);
 
			System.out.println("\nVariablenbelegung:\n"
					+ i.getBelegungAlsString());
			System.out
					.println("\nTermwert:\n" + i.interpretiere(p.getWurzel()));
 
		} catch (Exception e) {
			// Falls ein Fehler bei der Übersetzung aufgetreten ist:
			e.printStackTrace();
		}
 
	}
 
}

Die Ausgabe des Beispielprogramms sieht so aus:

Eingabetext:
1 + 2*(3 + a) - (7-b)

Tokens:
zahl[1.0] plus zahl[2.0] mal klammerAuf zahl[3.0] plus text[a] klammerZu minus klammerAuf zahl[7.0] minus text[b] klammerZu

Parsebaum (abstract syntax tree):
minus
   plus
      zahl[1.0]
      mal
         zahl[2.0]
         plus
            zahl[3.0]
            text[a]
   minus
      zahl[7.0]
      text[b]


Variablenbelegung:
b = 1.0
a = 5.0


Termwert:
11.0

Hier geht's weiter mit der Beschreibung der Syntax durch EBNF.
Danach wird die Programmiersprache deutlich erweitert, so dass sie auch Zuweisungen, Wiederholungen und eine einfache Print-Ausgabe besitzt.

Drucken/exportieren
QR-Code
QR-Code programmieren:verwendung:start (erstellt für aktuelle Seite)