1
0
forked from GitHub/gf-core

romance postverbal clitic details

This commit is contained in:
aarne
2006-06-21 15:24:28 +00:00
parent fb3cb664d6
commit ea2033e3d6
12 changed files with 77 additions and 54 deletions

View File

@@ -335,7 +335,6 @@ Danish
English English
- -
Finnish Finnish
@@ -343,16 +342,14 @@ Finnish
French French
- no inverted word order in questions
- multiple clitics (with V3) not always right - multiple clitics (with V3) not always right
- no pronominal questions with inverted word order
German German
- -
Italian Italian
- no contraction of infinitives before clitics
- multiple clitics (with V3) not always right - multiple clitics (with V3) not always right
@@ -367,10 +364,11 @@ Russian
Spanish Spanish
- multiple clitics (with V3) not always right - multiple clitics (with V3) not always right
- missing contractions with imperatives and clitics
Swedish Swedish
- -

View File

@@ -8,7 +8,7 @@ oper mkNV : Verbe -> VerbeN = \ve -> {s = vvf ve} ;
oper conj : Str -> Verbe = conj1aimer ; --- temp. default oper conj : Str -> Verbe = conj1aimer ; --- temp. default
oper v_nancy100inf : Str -> VerbeN = \ve -> {s = table { oper v_nancy100inf : Str -> VerbeN = \ve -> {s = table {
VInfin => ve ; VInfin _ => ve ;
_ => nonExist _ => nonExist
} }
} ; } ;

View File

@@ -66,23 +66,24 @@ instance DiffFre of DiffRomance = open CommonRomance, PhonoFre, Prelude in {
---- pronArg = pronArgGen Neg ; --- takes more space and time ---- pronArg = pronArgGen Neg ; --- takes more space and time
pronArg : Number -> Person -> CAgr -> CAgr -> Str * Str = \n,p,acc,dat -> pronArg : Number -> Person -> CAgr -> CAgr -> Str * Str * Bool =
\n,p,acc,dat ->
let let
pacc = case acc of { pacc = case acc of {
CRefl => case p of { CRefl => <case p of {
P3 => elision "s" ; --- use of reflPron incred. expensive P3 => elision "s" ; --- use of reflPron incred. expensive
_ => argPron Fem n p Acc _ => argPron Fem n p Acc
} ; },True> ;
CPron a => argPron a.g a.n a.p Acc ; CPron a => <argPron a.g a.n a.p Acc,True> ;
_ => [] _ => <[],False>
} ; } ;
in in
case dat of { case dat of {
CPron a => let pdat = argPron a.g a.n a.p dative in case a.p of { CPron a => let pdat = argPron a.g a.n a.p dative in case a.p of {
P3 => <pacc ++ pdat,[]> ; P3 => <pacc.p1 ++ pdat,[],True> ;
_ => <pdat ++ pacc,[]> _ => <pdat ++ pacc.p1,[],True>
} ; } ;
_ => <pacc, []> _ => <pacc.p1, [],pacc.p2>
} ; } ;
@@ -119,11 +120,12 @@ instance DiffFre of DiffRomance = open CommonRomance, PhonoFre, Prelude in {
agr = aag ** {p = p} ; agr = aag ** {p = p} ;
verb = (vp.s ! VPImperat).fin ! agr ; verb = (vp.s ! VPImperat).fin ! agr ;
neg = vp.neg ! pol ; neg = vp.neg ! pol ;
hascl = (pronArg agr.n agr.p vp.clAcc vp.clDat).p3 ;
clpr = pronArgGen pol agr.n agr.p vp.clAcc vp.clDat ; clpr = pronArgGen pol agr.n agr.p vp.clAcc vp.clDat ;
compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol
in in
case pol of { case pol of {
Pos => verb ++ clpr.p1 ++ compl ; Pos => verb ++ if_then_Str hascl "-" [] ++ clpr.p1 ++ compl ;
Neg => neg.p1 ++ clpr.p1 ++ verb ++ compl Neg => neg.p1 ++ clpr.p1 ++ verb ++ compl
} }
} ; } ;
@@ -137,7 +139,7 @@ instance DiffFre of DiffRomance = open CommonRomance, PhonoFre, Prelude in {
conjThan = elisQue ; conjThan = elisQue ;
conjThat = elisQue ; conjThat = elisQue ;
clitInf cli inf = cli ++ inf ; clitInf _ cli inf = cli ++ inf ;
relPron : Bool => AAgr => Case => Str = \\b,a,c => relPron : Bool => AAgr => Case => Str = \\b,a,c =>
let let
@@ -198,8 +200,8 @@ instance DiffFre of DiffRomance = open CommonRomance, PhonoFre, Prelude in {
auxPassive : Verb = copula ; auxPassive : Verb = copula ;
copula : Verb = {s = table VF ["être";"suis";"es";"est";"sommes";"êtes";"sont";"sois";"sois";"soit";"soyons";"soyez";"soient";"étais";"étais";"était";"étions";"étiez";"étaient";"fusse";"fusses";"fût";"fussions";"fussiez";"fussent";"fus";"fus";"fut";"fûmes";"fûtes";"furent";"serai";"seras";"sera";"serons";"serez";"seront";"serais";"serais";"serait";"serions";"seriez";"seraient";"sois";"soyons";"soyez";"été";"étés";"étée";"étées";"étant"]; vtyp=VHabere} ; copula : Verb = {s = table VF ["être";"être";"suis";"es";"est";"sommes";"êtes";"sont";"sois";"sois";"soit";"soyons";"soyez";"soient";"étais";"étais";"était";"étions";"étiez";"étaient";"fusse";"fusses";"fût";"fussions";"fussiez";"fussent";"fus";"fus";"fut";"fûmes";"fûtes";"furent";"serai";"seras";"sera";"serons";"serez";"seront";"serais";"serais";"serait";"serions";"seriez";"seraient";"sois";"soyons";"soyez";"été";"étés";"étée";"étées";"étant"]; vtyp=VHabere} ;
avoir_V : Verb = {s=table VF ["avoir";"ai";"as";"a";"avons";"avez";"ont";"aie";"aies";"ait";"ayons";"ayez";"aient";"avais";"avais";"avait";"avions";"aviez";"avaient";"eusse";"eusses";"eût";"eussions";"eussiez";"eussent";"eus";"eus";"eut";"eûmes";"eûtes";"eurent";"aurai";"auras";"aura";"aurons";"aurez";"auront";"aurais";"aurais";"aurait";"aurions";"auriez";"auraient";"aie";"ayons";"ayez";"eu";"eus";"eue";"eues";"ayant"];vtyp=VHabere}; avoir_V : Verb = {s=table VF ["avoir";"avoir";"ai";"as";"a";"avons";"avez";"ont";"aie";"aies";"ait";"ayons";"ayez";"aient";"avais";"avais";"avait";"avions";"aviez";"avaient";"eusse";"eusses";"eût";"eussions";"eussiez";"eussent";"eus";"eus";"eut";"eûmes";"eûtes";"eurent";"aurai";"auras";"aura";"aurons";"aurez";"auront";"aurais";"aurais";"aurait";"aurions";"auriez";"auraient";"aie";"ayons";"ayez";"eu";"eus";"eue";"eues";"ayant"];vtyp=VHabere};
} }

View File

@@ -220,11 +220,11 @@ param
| Imper NumPersI | Imper NumPersI
| Part TPart ; | Part TPart ;
-- This is a conversion to the type in $ParamRomance$. -- This is a conversion to the type in $CommonRomance$.
oper oper
vvf : (VForm => Str) -> (VF => Str) = \aller -> table { vvf : (VForm => Str) -> (VF => Str) = \aller -> table {
VInfin => aller ! Inf ; VInfin _ => aller ! Inf ;
VFin (VPres Indic) n p => aller ! Indi Presn n p ; VFin (VPres Indic) n p => aller ! Indi Presn n p ;
VFin (VPres Subjunct) n p => aller ! Subjo SPres n p ; VFin (VPres Subjunct) n p => aller ! Subjo SPres n p ;
VFin (VImperf Indic) n p => aller ! Indi Imparf n p ; --# notpresent VFin (VImperf Indic) n p => aller ! Indi Imparf n p ; --# notpresent

View File

@@ -6491,7 +6491,8 @@ oper venire_110 : Str -> Verbo = \venire ->
} ; } ;
verbBesch : {s : VForm => Str} -> {s : VF => Str} = \amare -> {s = table { verbBesch : {s : VForm => Str} -> {s : VF => Str} = \amare -> {s = table {
VInfin => amare.s ! Inf ; VInfin False => amare.s ! Inf ;
VInfin True => amare.s ! InfClit ;
VFin (VPres Indic) n p => amare.s ! Indi Pres n p ; VFin (VPres Indic) n p => amare.s ! Indi Pres n p ;
VFin (VPres Conjunct) n p => amare.s ! Cong Pres n p ; VFin (VPres Conjunct) n p => amare.s ! Cong Pres n p ;
VFin (VImperf Indic) n p => amare.s ! Indi Imperf n p ; --# notpresent VFin (VImperf Indic) n p => amare.s ! Indi Imperf n p ; --# notpresent

View File

@@ -94,26 +94,30 @@ instance DiffIta of DiffRomance = open CommonRomance, PhonoIta, BeschIta, Prelud
CNone => False ; CNone => False ;
_ => True _ => True
} ; } ;
hasDat = case dat of {
CNone => False ;
_ => True
} ;
pdat = case dat of { pdat = case dat of {
CPron a => argPron a.g a.n a.p dative hasAcc ; CPron a => argPron a.g a.n a.p dative hasAcc ;
_ => [] _ => []
} ; } ;
in in
<pdat ++ pacc, []> ; <pdat ++ pacc, [], orB hasAcc hasDat> ;
mkImperative p vp = { mkImperative p vp = {
s = \\pol,aag => s = \\pol,aag =>
let let
agr = aag ** {p = p} ; agr = aag ** {p = p} ;
clpr = pronArg agr.n agr.p vp.clAcc vp.clDat ;
verb = case <aag.n, pol> of { verb = case <aag.n, pol> of {
<Sg,Neg> => (vp.s ! VPInfinit Simul).inf ! aag ; <Sg,Neg> => (vp.s ! VPInfinit Simul clpr.p3).inf ! aag ;
_ => (vp.s ! VPImperat).fin ! agr _ => (vp.s ! VPImperat).fin ! agr
} ; } ;
neg = vp.neg ! pol ; neg = vp.neg ! pol ;
clpr = pronArg agr.n agr.p vp.clAcc vp.clDat ;
compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol
in in
neg.p1 ++ verb ++ clpr.p1 ++ compl ; neg.p1 ++ verb ++ bindIf clpr.p3 ++ clpr.p1 ++ compl ;
} ; } ;
negation : Polarity => (Str * Str) = table { negation : Polarity => (Str * Str) = table {
@@ -124,7 +128,7 @@ instance DiffIta of DiffRomance = open CommonRomance, PhonoIta, BeschIta, Prelud
conjThan = "che" ; --- di conjThan = "che" ; --- di
conjThat = "che" ; conjThat = "che" ;
clitInf cli inf = inf ++ cli ; --- contraction of inf clitInf b cli inf = inf ++ bindIf b ++ cli ;
relPron : Bool => AAgr => Case => Str = \\b,a,c => relPron : Bool => AAgr => Case => Str = \\b,a,c =>
case c of { case c of {

View File

@@ -85,7 +85,7 @@ oper
param param
VF = VF =
VInfin VInfin Bool
| VFin TMood Number Person | VFin TMood Number Person
| VImper NumPersI | VImper NumPersI
| VPart Gender Number | VPart Gender Number
@@ -106,7 +106,7 @@ param
VPFinite TMood Anteriority VPFinite TMood Anteriority
| VPImperat | VPImperat
| VPGerund | VPGerund
| VPInfinit Anteriority ; | VPInfinit Anteriority Bool ;
RTense = RTense =
RPres RPres
@@ -149,7 +149,7 @@ oper
<Sg,P2> => VImper SgP2 ; <Sg,P2> => VImper SgP2 ;
<Pl,P1> => VImper PlP1 ; <Pl,P1> => VImper PlP1 ;
<Pl,P2> => VImper PlP2 ; <Pl,P2> => VImper PlP2 ;
_ => VInfin _ => VInfin False
} ; } ;
--- ---
@@ -183,6 +183,10 @@ oper
mkOrd : {s : Degree => AForm => Str} -> {s : AAgr => Str} ; mkOrd : {s : Degree => AForm => Str} -> {s : AAgr => Str} ;
mkOrd x = {s = \\ag => x.s ! Posit ! AF ag.g ag.n} ; mkOrd x = {s = \\ag => x.s ! Posit ! AF ag.g ag.n} ;
-- This is used in Spanish and Italian to bind clitics with preceding verb.
bindIf : Bool -> Str = \b -> if_then_Str b BIND [] ;
param param
VPAgr = VPAgr =
VPAgrSubj -- elle est partie, elle s'est vue VPAgrSubj -- elle est partie, elle s'est vue

View File

@@ -37,13 +37,15 @@ interface DiffRomance = open CommonRomance, Prelude in {
oper conjunctCase : NPForm -> NPForm ; oper conjunctCase : NPForm -> NPForm ;
-- How infinitives and clitics are placed relative to each other -- How infinitives and clitics are placed relative to each other
-- (Fre "la voir", Ita "vederla"). -- (Fre "la voir", Ita "vederla"). The $Bool$ is used for indicating
-- if there are any clitics.
oper clitInf : Str -> Str -> Str ; oper clitInf : Bool -> Str -> Str -> Str ;
-- To render pronominal arguments as clitics and/or ordinary complements. -- To render pronominal arguments as clitics and/or ordinary complements.
-- Returns $True$ if there are any clitics.
oper pronArg : Number -> Person -> CAgr -> CAgr -> Str * Str ; oper pronArg : Number -> Person -> CAgr -> CAgr -> Str * Str * Bool ;
-- To render imperatives (with their clitics etc). -- To render imperatives (with their clitics etc).

View File

@@ -52,14 +52,14 @@ oper
let let
vfin : TMood -> Agr -> Str = \tm,a -> verb.s ! VFin tm a.n a.p ; vfin : TMood -> Agr -> Str = \tm,a -> verb.s ! VFin tm a.n a.p ;
vpart : AAgr -> Str = \a -> verb.s ! VPart a.g a.n ; vpart : AAgr -> Str = \a -> verb.s ! VPart a.g a.n ;
vinf = verb.s ! VInfin ; vinf : Bool -> Str = \b -> verb.s ! VInfin b ;
vger = verb.s ! VGer ; vger = verb.s ! VGer ;
typ = verb.vtyp ; typ = verb.vtyp ;
aux = auxVerb typ ; aux = auxVerb typ ;
habet : TMood -> Agr -> Str = \tm,a -> aux ! VFin tm a.n a.p ; habet : TMood -> Agr -> Str = \tm,a -> aux ! VFin tm a.n a.p ;
habere : Str = aux ! VInfin ; habere : Str = aux ! VInfin False ;
vimp : Agr -> Str = \a -> verb.s ! VImper (case <a.n,a.p> of { vimp : Agr -> Str = \a -> verb.s ! VImper (case <a.n,a.p> of {
<Pl,P1> => PlP1 ; <Pl,P1> => PlP1 ;
@@ -80,10 +80,10 @@ oper
s = table { s = table {
VPFinite t Simul => vf (vfin t) (\_ -> []) ; VPFinite t Simul => vf (vfin t) (\_ -> []) ;
VPFinite t Anter => vf (habet t) vpart ; --# notpresent VPFinite t Anter => vf (habet t) vpart ; --# notpresent
VPInfinit Anter => vf (\_ -> []) (\a -> habere ++ vpart a) ; --# notpresent VPInfinit Anter _=> vf (\_ -> []) (\a -> habere ++ vpart a) ; --# notpresent
VPImperat => vf vimp (\_ -> []) ; VPImperat => vf vimp (\_ -> []) ;
VPGerund => vf (\_ -> []) (\_ -> vger) ; VPGerund => vf (\_ -> []) (\_ -> vger) ;
VPInfinit Simul => vf (\_ -> []) (\_ -> vinf) VPInfinit Simul b=> vf (\_ -> []) (\_ -> vinf b)
} ; } ;
agr = partAgr typ ; agr = partAgr typ ;
neg = negation ; neg = negation ;
@@ -217,12 +217,12 @@ oper
infVP : VP -> Agr -> Str = \vp,agr -> infVP : VP -> Agr -> Str = \vp,agr ->
let let
inf = (vp.s ! VPInfinit Simul).inf ! (aagr agr.g agr.n) ;
neg = vp.neg ! Pos ; --- Neg not in API
clpr = pronArg agr.n agr.p vp.clAcc vp.clDat ; clpr = pronArg agr.n agr.p vp.clAcc vp.clDat ;
inf = (vp.s ! VPInfinit Simul clpr.p3).inf ! (aagr agr.g agr.n) ;
neg = vp.neg ! Pos ; --- Neg not in API
obj = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! Pos ---- pol obj = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! Pos ---- pol
in in
clitInf (clpr.p1 ++ vp.clit2) inf ++ obj ; clitInf clpr.p3 (clpr.p1 ++ vp.clit2) inf ++ obj ;
} }

View File

@@ -25,7 +25,7 @@ incomplete concrete SentenceRomance of Sentence =
(mkClause (mkClause
(np.s ! Aton Nom) np.a (np.s ! Aton Nom) np.a
(insertComplement (insertComplement
(\\a => prepCase vv.c2.c ++ v2.s ! VInfin) (predV vv))).s ; (\\a => prepCase vv.c2.c ++ v2.s ! VInfin False) (predV vv))).s ;
c2 = v2.c2 c2 = v2.c2
} ; } ;

View File

@@ -5829,8 +5829,23 @@ oper llover_89 : Str -> Verbum = \llover ->
-- Verbs: conversion from full verbs to present-tense verbs. -- Verbs: conversion from full verbs to present-tense verbs.
verbBesch : {s : VFB => Str} -> {s : CommonRomance.VF => Str} = \amar -> {s = table { verbBesch : {s : VFB => Str} -> {s : CommonRomance.VF => Str} = \amar ->
VInfin => amar.s ! VI Infn ; {-
-- even imperatives should be modified this way, so let's postpone this
-- AR 21/6/2006
let
amare = amar.s ! VI Infn ;
a'r = case last (init amare) of {
"i" => "ír" ;
"e" => "ér" ;
_ => "ár"
} ;
ama'r = Predef.tk 2 amare ++ a'r
in
-}
{s = table {
-- VInfin True => ama'r ;
VInfin _ => amar.s ! VI Infn ;
VFin (VPres Indic) n p => amar.s ! VP (Pres Ind n p) ; VFin (VPres Indic) n p => amar.s ! VP (Pres Ind n p) ;
VFin (VPres Conjunct) n p => amar.s ! VP (Pres Sub n p) ; VFin (VPres Conjunct) n p => amar.s ! VP (Pres Sub n p) ;
VFin (VImperf Indic) n p => amar.s ! VP (Impf Ind n p) ; --# notpresent --# notpresent VFin (VImperf Indic) n p => amar.s ! VP (Impf Ind n p) ; --# notpresent --# notpresent

View File

@@ -58,21 +58,18 @@ instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelud
pronArg = \n,p,acc,dat -> pronArg = \n,p,acc,dat ->
let let
paccp = case acc of { paccp = case acc of {
CRefl => <reflPron n p Acc, p> ; CRefl => <reflPron n p Acc, p,True> ;
CPron a => <argPron a.g a.n a.p Acc, a.p> ; CPron a => <argPron a.g a.n a.p Acc, a.p,True> ;
_ => <[],P2> _ => <[],P2,False>
} ; } ;
pdatp = case dat of { pdatp = case dat of {
CPron a => <argPron a.g a.n a.p dative, a.p> ; CPron a => <argPron a.g a.n a.p dative, a.p,True> ;
_ => <[],P2> _ => <[],P2,False>
} }
in case <paccp.p2, pdatp.p2> of { in case <paccp.p2, pdatp.p2> of {
<P3,P3> => <"se" ++ paccp.p1, []> ; <P3,P3> => <"se" ++ paccp.p1, [],True> ;
_ => <pdatp.p1 ++ paccp.p1, []> _ => <pdatp.p1 ++ paccp.p1, [],orB paccp.p3 pdatp.p3>
} ; } ;
-- case <p,acc,dat> of {
-- <Sg,P2,CRefl,CPron {n = Sg ; p = P1}> => <"te" ++ "me", []> ;
-- <_,_,CPron {n = Sg ; p = P2},CPron {n = Sg ; p = P1}> => <"te" ++ "me", []> ;
mkImperative p vp = { mkImperative p vp = {
s = \\pol,aag => s = \\pol,aag =>
@@ -86,7 +83,7 @@ instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelud
clpr = pronArg agr.n agr.p vp.clAcc vp.clDat ; clpr = pronArg agr.n agr.p vp.clAcc vp.clDat ;
compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol compl = neg.p2 ++ clpr.p2 ++ vp.comp ! agr ++ vp.ext ! pol
in in
neg.p1 ++ verb ++ clpr.p1 ++ compl ; neg.p1 ++ verb ++ bindIf clpr.p3 ++ clpr.p1 ++ compl ;
} ; } ;
negation : Polarity => (Str * Str) = table { negation : Polarity => (Str * Str) = table {
@@ -97,7 +94,7 @@ instance DiffSpa of DiffRomance = open CommonRomance, PhonoSpa, BeschSpa, Prelud
conjThan = "que" ; conjThan = "que" ;
conjThat = "que" ; conjThat = "que" ;
clitInf cli inf = inf ++ cli ; --- contraction of inf clitInf b cli inf = inf ++ bindIf b ++ cli ;
relPron : Bool => AAgr => Case => Str = \\b,a,c => relPron : Bool => AAgr => Case => Str = \\b,a,c =>
case c of { case c of {