/*parse*/ /*acceptor and parser for sentences from ATN Alan Bundy 29.11.79 use with readin*/ /*Acceptor Top Level*/ accept :- read_in(Text), accept(Text). accept(Text) :- accept_part(Text,sentence,start,[]). /*Accept part of a sentence*/ accept_part(Text,ATN,finish,Text) :- !. accept_part([Word|Rest],ATN,start,Rest) :- arc(ATN,start,finish,Word,t). accept_part(Text,ATN,Node,Rest) :- arc(ATN,Node,Next,SubATN,nt), accept_part(Text,SubATN,start,Text1), accept_part(Text1,ATN,Next,Rest). /*Parse top level*/ parse :- read_in(Text), parse(Text,Tree), print_tree(0,Tree). parse(Text,Tree) :- parse_part(Text,sentence,start,[],Trees), Tree =.. [sentence|Trees]. /*parse part of text*/ parse_part(Text,ATN,finish,Text,[]) :- !. parse_part([Word|Rest],ATN,start,Rest,[Word]) :- arc(ATN,start,finish,Word,t). parse_part(Text,ATN,Node,Rest,[SubTree|Trees]) :- arc(ATN,Node,Next,SubATN,nt), parse_part(Text,SubATN,start,Text1,SubTrees), SubTree =.. [SubATN|SubTrees], parse_part(Text1,ATN,Next,Rest,Trees). /*print a syntax tree*/ print_tree(N,Tip) :- atomic(Tip), !, indent_write(N,Tip). print_tree(N,Tree) :- Tree =.. [Node|SubTrees], indent_write(N,Node), N1 is N+1, checklist(print_tree(N1),SubTrees). /*write indented line*/ indent_write(N,Text) :- N5 is 5*N, tab(N5), write(Text), nl. /*ATNs*/ /*Sentence ATN*/ arc(sentence,start,a,nounphrase,nt). arc(sentence,a,b,verb,nt). arc(sentence,b,c,nounphrase,nt). arc(sentence,c,finish,stop_mark,nt). /*nounphrase ATN*/ arc(nounphrase,start,a,determiner,nt). arc(nounphrase,a,finish,noun,nt). arc(nounphrase,a,a,adjective,nt). arc(nounphrase,start,finish,proper_noun,nt). /*verb ATN*/ arc(verb,start,finish,is,t). arc(verb,start,finish,kills,t). arc(verb,start,finish,kisses,t). /*determiner ATN*/ arc(determiner,start,finish,a,t). arc(determiner,start,finish,an,t). arc(determiner,start,finish,the,t). /*noun ATN*/ arc(noun,start,finish,fascist,t). arc(noun,start,finish,dictator,t). arc(noun,start,finish,italian,t). /*adjective ATN*/ arc(adjective,start,finish,friendly,t). arc(adjective,start,finish,misunderstood,t). arc(adjective,start,finish,happy,t). arc(adjective,start,finish,fascist,t). arc(adjective,start,finish,italian,t). /*Proper Noun ATN*/ arc(proper_noun,start,finish,benito,t). arc(proper_noun,start,finish,sophie,t). /*Stop Mark ATN*/ arc(stop_mark,start,finish,(.),t). arc(stop_mark,start,finish,(?),t). arc(stop_mark,start,finish,(!),t).