% Shift-Reduce-Parsing mit Ausgabe der einzelnen Schritte brule([vp,np|X], [s|X]). brule([n,det|X], [np|X]). brule([v|X], [vp|X]). brule([Word|X], [Cat|X]) :- word(Word, Cat). word(a, det). word(man,n). word(sleeps,v). reduce(Stack, ReducedStack) :- brule(Stack, Stack2), write('Aktion: reduce'), nl, write('Stapel': Stack2), nl,nl, reduce(Stack2, ReducedStack). reduce(Stack, Stack). shift(Stack, [W|Rest], [W|Stack], Rest):- write('Aktion:shift'), nl, write('Stapel' : [W|Stack]),nl, write('Eingabekette' : Rest),nl,nl. shift_reduce([], Stack, Stack). shift_reduce(String, Stack, Result) :- shift(Stack, String, NewStack, NewString), reduce(NewStack, ReducedStack), shift_reduce(NewString, ReducedStack, Result).