% Ein Prolog-Programm zur Simulation des deterministischen
% endlichen Automaten (DEA)
%
% pap    d.h.  delta(p,a)=p
% pbq          delta(p,b)=q
% qap          ...
% qbr
% rar
% rbr
% mit dem Anfangszustand p und dem einzigen Endzustand r
%
% Das Programm ist aufzurufen mit der Anfrage
%   ?- start.
% Dann ist ein Wort, z.B.
%   ababb
% einzugeben und die RETURN-Taste zu druecken.
% Das Programm antwortet dann, ob der Automat das Wort akzeptiert.


% start  startet den Automaten im Anfangszustand p.
start :-
	starte_im_Zustand(p).

% Die Uebergangsfunktion delta:  delta(p,a)=p, delta(p,b)=q, ...
delta(p,a,p).
delta(p,b,q).
delta(q,a,p).
delta(q,b,r).
delta(r,a,r).
delta(r,b,r).

% r ist Endzustand.
endzustand(r).

starte_im_Zustand(P) :-       %Starten des Automaten von einem Zustand P aus:
	lies_das_Zeichen(A),  %Lies das naechste Zeichen A und
	weiter(P,A).          %mache weiter im Zustand P nach Lesen von A!

lies_das_Zeichen(A) :-        %Naechstes Zeichen des Wortes; am Ende '\n'.
	get_char(A).          %(in Prolog eingebaut)

% Weitermachen, nachdem im Zustand P das Zeichen A gelesen wurde:
weiter(P,A) :-                %Wenn A ein Zeichen des Alphabets ist,
	delta(P,A,Q),         %bestimme mittels delta den Nachfolgezustand Q
	starte_im_Zustand(Q). %und starte den Automat im Zustand Q!
weiter(P,'\n') :-             %Sonst (Wort zu Ende) ist A = '\n'.
	endzustand(P).        %Dann akzeptiere, wenn P ein Endzustand ist!
