% Naiver Top-Down-Chart-Parser ohne Vollstaendigkeitsvermerk % Simon Clematide "Programmiertechniken in der Computerlinguistik II" Sommer 2005 % Unterlagen dazu im Skript /* Anfragebeispiel ?- clear_chart, parse(vp, [chased,a,dog,with,a,bone]-[]). */ % Grammatik und Lexikon rule(s, [np,vp]). rule(np, [det,n]). rule(np, [det,n,pp]). rule(vp, [v,np]). rule(vp, [v,np,pp]). rule(pp, [p,np]). word(det, a). word(p, with). word(n, dog). word(n, bone). word(v, chased). % parse/2: Parsen einer Kategorie C parse(C, [Word|S]-S) :- word(C, Word). parse(C, S-Rest) :- edge(C, S, Rest). parse(C, S-Rest) :- rule(C, RHS), parse_daughters(RHS, S-Rest), asserta(edge(C,S,Rest)). % parse_daughters/2: Parsen einer % Liste von Kategorien parse_daughters([C|Cs], S-Rest) :- parse(C, S-S1), parse_daughters(Cs, S1-Rest). parse_daughters([], S-S). % Kanten :- dynamic edge/3. % Chart saeubern clear_chart :- retract(edge(_,_,_)), fail. clear_chart.