:- multifile(sentence/5). :- dynamic(sentence/5). :- op(1001,xfy, ('...' )). :- op(1200,xfx, ('--->')). %:- push_def(t_l:disable_px). :-asserta(t_l:disable_px). :- ignore(( \+(t_l:disable_px),ix_trace,throw((\+(t_l:disable_px))))). :-asserta(tlxgproc:do_xg_process_te). /* Sentences */ sentence(S) ---> declarative(S), terminator(.) . sentence(S) ---> wh_question(S), terminator(?) . sentence(S) ---> yn_question(S), terminator(?) . sentence(S) ---> imperative(S), terminator(!) . /* Declarative sentence */ declarative(decl(S)) ---> s80(S,_). /* Wh-questions */ wh_question(whq(X,S)) ---> variable_q(X,_,QCase,NPCase), question(QCase,NPCase,S). variable_q(X,Agmt,QCase,NPCase) ... np(NP,Agmt,NPCase,_,_,Set,Mask) ---> whq(X,Agmt,NP,QCase), {ix_trace(Set,Mask)}. variable_q(X,Agmt,compl,CCase) ... pp(pp(Prep,NP),compl,Set,Mask) ---> prep(Prep), whq(X,Agmt,NP,_), {ix_trace(Set,Mask), compl_case(CCase)}. variable_q(X,Agmt,compl,VCase) ... adv_phrase(pp(Prep, np(Agmt, np_head( int_det(X),[],Noun),[])), Set,Mask) ---> context_pron(Prep,Noun), {ix_trace(Set,Mask), verb_case(VCase)}. variable_q(X,_,compl,VCase) ... pred(adj,value(Adj,wh(X)),Mask) ---> [how], adj(quant,Adj), {ix_empty(Mask), verb_case(VCase)}. whq(X,Agmt,NP,undef) ---> int_det(X,Agmt), {ix_s_all(SAll)}, np(NP,Agmt,_,_,subj,SAll,_). whq(X,3+No,np(3+No,wh(X),[]),Case) ---> int_pron(Case). int_det(X,3+Agmt) ---> whose(X,Agmt). int_det(X,3+Agmt) ---> int_art(X,Agmt). whose(X,Agmt), np_head0(wh(X),Agmt,proper), gen_marker ---> [whose]. question(QCase,NPCase,S) ---> {subj_question(QCase), ix_role(subj,_,NPCase)}, s80(S,_). question(QCase,NPCase,S) ---> fronted_verb(QCase,NPCase), s80(S,_). int_art(X,Agmt), det(DX,Agmt,def) ---> int_art(X,Agmt,DX). subj_qustion(subj). subj_question(undef). /* Yes-no questions */ yn_question(q(S)) ---> fronted_verb(nil,_), s80(S,_). fronted_verb(QCase,NPCase) ... verb_form(Root,Tense,Agmt,Role), neg(_,Neg) ---> verb_form(Root,Tense,Agmt,_), {verb_type(Root,aux+_), ix_role(QCase,Role,NPCase)}, neg(_,Neg). /* Imperative sentences */ imperative(imp(S)) ---> imperative_verb, s80(S,_). imperative_verb, [you], verb_form(Root,imp+fin,2+sg,main) ---> verb_form(Root,inf,_,_). /* Basic sentence (actually, declarative sentence) */ s80(s80(Subj,Verb,Args,Mods),Mask) ---> subj(Subj,Agmt,Type), verb(Verb,Agmt,Type,Voice), {ix_empty(Nil), ix_s_all(SAll)}, verb_args(Type,Voice,Args,Nil,Mask0), {ix_minus(SAll,Mask0,Set), ix_plus(SAll,Mask0,Mask1)}, verb_mods(Mods,Set,Mask1,Mask). subj(there,Agmt,_+be) ---> [there]. subj(Subj,Agmt,_) ---> {ix_s_all(SAll), subj_case(Case)}, np(Subj,Agmt,Case,_,subj,SAll,_). /* Noun Phrase */ np(np(Agmt,Pronoun,[]),Agmt,NPCase,def,_,Set,Nil) ---> {ix_is_pp(Set)}, pers_pron(Pronoun,Agmt,Case), {ix_empty(Nil), ix_role(Case,decl,NPCase)}. np(np(Agmt,Kernel,Mods),Agmt,Case,Def,Role,Set,Mask) ---> {ix_is_pp(Set)}, np_head(Kernel,Agmt,Def+Type,PostMods,Mods), {ix_np_all(NPAll)}, np_compls(Type,Agmt,Role,PostMods,NPAll,Mask). np(part(Det,NP),3+Number,_,indef,Role,Set,Mask) ---> {ix_is_pp(Set)}, determiner(Det,Number,indef), [of], {ix_s_all(SAll), prep_case(Case)}, np(NP,3+plu,Case,def,Role,SAll,Mask). np_head(Kernel,Agmt,Type,PostMods,Mods) ---> np_head0(Kernel0,Agmt0,Type0), possessive(Kernel0,Agmt0,Type0,Mods0,Mods0, Kernel,Agmt,Type,PostMods,Mods). np_compls(proper,_,_,[],_,Nil) ---> {ix_empty(Nil)}. np_compls(common,Agmt,Case,Mods,Set0,Mask) ---> {ix_np_all(NPAll)}, np_mods(Agmt,Case,Rel,Mods,Set0,Set,NPAll,Mask0), relative(Agmt,Rel,Set,Mask0,Mask). /* Nuclear noun phrase */ np_head0(name(Name),3+sg,def+proper) ---> name(Name). np_head0(np_head(Det,Adjs,Head),3+Number,Def+common) ---> determiner(Det,Number,Def), adjs(Adjs), noun(Head,Number). np_head0(Pronoun,Agmt,def+proper), gen_marker ---> poss_pron(Pronoun,Agmt). np_head0(np_head(Det,[],Noun),3+sg,indef+common) ---> quantifier_pron(Det,Noun). /* Possessive construction */ possessive(Kernel0,Agmt0,_,[],Mods0, Kernel,Agmt,Type,PostMods,Mods) ---> gen_case, np_head0(Kernel1,Agmt1,Type1), possessive(Kernel1,Agmt1,Type1,PostMods1, [pp(poss,np(Agmt0,Kernel0,Mods0))|PostMods1], Kernel,Agmt,Type,PostMods,Mods). possessive(Kernel,Agmt,Type,PostMods,Mods, Kernel,Agmt,Type,PostMods,Mods) ---> []. gen_case, [the] ---> gen_marker. gen_marker ---> [''''], an_s. an_s ---> [s]. an_s ---> []. /* Determiners */ determiner(Det,Number,Def) ---> det(Det,Number,Def). determiner(Det,Number,Def) ---> quant_phrase(Det,Number,Def). quant_phrase(quant(Op,Quant),Number,Def) ---> quant(Op,Def), number(Quant,Number). quant(Op,indef) ---> neg_adv(Op0,Op), comp_adv(Op0), [than]. quant(Op,indef) ---> [at], sup_adv(Adv), {sup_op(Adv,Op)}. quant(the,def) ---> [the]. quant(same,indef) ---> []. neg_adv(Adv,not+Adv) ---> [not]. neg_adv(Adv,Adv) ---> []. sup_op(least,not+less). sup_op(most,not+more). /* Noun phrase modifiers */ np_mods(Agmt,Case,Mods0,[Mod|Mods],Set0,Set,_,Mask) ---> np_mod(Agmt,Case,Mod,Set0,Mask0), {ix_trace(Trace), ix_plus(Trace,Mask0,Mask1), ix_minus(Set0,Mask1,Set1), ix_plus(Mask0,Set0,Mask2)}, np_mods(Agmt,Case,Mods0,Mods,Set1,Set,Mask2,Mask). np_mods(_,_,Mods,Mods,Set,Set,Mask,Mask) ---> []. np_mod(_,Case,PP,Set,Mask) ---> pp(PP,Case,Set,Mask). np_mod(Agmt,Case,WH,Set,Mask) ---> reduced_relative(Agmt,WH,Set,Mask). /* Verb modifiers */ verb_mods([Mod|Mods],Set0,_,Mask) ---> verb_mod(Mod,Set0,Mask0), {ix_trace(Trace), ix_plus(Trace,Mask0,Mask1), ix_minus(Set0,Mask1,Set1), ix_plus(Mask0,Set0,Mask2)}, verb_mods(Mods,Set1,Mask2,Mask). verb_mods([],_,Mask,Mask) ---> []. verb_mod(Adv,Set,Mask) ---> adv_phrase(Adv,Set,Mask). verb_mod(Adv,Set,Nil) ---> {ix_is_adv(Set)}, adverb(Adv), {ix_empty(Nil)}. verb_mod(PP,Set,Mask) ---> pp(PP,compl,Set,Mask). adv_phrase(pp(Prep,NP),Set,Mask) ---> loc_pred(Prep), pp(pp(prep(of),NP),compl,Set,Mask). /* Adjectival Constructions */ adjs([Adj|Adjs]) ---> pre_adj(Adj), adjs(Adjs). adjs([]) ---> []. pre_adj(Adj) ---> adj(_,Adj). pre_adj(Adj) ---> sup_phrase(Adj). sup_phrase(sup(most,Adj)) ---> sup_adj(Adj). sup_phrase(sup(Op,Adj)) ---> sup_adv(Adv), adj(quant,Adj). comp_phrase(comp(Comp,Adj,Arg),Mask) ---> comp(Comp,Adj), {ix_np_no_trace(NPNT), prep_case(Case)}, np(Arg,_,Case,_,compl,NPNT,Mask). comp(Comp,Adj) ---> comp_adv(Comp), adj(quant,Adj), [than]. comp(more,Adj) ---> rel_adj(Adj), [than]. comp(same,Adj) ---> [as], adj(quant,Adj), [as]. /* Prepositional Phrase */ pp(pp(Prep,Arg),Case,Set,Mask) ---> prep(Prep), {prep_case(NPCase)}, np(Arg,_,NPCase,_,Case,Set,Mask). /* Relative clause */ relative(Agmt,[Rel],Set,_,Mask) ---> {ix_is_pred(Set)}, rel_conj(Agmt,Conj,Rel,Mask). relative(_,[],_,Mask,Mask) ---> []. rel_conj(Agmt,Conj,Rel,Mask) ---> rel(Agmt,Rel0,Mask0), rel_rest(Agmt,Conj,Rel0,Rel,Mask0,Mask). rel_rest(Agmt,Conj0,Rel0,Rel,_,Mask) ---> conj(Conj0,Conj,Rel0,Rel1,Rel), rel_conj(Agmt,Conj,Rel1,Mask). rel_rest(_,_,Rel,Rel,Mask,Mask) ---> []. rel(Agmt,rel(X,S),Mask) ---> island, variable(Agmt,X), s80(S,Mask0), {ix_trace(Trace), ix_minus(Mask0,Trace,Mask)}, dnalsi. variable(Agmt,X) ... np(np(Agmt,wh(X),[]),Agmt,_,_,_,Set,Mask) ---> [that], {ix_trace(Set,Mask)}. variable(Agmt0,X) ... np(NP,Agmt,NPCase,_,_,Set,Mask) ---> wh(X,Agmt0,NP,Agmt,NPCase), {ix_trace(Set,Mask)}. variable(Agmt0,X) ... pp(pp(Prep,NP),compl,Set,Mask) ---> prep(Prep), wh(X,Agmt0,NP,Agmt,Case), {ix_trace(Set,Mask), compl_case(Case)}. wh(X,Agmt,np(Agmt,wh(X),[]),Agmt,NPCase) ---> rel_pron(Case), {ix_role(Case,decl,NPCase)}. wh(X,Agmt0,np(Agmt,Kernel,[pp(Prep,NP)]),Agmt,_) ---> np_head0(Kernel,Agmt,_+common), prep(Prep), wh(X,Agmt0,NP,_,_). wh(X,Agmt0,NP,Agmt,Case) ---> whose(X,Agmt0), {ix_s_all(SAll)}, np(NP,Agmt,Case,def,subj,SAll,_). /* Reduced relative clause */ reduced_relative(Agmt,Rel,Set,Mask) ---> {ix_is_pred(Set)}, reduced_rel_conj(Agmt,_Conj,Rel,Mask). reduced_rel_conj(Agmt,Conj,Rel,Mask) ---> reduced_rel(Agmt,Rel0,Mask0), reduced_rel_rest(Agmt,Conj,Rel0,Rel,Mask0,Mask). reduced_rel_rest(Agmt,Conj0,Rel0,Rel,_,Mask) ---> conj(Conj0,Conj,Rel0,Rel1,Rel), reduced_rel_conj(Agmt,Conj,Rel1,Mask). reduced_rel_rest(_,_,Rel,Rel,Mask,Mask) ---> []. reduced_rel(Agmt,reduced_rel(X,S),Mask) ---> island, reduced_wh(Agmt,X), s80(S,Mask0), {ix_trace(Trace), ix_minus(Mask0,Trace,Mask)}, dnalsi. reduced_wh(Agmt,X), np(np(Agmt,wh(X),[]),Agmt,NPCase,_,_,Set0,Mask0), verb_form(be,pres+fin,Agmt,main), neg(_,Neg), pred(Neg,Pred,Mask) ---> neg(_,Neg), pred(Neg,Pred,Mask), {ix_trace(Set0,Mask0), subj_case(NPCase)}. reduced_wh(Agmt,X), np(np(Agmt,wh(X),[]),Agmt,NPCase,_,_,Set,Mask), verb(Verb,_,Type,Voice) ---> participle(Verb,Type,Voice), {ix_trace(Set,Mask), subj_case(NPCase)}. reduced_wh(AgmtX,X), np(Subj,Agmt,SCase,Def,_,Set0,Mask0) ... np(np(AgmtX,wh(X),[]),AgmtX,VCase,_,_,Set,Mask) ---> {ix_s_all(SAll), subj_case(SCase), verb_case(VCase)}, np(Subj,Agmt,_,Def,subj,SAll,_), {ix_trace(Set0,Mask0), ix_trace(Set,Mask)}. /* Verb phrase (less the complements) */ verb(verb(Root,Voice,Time+fin,Aspect,Neg),Agmt,Type,Voice) ---> verb_form(Root0,Time+fin,Agmt,Role), {verb_type(Root0,Type0)}, neg(Type0,Neg), rest_verb(Role,Root0,Root,Voice,Aspect), {verb_type(Root,Type)}. neg(aux+_,neg) ---> [not]. neg(_,pos) ---> []. rest_verb(aux,have,Root,Voice,[perf|Aspect]) ---> verb_form(Root0,past+part,_,_), have(Root0,Root,Voice,Aspect). rest_verb(aux,be,Root,Voice,Aspect) ---> verb_form(Root0,Tense0,_,_), be(Tense0,Root0,Root,Voice,Aspect). rest_verb(aux,do,Root,active,[]) ---> verb_form(Root,inf,_,_). rest_verb(main,Root,Root,active,[]) ---> []. have(be,Root,Voice,Aspect) ---> verb_form(Root0,Tense0,_,_), be(Tense0,Root0,Root,Voice,Aspect). have(Root,Root,active,[]) ---> []. be(past+part,Root,Root,passive,[]) ---> []. be(pres+part,Root0,Root,Voice,[prog]) ---> passive(Root0,Root,Voice). passive(be,Root,passive) ---> verb_form(Root,past+part,_,_), {verb_type(Root,Type), passive(Type)}. passive(Root,Root,active) ---> []. participle(verb(Root,Voice,inf,Aspect,Neg),Type,Voice) ---> neg(_,Neg), verb_form(Root,Tense,_,_), {participle(Tense,Voice,Aspect), verb_type(Root,Type)}. passive(_+trans). passive(_+ditrans). participle(pres+part,active,[prog]). participle(past+part,passive,[]). /* Extraposition brackets */ island ... dnalsi ---> []. /* Verb Arguments */ verb_args(_+Type,Voice,AdvArgs,Mask0,Mask) ---> advs(AdvArgs,Args,_), verb_args(Type,Voice,Args,Mask0,Mask). verb_args(trans,active,[arg(dir,Dir)],_,Mask) ---> verb_arg(np,Dir,Mask). verb_args(ditrans,_,[arg(Case,NP)|Obj],_,Mask) ---> verb_arg(np,NP,Mask0), object(Case,Obj,Mask0,Mask). verb_args(be,_,[void],Mask,Mask) ---> [there]. verb_args(be,_,[arg(pred,P)],_,Mask) ---> pred_conj(_,P,Mask). verb_args(be,_,[arg(dir,P)],_,Mask) ---> verb_arg(np,P,Mask). verb_args(have,active,[arg(dir,P)],_,Mask) ---> verb_arg(np,P,Mask). verb_args(Type,_,[],Mask,Mask) ---> {no_args(Type)}. object(Case,AdvArg,Mask0,Mask) ---> {ix_adv(Adv), ix_minus(Adv,Mask0,Mask1)}, advs(AdvArg,Obj,Mask1), obj(Case,Obj,Mask0,Mask). obj(ind,[arg(dir,NP)],_,Mask) ---> verb_arg(np,NP,Mask). obj(dir,[],Mask,Mask) ---> []. pred_conj(Conj,Arg,Mask) ---> pred(_,Arg0,Mask0), pred_rest(Conj,Arg0,Arg,Mask0,Mask). pred_rest(Conj0,Arg0,Arg,_,Mask) ---> conj(Conj0,Conj,Arg0,Arg1,Arg), pred_conj(Conj,Arg1,Mask). pred_rest(_,Arg,Arg,Mask,Mask) ---> []. verb_arg(np,NP,Mask) ---> {ix_s_all(SAll), verb_case(VCase)}, np(NP,_,VCase,_,compl,SAll,Mask). pred(_,Adj,Mask) ---> adj_phrase(Adj,Mask). pred(neg,PP,Mask) ---> {ix_s_all(SAll)}, pp(PP,compl,SAll,Mask). pred(_,Adv,Mask) ---> {ix_s_all(SAll)}, adv_phrase(Adv,SAll,Mask). advs([Adv|R0],R,Set) ---> {ix_is_adv(Set)}, adverb(Adv), advs(R0,R,Set). advs(R,R,_) ---> []. adj_phrase(P,Nil) ---> adj(_,P), { ix_empty(Nil) }. adj_phrase(P,Mask) ---> comp_phrase(P,Mask). no_args(trans). no_args(ditrans). no_args(intrans). /* Conjunctions */ conj(conj(Conj,Ctx0), conj(Conj,Ctx),Left,Right, conj(Conj,Left,Right)) ---> conj(Conj,Ctx0,Ctx). :-retract(tlxgproc:do_xg_process_te). :-retract(t_l:disable_px). end_of_file.