% Rekursives Transitionsnetzwerk zur Syntaxanalyse % Simon Clematide "Programmiertechniken in der Computerlinguistik II" % Unterlagen dazu im Skript % Lexikon word(the, det). word(man, n). word(dog, n). word(peter, pn). word(smokes, vi). word(sees, vt). %%% Automaten % Endzustaende final(s, 3). final(np, 3). final(vp, 3). % Startzustaende start(s, 1). start(np, 1). start(vp, 1). % Uebergaenge delta(s, 1, net(np), 2). delta(s, 2, net(vp), 3). delta(np, 1, pn, 3). delta(np, 1, det, 2). delta(np, 2, n, 3). delta(vp, 1, vi, 3). delta(vp, 1, vt, 2). delta(vp, 2, net(np), 3). %%% Abarbeitung % Initialisierung init(String, StartNet) :- init(String, StartNet, []). init(String, Net, RestString) :- start(Net, StartState), accept(String, Net, StartState, RestString). % Akzeptor accept([Word|String], Net, State, RestString) :- word(Word, Cat), delta(Net, State, Cat, NextState), accept(String, Net, NextState, RestString). accept(String, Net, State, RestString) :- delta(Net, State, net(SubNet), NextState), init(String, SubNet, RestStringSubNet), accept(RestStringSubNet, Net, NextState, RestString). accept(String, Net, State, String) :- final(Net, State).