some romance VP fixes

This commit is contained in:
aarne
2009-08-20 16:39:59 +00:00
parent 284f382d7a
commit eab322e51e

View File

@@ -68,7 +68,7 @@ oper
oper oper
VP : Type = { VP : Type = {
s : Verb ; s : Verb ;
agr : VPAgr ; -- dit/dite dep. on verb, subj, and clitic agr : VPAgr ; -- dit/dite dep. on verb, subj, and clitic
neg : Polarity => (Str * Str) ; -- ne-pas neg : Polarity => (Str * Str) ; -- ne-pas
clit1 : Str ; -- le/se clit1 : Str ; -- le/se
@@ -131,54 +131,29 @@ oper
let let
typ = verb.vtyp ; typ = verb.vtyp ;
in { in {
s = {s = verb.s ; vtyp = typ} ; s = {s = verb.s ; vtyp = typ} ;
agr = partAgr typ ; agr = partAgr typ ;
neg = negation ; neg = negation ;
{- ----e clit1 = [] ;
clAcc = case isVRefl typ of { clit2 = [] ;
True => CRefl ; clit3 = [] ;
_ => CNone comp = \\a => [] ;
} ; ext = \\p => []
-} } ;
clit1 = [] ;
clit2 = [] ;
clit3 = [] ;
comp = \\a => [] ;
ext = \\p => []
} ;
insertObject : Compl -> NounPhrase -> VP -> VP = \c,np,vp -> insertObject : Compl -> NounPhrase -> VP -> VP = \c,np,vp ->
let let
obj = np.s ! c.c ; obj = np.s ! c.c ;
{- ----e
vpacc = vp.clAcc ;
vpdat = vp.clDat ;
vpagr = vp.agr ;
npa = np.a ;
cpron = CPron npa.g npa.n npa.p ;
noNewClit = <vpacc, vpdat, appCompl c np.s, vpagr> ;
cc : CAgr * CAgr * Str * VPAgr = case <np.hasClit,c.isDir> of {
<True,True> => case c.c of {
Acc => <cpron, vpdat, [], vpAgrClit npa> ;
_ => <vpacc, cpron, [], vpagr> -- must be dat
} ;
_ => noNewClit
} ;
-} ----e
in { in {
s = vp.s ; s = vp.s ;
agr = vp.agr ; ----e agr = case <np.hasClit, c.isDir, c.c> of {
<True,True,Acc> => vpAgrClit np.a ;
_ => vp.agr -- must be dat
} ;
clit1 = vp.clit1 ++ obj.c1 ; clit1 = vp.clit1 ++ obj.c1 ;
clit2 = vp.clit2 ++ obj.c2 ; clit2 = vp.clit2 ++ obj.c2 ;
clit3 = vp.clit3 ; clit3 = vp.clit3 ;
comp = \\a => vp.comp ! a ++ c.s ++ obj.comp ; comp = \\a => vp.comp ! a ++ c.s ++ obj.comp ;
----e agr = cc.p4 ;
---- clAcc = cc.p1 ;
---- clDat = cc.p2 ;
----e comp = \\a => cc.p3 ++ vp.comp ! a ;
neg = vp.neg ; neg = vp.neg ;
ext = vp.ext ; ext = vp.ext ;
} ; } ;
@@ -267,36 +242,62 @@ oper
mkVPSlash : Compl -> VP -> VP ** {c2 : Compl} = \c,vp -> vp ** {c2 = c} ; mkVPSlash : Compl -> VP -> VP ** {c2 : Compl} = \c,vp -> vp ** {c2 = c} ;
tmpVP : Type = {
s : Verb ;
agr : VPAgr ; -- dit/dite dep. on verb, subj, and clitic
neg : Polarity => (Str * Str) ; -- ne-pas
clit1 : Str ; -- le/se
clit2 : Str ; -- lui
clit3 : Str ; -- y en
comp : Agr => Str ; -- content(e) ; à ma mère ; hier
ext : Polarity => Str ; -- que je dors / que je dorme
} ;
mkClause : Str -> Bool -> Agr -> VP -> mkClause : Str -> Bool -> Agr -> VP ->
{s : Direct => RTense => Anteriority => Polarity => Mood => Str} = {s : Direct => RTense => Anteriority => Polarity => Mood => Str} =
\subj,hasClit,agr,vpr -> { \subj, hasClit, agr, vp -> {
s = \\d,t,a,b,m => s = \\d,te,a,b,m =>
let let
tm = case t of {
RPast => VImperf m ; --# notpresent
RFut => VFut ; --# notpresent
RCond => VCondit ; --# notpresent
RPasse => VPasse ; --# notpresent
RPres => VPres m
} ;
vp = useVP vpr ;
vps = vp.s ! VPFinite tm a ;
verb = vps.fin ! agr ;
inf = vps.inf ! (appVPAgr vp.agr (aagr agr.g agr.n)) ; --- subtype bug
neg = vp.neg ! b ; neg = vp.neg ! b ;
--e clpr = pronArg agr.n agr.p vp.clAcc vp.clDat ;
--e compl = clpr.p2 ++ vp.comp ! agr ++ vp.ext ! b
clit = vp.clit1 ++ vp.clit2 ++ vp.clit3 ; clit = vp.clit1 ++ vp.clit2 ++ vp.clit3 ;
compl = vp.comp ! agr ++ vp.ext ! b compl = vp.comp ! agr ++ vp.ext ! b ;
gen = agr.g ;
num = agr.n ;
per = agr.p ;
verb = vp.s.s ;
vaux = auxVerb vp.s.vtyp ;
vagr = appVPAgr vp.agr (aagr gen num) ; --- subtype bug
part = verb ! VPart vagr.g vagr.n ;
vps : Str * Str = case <te,a> of {
<RPast,Simul> => <verb ! VFin (VImperf m) num per, []> ; --# notpresent
<RPast,Anter> => <vaux ! VFin (VImperf m) num per, part> ; --# notpresent
<RFut,Simul> => <verb ! VFin (VFut) num per, []> ; --# notpresent
<RFut,Anter> => <vaux ! VFin (VFut) num per, part> ; --# notpresent
<RCond,Simul> => <verb ! VFin (VCondit) num per, []> ; --# notpresent
<RCond,Anter> => <vaux ! VFin (VCondit) num per, part> ; --# notpresent
<RPasse,Simul> => <verb ! VFin (VPasse) num per, []> ; --# notpresent
<RPasse,Anter> => <vaux ! VFin (VPasse) num per, part> ; --# notpresent
<RPres,Anter> => <vaux ! VFin (VPres m) num per, part> ; --# notpresent
<RPres,Simul> => <verb ! VFin (VPres m) num per, []>
} ;
fin = vps.p1 ;
inf = vps.p2 ;
in in
case d of { case d of {
DDir => DDir =>
subj ++ neg.p1 ++ clit ++ verb ++ neg.p2 ++ inf ; subj ++ neg.p1 ++ clit ++ fin ++ neg.p2 ++ inf ;
DInv => DInv =>
neg.p1 ++ clit ++ verb ++ preOrPost hasClit subj (neg.p2 ++ inf) neg.p1 ++ clit ++ fin ++ preOrPost hasClit subj (neg.p2 ++ inf)
} }
++ compl ++ compl
} ; } ;
--- in French, pronouns should --- in French, pronouns should
--- have a "-" with possibly a special verb form with "t": --- have a "-" with possibly a special verb form with "t":
--- "comment fera-t-il" vs. "comment fera Pierre" --- "comment fera-t-il" vs. "comment fera Pierre"