% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%   Example code from the book "Natural Language Processing in Prolog"  %
%                      published by Addison Wesley                      %
%        Copyright (c) 1989, Gerald Gazdar & Christopher Mellish.       %
% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % %
%
%
% rtnpars.pl [Chapter  3] A recursive transition network parser
%
?- reconsult('library.pl').
?- reconsult('rtnarcs.pl').
?- reconsult('examples.pl').
%
parse(Net,Node,X,X,[]) :-
   final(Node,Net).
parse(Net,Node_1,X,Z,[ParseXY|ParsesYZ]) :-
  arc(Node_1,Node_2,Label,Net),
  dbgwrite(arc(Node_1,Node_2,Label,Net),Node_1),
  traverse(Label,X,Y,ParseXY),
  parse(Net,Node_2,Y,Z,ParsesYZ).
%
traverse(Word,[Word|X],X,[Word]) :- not(special(Word)).
traverse(Category,[Word|X],X,[Category,Word]) :-
   word(Category,Word).
traverse(Net,String,StringLeft,[Net|Parses]) :-
   initial(Node,Net),
   parse(Net,Node,String,StringLeft,Parses).
traverse('#',X,X,[]).
%
test(String) :-
   traverse(s,String,[],Parse),
   write(Parse),
   nl.

special('#').
special(Category) :- word(Category,_).