print "term", args[1], "ausdruck -> ausdruck" if args[1] == '+': print " (", args[0], "+", args[2], "->", args[0] + args[2], ")" return args[0] + args[2] elif args[1] == '-': print " (", args[0], "-", args[2], "->", args[0] + args[2], ")" return args[0] - args[2] def satz_action(ausdruck, fragezeichen): print "ausdruck -> s" print " (", ausdruck, "->", ausdruck, ")" return ausdruck p = RecursiveDescentParser(s, lambda t: t[0], lambda t: t[1]) p.setParseAction(s, satz_action) p.setParseAction(zahl, zahl_action) p.setParseAction(faktor, faktor_action) p.setParseAction(term, term_action) p.setParseAction(ausdruck, ausdruck_action) # Erstellt einen einfachen Lexer lex = makeLexer(['+','-','*','/','(',')',('ZAHL', r"[0-9]+"), (None, r"\s+")]) while True: src = raw_input("Gib etwas ein: ") src = src.lower() tokens = lex(src) print tokens
np2 = 'ort' if verb == 'ist': return [np2, np1] else: raise ValueError("Kann keinen miniprolog-Fakt erzeugen") def vtr_action(verb): return verb def np_action(artikel, nomen): return nomen def nn_action(nomen): return nomen p.setParseAction(np, np_action) p.setParseAction(nn, nn_action) p.setParseAction(vtr, vtr_action) p.setParseAction(s, s_action) while True: src = raw_input("Gib etwas ein: ") src = src.lower() tokens = src.split(" ") g = p.parse(tokens) try: semantic = g.next() print "Aha, ich verstehe:" print semantic except StopIteration: print "Das verstehe ich leider nicht."
def extractName(semantic): if semantic[0] == 'name': return semantic[1] if semantic[0] == 'pron': if semantic[1] == 'f': return femaleReferent elif semantic[1] == 'm': return maleReferent else: return 'ich' p = RecursiveDescentParser(s) p.setParseAction(name, name_action) p.setParseAction(perspron, perspron_action) p.setParseAction(vtr, vtr_action) p.setParseAction(adj, adj_action) p.setParseAction(nn, nn_action) p.setParseAction(np, np_action) p.setParseAction(pp, pp_action) p.setParseAction(s, s_action) while True: src = raw_input("Gib etwas ein: ") src = src.lower() tokens = src.split(" ") tokens.append("EOL") g = p.parse(tokens)