Specializing an NPDA
Source: The Art of Prolog
Program source code: npda.pl
program(npda,[(accept(Xs1) :- initial(Q1), accept(Xs1,Q1,[ ])), (accept([_],Q2,S2) :- delta(Q2,_,S2,Q12,S12), accept(_,Q12,S12)), (accept([ ],_,[ ]) :- true)]). should_unfold(initial(_)). should_unfold(final(_)). should_unfold(delta(_,_,_,_,_)). should_fold(accept(Q,Xs,Q1),palindrome(Q,Xs,Q1)). should_fold(accept(Xs),palindrome(Xs)). % Program 18.4: Specializing an PDA