%-------------------------------------------------------------------- % PDA generic machinery %-------------------------------------------------------------------- accept(Input) :- initial(State), npda(State, Input, []). npda(State,[],[]) :- final(State). npda(State,[X|Xs],Stack) :- delta(State,X,Stack,NewState,NewStack), npda(NewState,Xs,NewStack). parse(Input) :- initial(State), crank(State, Input, []). crank(State,[],[]) :- final(State), write(State), write(' '), write('[]'), nl. crank(State,[X|Xs],Stack) :- delta(State,X,Stack,NewState,NewStack), write(State), write(' '), write([X|Xs]), write(' '), write(Stack), nl, crank(NewState,Xs,NewStack). %-------------------------------------------------------------------- % delta for specific language a^nb^n %-------------------------------------------------------------------- initial(countA). final(countB). delta(countA ,a ,Stack ,countA ,[a|Stack] ). delta(countA ,b ,[a|Stack] ,countB ,Stack ). delta(countB ,b ,[a|Stack] ,countB ,Stack ).