| /* CHANGELOG by M.Banbara |
| - rename open/4 to my_open/4 |
| - rename string/1 to my_string/1 |
| - rename trace/1 to my_trace/1 |
| - rename trace/2 to my_trace/2 |
| */ |
| |
| |
| % generated: 19 November 1989 |
| % option(s): |
| % |
| % chat_parser |
| % |
| % Fernando C. N. Pereira and David H. D. Warren |
| |
| chat_parser :- my_string(X), |
| determinate_say(X,_), |
| fail. |
| chat_parser. |
| |
| |
| % query set |
| |
| my_string([what,rivers,are,there,?]). |
| my_string([does,afghanistan,border,china,?]). |
| my_string([what,is,the,capital,of,upper_volta,?]). |
| my_string([where,is,the,largest,country,?]). |
| my_string([which,country,'`',s,capital,is,london,?]). |
| my_string([which,countries,are,european,?]). |
| my_string([how,large,is,the,smallest,american,country,?]). |
| my_string([what,is,the,ocean,that,borders,african,countries, |
| and,that,borders,asian,countries,?]). |
| my_string([what,are,the,capitals,of,the,countries,bordering,the,baltic,?]). |
| my_string([which,countries,are,bordered,by,two,seas,?]). |
| my_string([how,many,countries,does,the,danube,flow,through,?]). |
| my_string([what,is,the,total,area,of,countries,south,of,the,equator, |
| and,not,in,australasia,?]). |
| my_string([what,is,the,average,area,of,the,countries,in,each,continent,?]). |
| my_string([is,there,more,than,one,country,in,each,continent,?]). |
| my_string([is,there,some,ocean,that,does,not,border,any,country,?]). |
| my_string([what,are,the,countries,from,which,a,river,flows, |
| into,the,black_sea,?]). |
| |
| |
| % determinate_say |
| |
| determinate_say(X,Y) :- |
| say(X,Y), !. |
| |
| |
| %----------------------------------------------------------------------------- |
| % |
| % xgrun |
| % |
| %----------------------------------------------------------------------------- |
| |
| terminal(T,S,S,x(_,terminal,T,X),X). |
| terminal(T,[T|S],S,X,X) :- |
| gap(X). |
| |
| gap(x(gap,_,_,_)). |
| gap([]). |
| |
| virtual(NT,x(_,nonterminal,NT,X),X). |
| |
| |
| %---------------------------------------------------------------------------- |
| % |
| % clotab |
| % |
| %---------------------------------------------------------------------------- |
| |
| % normal form masks |
| |
| is_pp(#(1,_,_,_)). |
| |
| is_pred(#(_,1,_,_)). |
| |
| is_trace(#(_,_,1,_)). |
| |
| is_adv(#(_,_,_,1)). |
| |
| my_trace(#(_,_,1,_),#(0,0,0,0)). |
| |
| my_trace(#(0,0,1,0)). |
| |
| adv(#(0,0,0,1)). |
| |
| empty(#(0,0,0,0)). |
| |
| np_all(#(1,1,1,0)). |
| |
| s_all(#(1,0,1,1)). |
| |
| np_no_trace(#(1,1,0,0)). |
| |
| % mask operations |
| |
| myplus(#(B1,B2,B3,B4),#(C1,C2,C3,C4),#(D1,D2,D3,D4)) :- |
| or(B1,C1,D1), |
| or(B2,C2,D2), |
| or(B3,C3,D3), |
| or(B4,C4,D4). |
| |
| minus(#(B1,B2,B3,B4),#(C1,C2,C3,C4),#(D1,D2,D3,D4)) :- |
| anot(B1,C1,D1), |
| anot(B2,C2,D2), |
| anot(B3,C3,D3), |
| anot(B4,C4,D4). |
| |
| or(1,_,1). |
| or(0,1,1). |
| or(0,0,0). |
| |
| anot(X,0,X). |
| anot(_X,1,0). |
| |
| % noun phrase position features |
| |
| role(subj,_,#(1,0,0)). |
| role(compl,_,#(0,_,_)). |
| role(undef,main,#(_,0,_)). |
| role(undef,aux,#(0,_,_)). |
| role(undef,decl,_). |
| role(nil,_,_). |
| |
| subj_case(#(1,0,0)). |
| verb_case(#(0,1,0)). |
| prep_case(#(0,0,1)). |
| compl_case(#(0,_,_)). |
| |
| |
| %---------------------------------------------------------------------------- |
| % |
| % newg |
| % |
| %---------------------------------------------------------------------------- |
| |
| say(X,Y) :- |
| sentence(Y,X,[],[],[]). |
| |
| |
| sentence(B,C,D,E,F) :- |
| declarative(B,C,G,E,H), |
| terminator(.,G,D,H,F). |
| sentence(B,C,D,E,F) :- |
| wh_question(B,C,G,E,H), |
| terminator(?,G,D,H,F). |
| sentence(B,C,D,E,F) :- |
| topic(C,G,E,H), |
| wh_question(B,G,I,H,J), |
| terminator(?,I,D,J,F). |
| sentence(B,C,D,E,F) :- |
| yn_question(B,C,G,E,H), |
| terminator(?,G,D,H,F). |
| sentence(B,C,D,E,F) :- |
| imperative(B,C,G,E,H), |
| terminator(!,G,D,H,F). |
| |
| |
| pp(B,C,D,E,F,F,G,H) :- |
| virtual(pp(B,C,D,E),G,H). |
| pp(pp(B,C),D,E,F,G,H,I,J) :- |
| prep(B,G,K,I,L), |
| prep_case(M), |
| np(C,_N,M,_O,D,E,F,K,H,L,J). |
| |
| |
| topic(B,C,D,x(gap,nonterminal,pp(E,compl,F,G),H)) :- |
| pp(E,compl,F,G,B,I,D,J), |
| opt_comma(I,C,J,H). |
| |
| |
| opt_comma(B,C,D,E) :- |
| `(',',B,C,D,E). |
| opt_comma(B,B,C,C). |
| |
| |
| declarative(decl(B),C,D,E,F) :- |
| s(B,_G,C,D,E,F). |
| |
| |
| wh_question(whq(B,C),D,E,F,G) :- |
| variable_q(B,_H,I,J,D,K,F,L), |
| question(I,J,C,K,E,L,G). |
| |
| |
| np(B,C,D,E,F,G,H,I,I,J,K) :- |
| virtual(np(B,C,D,E,F,G,H),J,K). |
| np(np(B,C,[]),B,D,def,_E,F,G,H,I,J,K) :- |
| is_pp(F), |
| pers_pron(C,B,L,H,I,J,K), |
| empty(G), |
| role(L,decl,D). |
| np(np(B,C,D),B,_E,F,G,H,I,J,K,L,M) :- |
| is_pp(H), |
| np_head(C,B,F+N,O,D,J,P,L,Q), |
| np_all(R), |
| np_compls(N,B,G,O,R,I,P,K,Q,M). |
| np(part(B,C),3+D,_E,indef,F,G,H,I,J,K,L) :- |
| is_pp(G), |
| determiner(B,D,indef,I,M,K,N), |
| `(of,M,O,N,P), |
| s_all(Q), |
| prep_case(R), |
| np(C,3+plu,R,def,F,Q,H,O,J,P,L). |
| |
| |
| variable_q(B,C,D,E,F,G,H,x(gap,nonterminal,np(I,C,E,_J,_K,L,M),N)) :- |
| whq(B,C,I,D,F,G,H,N), |
| my_trace(L,M). |
| variable_q(B,C,compl,D,E,F,G,x(gap,nonterminal,pp(pp(H,I),compl,J,K),L)) :- |
| prep(H,E,M,G,N), |
| whq(B,C,I,_O,M,F,N,L), |
| my_trace(J,K), |
| compl_case(D). |
| variable_q(B,C,compl,D,E,F,G,x(gap,nonterminal, |
| adv_phrase(pp(H,np(C,np_head(int_det(B),[],I),[])),J,K),L)) :- |
| context_pron(H,I,E,F,G,L), |
| my_trace(J,K), |
| verb_case(D). |
| variable_q(B,_C,compl,D,E,F,G, |
| x(gap,nonterminal,predicate(adj,value(H,wh(B)),I),J)) :- |
| `(how,E,K,G,L), |
| adj(quant,H,K,F,L,J), |
| empty(I), |
| verb_case(D). |
| |
| |
| adv_phrase(B,C,D,E,E,F,G) :- |
| virtual(adv_phrase(B,C,D),F,G). |
| adv_phrase(pp(B,C),D,E,F,G,H,I) :- |
| loc_pred(B,F,J,H,K), |
| pp(pp(prep(of),C),compl,D,E,J,G,K,I). |
| |
| |
| predicate(B,C,D,E,E,F,G) :- |
| virtual(predicate(B,C,D),F,G). |
| predicate(_B,C,D,E,F,G,H) :- |
| adj_phrase(C,D,E,F,G,H). |
| predicate(neg,B,C,D,E,F,G) :- |
| s_all(H), |
| pp(B,compl,H,C,D,E,F,G). |
| predicate(_B,C,D,E,F,G,H) :- |
| s_all(I), |
| adv_phrase(C,I,D,E,F,G,H). |
| |
| |
| whq(B,C,D,undef,E,F,G,H) :- |
| int_det(B,C,E,I,G,J), |
| s_all(K), |
| np(D,C,_L,_M,subj,K,_N,I,F,J,H). |
| whq(B,3+C,np(3+C,wh(B),[]),D,E,F,G,H) :- |
| int_pron(D,E,F,G,H). |
| |
| |
| int_det(B,3+C,D,E,F,G) :- |
| whose(B,C,D,E,F,G). |
| int_det(B,3+C,D,E,F,G) :- |
| int_art(B,C,D,E,F,G). |
| |
| |
| gen_marker(B,B,C,D) :- |
| virtual(gen_marker,C,D). |
| gen_marker(B,C,D,E) :- |
| `('`',B,F,D,G), |
| an_s(F,C,G,E). |
| |
| |
| whose(B,C,D,E,F,x(nogap,nonterminal,np_head0(wh(B),C,proper), |
| x(nogap,nonterminal,gen_marker,G))) :- |
| `(whose,D,E,F,G). |
| |
| |
| question(B,C,D,E,F,G,H) :- |
| subj_question(B), |
| role(subj,_I,C), |
| s(D,_J,E,F,G,H). |
| question(B,C,D,E,F,G,H) :- |
| fronted_verb(B,C,E,I,G,J), |
| s(D,_K,I,F,J,H). |
| |
| |
| det(B,C,D,E,E,F,G) :- |
| virtual(det(B,C,D),F,G). |
| det(det(B),C,D,E,F,G,H) :- |
| terminal(I,E,F,G,H), |
| det(I,C,B,D). |
| det(generic,_B,generic,C,C,D,D). |
| |
| |
| int_art(B,C,D,E,F,x(nogap,nonterminal,det(G,C,def),H)) :- |
| int_art(B,C,G,D,E,F,H). |
| |
| |
| subj_question(subj). |
| subj_question(undef). |
| |
| |
| yn_question(q(B),C,D,E,F) :- |
| fronted_verb(nil,_G,C,H,E,I), |
| s(B,_J,H,D,I,F). |
| |
| |
| verb_form(B,C,D,E,F,F,G,H) :- |
| virtual(verb_form(B,C,D,E),G,H). |
| verb_form(B,C,D,_E,F,G,H,I) :- |
| terminal(J,F,G,H,I), |
| verb_form(J,B,C,D). |
| |
| |
| neg(B,C,D,D,E,F) :- |
| virtual(neg(B,C),E,F). |
| neg(aux+_B,neg,C,D,E,F) :- |
| `(not,C,D,E,F). |
| neg(_B,pos,C,C,D,D). |
| |
| |
| fronted_verb(B,C,D,E,F,x(gap,nonterminal,verb_form(G,H,I,J), |
| x(nogap,nonterminal,neg(_K,L),M))) :- |
| verb_form(G,H,I,_N,D,O,F,P), |
| verb_type(G,aux+_Q), |
| role(B,J,C), |
| neg(_R,L,O,E,P,M). |
| |
| |
| imperative(imp(B),C,D,E,F) :- |
| imperative_verb(C,G,E,H), |
| s(B,_I,G,D,H,F). |
| |
| |
| imperative_verb(B,C,D,x(nogap,terminal,you,x(nogap,nonterminal, |
| verb_form(E,imp+fin,2+sin,main),F))) :- |
| verb_form(E,inf,_G,_H,B,C,D,F). |
| |
| |
| s(s(B,C,D,E),F,G,H,I,J) :- |
| subj(B,K,L,G,M,I,N), |
| verb(C,K,L,O,M,P,N,Q), |
| empty(R), |
| s_all(S), |
| verb_args(L,O,D,R,T,P,U,Q,V), |
| minus(S,T,W), |
| myplus(S,T,X), |
| verb_mods(E,W,X,F,U,H,V,J). |
| |
| |
| subj(there,_B,_C+be,D,E,F,G) :- |
| `(there,D,E,F,G). |
| subj(B,C,_D,E,F,G,H) :- |
| s_all(I), |
| subj_case(J), |
| np(B,C,J,_K,subj,I,_L,E,F,G,H). |
| |
| |
| np_head(B,C,D,E,F,G,H,I,J) :- |
| np_head0(K,L,M,G,N,I,O), |
| possessive(K,L,M,P,P,B,C,D,E,F,N,H,O,J). |
| |
| |
| np_head0(B,C,D,E,E,F,G) :- |
| virtual(np_head0(B,C,D),F,G). |
| np_head0(name(B),3+sin,def+proper,C,D,E,F) :- |
| name(B,C,D,E,F). |
| np_head0(np_head(B,C,D),3+E,F+common,G,H,I,J) :- |
| determiner(B,E,F,G,K,I,L), |
| adjs(C,K,M,L,N), |
| noun(D,E,M,H,N,J). |
| np_head0(B,C,def+proper,D,E,F,x(nogap,nonterminal,gen_marker,G)) :- |
| poss_pron(B,C,D,E,F,G). |
| np_head0(np_head(B,[],C),3+sin,indef+common,D,E,F,G) :- |
| quantifier_pron(B,C,D,E,F,G). |
| |
| |
| np_compls(proper,_B,_C,[],_D,E,F,F,G,G) :- |
| empty(E). |
| np_compls(common,B,C,D,E,F,G,H,I,J) :- |
| np_all(K), |
| np_mods(B,C,L,D,E,M,K,N,G,O,I,P), |
| relative(B,L,M,N,F,O,H,P,J). |
| |
| |
| possessive(B,C,_D,[],E,F,G,H,I,J,K,L,M,N) :- |
| gen_case(K,O,M,P), |
| np_head0(Q,R,S,O,T,P,U), |
| possessive(Q,R,S,V,[pp(poss,np(C,B,E))|V],F,G,H,I,J,T,L,U,N). |
| possessive(B,C,D,E,F,B,C,D,E,F,G,G,H,H). |
| |
| |
| gen_case(B,C,D,x(nogap,terminal,the,E)) :- |
| gen_marker(B,C,D,E). |
| |
| |
| an_s(B,C,D,E) :- |
| `(s,B,C,D,E). |
| an_s(B,B,C,C). |
| |
| |
| determiner(B,C,D,E,F,G,H) :- |
| det(B,C,D,E,F,G,H). |
| determiner(B,C,D,E,F,G,H) :- |
| quant_phrase(B,C,D,E,F,G,H). |
| |
| |
| quant_phrase(quant(B,C),D,E,F,G,H,I) :- |
| quant(B,E,F,J,H,K), |
| number(C,D,J,G,K,I). |
| |
| |
| quant(B,indef,C,D,E,F) :- |
| neg_adv(G,B,C,H,E,I), |
| comp_adv(G,H,J,I,K), |
| `(than,J,D,K,F). |
| quant(B,indef,C,D,E,F) :- |
| `(at,C,G,E,H), |
| sup_adv(I,G,D,H,F), |
| sup_op(I,B). |
| quant(the,def,B,C,D,E) :- |
| `(the,B,C,D,E). |
| quant(same,indef,B,B,C,C). |
| |
| |
| neg_adv(B,not+B,C,D,E,F) :- |
| `(not,C,D,E,F). |
| neg_adv(B,B,C,C,D,D). |
| |
| |
| sup_op(least,not+less). |
| sup_op(most,not+more). |
| |
| |
| np_mods(B,C,D,[E|F],G,H,_I,J,K,L,M,N) :- |
| np_mod(B,C,E,G,O,K,P,M,Q), |
| my_trace(R), |
| myplus(R,O,S), |
| minus(G,S,T), |
| myplus(O,G,U), |
| np_mods(B,C,D,F,T,H,U,J,P,L,Q,N). |
| np_mods(_B,_C,D,D,E,E,F,F,G,G,H,H). |
| |
| |
| np_mod(_B,C,D,E,F,G,H,I,J) :- |
| pp(D,C,E,F,G,H,I,J). |
| np_mod(B,_C,D,E,F,G,H,I,J) :- |
| reduced_relative(B,D,E,F,G,H,I,J). |
| |
| |
| verb_mods([B|C],D,_E,F,G,H,I,J) :- |
| verb_mod(B,D,K,G,L,I,M), |
| my_trace(N), |
| myplus(N,K,O), |
| minus(D,O,P), |
| myplus(K,D,Q), |
| verb_mods(C,P,Q,F,L,H,M,J). |
| verb_mods([],_B,C,C,D,D,E,E). |
| |
| |
| verb_mod(B,C,D,E,F,G,H) :- |
| adv_phrase(B,C,D,E,F,G,H). |
| verb_mod(B,C,D,E,F,G,H) :- |
| is_adv(C), |
| adverb(B,E,F,G,H), |
| empty(D). |
| verb_mod(B,C,D,E,F,G,H) :- |
| pp(B,compl,C,D,E,F,G,H). |
| |
| |
| adjs([B|C],D,E,F,G) :- |
| pre_adj(B,D,H,F,I), |
| adjs(C,H,E,I,G). |
| adjs([],B,B,C,C). |
| |
| |
| pre_adj(B,C,D,E,F) :- |
| adj(_G,B,C,D,E,F). |
| pre_adj(B,C,D,E,F) :- |
| sup_phrase(B,C,D,E,F). |
| |
| |
| sup_phrase(sup(most,B),C,D,E,F) :- |
| sup_adj(B,C,D,E,F). |
| sup_phrase(sup(B,C),D,E,F,G) :- |
| sup_adv(B,D,I,F,J), |
| adj(quant,C,I,E,J,G). |
| |
| |
| comp_phrase(comp(B,C,D),E,F,G,H,I) :- |
| comp(B,C,F,J,H,K), |
| np_no_trace(L), |
| prep_case(M), |
| np(D,_N,M,_O,compl,L,E,J,G,K,I). |
| |
| |
| comp(B,C,D,E,F,G) :- |
| comp_adv(B,D,H,F,I), |
| adj(quant,C,H,J,I,K), |
| `(than,J,E,K,G). |
| comp(more,B,C,D,E,F) :- |
| rel_adj(B,C,G,E,H), |
| `(than,G,D,H,F). |
| comp(same,B,C,D,E,F) :- |
| `(as,C,G,E,H), |
| adj(quant,B,G,I,H,J), |
| `(as,I,D,J,F). |
| |
| |
| relative(B,[C],D,_E,F,G,H,I,J) :- |
| is_pred(D), |
| rel_conj(B,_K,C,F,G,H,I,J). |
| relative(_B,[],_C,D,D,E,E,F,F). |
| |
| |
| rel_conj(B,C,D,E,F,G,H,I) :- |
| rel(B,J,K,F,L,H,M), |
| rel_rest(B,C,J,D,K,E,L,G,M,I). |
| |
| |
| rel_rest(B,C,D,E,_F,G,H,I,J,K) :- |
| conj(C,L,D,M,E,H,N,J,O), |
| rel_conj(B,L,M,G,N,I,O,K). |
| rel_rest(_B,_C,D,D,E,E,F,F,G,G). |
| |
| |
| rel(B,rel(C,D),E,F,G,H,I) :- |
| my_open(F,J,H,K), |
| variable(B,C,J,L,K,M), |
| s(D,N,L,O,M,P), |
| my_trace(Q), |
| minus(N,Q,E), |
| close(O,G,P,I). |
| |
| |
| variable(B,C,D,E,F,x(gap,nonterminal,np(np(B,wh(C),[]),B,_G,_H,_I,J,K),L)) :- |
| `(that,D,E,F,L), |
| my_trace(J,K). |
| variable(B,C,D,E,F,x(gap,nonterminal,np(G,H,I,_J,_K,L,M),N)) :- |
| wh(C,B,G,H,I,D,E,F,N), |
| my_trace(L,M). |
| variable(B,C,D,E,F,x(gap,nonterminal,pp(pp(G,H),compl,I,J),K)) :- |
| prep(G,D,L,F,M), |
| wh(C,B,H,_N,O,L,E,M,K), |
| my_trace(I,J), |
| compl_case(O). |
| |
| |
| wh(B,C,np(C,wh(B),[]),C,D,E,F,G,H) :- |
| rel_pron(I,E,F,G,H), |
| role(I,decl,D). |
| wh(B,C,np(D,E,[pp(F,G)]),D,_H,I,J,K,L) :- |
| np_head0(E,D,_M+common,I,N,K,O), |
| prep(F,N,P,O,Q), |
| wh(B,C,G,_R,_S,P,J,Q,L). |
| wh(B,C,D,E,F,G,H,I,J) :- |
| whose(B,C,G,K,I,L), |
| s_all(M), |
| np(D,E,F,def,subj,M,_N,K,H,L,J). |
| |
| |
| reduced_relative(B,C,D,E,F,G,H,I) :- |
| is_pred(D), |
| reduced_rel_conj(B,_J,C,E,F,G,H,I). |
| |
| |
| reduced_rel_conj(B,C,D,E,F,G,H,I) :- |
| reduced_rel(B,J,K,F,L,H,M), |
| reduced_rel_rest(B,C,J,D,K,E,L,G,M,I). |
| |
| |
| reduced_rel_rest(B,C,D,E,_F,G,H,I,J,K) :- |
| conj(C,L,D,M,E,H,N,J,O), |
| reduced_rel_conj(B,L,M,G,N,I,O,K). |
| reduced_rel_rest(_B,_C,D,D,E,E,F,F,G,G). |
| |
| |
| reduced_rel(B,reduced_rel(C,D),E,F,G,H,I) :- |
| my_open(F,J,H,K), |
| reduced_wh(B,C,J,L,K,M), |
| s(D,N,L,O,M,P), |
| my_trace(Q), |
| minus(N,Q,E), |
| close(O,G,P,I). |
| |
| |
| reduced_wh(B,C,D,E,F,x(nogap,nonterminal, |
| np(np(B,wh(C),[]),B,G,_H,_I,J,K),x(nogap,nonterminal, |
| verb_form(be,pres+fin,B,main),x(nogap,nonterminal, |
| neg(_L,M),x(nogap,nonterminal,predicate(M,N,O),P))))) :- |
| neg(_Q,M,D,R,F,S), |
| predicate(M,N,O,R,E,S,P), |
| my_trace(J,K), |
| subj_case(G). |
| reduced_wh(B,C,D,E,F,x(nogap,nonterminal, |
| np(np(B,wh(C),[]),B,G,_H,_I,J,K),x(nogap,nonterminal, |
| verb(L,_M,N,O),P))) :- |
| participle(L,N,O,D,E,F,P), |
| my_trace(J,K), |
| subj_case(G). |
| reduced_wh(B,C,D,E,F,x(nogap,nonterminal, |
| np(G,H,I,J,_K,L,M),x(gap,nonterminal, |
| np(np(B,wh(C),[]),B,N,_O,_P,Q,R),S))) :- |
| s_all(T), |
| subj_case(I), |
| verb_case(N), |
| np(G,H,_U,J,subj,T,_V,D,E,F,S), |
| my_trace(L,M), |
| my_trace(Q,R). |
| |
| |
| verb(B,C,D,E,F,F,G,H) :- |
| virtual(verb(B,C,D,E),G,H). |
| verb(verb(B,C,D+fin,E,F),G,H,C,I,J,K,L) :- |
| verb_form(M,D+fin,G,N,I,O,K,P), |
| verb_type(M,Q), |
| neg(Q,F,O,R,P,S), |
| rest_verb(N,M,B,C,E,R,J,S,L), |
| verb_type(B,H). |
| |
| |
| rest_verb(aux,have,B,C,[perf|D],E,F,G,H) :- |
| verb_form(I,past+part,_J,_K,E,L,G,M), |
| have(I,B,C,D,L,F,M,H). |
| rest_verb(aux,be,B,C,D,E,F,G,H) :- |
| verb_form(I,J,_K,_L,E,M,G,N), |
| be(J,I,B,C,D,M,F,N,H). |
| rest_verb(aux,do,B,active,[],C,D,E,F) :- |
| verb_form(B,inf,_G,_H,C,D,E,F). |
| rest_verb(main,B,B,active,[],C,C,D,D). |
| |
| |
| have(be,B,C,D,E,F,G,H) :- |
| verb_form(I,J,_K,_L,E,M,G,N), |
| be(J,I,B,C,D,M,F,N,H). |
| have(B,B,active,[],C,C,D,D). |
| |
| |
| be(past+part,B,B,passive,[],C,C,D,D). |
| be(pres+part,B,C,D,[prog],E,F,G,H) :- |
| passive(B,C,D,E,F,G,H). |
| |
| |
| passive(be,B,passive,C,D,E,F) :- |
| verb_form(B,past+part,_G,_H,C,D,E,F), |
| verb_type(B,I), |
| passive(I). |
| passive(B,B,active,C,C,D,D). |
| |
| |
| participle(verb(B,C,inf,D,E),F,C,G,H,I,J) :- |
| neg(_K,E,G,L,I,M), |
| verb_form(B,N,_O,_P,L,H,M,J), |
| participle(N,C,D), |
| verb_type(B,F). |
| |
| |
| passive(_B+trans). |
| passive(_B+ditrans). |
| |
| |
| participle(pres+part,active,[prog]). |
| participle(past+part,passive,[]). |
| |
| |
| close(B,B,C,D) :- |
| virtual(close,C,D). |
| |
| |
| my_open(B,B,C,x(gap,nonterminal,close,C)). |
| |
| |
| verb_args(_B+C,D,E,F,G,H,I,J,K) :- |
| advs(E,L,_M,H,N,J,O), |
| verb_args(C,D,L,F,G,N,I,O,K). |
| verb_args(trans,active,[arg(dir,B)],_C,D,E,F,G,H) :- |
| verb_arg(np,B,D,E,F,G,H). |
| verb_args(ditrans,_B,[arg(C,D)|E],_F,G,H,I,J,K) :- |
| verb_arg(np,D,L,H,M,J,N), |
| object(C,E,L,G,M,I,N,K). |
| verb_args(be,_B,[void],C,C,D,E,F,G) :- |
| terminal(there,D,E,F,G). |
| verb_args(be,_B,[arg(predicate,C)],_D,E,F,G,H,I) :- |
| pred_conj(_J,C,E,F,G,H,I). |
| verb_args(be,_B,[arg(dir,C)],_D,E,F,G,H,I) :- |
| verb_arg(np,C,E,F,G,H,I). |
| verb_args(have,active,[arg(dir,B)],_C,D,E,F,G,H) :- |
| verb_arg(np,B,D,E,F,G,H). |
| verb_args(B,_C,[],D,D,E,E,F,F) :- |
| no_args(B). |
| |
| |
| object(B,C,D,E,F,G,H,I) :- |
| adv(J), |
| minus(J,D,K), |
| advs(C,L,K,F,M,H,N), |
| obj(B,L,D,E,M,G,N,I). |
| |
| |
| obj(ind,[arg(dir,B)],_C,D,E,F,G,H) :- |
| verb_arg(np,B,D,E,F,G,H). |
| obj(dir,[],B,B,C,C,D,D). |
| |
| |
| pred_conj(B,C,D,E,F,G,H) :- |
| predicate(_I,J,K,E,L,G,M), |
| pred_rest(B,J,C,K,D,L,F,M,H). |
| |
| |
| pred_rest(B,C,D,_E,F,G,H,I,J) :- |
| conj(B,K,C,L,D,G,M,I,N), |
| pred_conj(K,L,F,M,H,N,J). |
| pred_rest(_B,C,C,D,D,E,E,F,F). |
| |
| |
| verb_arg(np,B,C,D,E,F,G) :- |
| s_all(H), |
| verb_case(I), |
| np(B,_J,I,_K,compl,H,C,D,E,F,G). |
| |
| |
| advs([B|C],D,E,F,G,H,I) :- |
| is_adv(E), |
| adverb(B,F,J,H,K), |
| advs(C,D,E,J,G,K,I). |
| advs(B,B,_C,D,D,E,E). |
| |
| |
| adj_phrase(B,C,D,E,F,G) :- |
| adj(_H,B,D,E,F,G), |
| empty(C). |
| adj_phrase(B,C,D,E,F,G) :- |
| comp_phrase(B,C,D,E,F,G). |
| |
| |
| no_args(trans). |
| no_args(ditrans). |
| no_args(intrans). |
| |
| |
| conj(conj(B,C),conj(B,D),E,F,conj(B,E,F),G,H,I,J) :- |
| conj(B,C,D,G,H,I,J). |
| |
| |
| noun(B,C,D,E,F,G) :- |
| terminal(H,D,E,F,G), |
| noun_form(H,B,C). |
| |
| |
| adj(B,adj(C),D,E,F,G) :- |
| terminal(C,D,E,F,G), |
| adj(C,B). |
| |
| |
| prep(prep(B),C,D,E,F) :- |
| terminal(B,C,D,E,F), |
| prep(B). |
| |
| |
| rel_adj(adj(B),C,D,E,F) :- |
| terminal(G,C,D,E,F), |
| rel_adj(G,B). |
| |
| |
| sup_adj(adj(B),C,D,E,F) :- |
| terminal(G,C,D,E,F), |
| sup_adj(G,B). |
| |
| |
| comp_adv(less,B,C,D,E) :- |
| `(less,B,C,D,E). |
| comp_adv(more,B,C,D,E) :- |
| `(more,B,C,D,E). |
| |
| |
| sup_adv(least,B,C,D,E) :- |
| `(least,B,C,D,E). |
| sup_adv(most,B,C,D,E) :- |
| `(most,B,C,D,E). |
| |
| |
| rel_pron(B,C,D,E,F) :- |
| terminal(G,C,D,E,F), |
| rel_pron(G,B). |
| |
| |
| name(B,C,D,E,F) :- |
| opt_the(C,G,E,H), |
| terminal(B,G,D,H,F), |
| name(B). |
| |
| |
| int_art(B,plu,quant(same,wh(B)),C,D,E,F) :- |
| `(how,C,G,E,H), |
| `(many,G,D,H,F). |
| int_art(B,C,D,E,F,G,H) :- |
| terminal(I,E,F,G,H), |
| int_art(I,B,C,D). |
| |
| |
| int_pron(B,C,D,E,F) :- |
| terminal(G,C,D,E,F), |
| int_pron(G,B). |
| |
| |
| adverb(adv(B),C,D,E,F) :- |
| terminal(B,C,D,E,F), |
| adverb(B). |
| |
| |
| poss_pron(pronoun(B),C+D,E,F,G,H) :- |
| terminal(I,E,F,G,H), |
| poss_pron(I,B,C,D). |
| |
| |
| pers_pron(pronoun(B),C+D,E,F,G,H,I) :- |
| terminal(J,F,G,H,I), |
| pers_pron(J,B,C,D,E). |
| |
| |
| quantifier_pron(B,C,D,E,F,G) :- |
| terminal(H,D,E,F,G), |
| quantifier_pron(H,B,C). |
| |
| |
| context_pron(prep(in),place,B,C,D,E) :- |
| `(where,B,C,D,E). |
| context_pron(prep(at),time,B,C,D,E) :- |
| `(when,B,C,D,E). |
| |
| |
| number(nb(B),C,D,E,F,G) :- |
| terminal(H,D,E,F,G), |
| number(H,B,C). |
| |
| |
| terminator(B,C,D,E,F) :- |
| terminal(G,C,D,E,F), |
| terminator(G,B). |
| |
| |
| opt_the(B,B,C,C). |
| opt_the(B,C,D,E) :- |
| `(the,B,C,D,E). |
| |
| |
| conj(_B,list,list,C,D,E,F) :- |
| terminal(',',C,D,E,F). |
| conj(B,list,'end',C,D,E,F) :- |
| terminal(B,C,D,E,F), |
| conj(B). |
| |
| |
| loc_pred(B,C,D,E,F) :- |
| terminal(G,C,D,E,F), |
| loc_pred(G,B). |
| |
| |
| `(B,C,D,E,F) :- |
| terminal(B,C,D,E,F), |
| `(B). |
| |
| |
| %---------------------------------------------------------------------------- |
| % |
| % newdic |
| % |
| %---------------------------------------------------------------------------- |
| |
| word(Word) :- `(Word). |
| word(Word) :- conj(Word). |
| word(Word) :- adverb(Word). |
| word(Word) :- sup_adj(Word,_). |
| word(Word) :- rel_adj(Word,_). |
| word(Word) :- adj(Word,_). |
| word(Word) :- name(Word). |
| word(Word) :- terminator(Word,_). |
| word(Word) :- pers_pron(Word,_,_,_,_). |
| word(Word) :- poss_pron(Word,_,_,_). |
| word(Word) :- rel_pron(Word,_). |
| word(Word) :- verb_form(Word,_,_,_). |
| word(Word) :- noun_form(Word,_,_). |
| word(Word) :- prep(Word). |
| word(Word) :- quantifier_pron(Word,_,_). |
| word(Word) :- number(Word,_,_). |
| word(Word) :- det(Word,_,_,_). |
| word(Word) :- int_art(Word,_,_,_). |
| word(Word) :- int_pron(Word,_). |
| word(Word) :- loc_pred(Word,_). |
| |
| `(how). |
| `(whose). |
| `(there). |
| `(of). |
| `('`'). % use ` instead of ' to help assembler |
| `(','). |
| `(s). |
| `(than). |
| `(at). |
| `(the). |
| `(not). |
| `(as). |
| `(that). |
| `(less). |
| `(more). |
| `(least). |
| `(most). |
| `(many). |
| `(where). |
| `(when). |
| |
| conj(and). |
| conj(or). |
| |
| int_pron(what,undef). |
| int_pron(which,undef). |
| int_pron(who,subj). |
| int_pron(whom,compl). |
| |
| int_art(what,X,_,int_det(X)). |
| int_art(which,X,_,int_det(X)). |
| |
| det(the,No,the(No),def). |
| det(a,sin,a,indef). |
| det(an,sin,a,indef). |
| det(every,sin,every,indef). |
| det(some,_,some,indef). |
| det(any,_,any,indef). |
| det(all,plu,all,indef). |
| det(each,sin,each,indef). |
| det(no,_,no,indef). |
| |
| number(W,I,Nb) :- |
| tr_number(W,I), |
| ag_number(I,Nb). |
| |
| tr_number(nb(I),I). |
| tr_number(one,1). |
| tr_number(two,2). |
| tr_number(three,3). |
| tr_number(four,4). |
| tr_number(five,5). |
| tr_number(six,6). |
| tr_number(seven,7). |
| tr_number(eight,8). |
| tr_number(nine,9). |
| tr_number(ten,10). |
| |
| ag_number(1,sin). |
| ag_number(N,plu) :- N>1. |
| |
| quantifier_pron(everybody,every,person). |
| quantifier_pron(everyone,every,person). |
| quantifier_pron(everything,every,thing). |
| quantifier_pron(somebody,some,person). |
| quantifier_pron(someone,some,person). |
| quantifier_pron(something,some,thing). |
| quantifier_pron(anybody,any,person). |
| quantifier_pron(anyone,any,person). |
| quantifier_pron(anything,any,thing). |
| quantifier_pron(nobody,no,person). |
| quantifier_pron(nothing,no,thing). |
| |
| prep(as). |
| prep(at). |
| prep(of). |
| prep(to). |
| prep(by). |
| prep(with). |
| prep(in). |
| prep(on). |
| prep(from). |
| prep(into). |
| prep(through). |
| |
| noun_form(Plu,Sin,plu) :- noun_plu(Plu,Sin). |
| noun_form(Sin,Sin,sin) :- noun_sin(Sin). |
| noun_form(proportion,proportion,_). |
| noun_form(percentage,percentage,_). |
| |
| root_form(1+sin). |
| root_form(2+_). |
| root_form(1+plu). |
| root_form(3+plu). |
| |
| verb_root(be). |
| verb_root(have). |
| verb_root(do). |
| verb_root(border). |
| verb_root(contain). |
| verb_root(drain). |
| verb_root(exceed). |
| verb_root(flow). |
| verb_root(rise). |
| |
| regular_pres(have). |
| regular_pres(do). |
| regular_pres(rise). |
| regular_pres(border). |
| regular_pres(contain). |
| regular_pres(drain). |
| regular_pres(exceed). |
| regular_pres(flow). |
| |
| regular_past(had,have). |
| regular_past(bordered,border). |
| regular_past(contained,contain). |
| regular_past(drained,drain). |
| regular_past(exceeded,exceed). |
| regular_past(flowed,flow). |
| |
| rel_pron(who,subj). |
| rel_pron(whom,compl). |
| rel_pron(which,undef). |
| |
| poss_pron(my,_,1,sin). |
| poss_pron(your,_,2,_). |
| poss_pron(his,masc,3,sin). |
| poss_pron(her,fem,3,sin). |
| poss_pron(its,neut,3,sin). |
| poss_pron(our,_,1,plu). |
| poss_pron(their,_,3,plu). |
| |
| pers_pron(i,_,1,sin,subj). |
| pers_pron(you,_,2,_,_). |
| pers_pron(he,masc,3,sin,subj). |
| pers_pron(she,fem,3,sin,subj). |
| pers_pron(it,neut,3,sin,_). |
| pers_pron(we,_,1,plu,subj). |
| pers_pron(them,_,3,plu,subj). |
| pers_pron(me,_,1,sin,compl(_)). |
| pers_pron(him,masc,3,sin,compl(_)). |
| pers_pron(her,fem,3,sin,compl(_)). |
| pers_pron(us,_,1,plu,compl(_)). |
| pers_pron(them,_,3,plu,compl(_)). |
| |
| terminator(.,_). |
| terminator(?,?). |
| terminator(!,!). |
| |
| name(_). |
| |
| % =========================================================================== |
| |
| % specialised dictionary |
| |
| loc_pred(east,prep(eastof)). |
| loc_pred(west,prep(westof)). |
| loc_pred(north,prep(northof)). |
| loc_pred(south,prep(southof)). |
| |
| adj(minimum,restr). |
| adj(maximum,restr). |
| adj(average,restr). |
| adj(total,restr). |
| adj(african,restr). |
| adj(american,restr). |
| adj(asian,restr). |
| adj(european,restr). |
| adj(great,quant). |
| adj(big,quant). |
| adj(small,quant). |
| adj(large,quant). |
| adj(old,quant). |
| adj(new,quant). |
| adj(populous,quant). |
| |
| rel_adj(greater,great). |
| rel_adj(less,small). |
| rel_adj(bigger,big). |
| rel_adj(smaller,small). |
| rel_adj(larger,large). |
| rel_adj(older,old). |
| rel_adj(newer,new). |
| |
| sup_adj(biggest,big). |
| sup_adj(smallest,small). |
| sup_adj(largest,large). |
| sup_adj(oldest,old). |
| sup_adj(newest,new). |
| |
| noun_sin(average). |
| noun_sin(total). |
| noun_sin(sum). |
| noun_sin(degree). |
| noun_sin(sqmile). |
| noun_sin(ksqmile). |
| noun_sin(thousand). |
| noun_sin(million). |
| noun_sin(time). |
| noun_sin(place). |
| noun_sin(area). |
| noun_sin(capital). |
| noun_sin(city). |
| noun_sin(continent). |
| noun_sin(country). |
| noun_sin(latitude). |
| noun_sin(longitude). |
| noun_sin(ocean). |
| noun_sin(person). |
| noun_sin(population). |
| noun_sin(region). |
| noun_sin(river). |
| noun_sin(sea). |
| noun_sin(seamass). |
| noun_sin(number). |
| |
| noun_plu(averages,average). |
| noun_plu(totals,total). |
| noun_plu(sums,sum). |
| noun_plu(degrees,degree). |
| noun_plu(sqmiles,sqmile). |
| noun_plu(ksqmiles,ksqmile). |
| noun_plu(million,million). |
| noun_plu(thousand,thousand). |
| noun_plu(times,time). |
| noun_plu(places,place). |
| noun_plu(areas,area). |
| noun_plu(capitals,capital). |
| noun_plu(cities,city). |
| noun_plu(continents,continent). |
| noun_plu(countries,country). |
| noun_plu(latitudes,latitude). |
| noun_plu(longitudes,longitude). |
| noun_plu(oceans,ocean). |
| noun_plu(persons,person). noun_plu(people,person). |
| noun_plu(populations,population). |
| noun_plu(regions,region). |
| noun_plu(rivers,river). |
| noun_plu(seas,sea). |
| noun_plu(seamasses,seamass). |
| noun_plu(numbers,number). |
| |
| verb_form(V,V,inf,_) :- verb_root(V). |
| verb_form(V,V,pres+fin,Agmt) :- |
| regular_pres(V), |
| root_form(Agmt), |
| verb_root(V). |
| verb_form(Past,Root,past+_,_) :- |
| regular_past(Past,Root). |
| |
| verb_form(am,be,pres+fin,1+sin). |
| verb_form(are,be,pres+fin,2+sin). |
| verb_form(is,be,pres+fin,3+sin). |
| verb_form(are,be,pres+fin,_+plu). |
| verb_form(was,be,past+fin,1+sin). |
| verb_form(were,be,past+fin,2+sin). |
| verb_form(was,be,past+fin,3+sin). |
| verb_form(were,be,past+fin,_+plu). |
| verb_form(been,be,past+part,_). |
| verb_form(being,be,pres+part,_). |
| verb_form(has,have,pres+fin,3+sin). |
| verb_form(having,have,pres+part,_). |
| verb_form(does,do,pres+fin,3+sin). |
| verb_form(did,do,past+fin,_). |
| verb_form(doing,do,pres+part,_). |
| verb_form(done,do,past+part,_). |
| verb_form(flows,flow,pres+fin,3+sin). |
| verb_form(flowing,flow,pres+part,_). |
| verb_form(rises,rise,pres+fin,3+sin). |
| verb_form(rose,rise,past+fin,_). |
| verb_form(risen,rise,past+part,_). |
| verb_form(borders,border,pres+fin,3+sin). |
| verb_form(bordering,border,pres+part,_). |
| verb_form(contains,contain,pres+fin,3+sin). |
| verb_form(containing,contain,pres+part,_). |
| verb_form(drains,drain,pres+fin,3+sin). |
| verb_form(draining,drain,pres+part,_). |
| verb_form(exceeds,exceed,pres+fin,3+sin). |
| verb_form(exceeding,exceed,pres+part,_). |
| |
| verb_type(have,aux+have). |
| verb_type(be,aux+be). |
| verb_type(do,aux+ditrans). |
| verb_type(rise,main+intrans). |
| verb_type(border,main+trans). |
| verb_type(contain,main+trans). |
| verb_type(drain,main+intrans). |
| verb_type(exceed,main+trans). |
| verb_type(flow,main+intrans). |
| |
| adverb(yesterday). |
| adverb(tomorrow). |