package uebung06;import java.util.Map;import java.util.Stack;import java.util.StringTokenizer;public class Formula implements UnaryPredicate { /** erlaubte Operationen */ private final static int NOT = 0; private final static int AND = 1; private final static int OR = 2; private final static int PREDICATE = 3; private static int type(String tok) { if (tok.equals("NOT")) return NOT; else if (tok.equals("AND")) return AND; else if (tok.equals("OR")) return OR; else return PREDICATE; } private UnaryPredicate executable; /** * erzeugt ein unäres Prädikat, das beliebig oft ausgeführt werden kann * * @param frm eine Formel in Postfix-Form mit AND, OR und NOT * @param namespace ein Verzeichnis der Praedikate. Die Namen der Praedikate * sind die terminalen Symbole der Formel. */ public Formula(String frm, Map namespace) { executable = compile(frm, namespace); } /** * wendet das unäre Prädikat (die Formel) auf ein Objekt (die Eingabe) an */ public boolean execute(Object obj) { return executable.execute(obj); } /** * wandelt eine Formel in Postfix-Notation in ein unäres Prädikat um * * @return unäres Prädikat das der Formel entspricht */ private UnaryPredicate compile(String frm, Map namespace) { Stack stack = new Stack(); // Stack von unären Prädikaten StringTokenizer s = new StringTokenizer(frm); while (s.hasMoreTokens()) { String token = s.nextToken(); switch(type(token)) { case NOT:// was ist hier zu tun? break; // break aus der switch anweisung? case AND:// tuwas break; case OR:// break; case PREDICATE:// hol das Objekt aus der Map und pack's auf den Stack break; } } return executable; // TODO richtiges return }}