import dibo.*; public class Aufgabe28 { public static char lookahead; public static void nextToken() { lookahead = Terminal.readChar(); } public static void match(char token) { if (lookahead == token) { nextToken(); } else { System.out.println("Fehler: ungueltiges Token!"); } } public static int expression() { int value1 = term(); if (lookahead == '+') { match('+'); int value2 = term(); return value1 + value2; } else { return value1; } } public static int term() { int value1 = factor(); if (lookahead == '*') { match('*'); int value2 = factor(); return value1 * value2; } else { return value1; } } public static int factor() { if (isDigit(lookahead)) { int value = getValue(lookahead); match(lookahead); return value; } else if (lookahead == '(') { match('('); int value = expression(); match(')'); return value; } else { System.out.println("Fehler: ungueltiges Token!"); return 0; } } public static void main(String[] args) { try { nextToken(); int result = expression(); System.out.println("Result: " + result); } catch (Exception e) { System.out.println(e); } } // Hilfsfunktionen public static boolean isDigit(char zeichen) { return (zeichen >= '0') && (zeichen <= '9'); } public static int getValue(char zeichen) { return (int)(zeichen-'0'); } }