Appendix B
SUBCATSY: een implementatie in DCG
% SUBCATSY in Definite Clause Grammar (DCG)
% =========================================
%
% predicates to compare values of variables
equals(X,X).
is_not(X,Y) :-
not(equals(X,Y)).
is_sentential_or_prepositional(CAT) :-
is_sentential(CAT);
is_prepositional(CAT).
is_nominal(np).
is_nominal(np(refl(opt))).
is_sentential(c(CFORM)).
is_prepositional(p(PFORM)).
is_not_sentential(CAT) :-
not(is_sentential(CAT)).
is_prepositional(p(PFORM),PFORM).
is_prepositional(np_p(PFORM),PFORM).
is_reflexive(np(refl(opt))).
is_reflexive(np(refl(no_opt))).
is_oblig_reflexive(np(refl(no_opt))).
is_not_oblig_reflexive(CAT) :-
not(is_oblig_reflexive(CAT)).
% Loading Lexicon and S-frames
:- nl, write(' S U B C A T S Y'), nl, nl,
write(' Loading lexicon...'), reconsult(lexiconp), nl,
write(' Loading sframes...'), reconsult(sframesp), nl,
write(' Reading grammar...'), nl,nl.
% Parsing a sentence: sentence(TREE, []).
sentence(TREE,LIST) :-
phrase(cp(TREE,main,fin, [], []),LIST).
% === CP: (SPEC) + CBAR
% main sentence; spec= subject (ea)
cp(cp(SPEC,CBAR),main,VFORM, [], []) -->
spec(SPEC,SUBJ,Number,Person),
cbar(CBAR,main,VFORM,SUBJ,Number,Person).
% main sentence; spec= empty or topicalized object (ia)
cp(cp(SPEC,CBAR),main,VFORM, [], []) -->
spec(SPEC,COMP),
cbar(CBAR,main,VFORM,COMP).
% sentence (imperative)
cp(cp(CBAR),main,VFORM, [], []) -->
cbar(CBAR,main,imp,VFORM, []).
% subclause:
cp(cp(feat(sem(role(ROLE))),spec,CBAR),no_main,CFORM,ROLE, [], []) -->
cbar(CBAR,no_main,CFORM, []).
% relative (sub)clause:
% relativized and topicalized subject
cp(cp(feat(sem(role(ROLE))),SPEC,CBAR),no_main,ROLE,rel(Number,Gender,SEM_FEAT)) -->
spec(SPEC,SUBJ,Number,Person,rel(Number,Gender,SEM_FEAT)),
cbar(CBAR,no_main,SUBJ,Number,Person).
% relativized and topicalized object
cp(cp(feat(sem(role(ROLE))),SPEC,CBAR),no_main,ROLE,REL) -->
spec(SPEC,COMP,REL),
cbar(CBAR,no_main,COMP).
% SPEC: [Spec,CP]-position for topicalized elements
% topicalized external argument (ea)
spec(spec(EA),ea(CAT,ROLE,SEM_FEAT),Number,Person) -->
ea(EA,CAT,ROLE,SEM_FEAT,Number,Person).
% no topicalized argument, one free adjunct is possible
spec(spec(AD), []) --> ad(AD).
% no null-complement (OCCURR=opt) allowed in [Spec,CP] position: no_opt
% topicalized internal argument (ia)
spec(spec(IA), ia(CAT,ROLE,SEM_FEAT,OCCURR)) -->
ia(IA,CAT,ROLE,SEM_FEAT,no_opt).
% topicalized adjunct-argument
spec(spec(AD),ad(CAT,ROLE,SEM_FEAT,OCCURR)) -->
ad(AD,CAT,ROLE,SEM_FEAT,no_opt).
% topicalized predicative argument (pred)
spec(spec(PRED),pred(CAT,ROLE,SEM_FEAT,OCCURR)) -->
pred(PRED,CAT,ROLE,SEM_FEAT,no_opt).
% relative pronoun in relative clause:
% topicalized external argument (ea)
spec(spec(EA),ea(CAT,ROLE,SEM_FEAT),Number,Person,REL) -->
ea(EA,CAT,ROLE,SEM_FEAT,Number,Person,REL).
% topicalized internal argument (ia)
spec(spec(IA), ia(CAT,ROLE,SEM_FEAT,OCCURR),REL) -->
ia(IA,CAT,ROLE,SEM_FEAT,no_opt,REL).
% CBAR: C + VP
% 1. main sentence : (C = V[+fin])
% 1.1. sentence with topicalized subject
cbar(cbar(c(V),VP),main,VFORM,SUBJ,Number,Person) -->
v(V,STEM,VTYPE,VFORM,Tense,Number,Person),
vp(VP,main,STEM,VTYPE,VFORM,SUBJ,Number,Person).
% 1.2. imperative sentence (always without verb cluster)
cbar(cbar(c(V),VP),main,imp,VFORM,COMP) -->
v(V,STEM,lex,VFORM,imp),
vp(VP,main,STEM,lex,VFORM,imp,SUBJ, [],no_plu,p2).
% 1.3. sentence with topicalized object or without topicalization
% without/with verb cluster
cbar(cbar(c(V),VP),main,VFORM,COMP) -->
v(V,STEM,VTYPE,VFORM,Tense,Number,Person),
vp(VP,main,STEM,VTYPE,VFORM,SUBJ,COMP,Number,Person).
% 2. subclause : (C = Complementizer 'dat/of/om')
% -- finite: dat/of
cbar(cbar(C,VP),no_main,CFORM, []) -->
c(C,CFORM,fin),
vp(VP,no_main,STEM,VTYPE,fin,SUBJ, [],Number,Person).
% -- infinite: om +te_inf (ctrl= controle)
% PRO-subject gets its semantic features from the controller
cbar(cbar(C,VP),no_main,om(ctrl(SEM_FEAT)), []) -->
c(C,om,te_inf),
vp(VP,no_main,te_inf,ea(CAT,ROLE,SEM_FEAT), [],Number,Person,ctrl).
% 3. relative (sub)clause : (C = 0)
% 3.1 relative clause with relativized and topicalized subject
cbar(cbar(c(0),VP),no_main,SUBJ,Number,Person) -->
vp(VP,no_main,STEM,VTYPE,fin,SUBJ,Number,Person).
% 3.2 relative clause with relativized and topicalized object
cbar(cbar(c(0),VP),no_main,COMP) -->
vp(VP,no_main,STEM,VTYPE,fin,SUBJ,COMP,Number,Person).
% === VP: (ea:NP) + VBAR
% 1. sentence with topicalized subject: vp without subject; (COMP: [])
vp(vp(0,VBAR3),CPTYPE,STEM,VTYPE,VFORM,ea(CAT,ROLE,SEM_FEAT),
Number,Person) -->
vbar3(VBAR3,CPTYPE,STEM,VTYPE,VFORM,ea(CAT,ROLE,SEM_FEAT), [],Number,Person).
% 2. imperative sentence: vp with implicit subject 0
vp(vp(np(feat(sem(role(ROLE),SEM_FEAT),Number,Person),0),VBAR3),main,STEM,VTYPE,VFORM,
imp,ea(CAT,ROLE,SEM_FEAT), [],Number,Person) -->
vbar3(VBAR3,main,STEM,VTYPE,VFORM,ea(CAT,ROLE,SEM_FEAT), [],Number,Person).
% 3. sentence with topicalized object or without topicalization: vp - COMP
vp(vp(EA,VBAR3),CPTYPE,STEM,VTYPE,VFORM,ea(CAT,ROLE,SEM_FEAT),COMP,
Number,Person) -->
ea(EA,CAT,ROLE,SEM_FEAT,Number,Person),
vbar3(VBAR3,CPTYPE,STEM,VTYPE,VFORM,ea(CAT,ROLE,SEM_FEAT),COMP,Number,Person).
% 4. infinitive subclause: vp(te_inf) with implicit subject PRO; (COMP: [])
vp(vp(np(feat(sem(role(ROLE),SEM_FEAT)),pro),VBAR3),no_main,te_inf,
ea(CAT,ROLE,SEM_FEAT), [],Number,Person, ctrl) -->
vbar3(VBAR3,no_main,STEM,VTYPE,te_inf,ea(CAT,ROLE,SEM_FEAT), [],Number,Person).
% 5.a) RTO (SUBJLIST), sentence with topicalized ea
vp(vp(0,vbar3(IA,VBAR3)),CPTYPE,STEM,VTYPE,VFORM,SUBJ,Number,Person) -->
ia(IA,np,ROLE1,SEM_FEAT1,no_opt),
vbar3(VBAR3,CPTYPE,STEM,VTYPE,VFORM, [SUBJ,ea(CAT1,ROLE1,SEM_FEAT1)], [],
Number,Person).
% b) RTO (SUBJLIST), sentence with topicalized ia or without topicalization
vp(vp(EA,vbar3(IA,VBAR3)),CPTYPE,STEM,VTYPE,VFORM,ea(CAT,ROLE,SEM_FEAT),COMP,
Number,Person) -->
ea(EA,CAT,ROLE,SEM_FEAT,Number,Person),
ia(IA,np,ROLE1,SEM_FEAT1,no_opt),
vbar3(VBAR3,CPTYPE,STEM,VTYPE,VFORM, [ea(CAT,ROLE,SEM_FEAT),ea(CAT1,ROLE1,SEM_FEAT1)],COMP,
Number,Person).
% c) RTO (SUBJLIST), sentence with topicalized RAISED ia
vp(vp(EA,vbar3(0,VBAR3)),CPTYPE,STEM,VTYPE,VFORM,
ea(CAT,ROLE,SEM_FEAT), ia(np,ROLE1,SEM_FEAT1,no_opt),Number,Person) -->
ea(EA,CAT,ROLE,SEM_FEAT,Number,Person),
vbar3(VBAR3,CPTYPE,STEM,VTYPE,VFORM, [ea(CAT,ROLE,SEM_FEAT),ea(CAT1,ROLE1,SEM_FEAT1)], [],
Number,Person).
% VBAR3: optional adjunction (free adjunct)
vbar3(vbar3(AD,VBAR2),CPTYPE,STEM,VTYPE,VFORM,SUBJ,COMP,Number,Person) -->
ad(AD),
vbar2(VBAR2,CPTYPE,STEM,VTYPE,VFORM,SUBJ,COMP,Number,Person).
% VBAR2: arguments, VBAR1
% Check subcategorization requirements with S-frames of main lexical verb!
% 1. without topicalized object: COMP = []
% --- intransitive:
% no complement: empty COMPLIST []
vbar2(vbar2(VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person).
% --- monotransitive:
% complement: ia:NP/PP [-refl] (or [-refl] variant, if: [+/-refl])
vbar2(vbar2(IA,VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA,CAT,ROLE,SEM_FEAT,OCCURR),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [ia(CAT,ROLE,SEM_FEAT,OCCURR)],
Number,Person),
{ is_not_oblig_reflexive(CAT) },
{ is_not_sentential(CAT) }.
% complement: ia:NP ([+refl]) + subject agreement in Number and Person
vbar2(vbar2(IA,VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA,CAT,ROLE,SEM_FEAT,no_opt,Number,Person),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [ia(CAT,ROLE,SEM_FEAT,OCCURR)],
Number,Person),
{ is_reflexive(CAT) }.
% complement: ia:CP (extraposition)
vbar2(vbar2(VBAR1,IA),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [ia(CAT,ROLE,SEM_FEAT,OCCURR)],
Number,Person),
ia(IA,CAT,ROLE,SEM_FEAT,OCCURR),
{ is_sentential(CAT) }.
% complement: ia:PP (extraposition)
vbar2(vbar2(VBAR1,IA),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [ia(CAT,ROLE,SEM_FEAT,OCCURR)],
Number,Person),
ia(IA,CAT,ROLE,SEM_FEAT,no_opt),
{ is_prepositional(CAT,PFORM) }.
% complement: ad:AdvP/PP
vbar2(vbar2(AD,VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ad(AD,CAT,ROLE,SEM_FEAT,OCCURR),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [ad(CAT,ROLE,SEM_FEAT,OCCURR)],
Number,Person).
% --- ditransitive:
% complements: ia1:NP/PP + ia2:NP/PP
vbar2(vbar2(IA1,vbar2(AD,vbar2(IA2,VBAR1))),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA1,CAT1,ROLE1,SEM_FEAT1,OCCURR1),
ad(AD),
ia(IA2,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_not_sentential(CAT1) },
{ is_not_sentential(CAT2) }.
% complements: ia2:NP/PP + ia1:PP
vbar2(vbar2(IA2,vbar2(AD,vbar2(IA1,VBAR1))),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA2,CAT2,ROLE2,SEM_FEAT2,no_opt),
ad(AD),
ia(IA1,p(PFORM),ROLE1,SEM_FEAT1,no_opt),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),
ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_not_sentential(CAT2) },
{ is_prepositional(CAT1,PFORM) }.
% complements: ia1:NP/PP + ia2:CP (extraposition)
vbar2(vbar2(IA1,vbar2(VBAR1,IA2)),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA1,CAT1,ROLE1,SEM_FEAT1,OCCURR1),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
ia(IA2,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
{ is_not_sentential(CAT1) },
{ is_sentential(CAT2) }.
% complements: ia1:NP/PP + ia2:PP (extraposition)
vbar2(vbar2(IA1,vbar2(AD,vbar2(VBAR1,IA2))),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA1,CAT1,ROLE1,SEM_FEAT1,OCCURR1),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
ia(IA2,CAT2,ROLE2,SEM_FEAT2,no_opt),
{ is_not_sentential(CAT1) },
{ is_prepositional(CAT2) }.
% complements: ia2:NP/PP + ia1:PP (extraposition)
vbar2(vbar2(IA2,vbar2(VBAR1,IA1)),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA2,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
ia(IA1,p(PFORM),ROLE1,SEM_FEAT1,no_opt),
{ is_not_sentential(CAT2) },
{ is_prepositional(CAT1,PFORM) }.
% complements: ia1:PP (extraposition) + ia2:CP (extraposition)
vbar2(vbar2(vbar2(VBAR1,IA1),IA2),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
ia(IA1,p(PFORM),ROLE1,SEM_FEAT1,no_opt),
ia(IA2,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
{ is_prepositional(CAT1,PFORM) },
{ is_sentential(CAT2) }.
% complements: ia1:PP (extraposition) + ia2:PP (extraposition)
vbar2(vbar2(vbar2(VBAR1,IA1),IA2),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
ia(IA1,p(PFORM),ROLE1,SEM_FEAT1,no_opt),
ia(IA2,CAT2,ROLE2,SEM_FEAT2,no_opt),
{ is_prepositional(CAT1,PFORM) },
{ is_prepositional(CAT2) }.
% complements: ia2:PP (extraposition) + ia1:PP (extraposition)
vbar2(vbar2(vbar2(VBAR1,IA2),IA1),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
ia(IA2,CAT2,ROLE2,SEM_FEAT2,no_opt),
ia(IA1,p(PFORM),ROLE1,SEM_FEAT1,no_opt),
{ is_prepositional(CAT1,PFORM) },
{ is_prepositional(CAT2) }.
% complements: ia:NP + ad:AdvP/PP
vbar2(vbar2(IA,vbar2(AD,VBAR1)),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA,CAT1,ROLE1,SEM_FEAT1,OCCURR1),
ad(AD,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),ad(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_not_oblig_reflexive(CAT1) },
{ is_not_sentential(CAT1) }.
% complements: ia:NP[+refl] + ad:AdvP/PP
vbar2(vbar2(IA,vbar2(AD,VBAR1)),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA,CAT1,ROLE1,SEM_FEAT1,no_opt,Number,Person),
ad(AD,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),ad(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_reflexive(CAT1) }.
% --- copulative (pred):
% no topicalized predicative argument
vbar2(vbar2(PRED,VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
pred(PRED,CAT,ROLE,SEM_FEAT,OCCURR),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [pred(CAT,ROLE,SEM_FEAT,OCCURR)],
Number,Person).
% complements: ia:NP[+refl] + pred
vbar2(vbar2(IA,vbar2(PRED,VBAR1)),CPTYPE,STEM,VTYPE,VFORM,SUBJ, [],Number,Person) -->
ia(IA,CAT1,ROLE1,SEM_FEAT1,no_opt,Number,Person),
pred(PRED,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),pred(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_reflexive(CAT1) }.
% 2. with topicalized complement: COMP = ia/pred/ad
% --- monotransitive:
% complement: topicalized ia:NP/PP
vbar2(vbar2(VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ,
ia(CAT,ROLE,SEM_FEAT,OCCURR),Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [ia(CAT,ROLE,SEM_FEAT,OCCURR)],Number,Person).
% complement: topicalized ad:AdvP/PP
vbar2(vbar2(VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ,
ad(CAT,ROLE,SEM_FEAT,OCCURR),Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [ad(CAT,ROLE,SEM_FEAT,OCCURR)],Number,Person).
% --- ditransitive:
% complements: topicalized ia1:NP/PP/CP + ia2:NP/PP
vbar2(vbar2(IA2,VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ,
ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),Number,Person) -->
ia(IA2,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_not_sentential(CAT2) }.
% complements: topicalized ia1:NP/PP + ia2:CP (extraposition)
vbar2(vbar2(VBAR1,IA2),CPTYPE,STEM,VTYPE,VFORM,SUBJ,
ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
ia(IA2,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
{ is_not_sentential(CAT1) },
{ is_sentential(CAT2) }.
% complements: topicalized ia1:NP/PP + ia2:PP (extraposition)
vbar2(vbar2(VBAR1,IA2),CPTYPE,STEM,VTYPE,VFORM,SUBJ,
ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
ia(IA2,CAT2,ROLE2,SEM_FEAT2,no_opt),
{ is_not_sentential(CAT1) },
{ is_prepositional(CAT2) }.
% complements: topicalized ia2:NP/PP/CP + ia1:NP/PP
vbar2(vbar2(IA1,VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ,
ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2),Number,Person) -->
ia(IA1,CAT1,ROLE1,SEM_FEAT1,OCCURR1),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_not_sentential(CAT1) }.
% complements: topicalized ia:NP + ad:AdvP/PP
vbar2(vbar2(AD,VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ,
ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),Number,Person) -->
ad(AD,CAT2,ROLE2,SEM_FEAT2,OCCURR2),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),ad(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_not_oblig_reflexive(CAT1) },
{ is_not_sentential(CAT1) }.
% complements: topicalized ad:AdvP/PP + ia:NP[+refl]
vbar2(vbar2(IA,vbar2(VBAR1)),CPTYPE,STEM,VTYPE,VFORM,SUBJ,
ad(CAT2,ROLE2,SEM_FEAT2,OCCURR2),Number,Person) -->
ia(IA,CAT1,ROLE1,SEM_FEAT1,no_opt,Number,Person),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),ad(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_reflexive(CAT1) }.
% --- copulative (pred):
% complements: topicalized predicative argument
vbar2(vbar2(VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ,pred(CAT,ROLE,SEM_FEAT,OCCURR),Number,Person) -->
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ, [pred(CAT,ROLE,SEM_FEAT,OCCURR)],
Number,Person).
% complements: topicalized predicative argument + NP[+refl]
vbar2(vbar2(IA,VBAR1),CPTYPE,STEM,VTYPE,VFORM,SUBJ,
pred(CAT2,ROLE2,SEM_FEAT2,OCCURR2),Number,Person) -->
ia(IA,CAT1,ROLE1,SEM_FEAT1,no_opt,Number,Person),
vbar1(VBAR1,CPTYPE,STEM,VTYPE,VFORM,SUBJ,
[ia(CAT1,ROLE1,SEM_FEAT1,OCCURR1),pred(CAT2,ROLE2,SEM_FEAT2,OCCURR2)],
Number,Person),
{ is_reflexive(CAT1) }.
% VBAR1 = verbal cluster
% Get S-frames of verbs!
% 1. finite verb on second position, S-frame of Vfin comes from the extraction site
% empty verb cluster: lexical verb on second position
vbar1(vbar1(v(0)),main,STEM,lex,fin,SUBJ,COMPLIST,Number,Person) -->
[], { sframe(v,STEM, [SUBJ|COMPLIST]) }.
% minimal verb cluster: only particle
% (compose compound stem by concatenating particle and verbal stem)
vbar1(vbar1(v(PRT,0)),main,STEM,lex,fin,SUBJ,COMPLIST,Number,Person) -->
prt(PRT,PARTICLE),
{ concat(PARTICLE,STEM,COMPOUND_STEM),
sframe(v,COMPOUND_STEM, [SUBJ|COMPLIST]) }.
% verb cluster with aux
vbar1(vbar1(VBAR1),main,STEM,aux,fin,SUBJ,COMPLIST,Number,Person) -->
{ sframe(v,STEM, [SUBJ,vpred(NEW_VFORM)]) },
vbar1(VBAR1,main,NEW_STEM,NEW_VTYPE,NEW_VFORM,SUBJ,COMPLIST,Number,Person).
% verb cluster with RTO-verb: SUBJLIST (also SUBJLIST from verb cluster)
vbar1(vbar1(VBAR1),main,STEM,aux,fin, [SUBJ,SUBJ1],COMPLIST,Number,Person) -->
{ sframe(v,STEM, [SUBJ,vpred(NEW_VFORM)]) },
vbar1(VBAR1,main,NEW_STEM,NEW_VTYPE,NEW_VFORM, [SUBJ,SUBJ1],COMPLIST,Number,Person).
% verb cluster with RTO-verb: SUBJLIST
vbar1(vbar1(VBAR1),main,STEM,aux(rto),fin, [SUBJ,SUBJ1],COMPLIST,Number,Person) -->
{ sframe(v,STEM, [SUBJ,vpred(NEW_VFORM)]) },
vbar1(VBAR1,main,NEW_STEM,NEW_VTYPE,NEW_VFORM,SUBJ1,COMPLIST,Number,Person).
% verb cluster with passive aux
vbar1(vbar1(VBAR1),main,STEM,aux(pass),fin,SUBJ,COMPLIST,Number,Person) -->
{ sframe(v,STEM, [SUBJ,vpred(psp)]) },
vbar1(VBAR1,main,NEW_STEM,NEW_VTYPE,psp(pass),SUBJ,COMPLIST,Number,Person).
% 2. finite lexical verb in subclause
vbar1(vbar1(V),no_main,STEM,lex,fin,SUBJ,COMPLIST,Number,Person) -->
v(V,STEM,lex,fin,Tense,Number,Person),
{ sframe(v,STEM, [SUBJ|COMPLIST]) }.
% 3. finite aux verb in subclause, followed by rest of verbal cluster +VFORM
vbar1(vbar1(V,VBAR1),no_main,STEM,aux,fin,SUBJ,COMPLIST,Number,Person) -->
v(V,STEM,aux,fin,Tense,Number,Person),
{ sframe(v,STEM, [SUBJ,vpred(NEW_VFORM)]) },
vbar1(VBAR1,no_main,NEW_STEM,NEW_VTYPE,NEW_VFORM,SUBJ,COMPLIST,Number,Person).
vbar1(vbar1(V,VBAR1),no_main,STEM,aux,fin, [SUBJ,SUBJ1],COMPLIST,Number,Person) -->
v(V,STEM,aux,fin,Tense,Number,Person),
{ sframe(v,STEM, [SUBJ,vpred(NEW_VFORM)]) },
vbar1(VBAR1,no_main,NEW_STEM,NEW_VTYPE,NEW_VFORM, [SUBJ,SUBJ1],COMPLIST,Number,Person).
vbar1(vbar1(V,VBAR1),no_main,STEM,aux(rto),fin, [SUBJ,SUBJ1],COMPLIST,Number,Person) -->
v(V,STEM,aux(rto),fin,Tense,Number,Person),
{ sframe(v,STEM, [SUBJ,vpred(NEW_VFORM)]) },
vbar1(VBAR1,no_main,NEW_STEM,NEW_VTYPE,NEW_VFORM,SUBJ1,COMPLIST,Number,Person).
% 4. nonfinite lexical verb
% non-passive:
vbar1(vbar1(V),CPTYPE,STEM,lex,VFORM,SUBJ,COMPLIST,Number,Person) -->
v(V,STEM,lex,VFORM),
{ sframe(v,STEM, [SUBJ|COMPLIST]) }.
% particle + 'te' + V(inf)
% (compose compound stem by concatenating particle and verbal stem)
vbar1(vbar1(PRT,V),CPTYPE,STEM,lex,te_inf,SUBJ,COMPLIST,Number,Person) -->
prt(PRT,PARTICLE),
v(V,STEM,lex,te_inf),
{ concat(PARTICLE,STEM,COMPOUND_STEM),
sframe(v,COMPOUND_STEM, [SUBJ|COMPLIST]) }.
% passive:
vbar1(vbar1(V),CPTYPE,STEM,lex,psp(pass),SUBJ,COMPLIST,Number,Person) -->
v(V,STEM,lex,psp),
{ sframe(v,STEM, [SUBJ|COMPLIST],pass) }.
% 5. nonfinite aux verb followed by verbal compl +VFORM (vbar1)
% non-passive:
vbar1(vbar1(V,VBAR1),CPTYPE,STEM,aux,VFORM,SUBJ,COMPLIST,Number,Person) -->
v(V,STEM,aux,VFORM),
{ sframe(v,STEM, [SUBJ,vpred(NEW_VFORM)]) },
vbar1(VBAR1,CPTYPE,NEW_STEM,NEW_VTYPE,NEW_VFORM,SUBJ,COMPLIST,Number,Person).
vbar1(vbar1(V,VBAR1),CPTYPE,STEM,aux,VFORM, [SUBJ,SUBJ1],COMPLIST,Number,Person) -->
v(V,STEM,aux,VFORM),
{ sframe(v,STEM, [SUBJ,vpred(NEW_VFORM)]) },
vbar1(VBAR1,CPTYPE,NEW_STEM,NEW_VTYPE,NEW_VFORM, [SUBJ,SUBJ1],COMPLIST,Number,Person).
vbar1(vbar1(V,VBAR1),CPTYPE,STEM,aux(rto),VFORM, [SUBJ,SUBJ1],COMPLIST,Number,Person) -->
v(V,STEM,aux(rto),VFORM),
{ sframe(v,STEM, [SUBJ,vpred(NEW_VFORM)]) },
vbar1(VBAR1,CPTYPE,NEW_STEM,NEW_VTYPE,NEW_VFORM,SUBJ1,COMPLIST,Number,Person).
% passive:
vbar1(vbar1(V,VBAR1),CPTYPE,STEM,aux(pass),VFORM,SUBJ,COMPLIST,Number,Person) -->
v(V,STEM,aux(pass),VFORM),
{ sframe(v,STEM, [SUBJ,vpred(psp)]) },
vbar1(VBAR1,CPTYPE,NEW_STEM,NEW_VTYPE,psp(pass),SUBJ,COMPLIST,Number,Person).
% Realization of arguments in terms of phrasal categories
% -------------------------------------------------------
% (ROLE/CASE assignment to syntactic arguments)
% Occurrence of argument: opt (=optional) / no_opt (=obligatory)
% -- external argument:
% EA realized as NP (default: NFORM=norm)
ea(NP,np,ROLE,SEM_FEAT,Number,Person) -->
np(NP,WH,norm,nom,ROLE,SEM_FEAT,Number,Person,COP).
ea(NP,np(NFORM),ROLE,SEM_FEAT,Number,Person) -->
np(NP,WH,NFORM,nom,ROLE,SEM_FEAT,Number,Person,COP).
% EA realized as CP
ea(CP,c(CFORM),ROLE,no_ani,no_plu,p3) -->
cp(CP,no_main,CFORM,ROLE, [], []).
% EA realized as relative pronoun (+REL)
ea(NP,np,ROLE,SEM_FEAT,Number,Person,REL) -->
np(NP,no_wh,REL,nom,ROLE,SEM_FEAT,Number,Person,simpl).
% -- internal arguments:
% SEM_FEAT can be unspecified in case of null-complement;
% specification by selection restrictions (SEM_FEAT) on that argument
ia(0, CAT,ROLE,SEM_FEAT,opt) --> [].
ia(IA,CAT,ROLE,SEM_FEAT,opt) --> ia(IA,CAT,ROLE,SEM_FEAT,no_opt).
ia(NP,np,ROLE,SEM_FEAT,no_opt) -->
np(NP,WH,norm,no_nom,ROLE,SEM_FEAT,Number,Person,COP).
ia(NP,np(refl(opt)),ROLE,SEM_FEAT,no_opt) -->
np(NP,WH,norm,no_nom,ROLE,SEM_FEAT,Number,Person,COP).
% +REFL: reflexive pronoun
ia(NP,np(refl(REFL_OCCURR)),ROLE,SEM_FEAT,no_opt,Number,Person) -->
np(NP,no_wh,refl,no_nom,ROLE,SEM_FEAT,Number,Person,simpl).
% +REL: relative pronoun
ia(NP,np,ROLE,SEM_FEAT,no_opt,REL) -->
np(NP,no_wh,REL,no_nom,ROLE,SEM_FEAT,Number,Person,simpl).
ia(NP,np(refl(opt)),ROLE,SEM_FEAT,no_opt,REL) -->
np(NP,no_wh,REL,no_nom,ROLE,SEM_FEAT,Number,Person,simpl).
ia(NP,np_p(PFORM),ROLE,SEM_FEAT,no_opt) -->
np(NP,WH,norm,no_nom,ROLE,SEM_FEAT,Number,Person,COP).
ia(P_NP,np_p(PFORM),ROLE,SEM_FEAT,no_opt) -->
p_np(P_NP,PFORM,ROLE,SEM_FEAT).
ia(P_NP,p(PFORM),ROLE,SEM_FEAT,no_opt) -->
p_np(P_NP,PFORM,ROLE,SEM_FEAT).
ia(CP,c(CFORM),ROLE,no_ani,no_opt) -->
cp(CP,no_main,CFORM,ROLE, [], []).
% -- predicative argument:
pred(AP,ap,ROLE,no_feat,no_opt) -->
ap(AP,ROLE,no_infl).
pred(NP,np,ROLE,SEM_FEAT,no_opt) -->
np(NP,WH,norm,nom,ROLE,SEM_FEAT,Number,Person,COP).
pred(PP,pp,ROLE,SEM_FEAT,no_opt) -->
pp(PP,PFORM,ROLE,SEM_FEAT).
pred(CP,c(CFORM),ROLE,SEM_FEAT,no_opt) -->
cp(CP,no_main,CFORM,ROLE, [], []).
% -- adjunct-argument
ad(0, CAT,ROLE,SEM_FEAT,opt) --> [].
ad(AD,CAT,ROLE,SEM_FEAT,opt) --> ad(AD,CAT,ROLE,SEM_FEAT,no_opt).
ad(PP,advp_p,ROLE,SEM_FEAT,no_opt) -->
pp(PP,PFORM,ROLE,SEM_FEAT).
ad(ADVP,advp_p,ROLE,SEM_FEAT,no_opt) -->
advp(ADVP,ROLE).
ad(ADVP,advp,ROLE,SEM_FEAT,no_opt) -->
advp(ADVP,ROLE).
% Realization of free adjunct as Adverb phrase
% --------------------------------------------
ad(0) --> [].
ad(ADVP) -->
advp(ADVP).
% Internal structure of phrasal categories
% ----------------------------------------
% AdvP formation:
advp(advp(ADV)) -->
adv(ADV,INHERENT_ROLE).
advp(advp(feat(sem(role(ROLE))),ADV),ROLE) -->
adv(ADV,INHERENT_ROLE).
% PP formation:
pp(pp(feat(sem(role(ROLE))),SPEC,PBAR),PFORM,ROLE,SEM_FEAT) -->
spec_pp(SPEC),
pbar(PBAR,SEM_FEAT).
pp(pp(feat(sem(role(ROLE))),PBAR),PFORM,ROLE,SEM_FEAT) -->
pbar(PBAR,SEM_FEAT).
spec_pp(spec(ADV)) -->
adv(ADV,M,pos).
pbar(pbar(P,NP),SEM_FEAT) -->
p(P,PFORM,INHERENT_ROLE),
np(NP,WH,norm,no_nom,INHERENT_ROLE,SEM_FEAT,Number,Person,COP).
% NP formation with adjoined dummy P:
p_np(pp(P,NP),PFORM,ROLE,SEM_FEAT) -->
p(P,PFORM),
np(NP,WH,norm,no_nom,ROLE,SEM_FEAT,Number,Person,COP).
% NP formation:
% -- coordinate NP (+functional category CoP)
eval_person(Person,Person,Person).
eval_person(Person1,Person2,Person1) :- Person1 @< Person2.
eval_person(Person1,Person2,Person2) :- Person1 @> Person2.
np(cop(NP,COBAR),WH,norm,Case,ROLE,SEM_FEAT,plu,Person,coord) -->
np(NP,WH,norm,Case,ROLE,SEM_FEAT,Number1,Person1),
cobar(COBAR,WH,norm,Case,ROLE,SEM_FEAT,Number2,Person2),
{ eval_person(Person1,Person2,Person) }.
cobar(cobar(CO,NP),WH,norm,Case,ROLE,SEM_FEAT,Number2,Person2) -->
co(CO,Conjtype),
np(NP,WH,norm,Case,ROLE,SEM_FEAT,Number2,Person2).
cobar(cobar(CO,NP,COBAR),WH,norm,Case,ROLE,SEM_FEAT,Number,Person) -->
co(CO,Conjtype),
np(NP,WH,norm,Case,ROLE,SEM_FEAT,Number2,Person2),
cobar(COBAR,WH,norm,Case,ROLE,SEM_FEAT,Number3,Person3),
{ eval_person(Person2,Person3,Person) }.
% -- simplex NP:
% In modern Dutch: there is no (productive) Case inflection on N stems
np(NP,WH,NFORM,Case,ROLE,SEM_FEAT,Number,Person,simpl) -->
np(NP,WH,NFORM,Case,ROLE,SEM_FEAT,Number,Person).
% np structure without quantification and specification
% nbar1: proper noun (name)
np(np(feat(sem(role(ROLE),SEM_FEAT),Case),NBAR1),no_wh,norm,Case,ROLE,SEM_FEAT,Number,p3) -->
nbar1(NBAR1,Number,SEM_FEAT).
% np realized by a pronoun
% there is only case inflection on personal pronouns: +/- nominative.
% alternative: pronoun as determiner of NP with empty head N
np(np(feat(sem(role(ROLE),SEM_FEAT),Case),PRON),no_wh,norm,Case,ROLE,SEM_FEAT,Number,Person) -->
pron(PRON,Prontype,Case,Number,Person,SEM_FEAT).
% np [+WH]: 'wie, wat'
np(np(feat(sem(role(ROLE),SEM_FEAT),Case),PRON),wh,norm,Case,ROLE,SEM_FEAT,Number,p3) -->
pron(PRON,wh,Number,SEM_FEAT).
% reflexive pronoun (inherent [+ani]): 'zich'
np(np(feat(sem(role(ROLE),ani),no_nom),PRON),no_wh,refl,no_nom,ROLE,ani,Number,Person) -->
pron(PRON,refl,Number,Person).
% relative pronoun: 'die/dat'
np(np(feat(sem(role(ROLE),SEM_FEAT),Case),PRON),no_wh,rel(Number,Gender,SEM_FEAT),Case,ROLE,
SEM_FEAT,Number,p3) -->
pron(PRON,rel,Number,Gender,SEM_FEAT).
% dummy NP: filled by expletive pronoun: 'het' (without semantic contents)
np(np(feat(sem(),Case),PRON),no_wh,het,Case,no_role,no_feat,no_plu,p3) -->
pron(PRON,expl).
% full NP structure with quantification: high qp + nbar
np(np(feat(sem(role(ROLE),SEM_FEAT),Case),QP,NBAR3),no_wh,norm,Case,ROLE,SEM_FEAT,Number,p3) -->
qp(QP,high,Def,Number),
nbar3(NBAR3,no_wh,Def,Number,SEM_FEAT).
% np without high qp
np(np(feat(sem(role(ROLE),SEM_FEAT),Case),NBAR3),WH,norm,Case,ROLE,SEM_FEAT,Number,p3) -->
nbar3(NBAR3,WH,Def,Number,SEM_FEAT).
% specifier/determiner + nbar2
nbar3(nbar3(DET,NBAR2),WH,Def,Number,SEM_FEAT) -->
det(DET,WH,Def,Number,Gender,Count),
nbar2(NBAR2,Def,Number,Gender,Count,SEM_FEAT).
% nbar2 without specifier/determiner
nbar3(nbar3(NBAR2),no_wh,no_def,Number,SEM_FEAT) -->
nbar2(NBAR2,no_def,Number,Gender,Count,SEM_FEAT),
{ ( equals(Count,no_cnt); equals(Number,plu), equals(Count,cnt) ) }.
% low qp + nbar2
nbar2(nbar2(QP,NBAR2),def,Number,Gender,cnt,SEM_FEAT) -->
qp(QP,low,def,Number),
nbar2(NBAR2,def,Number,Gender,cnt,SEM_FEAT).
% premodifier + nbar/head
nbar2(nbar2(AP,NBAR2),Def,Number,Gender,Count,SEM_FEAT) -->
ap(AP,attrib,Inflection),
nbar2(NBAR2,Def,Number,Gender,Count,SEM_FEAT),
{ a_inflection(Def,Number,Gender, Inflection) }.
% evaluation of adjectival inflection: -(e)
a_inflection(no_def,no_plu,neu, no_infl).
a_inflection(Def,Number,Gender, infl) :-
not( a_inflection(Def,Number,Gender, no_infl) ).
% nbar/head + postmodifier:pp
nbar2(nbar2(NBAR1,PP),Def,Number,Gender,Count,SEM_FEAT) -->
nbar1(NBAR1,Number,Gender,Count,SEM_FEAT),
pp(PP,PFORM,attrib,SEM_FEAT1).
% nbar/head + postmodifier:cp
nbar2(nbar2(NBAR1,CP_REL),Def,Number,Gender,Count,SEM_FEAT) -->
nbar1(NBAR1,Number,Gender,Count,SEM_FEAT),
cp(CP_REL,no_main,attrib,rel(Number,Gender,SEM_FEAT)).
% nbar/head
nbar2(nbar2(NBAR1),Def,Number,Gender,Count,SEM_FEAT) -->
nbar1(NBAR1,Number,Gender,Count,SEM_FEAT).
% noun head
nbar1(nbar1(N),Number,Gender,Count,SEM_FEAT) -->
n(N,common,Number,Gender,Count,SEM_FEAT).
nbar1(nbar1(N),Number,SEM_FEAT) -->
n(N,name,Number,SEM_FEAT).
% QP formation:
qp(qp(QBAR),Type,Def,Number) -->
qbar(QBAR,Type,Def,Number).
qbar(qbar(Q),Type,Def,Number) -->
q(Q,Type,Def,Number).
% AP formation:
ap(ap(feat(sem(role(ROLE))),ABAR2),ROLE,Inflection) -->
abar2(ABAR2,0,Inflection).
% adjective adverbs of degree (with ranking order 1..3)
abar2(abar2(ADV,ABAR),N,Inflection) -->
adv(ADV,M,deg),
{ M > N },
abar2(ABAR,M,Inflection).
abar2(ABAR1,N,Inflection) -->
abar1(ABAR1,Inflection).
% adjective head
abar1(abar1(A),Inflection) -->
a(A,Inflection).
:- write('Example: sentence(TREE, [jan,heeft,marie,een,boek,gegeven]).'),
nl,nl,nl.
%======== (c) 1994-1996 / KUN,CCL / Simon van Dreumel
% LEXICON of SUBCATSY
% ===================
%
% Last update: 11/08/96
% Lexical items
det(det(feat(WH,DEF,PLU,GND,CNT),DET), WH,DEF,PLU,GND,CNT) -->
[DET], { det0(DET,WH,DEF,PLU,GND,CNT) }.
c(c(C), C,VFORM) -->
[C], { c0(C,VFORM) }.
p(p(P), P) -->
[P], { p0(P) }.
p(p(P), P,ROLE) -->
[P], { p0(P,ROLE) }.
co(co(feat(Conjtype),CO), Conjtype) -->
[CO], { co0(CO,Conjtype) }.
prt(prt(PRT), PRT) -->
[PRT], { prt0(PRT) }.
q(q(Q),Type,Def,Number) -->
[Q], { q0(Q,Type,Def,Number) }.
adv(adv(ADV),NUM,TYPE) -->
[ADV], { adv0(ADV,NUM,TYPE) }.
adv(adv(ADV),TYPE) -->
[ADV], { adv0(ADV,TYPE) }.
a(a(A_STEM),no_infl) -->
[A_STEM], { a_paradigm0([A_STEM,A_INFL]) }.
a(a(A_STEM),infl) -->
[A_INFL], { a_paradigm0([A_STEM,A_INFL]) }.
n(n(feat(no_plu),N_STEM),common,no_plu,Gender,cnt,Semfeat) -->
[N_STEM],
{ n_paradigm0(Gender,Semfeat, [N_STEM,_]) }.
n(n(feat(plu),N_STEM),common,plu,Gender,cnt,Semfeat) -->
[N_PLUR],
{ n_paradigm0(Gender,Semfeat, [N_STEM,N_PLUR]) }.
n(n(feat(Number),N_STEM),common,no_plu,Gender,no_cnt,Semfeat) -->
[N_STEM],
{ n_paradigm0(Gender,Semfeat, [N_STEM]) }.
n(n(feat(Number),N_STEM),common,Number,Gender,cnt,quant) -->
[N_STEM],
{ n_paradigm0(Gender, [N_STEM]) }.
n(n(feat(name,no_plu),NAME),name,no_plu,Semfeat) -->
[NAME],
{ propername0(Semfeat, [NAME]) }.
pron(pron(feat(TYPE,NUMB,PERS),PRON), TYPE,CASE,NUMB,PERS,SEM_FEAT) -->
[PRON], { pron0(PRON,TYPE,CASE,NUMB,PERS,SEM_FEAT) } .
pron(pron(feat(refl,NUMB,PERS),PRON), refl,NUMB,PERS) -->
[PRON], { pron0(PRON,refl,NUMB,PERS) }.
pron(pron(feat(wh,NUMB),PRON),wh,NUMB,SEM_FEAT) -->
[PRON], { pron0(PRON,wh,NUMB,SEM_FEAT) }.
pron(pron(feat(rel,NUMB),PRON),rel,NUMB,GEND,SEM_FEAT) -->
[PRON], { pron0(PRON,rel,NUMB,GEND,SEM_FEAT) }.
pron(pron(feat(expl),PRON),expl) -->
[PRON], { pron0(PRON,expl) }.
v(v(feat(VTYPE,fin,pres,no_plu,p1),V_STEM),V_STEM,VTYPE,fin,pres,no_plu,p1) -->
[V_STEM],
{ v_paradigm0(VTYPE, [V_STEM|Rest]) }.
v(v(feat(VTYPE,fin,pres,no_plu,p2),V_STEM),V_STEM,VTYPE,fin,pres,no_plu,p2) -->
[PRES_SNG_P2],
{ ( v_paradigm0(VTYPE, [V_STEM,PRES_SNG_P2,_,_,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,PRES_SNG_P2,_,_,_,_,_,_]) ) }.
v(v(feat(VTYPE,fin,pres,no_plu,p3),V_STEM),V_STEM,VTYPE,fin,pres,no_plu,p3) -->
[PRES_SNG_P3],
{ ( v_paradigm0(VTYPE, [V_STEM,_,PRES_SNG_P3,_,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,PRES_SNG_P3,_,_,_,_,_]) ) }.
p2or3(p2).
p2or3(p3).
v(v(feat(VTYPE,fin,pres,no_plu,Pers23),V_STEM),V_STEM,VTYPE,fin,pres,no_plu,Pers23) -->
[PRES_SNG_P23],
{ p2or3(Pers23),
( v_paradigm0(VTYPE, [V_STEM,PRES_SNG_P23,_,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,PRES_SNG_P23,_,_,_,_,_]) ) }.
v(v(feat(VTYPE,fin,pres,plu,Person),V_STEM),V_STEM,VTYPE,fin,pres,plu,Person) -->
[INF],
{ ( v_paradigm0(VTYPE, [V_STEM,_,INF,_,_,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,INF,_,_,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,INF,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,INF,_,_]) ) }.
v(v(feat(VTYPE,fin,past,no_plu,Person),V_STEM),V_STEM,VTYPE,fin,past,no_plu,Person) -->
[PAST_SNG],
{ ( v_paradigm0(VTYPE, [V_STEM,_,_,PAST_SNG,_,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,_,PAST_SNG,_,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,_,PAST_SNG,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,PAST_SNG,_]) ) }.
v(v(feat(VTYPE,fin,past,plu,Person),V_STEM),V_STEM,VTYPE,fin,past,plu,Person) -->
[PAST_PLU],
{ ( v_paradigm0(VTYPE, [V_STEM,_,_,_,PAST_PLU,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,_,_,PAST_PLU,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,_,_,PAST_PLU]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,_,PAST_PLU]) ) }.
v(v(feat(VTYPE,inf),V_STEM),V_STEM,VTYPE,inf) -->
[INF],
{ ( v_paradigm0(VTYPE, [V_STEM,_,INF,_,_,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,INF,_,_,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,_,INF,_,_]) ;
v_paradigm0(VTYPE, [V_STEM,_,INF,_,_]) ) }.
v(v(feat(lex,fin,imp),V_STEM),V_STEM,lex,fin,imp) -->
[V_STEM], { v_paradigm0(lex, [V_STEM|Rest]) }.
v(v(feat(AUX,psp),V_STEM),V_STEM,AUX,psp) -->
[INF], /* IPP effect */
{ ( equals(AUX,aux); equals(AUX,aux(rto)) ),
( v_paradigm0(AUX, [V_STEM,_,_,INF,_,_]) ;
v_paradigm0(AUX, [V_STEM,_,INF,_,_]) ) }.
v(v(feat(lex,psp),V_STEM),V_STEM,lex,psp) -->
[PSP],
{ ( v_paradigm0(lex, [V_STEM,_,_,_,_,_,PSP]) ;
v_paradigm0(lex, [V_STEM,_,_,_,_,_,_,PSP]) ) }.
% te_inf: te+V(inf) clustering
v(v(feat(te,inf),P,V),V_STEM,VTYPE,te_inf) -->
p(P,te), v(V,V_STEM,VTYPE,inf).
% TERMINALS:
% ----------
% Determiners (det):
det0(een, no_wh, no_def, no_plu, Gender, cnt).
det0(1, no_wh, no_def, no_plu, Gender, cnt).
det0(het, no_wh, def, no_plu, neu, Count).
det0(de, no_wh, def, no_plu, no_neu, Count).
det0(de, no_wh, def, plu, Gender, Count).
det0(dit, no_wh, def, no_plu, neu, Count).
det0(dat, no_wh, def, no_plu, neu, Count).
det0(deze, no_wh, def, no_plu, no_neu, Count).
det0(deze, no_wh, def, plu, Gender, Count).
det0(die, no_wh, def, no_plu, no_neu, Count).
det0(die, no_wh, def, plu, Gender, Count).
det0(zulk, no_wh, def, no_plu, neu, Count).
det0(zulke, no_wh, def, no_plu, no_neu, Count).
det0(zulke, no_wh, def, plu, Gender, Count).
det0(welk, wh, def, no_plu, neu, Count).
det0(welke, wh, def, no_plu, no_neu, Count).
det0(welke, wh, def, plu, Gender, Count).
det0(geen, no_wh, no_def, Number, Gender, Count).
det0(ieder, no_wh, no_def, no_plu, neu, cnt).
det0(iedere, no_wh, no_def, no_plu, no_neu, cnt).
% Complementizers (c):
c0(dat, fin).
c0(of, fin).
c0(om, te_inf).
c0(',', te_inf).
% Co-ordinators (co):
co0(en, conj).
co0(of, disj).
% Particles (prt):
prt0(op).
prt0(aan).
prt0(voor).
prt0(af).
prt0(in).
prt0(uit).
prt0(mee).
prt0(toe).
% Prepositions (p):
p0(in,locative).
p0(op,locative).
p0(te,locative).
p0(aan,locative).
p0(bij,locative).
p0(naast,locative).
p0(voor,locative).
p0(achter,locative).
p0(tegen,locative).
p0(tegenover,locative).
p0(tussen,locative).
p0(binnen,locative).
p0(buiten,locative).
p0(over,locative).
p0(naar,locative).
p0(door,locative).
p0(na,temporal).
p0(om,temporal).
p0(tijdens,temporal).
p0(gedurende,temporal).
p0(aan).
p0(voor).
p0(op).
p0(van).
p0(met).
p0(over).
p0(naar).
p0(door).
p0(in).
p0(bij).
p0(tegen).
p0(te).
% Quantors/Quantifiers (q):
q0(al, high, def,plu).
q0(alle, high,no_def,plu).
q0(veel, high,no_def,plu).
q0(weinig, high,no_def,plu).
q0(meer, high,no_def,plu).
q0(minder, high,no_def,plu).
q0(sommige, high,no_def,plu).
q0(enkele, high,no_def,plu).
eval_def(high,no_def).
eval_def(low,def).
q0(NUM,Type,Def,plu) :- number(NUM), NUM > 1, eval_def(Type,Def).
q0(twee, Type,Def,plu) :- eval_def(Type,Def).
q0(drie, Type,Def,plu) :- eval_def(Type,Def).
q0(vier, Type,Def,plu) :- eval_def(Type,Def).
q0(vijf, Type,Def,plu) :- eval_def(Type,Def).
q0(zes, Type,Def,plu) :- eval_def(Type,Def).
q0(zeven, Type,Def,plu) :- eval_def(Type,Def).
q0(acht, Type,Def,plu) :- eval_def(Type,Def).
q0(negen, Type,Def,plu) :- eval_def(Type,Def).
q0(tien, Type,Def,plu) :- eval_def(Type,Def).
q0(elf, Type,Def,plu) :- eval_def(Type,Def).
q0(twaalf, Type,Def,plu) :- eval_def(Type,Def).
q0(dertien, Type,Def,plu) :- eval_def(Type,Def).
q0(veertien, Type,Def,plu) :- eval_def(Type,Def).
% ...etc.
q0(eerste, low,def,Number).
q0(tweede, low,def,no_plu).
q0(derde, low,def,no_plu).
q0(vierde, low,def,no_plu).
% ...etc.
q0(laatste, low,def,Number).
% Adverbs (adv):
adv0(heel,1,deg).
adv0(zeer,1,deg).
adv0(erg,2,deg).
adv0(enorm,3,deg).
adv0(bijzonder,3,deg).
adv0(vlak,1,pos).
adv0(direct,1,pos).
adv0(pal,1,pos).
adv0(hier,locative).
adv0(daar,locative).
adv0(waar,locative).
adv0(ergens,locative).
adv0(nergens,locative).
adv0(overal,locative).
adv0(hierheen,direction).
adv0(daarheen,direction).
adv0(waarheen,direction).
adv0(hierin,locative).
adv0(daarin,locative).
adv0(waarin,locative).
adv0(hierop,locative).
adv0(daarop,locative).
adv0(waarop,locative).
adv0(eergisteren,adjunct(temporal)).
adv0(gisteren,adjunct(temporal)).
adv0(vandaag,adjunct(temporal)).
adv0(morgen,adjunct(temporal)).
adv0(overmorgen,adjunct(temporal)).
adv0(nu,adjunct(temporal)).
adv0(toen,adjunct(temporal)).
adv0(wanneer,adjunct(temporal)).
adv0(ooit,adjunct(temporal)).
adv0(nooit,adjunct(temporal)).
adv0(altijd,adjunct(temporal)).
adv0(graag,adjunct(operator)).
adv0(misschien,adjunct(operator)).
adv0(waarschijnlijk,adjunct(operator)).
% Paradigms of adjectives:
a_paradigm0([goed,goede]).
a_paradigm0([lief,lieve]).
a_paradigm0([mooi,mooie]).
a_paradigm0([leuk,leuke]).
a_paradigm0([snel,snelle]).
a_paradigm0([groot,grote]).
a_paradigm0([klein,kleine]).
a_paradigm0([gezellig,gezellige]).
a_paradigm0([zwart,zwarte]).
a_paradigm0([grijs,grijze]).
a_paradigm0([ziek,zieke]).
a_paradigm0([wit,witte]).
a_paradigm0([rood,rode]).
% Paradigms of nouns:
n_paradigm0(no_neu,ani, [mens,mensen]).
n_paradigm0(no_neu,ani, [man,mannen]).
n_paradigm0(no_neu,ani, [vrouw,vrouwen]).
n_paradigm0(neu,ani, [kind,kinderen]).
n_paradigm0(neu,ani, [meisje,meisjes]).
n_paradigm0(no_neu,ani, [jongen,jongens]).
n_paradigm0(neu,ani, [dier,dieren]).
n_paradigm0(no_neu,ani, [hond,honden]).
n_paradigm0(no_neu,ani, [kat,katten]).
n_paradigm0(no_neu,no_ani, [doos,dozen]).
n_paradigm0(no_neu,no_ani, [stoel,stoelen]).
n_paradigm0(no_neu,no_ani, [tafel,tafels]).
n_paradigm0(no_neu,no_ani, [kast,kasten]).
n_paradigm0(no_neu,no_ani, [boom,bomen]).
n_paradigm0(no_neu,no_ani, [appel,appels]).
n_paradigm0(no_neu,no_ani, [boterham,boterhammen]).
n_paradigm0(no_neu,no_ani, [krant,kranten]).
n_paradigm0(no_neu,no_ani, [radio,'radio`s']).
n_paradigm0(no_neu,no_ani, [televisie,televisies]).
n_paradigm0(no_neu,no_ani, [computer,computers]).
n_paradigm0(neu,no_ani, [boek,boeken]).
n_paradigm0(neu,no_ani, [huis,huizen]).
n_paradigm0(neu,no_ani, [haar,haren]).
n_paradigm0(no_neu,no_ani, [taal,talen]).
n_paradigm0(no_neu,no_ani, [zin,zinnen]).
n_paradigm0(neu,no_ani, [woord,woorden]).
n_paradigm0(no_neu,no_ani, [letter,letters]).
n_paradigm0(neu,no_ani, [probleem,problemen]).
n_paradigm0(no_neu,no_ani, [vraag,vragen]).
n_paradigm0(no_neu,no_ani, [koffie]).
n_paradigm0(no_neu,no_ani, [thee]).
n_paradigm0(no_neu,no_ani, [melk]).
n_paradigm0(no_neu,no_ani, [suiker]).
n_paradigm0(neu,no_ani, [water]).
n_paradigm0(neu,no_ani, [brood]).
n_paradigm0(neu,no_ani, [vlees]).
n_paradigm0(no_neu,no_ani, [taal]).
n_paradigm0(neu,no_ani, [haar]).
n_paradigm0(no_neu, [kilo]).
n_paradigm0(no_neu, [kg]).
n_paradigm0(no_neu, [gram]).
% Proper names:
propername0(ani, [jan]). propername0(ani, [piet]).
propername0(ani, [marie]). propername0(ani, [truus]).
propername0(ani, [simon]). propername0(ani, [petra]).
propername0(no_ani, [tsi]). propername0(no_ani, [nijmegen]).
propername0(no_ani, [leuven]). propername0(no_ani, [groesbeek]).
propername0(no_ani, [nederland]). propername0(no_ani, [belgie]).
propername0(no_ani, [europa]).
propername0(Sem_feat, [Unknown_propername]) :-
atom(Unknown_propername),
name(Unknown_propername, [Capital|Rest]),
( Capital >= 65 , Capital =< 90 ).
% Pronouns (pron):
pron0(ik, pers,nom,no_plu,p1,ani).
pron0(jij, pers,nom,no_plu,p2,ani).
pron0(hij, pers,nom,no_plu,p3,ani).
pron0(zij, pers,nom,Number,p3,ani).
pron0(het, pers,Case,no_plu,p3,no_ani).
pron0(wij, pers,nom,plu,p1,ani).
pron0(jullie, pers,Case,plu,p2,ani).
pron0(mij, pers,no_nom,no_plu,p1,ani).
pron0(jou, pers,no_nom,no_plu,p2,ani).
pron0(hem, pers,no_nom,no_plu,p3,ani).
pron0(haar, pers,no_nom,no_plu,p3,ani).
pron0(ons, pers,no_nom,plu,p1,ani).
pron0(hen, pers,no_nom,plu,p3,ani).
pron0(hun, pers,no_nom,plu,p3,ani).
pron0(iemand, no_def,Case,no_plu,p3,ani).
pron0(iets, no_def,Case,no_plu,p3,no_ani).
pron0(niemand, no_def,Case,no_plu,p3,ani).
pron0(niets, no_def,Case,no_plu,p3,no_ani).
pron0(iedereen, no_def,Case,no_plu,p3,ani).
pron0(alles, no_def,Case,no_plu,p3,no_ani).
pron0(me, refl,no_plu,p1).
pron0(je, refl,Number,p2).
pron0(zich, refl,Number,p3).
pron0(ons, refl,plu,p1).
pron0(wie, wh,NUMB,ani).
pron0(wat, wh,no_plu,no_ani).
pron0(dat, rel,no_plu,neu,SEM_FEAT).
pron0(die, rel,Number,no_neu,SEM_FEAT).
pron0(die, rel,plu,neu,SEM_FEAT).
pron0(het, expl).
% Paradigms of verbs:
% -- auxiliaries
% different forms for 2nd and 3rd person singular
v_paradigm0(aux, [zal,zult,zal,zullen,zou,zouden]).
v_paradigm0(aux, [heb,hebt,heeft,hebben,had,hadden]).
v_paradigm0(aux, [ben,bent,is,zijn,was,waren]).
v_paradigm0(aux, [kan,kunt,kan,kunnen,kon,konden]).
v_paradigm0(aux, [wil,wilt,wil,willen,wilde,wilden]).
v_paradigm0(aux(pass), [ben,bent,is,zijn,was,waren]).
% same forms for 2nd and 3rd person singular present
v_paradigm0(aux, [mag,mag,mogen,mocht,mochten]).
v_paradigm0(aux, [moet,moet,moeten,moest,moesten]).
v_paradigm0(aux, [ga,gaat,gaan,ging,gingen]).
v_paradigm0(aux, [sta,staat,staan,stond,stonden]).
v_paradigm0(aux, [blijk,blijkt,blijken,bleek,bleken]).
v_paradigm0(aux, [lijk,lijkt,lijken,leek,leken]).
v_paradigm0(aux, [schijn,schijnt,schijnen,scheen,schenen]).
v_paradigm0(aux(pass), [word,wordt,worden,werd,werden]).
v_paradigm0(aux(rto), [laat,laat,laten,liet,lieten]).
v_paradigm0(aux(rto), [help,helpt,helpen,hielp,hielpen]).
v_paradigm0(aux(rto), [leer,leert,leren,leerde,leerden]).
% -- lexical verbs
% different forms for 2nd and 3rd person singular present
v_paradigm0(lex, [ben,bent,is,zijn,was,waren,zijnd,geweest]).
v_paradigm0(lex, [heb,hebt,heeft,hebben,had,hadden,hebbend,gehad]).
% same forms for 2nd and 3rd person singular present
v_paradigm0(lex, [ga,gaat,gaan,ging,gingen,gaand,gegaan]).
v_paradigm0(lex, [kom,komt,komen,kwam,kwamen,komend,gekomen]).
v_paradigm0(lex, [word,wordt,worden,werd,werden,wordend,geworden]).
v_paradigm0(lex, [dwing,dwingt,dwingen,dwong,dwongen,dwingend,gedwongen]).
v_paradigm0(lex, [probeer,probeert,proberen,probeerde,probeerden,proberend,geprobeerd]).
v_paradigm0(lex, [help,helpt,helpen,hielp,hielpen,helpend,geholpen]).
v_paradigm0(lex, [leer,leert,leren,leerde,leerden,lerend,geleerd]).
v_paradigm0(lex, [blijk,blijkt,blijken,bleek,bleken,blijkend,gebleken]).
v_paradigm0(lex, [lijk,lijkt,lijken,leek,leken,lijkend,geleken]).
v_paradigm0(lex, [schijn,schijnt,schijnen,scheen,schenen,schijnend,geschenen]).
v_paradigm0(lex, [regen,regent,regenen,regende,regenden,regenend,geregend]).
v_paradigm0(lex, [dans,danst,dansen,danste,dansten,dansend,gedanst]).
v_paradigm0(lex, [praat,praat,praten,praatte,praatten,pratend,gepraat]).
v_paradigm0(lex, [lach,lacht,lachen,lachte,lachten,lachend,gelachen]).
v_paradigm0(lex, [slaap,slaapt,slapen,sliep,sliepen,slapend,geslapen]).
v_paradigm0(lex, [zie,ziet,zien,zag,zagen,ziend,gezien]).
v_paradigm0(lex, [hoor,hoort,horen,hoorde,hoorden,horend,gehoord]).
v_paradigm0(lex, [luister,luistert,luisteren,luisterde,luisterden,luisterend,geluisterd]).
v_paradigm0(lex, [beluister,beluistert,beluisteren,beluisterde,beluisterden,beluisterend,
beluisterd]).
v_paradigm0(lex, [kijk,kijkt,kijken,keek,keken,kijkend,gekeken]).
v_paradigm0(lex, [bekijk,bekijkt,bekijken,bekeek,bekeken,bekijkend,bekeken]).
v_paradigm0(lex, [lees,leest,lezen,las,lazen,lezend,gelezen]).
v_paradigm0(lex, [eet,eet,eten,at,aten,etend,gegeten]).
v_paradigm0(lex, [verorber,verorbert,verorberen,verorberde,verorberden,verorberend,verorberd]).
v_paradigm0(lex, [geef,geeft,geven,gaf,gaven,gevend,gegeven]).
v_paradigm0(lex, [koop,koopt,kopen,kocht,kochten,kopend,gekocht]).
v_paradigm0(lex, [wacht,wacht,wachten,wachtte,wachtten,wachtend,gewacht]).
v_paradigm0(lex, [houd,houdt,houden,hield,hielden,houdend,gehouden]).
v_paradigm0(lex, [onderwijs,onderwijst,onderwijzen,onderwees,onderwezen,onderwijzend,onderwezen]).
v_paradigm0(lex, [beticht,beticht,betichten,betichtte,betichtten,betichtend,beticht]).
v_paradigm0(lex, [beschuldig,beschuldigt,beschuldigen,beschuldigde,beschuldigden,beschuldigend,
beschuldigd]).
v_paradigm0(lex, [denk,denkt,denken,dacht,dachten,denkend,gedacht]).
v_paradigm0(lex, [zeg,zegt,zeggen,zei,zeiden,zeggend,gezegd]).
v_paradigm0(lex, [vraag,vraagt,vragen,vroeg,vroegen,vragend,gevraagd]).
v_paradigm0(lex, [voel,voelt,voelen,voelde,voelden,voelend,gevoeld]).
v_paradigm0(lex, [vergis,vergist,vergissen,vergiste,vergisten,vergissend,vergist]).
v_paradigm0(lex, [verspreid,verspreidt,verspreiden,verspreidde,verspreidden,verspreidend,verspreid]).
v_paradigm0(lex, [was,wast,wassen,waste,wasten,wassend,gewassen]).
v_paradigm0(lex, [kook,kookt,koken,kookte,kookten,kokend,gekookt]).
v_paradigm0(lex, [breek,breekt,breken,brak,braken,brekend,gebroken]).
v_paradigm0(lex, [val,valt,vallen,viel,vielen,vallend,gevallen]).
v_paradigm0(lex, [sterf,sterft,sterven,stierf,stierven,stervend,gestorven]).
v_paradigm0(lex, [weeg,weegt,wegen,woog,wogen,wegend,gewogen]).
v_paradigm0(lex, [krijg,krijgt,krijgen,kreeg,kregen,krijgend,gekregen]).
v_paradigm0(lex, [neem,neemt,nemen,nam,namen,nemend,genomen]).
v_paradigm0(lex, [aanneem,aanneemt,aannemen,aannam,aannamen,aannemend,aangenomen]).
v_paradigm0(lex, [stel,stelt,stellen,stelde,stelden,stellend,gesteld]).
v_paradigm0(lex, [voorstel,voorstelt,voorstellen,voorstelde,voorstelden,voorstellend,
voorgesteld]).
v_paradigm0(lex, [bel,belt,bellen,belde,belden,bellend,gebeld]).
v_paradigm0(lex, [opbel,opbelt,opbellen,opbelde,opbelden,opbellend,opgebeld]).
v_paradigm0(lex, [woon,woont,wonen,woonde,woonden,wonend,gewoond]).
v_paradigm0(lex, [bevind,bevindt,bevinden,bevond,bevonden,bevindend,bevonden]).
v_paradigm0(lex, [vind,vindt,vinden,vond,vonden,vindend,vonden]).
v_paradigm0(lex, [zoek,zoekt,zoeken,zocht,zochten,zoekend,gezocht]).
v_paradigm0(lex, [zit,zit,zitten,zat,zaten,zittend,gezeten]).
v_paradigm0(lex, [zet,zet,zetten,zette,zetten,zettend,gezet]).
v_paradigm0(lex, [lig,ligt,liggen,lag,lagen,liggend,gelegen]).
v_paradigm0(lex, [leg,legt,leggen,legde,legden,leggend,gelegd]).
v_paradigm0(lex, [plaats,plaatst,plaatsen,plaatste,plaatsten,plaatsend,geplaatst]).
v_paradigm0(lex, [sta,staat,staan,stond,stonden,staand,gestaan]).
v_paradigm0(lex, [beteken,betekent,betekenen,betekende,betekenden,betekenend,betekend]).
v_paradigm0(lex, [nodig,nodigt,nodigen,nodigde,nodigden,nodigend,genodigd]).
v_paradigm0(lex, [uitnodig,uitnodigt,uitnodigen,uitnodigde,uitnodigden,uitnodigend,
uitgenodigd]).
%======== (c) 1994-1996 / KUN,CCL / Simon van Dreumel
% LEXICON OF S-FRAMES
% ===================
%
% Last update: 11/08/96
is_sentential_or_nominal(CAT) :-
equals(CAT,c(CFORM));
equals(CAT,np).
% BASIC S-frames
% -- auxiliary of tense
sframe(v,zal, [ea(CAT,ROLE,SEM_FEAT),vpred(inf)]).
sframe(v,heb, [ea(CAT,ROLE,SEM_FEAT),vpred(psp)]).
sframe(v,ben, [ea(CAT,ROLE,SEM_FEAT),vpred(psp)]).
% -- auxiliary of passive
sframe(v,word, [ea(CAT,ROLE,SEM_FEAT),vpred(psp)]).
% -- auxiliary of modality
sframe(v,kan, [ea(CAT,ROLE,SEM_FEAT),vpred(inf)]).
sframe(v,mag, [ea(CAT,ROLE,SEM_FEAT),vpred(inf)]).
sframe(v,wil, [ea(CAT,ROLE,SEM_FEAT),vpred(inf)]).
sframe(v,moet, [ea(CAT,ROLE,SEM_FEAT),vpred(inf)]).
% -- auxiliary of aspect
sframe(v,ga, [ea(CAT,ROLE,SEM_FEAT),vpred(inf)]).
sframe(v,sta, [ea(CAT,ROLE,SEM_FEAT),vpred(VFORM)]) :-
equals(VFORM,te_inf) ;
equals(VFORM,inf).
% -- RTS verbs
sframe(v,blijk, [ea(np(het),no_role,no_feat), ia(np,dative,ani,opt), ia(c(dat),object,no_ani,no_opt)],
rts(opt)).
sframe(v,schijn, [ea(np(het),no_role,no_feat), ia(np,dative,ani,opt), ia(c(dat),object,no_ani,no_opt)],
rts(opt)).
sframe(v,lijk, [ea(np(het),no_role,no_feat), ia(np,dative,ani,opt), ia(c(dat),object,no_ani,no_opt)],
rts(opt)).
% -- RTO verbs
sframe(v,laat, [ea(np,causer,ani),vpred(inf)], no_passiv).
sframe(v,help, [ea(np,causer,ani),vpred(inf)], no_passiv).
sframe(v,leer, [ea(np,causer,ani),vpred(inf)], no_passiv).
% -- main verbs
sframe(v,regen, [ea(np(het),no_role,no_feat)], no_passiv).
sframe(v,lach, [ea(np,agent,ani)], no_passiv).
sframe(v,slaap, [ea(np,dative,ani)], no_passiv).
sframe(v,dans, [ea(np,agent,ani), ia(p(met),commut,ani,opt)], no_passiv).
sframe(v,praat, [ea(np,agent,ani), ia(p(met),commut,ani,opt), ia(p(over),object,SEM_FEAT,opt)],
no_passiv).
sframe(v,zie, [ea(np,dative,ani), ia(CAT,object,SEM_FEAT,no_opt)], passiv) :-
equals(CAT,np) ; equals(CAT,c(dat)).
sframe(v,hoor, [ea(np,dative,ani), ia(CAT,object,SEM_FEAT,no_opt)], passiv) :-
equals(CAT,np) ; equals(CAT,c(dat)).
sframe(v,luister, [ea(np,agent,ani), ia(p(naar),object,SEM_FEAT,opt)], no_passiv).
sframe(v,beluister, [ea(np,agent,ani), ia(np,object,SEM_FEAT,no_opt)], passiv).
sframe(v,kijk, [ea(np,agent,ani), ia(p(naar),object,SEM_FEAT,opt)], no_passiv).
sframe(v,bekijk, [ea(np,agent,ani), ia(np,object,SEM_FEAT,no_opt)], passiv).
sframe(v,eet, [ea(np,agent,ani), ia(np,object,no_ani,opt)], passiv).
sframe(v,verorber, [ea(np,agent,ani), ia(np,object,no_ani,no_opt)], passiv).
sframe(v,lees, [ea(np,agent,ani), ia(np,object,no_ani,opt)], passiv).
sframe(v,heb, [ea(np,dative,ani), ia(np,object,no_ani,no_opt)], no_passiv).
sframe(v,geef, [ea(np,agent,ani), ia(np_p(aan),dative,ani,opt), ia(np,object,no_ani,no_opt)], passiv).
sframe(v,koop, [ea(np,agent,ani), ia(p(voor),dative,ani,opt), ia(np,object,no_ani,no_opt)], passiv).
sframe(v,wacht, [ea(np,agent,ani), ia(p(op),object,SEM_FEAT,opt)]).
sframe(v,houd, [ea(np,agent,ani), ia(p(van),object,SEM_FEAT,no_opt)], no_passiv).
sframe(v,onderwijs, [ea(np,agent,ani), ia(np,dative,ani,no_opt), ia(p(in),object,no_ani,opt)],
passiv).
sframe(v,beticht, [ea(np,agent,ani), ia(np,dative,ani,no_opt), ia(p(van),object,no_ani,no_opt)],
passiv).
sframe(v,beschuldig, [ea(np,agent,ani), ia(np,dative,ani,no_opt), ia(p(van),object,no_ani,opt)],
passiv).
sframe(v,denk, [ea(np,dative,ani), ia(c(dat),object,no_ani,no_opt)], no_passiv).
sframe(v,zeg, [ea(np,agent,ani), ia(np_p(tegen),dative,ani,opt), ia(c(dat),object,no_ani,no_opt)],
no_passiv).
sframe(v,vraag, [ea(np,agent,ani), ia(np_p(aan),dative,ani,opt), ia(c(of),object,no_ani,no_opt)],
no_passiv).
sframe(v,krijg, [ea(np,dative,ani), ia(p(van),source,ani,opt), ia(np,object,no_ani,no_opt)],
no_passiv).
sframe(v,neem, [ea(np,agent,ani), ia(np,object,no_ani,no_opt)], passiv).
sframe(v,aanneem, [ea(np,dative,ani), ia(p(van),source,ani,opt), ia(np,object,no_ani,no_opt)],
no_passiv).
sframe(v,stel, [ea(np,dative,ani), ia(c(dat),object,no_ani,no_opt)], passiv).
sframe(v,opbel, [ea(np,agent,ani), ia(np,object,ani,opt)], passiv).
sframe(v,uitnodig, [ea(np,agent,ani), ia(np,object,ani,no_opt)], passiv).
sframe(v,zoek, [ea(np,agent,ani), ia(np_p(naar),object,SEM_FEAT,opt)]).
sframe(v,vind, [ea(np,agent,ani), ia(np,object,SEM_FEAT,opt)]).
% -- control verbs
sframe(v,probeer, [ea(np,agent,SEM_FEAT),
ia(c(om(ctrl(SEM_FEAT))),object,no_ani,no_opt)], no_passiv) :-
equals(SEM_FEAT,ani).
sframe(v,dwing, [ea(np,agent,ani), ia(np,dative,SEM_FEAT,no_opt),
ia(c(om(ctrl(SEM_FEAT))),object,no_ani,no_opt)], passiv) :-
equals(SEM_FEAT,ani).
sframe(v,help, [ea(np,agent,SEM_FEAT), ia(np,dative,SEM_FEAT,opt),
ia(c(om(ctrl(SEM_FEAT))),object,no_ani,opt)], passiv) :-
equals(SEM_FEAT,ani).
sframe(v,leer, [ea(np,agent,SEM_FEAT),
ia(np,dative,SEM_FEAT,opt),
ia(c(om(ctrl(SEM_FEAT))),object,no_ani,no_opt)], no_passiv) :-
equals(SEM_FEAT,ani).
sframe(v,voorstel, [ea(np,agent,SEM_FEAT),
ia(np_p(aan),dative,SEM_FEAT,opt),
ia(CAT,object,no_ani,no_opt)], passiv) :-
equals(CAT,np) ; equals(CAT,c(om(ctrl(SEM_FEAT)))), equals(SEM_FEAT,ani).
% with adjunct-arguments
sframe(v,woon, [ea(np,dative,ani),ad(advp_p,locative,no_ani,no_opt)],
no_passiv).
sframe(v,zit, [ea(CAT,no_role,no_feat), ia(np,object,SEM_FEAT),ad(advp_p,locative,no_ani,opt)],
ergat(no_opt)).
sframe(v,zet, [ea(np,agent,ani), ia(np,object,SEM_FEAT,no_opt),ad(advp_p,direction,no_ani,no_opt)],
passiv).
sframe(v,lig, [ea(CAT,no_role,no_feat), ia(np,object,SEM_FEAT),ad(advp_p,locative,no_ani,opt)],
ergat(no_opt)).
sframe(v,leg, [ea(np,agent,ani), ia(np,object,SEM_FEAT,no_opt),ad(advp_p,direction,no_ani,no_opt)],
passiv).
sframe(v,sta, [ea(CAT,no_role,no_feat), ia(np,object,SEM_FEAT),ad(advp_p,locative,no_ani,opt)],
ergat(no_opt)).
sframe(v,plaats, [ea(np,agent,ani), ia(np,object,SEM_FEAT,no_opt),ad(advp_p,direction,no_ani,no_opt)],
passiv).
sframe(v,ga, [ea(CAT,no_role,no_feat), ia(np,object,SEM_FEAT),ad(advp_p,direction,no_ani,opt)],
ergat(no_opt)).
sframe(v,kom, [ea(CAT,no_role,no_feat), ia(np,object,SEM_FEAT),ad(advp_p,direction,no_ani,opt)],
ergat(no_opt)).
% +reflexive
sframe(v,was, [ea(np,agent,ani), ia(np(refl(opt)),object,SEM_FEAT,opt)], passiv).
% +ergative
sframe(v,val, [ea(CAT,no_role,no_feat), ia(np,object,SEM_FEAT)], ergat(no_opt)).
sframe(v,sterf, [ea(CAT,no_role,no_feat), ia(np,object,SEM_FEAT)], ergat(no_opt)).
sframe(v,beteken, [ea(CAT,no_role,no_feat),
ia(CAT1,locative,SEM_FEAT1),
ia(CAT2,object,SEM_FEAT2,no_opt)], ergat(no_opt)) :-
is_sentential_or_nominal(CAT1), is_sentential_or_nominal(CAT2).
sframe(v,ben, [ea(CAT,no_role,no_feat), ia(CAT1,object,SEM_FEAT1),
pred(XP,attrib,SEM_FEAT2,no_opt)], ergat(no_opt)) :-
is_sentential_or_nominal(CAT1).
% +ergative,+reflexive
sframe(v,vergis, [ea(CAT,no_role,no_feat), ia(np,dative,ani)], ergat_refl(no_opt)).
sframe(v,voel, [ea(CAT,no_role,no_feat), ia(np,dative,ani),
pred(XP,attrib,SEM_FEAT2,no_opt)], ergat_refl(no_opt)).
sframe(v,bevind, [ea(CAT,no_role,no_feat), ia(np,object,SEM_FEAT),
ad(advp_p,locative,no_ani,no_opt)], ergat_refl(no_opt)).
% (+ergative)
sframe(v,kook, [ea(np,agent,ani), ia(np,object,no_ani,opt)], ergat(opt)).
sframe(v,breek, [ea(np,agent,ani), ia(np,object,no_ani,opt)], ergat(opt)).
sframe(v,weeg, [ea(np,agent,ani), ia(np,object,SEM_FEAT,opt), ia(np,attrib,quant,no_opt)],
ergat(opt)).
% (+ergative,+reflexive)
sframe(v,verspreid, [ea(np,agent,ani), ia(np,object,SEM_FEAT,no_opt)], ergat_refl(opt)).
% DERIVED S-frames
% -- Passivization
% default: non-passive ([+/-passiv] verb)
sframe(v,STEM,SUBCAT) :-
sframe(v,STEM,SUBCAT,no_passiv);
sframe(v,STEM,SUBCAT,passiv).
%- transitive:
% direct object
sframe(v,STEM, [ea(np,ROLE2,SEM_FEAT2), ia(p(door),ROLE1,SEM_FEAT1,opt)],pass) :-
( sframe(v,STEM, [ea(np,ROLE1,SEM_FEAT1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)], passiv) ;
sframe(v,STEM, [ea(np,ROLE1,SEM_FEAT1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2)], ergat(opt));
sframe(v,STEM, [ea(np,ROLE1,SEM_FEAT1), ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2),
ia(np,attrib,quant,OCCURR3)], ergat(opt))
),
is_nominal(CAT2).
%- ditransitive:
% indirect object -- direct object
sframe(v,STEM, [ea(np,ROLE3,SEM_FEAT3),IA2, ia(p(door),ROLE1,SEM_FEAT1,opt)],pass) :-
sframe(v,STEM, [ea(np,ROLE1,SEM_FEAT1),IA2, ia(CAT3,ROLE3,SEM_FEAT3,OCCURR3)], passiv),
is_nominal(CAT3).
% direct object -- prepositional/sentential object
sframe(v,STEM, [ea(np,ROLE2,SEM_FEAT2),
ia(p(door),ROLE1,SEM_FEAT1,opt),
ia(CAT3,ROLE3,no_ani,OCCURR3)],pass) :-
sframe(v,STEM, [ea(np,ROLE1,SEM_FEAT1),
ia(CAT2,ROLE2,SEM_FEAT2,OCCURR2),
ia(CAT3,ROLE3,no_ani,OCCURR3)], passiv),
is_nominal(CAT2),
is_sentential_or_prepositional(CAT3).
% -- Ergativization
% obligatory:
% ergative variant
sframe(v,STEM, [ea(CAT,ROLE,SEM_FEAT)|Rest]) :-
sframe(v,STEM, [EA, ia(CAT,ROLE,SEM_FEAT)|Rest], ergat(no_opt)).
% ergative-reflexive variant
sframe(v,STEM, [ea(CAT,ROLE,SEM_FEAT), ia(np(refl(no_opt)),no_role,SEM_FEAT,no_opt)|Rest]) :-
sframe(v,STEM, [EA, ia(CAT,ROLE,SEM_FEAT)|Rest], ergat_refl(no_opt)).
% optional:
%- non-ergative variant
sframe(v,STEM, [EA,IA]) :-
sframe(v,STEM, [EA,IA], ergat(opt)) ;
sframe(v,STEM, [EA,IA], ergat_refl(opt)) ;
sframe(v,STEM, [EA,IA, ia(np,attrib,quant,no_opt)], ergat(opt)).
%- ergative variant
sframe(v,STEM, [ea(np,ROLE,SEM_FEAT)|Rest]) :-
sframe(v,STEM, [EA, ia(CAT,ROLE,SEM_FEAT,OCCURR)|Rest], ergat(opt)).
%- ergative-reflexive variant
sframe(v,STEM, [ea(np,ROLE,SEM_FEAT), ia(np(refl(no_opt)),no_role,SEM_FEAT,no_opt)|Rest]) :-
sframe(v,STEM, [EA, ia(CAT,ROLE,SEM_FEAT,OCCURR)|Rest], ergat_refl(opt)).
% -- Raising To Subject (optional)
sframe(v,STEM,SUBCAT) :-
sframe(v,STEM,SUBCAT, rts(opt)).
sframe(v,STEM, [ea(CAT,ROLE,SEM_FEAT),vpred(te_inf)]) :-
sframe(v,STEM,
[ea(np(het),no_role,no_feat), ia(np,dative,ani,opt), ia(c(dat),object,no_ani,no_opt)], rts(opt)).