blob: 5ce4fe0caae545ec3dc6604c37c59a4299cf67a8 [file] [log] [blame]
/* 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).