Each node is a term
where
is used for a gap threading analysis of
topicalization;
percolates information on
verb second; and
is a simple derivation tree.
is a term representing syntactic information
and
represents the argument structure, input
for generation.
Arguments of are predicates that are executed
during compilation.
Thus some of these rules will become `metarules',
in case these executable calls have several solutions.
The `object' grammar is thus somewhat larger.
partial_ex( extra/2 ). partial_ex( verb/4 ). partial_ex( aux/5 ). partial_ex( member/2 ). partial_ex( topicalizable/1) . % main -> topic v0 s x(main/LF,X-X,nil,main(T,V,S)) --> x(Topic, Y-Y, nil, T), { topicalizable(Topic) }, x(v0(VT,fin,B,C)/VS,Z-Z,nil,V), x(s(fin)/LF,Topic-nil,v0(VT,fin,B,C)/VS,S). topicalizable(np(_)/_). topicalizable(pp/_). % sbar -> comp s x(sbar(fin)/LF,I-I,nil,sbar(C,S)) --> x(comp(fin,SS)/LF,O-O,nil,C), x(s(fin)/SS,P-P,nil,S). x(sbar(infin,Sj)/LF,I-I,nil,sbar(C,S)) --> x(comp(infin,SS)/LF,O-O,nil,C), x(vp(te,Sj,[])/SS,P-P,nil,S). % s -> np vp x(s(VF)/LF,I-O,Verb,s(SS,VV)) --> x(np(Agr)/Sj,I-O2,nil,SS), x(vp(VF,np(Agr)/Sj,[])/LF,O2-O,Verb,VV).
% vp -> compl vp x(vp(VF,S,T)/LF,I-O,V,vp(C,VP)) --> x(H,I-O2,nil,C), { extra(H,no) }, x(vp(VF,S,[H|T])/LF,O2-O,V,VP). % vp -> vp compl (extraposition) x(vp(VF,S,T)/LF,I-O,V,vp(VP,C)) --> x(vp(VF,S,[H|T])/LF,O2-O,V,VP), x(H,I-O2,nil,C), { extra(H,yes) }. extra(sbar(_)/_,yes). extra(sbar(_,_)/_,yes). % must be extraposed extra(np(_)/_,no). extra(part/_,no). % may not extra(pp/_,_). % can be extraposed % vp -> v1 x(vp(VF,Sj,Sc)/LF,I-O,V,vp(VV)) --> x(v(VF,Sj,Sc-[])/LF,I-O,V,VV).
% v1 -> v0 x(v(VF,Sj,Sc)/LF,I-O,V,v(VV)) --> x(v0(main,VF,Sj,Sc)/LF,I-O,V,VV). % v1 -> aux v1 x(v(F,Sj,Sc)/LF,I-O,V,v(A,B)) --> x(v0(aux,F,Sj,v(_A,_B,_C)/_S+Sc)/LF,I-I2,V,A), x(v(_A,_B,_C)/_S,I2-O,nil,B). % gap -> v0 gap(x(v0(VT,fin,Sj,Sc)/LF,_,nil,Tree), x(v0(VT,fin,Sj,Sc)/LF,X-X,v0(VT,fin,Sj,Sc)/LF,vgap)). % np -> det n x(np(Nm)/LF,I-I,nil,np(Det,N)) --> x(det(Ns,Nm)/LF,nil-nil,nil,Det), x(n(Nm)/Ns,nil-nil,nil,N). % pp -> p np x(pp/LF,I-I,nil,pp(P,NP)) --> x(p(Np)/LF,J-J,nil,P), x(np(_)/Np,O-O,nil,NP). % topic -> x(Topic,Topic-nil,nil,topic_gap) --> { topicalizable( Topic ) }.
x(np(sg)/john,I-I,nil,np(john)) --> [jan]. x(np(sg)/mary,I-I,nil,np(mary)) --> [marie]. x(np(sg)/jane,I-I,nil,np(jane)) --> [jane]. x(np(sg)/tarzan,I-I,nil,np(tarzan)) --> [tarzan]. x(n(sg)/sg(man),I-I,nil,n(man)) --> [man]. x(n(pl)/pl(man),I-I,nil,n(mannen)) --> [mannen]. x(n(sg)/sg(woman),I-I,nil,n(vrouw)) --> [vrouw]. x(n(pl)/pl(woman),I-I,nil,n(vrouwen)) --> [vrouwen]. x(n(sg)/sg(mashed_potatoes),I-I,nil,n(puree)) --> [puree]. x(det(Ns,_)/Ns,I-I,nil,det(de)) --> [de]. x(det(Ns,pl)/Ns,I-I,nil,det(e)) --> []. x(p(Np)/naar(Np),I-I,nil,p(naar)) --> [naar]. x(p(Np)/in(Np),I-I,nil,p(in)) --> [in]. x(p(Np)/van(Np),I-I,nil,p(van)) --> [van]. x(p(Np)/aan(Np),I-I,nil,p(aan)) --> [aan]. x(part/op,I-I,nil,part(op)) --> [op]. x(comp(fin,S)/dat(S),O-O,nil,comp(dat)) --> [dat]. x(comp(fin,S)/because(S),O-O,nil,comp(dat)) --> [omdat]. x(comp(infin,S)/S,O-O,nil,comp(om)) --> [om]. x(comp(infin,S)/S,O-O,nil,comp(om)) --> [].
% verbs and auxes pick out an inflectional variant: x(v0(main,Fin,np(Agr)/A1,Sc)/LF,I-I,nil,v0(Form)) --> [ Form ], { verb(LF,np(Agr)/A1,Sc,List), member(Fin/Agr/Form,List) }. x(v0(aux,Fin,np(Agr)/A1,Verb+Sc)/LF,I-I,nil,aux(Form)) --> [ Form ], { aux(LF,Verb,Sc,np(Agr)/A1,List), member(Fin/Agr/Form,List) }. verb(sleep(A1),_/A1,X-X, [fin/sg/slaapt,fin/pl/slapen,infin/_/slapen,part/_/geslapen]). verb(catch(A1,A2),_/A1,[part/op,np(_)/A2|X]-X, %particle verb [fin/sg/vangt,fin/pl/vangen,infin/_/vangen,part/_/gevangen]). verb(in_trouble(A1),_/A1,[pp/in(sg(mashed_potatoes))|X]-X, %idiom [fin/sg/zit,fin/pl/zitten,infin/_/zitten,part/_/gezeten]). verb(kiss(A1,A2),_/A1,[np(_)/A2|X]-X, [fin/sg/kust,fin/pl/kussen,infin/_/kussen,part/_/gekust]).
verb(say(A1,A2),_/A1,[sbar(fin)/dat(A2)|X]-X, [fin/sg/zegt,fin/pl/zeggen,infin/_/zeggen,part/_/gezegd]). % object control verb(force(A1,A2,A3),Sj/A1,[sbar(infin,Sj/A1)/A3,np(_)/A2|X]-X, [fin/sg/dwingt,fin/pl/dwingen,infin/_/dwingen,part/_/gedwongen]). verb(try(A1,A2),Sj/A1,[sbar(infin,Sj/A1)/A2|X]-X, % subject control [fin/sg/probeert,fin/pl/proberen,infin/_/proberen,part/_/geprobeerd]). verb(give(A1,A2,A3),_/A1,[np(_)/A2,np(_)/A3|X]-X, [fin/sg/geeft,fin/pl/geven,infin/_/geven,part/_/gegeven]). verb(give(A1,A2,A3),_/A1,[pp/aan(A3),np(_)/A2|X]-X, [fin/sg/geeft,fin/pl/geven,infin/_/geven,part/_/gegeven]).
aux(perf(X),v(part,np(Agr)/A1,Sc)/X,Sc,np(Agr)/A1, [ fin/sg/heeft,fin/pl/hebben,infin/_/hebben, part/_/gehad]). aux(fut(X),v(infin,np(Agr)/A1,Sc)/X,Sc,np(Agr)/A1, [ fin/sg/zal,fin/pl/zullen,infin/_/zullen ]). aux(X,v(infin,Sj,Sc)/X,Sc,Sj,[ te/_/te ] ). aux(try(A1,A2),v(te,_/A1,Sc)/A2,Sc,np(Agr)/A1, %raising [ fin/sg/probeert,fin/pl/proberen,infin/_/proberen,part/_/proberen ] ). aux(see(A1,A2),v(infin,Sj,A-[Sj|E])/A2,A-E,np(Agr)/A1, % aci raising [ fin/sg/ziet, fin/pl/zien, infin/_/zien,part/_/zien ] ). aux(help(A1,A2),v(infin,Sj,A-[Sj|E])/A2,A-E,np(Agr)/A1, % aci raising [ fin/sg/helpt, fin/pl/helpen,infin/_/helpen,part/_/helpen ] ).