parse(C,[Word|X],X) :-
 lex(Word,C).
 
parse(C,P1,P) :-
 rule(C,Cs),
 parse_list(Cs,P1,P).
 
parse_list([ ],P,P).
 
parse_list([C1|Crest],P1,P) :-
 parse(C1,P1,X),
 parse_list(Crest,X,P).
