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."
# Definiert eine Grammatik, welche Sätze wie "Das alte Haus ist ein Ort" oder # "Der Kiesweg ist ein Ort" parsen kann. s >> art(gen='?g') + nn(gen = '?g') art >> DER(gen='m') | DAS(gen='n') | DIE(gen='f') nn >> HAUS(gen='n') | KIESWEG(gen='m') | ENTE(gen='f') p = RecursiveDescentParser(s, lambda t: t["word"], lambda t: t) while True: src = raw_input("Gib etwas ein: ") src = src.lower() tokens = src.split(" ") fttokens = [ {'word': x} for x in tokens ] g = p.parse(fttokens) try: semantic = g.next() print "Aha, ich verstehe:" print semantic except StopIteration: print "Das verstehe ich leider nicht."