forked from GitHub/gf-core
approaching french
This commit is contained in:
@@ -50,7 +50,7 @@ fun
|
||||
|
||||
PositADeg : ADeg -> AP ; -- "old"
|
||||
ComparADeg : ADeg -> NP -> AP ; -- "older than John"
|
||||
SuperlADeg : ADeg -> AP ; -- "the oldest"
|
||||
SuperlNP : ADeg -> CN -> NP ; -- "the oldest man"
|
||||
|
||||
--!
|
||||
--3 Verbs and verb phrases
|
||||
@@ -69,8 +69,9 @@ fun
|
||||
PredVV : VV -> VG -> VG ; -- "can run", "can't run", "tries to run"
|
||||
|
||||
PredNP : NP -> VG ; -- "is John", "is not John"
|
||||
PredAdv : Adv -> VG ; -- "is everywhere", "is not in France"
|
||||
PredPP : PP -> VG ; -- "is in France", "is not in France"
|
||||
PredAP : AP -> VG ; -- "is old", "isn't old"
|
||||
PredSuperl : ADeg -> VG ; -- "is the oldest"
|
||||
PredCN : CN -> VG ; -- "is a man", "isn't a man"
|
||||
VTrans : V2 -> V ; -- "loves"
|
||||
|
||||
|
||||
@@ -302,7 +302,8 @@ oper
|
||||
--
|
||||
-- The verb "être" is often used in syntax.
|
||||
|
||||
verbEtre = verbPres (conjÊtre "être") ;
|
||||
verbEtre = verbPres (conjÊtre "être") AHabere ;
|
||||
verbAvoir = verbPres (conjAvoir "avoir") AHabere ;
|
||||
|
||||
-- We very often form the verb stem by dropping out the infinitive ending.
|
||||
|
||||
|
||||
@@ -76,10 +76,10 @@ lin
|
||||
SomethingNP = mkNameNounPhrase ["quelque chose"] Masc ;
|
||||
NothingNP = mkNameNounPhrase ["rien"] Masc ; --- ne
|
||||
|
||||
CanVV = mkVerbVerbDir (verbPres (conj3pouvoir "pouvoir")) ;
|
||||
CanKnowVV = mkVerbVerbDir (verbPres (conj3savoir "savoir")) ;
|
||||
MustVV = mkVerbVerbDir (verbPres (conj3devoir "devoir")) ;
|
||||
WantVV = mkVerbVerbDir (verbPres (conj3vouloir "vouloir")) ;
|
||||
CanVV = mkVerbVerbDir (verbPres (conj3pouvoir "pouvoir") AHabere) ;
|
||||
CanKnowVV = mkVerbVerbDir (verbPres (conj3savoir "savoir") AHabere) ;
|
||||
MustVV = mkVerbVerbDir (verbPres (conj3devoir "devoir") AHabere) ;
|
||||
WantVV = mkVerbVerbDir (verbPres (conj3vouloir "vouloir") AHabere) ;
|
||||
|
||||
EverywhereNP = ss "partout" ;
|
||||
SomewhereNP = ss ["quelque part"] ; --- ne - pas
|
||||
|
||||
@@ -88,7 +88,8 @@ oper
|
||||
|
||||
negVerb = \va -> elisNe ++ va ++ "pas" ;
|
||||
|
||||
copula = \b -> (etreNetre b).s ;
|
||||
copula = \b,w -> let etre = (predVerb verbEtre).s in
|
||||
etre ! b ! Masc ! w ;
|
||||
|
||||
isTransVerbClit = \v -> case v.c of {
|
||||
Acc => True ;
|
||||
@@ -96,6 +97,11 @@ oper
|
||||
_ => False
|
||||
} ;
|
||||
|
||||
auxVerb ve = case ve.aux of {
|
||||
AHabere => verbAvoir ;
|
||||
AEsse => verbEtre
|
||||
} ;
|
||||
|
||||
-- The "ne - pas" negation.
|
||||
|
||||
posNeg = \b,v,c ->
|
||||
@@ -106,7 +112,7 @@ oper
|
||||
-- Exampe: 'to be or not to be'.
|
||||
|
||||
etreNetre : Bool -> Verb = \b ->
|
||||
{s = \\w => posNeg b (verbEtre.s ! w) []} ; ---- v reveals a BUG in refresh
|
||||
{s = \\w => posNeg b (verbEtre.s ! w) [] ; aux = AHabere} ; ---- v reveals a BUG in refresh
|
||||
|
||||
embedConj = elisQue ;
|
||||
|
||||
@@ -172,11 +178,12 @@ oper
|
||||
++ duvin.s ! stressed accusative --- il y en a ; have to define "y"
|
||||
} ;
|
||||
|
||||
intVerbPhrase = \qui, dort ->
|
||||
intVerbPhrase = \qui, dormir ->
|
||||
let dort = dormir.s ! qui.g ! VPF Simul (VFin presInd qui.n P3)
|
||||
in
|
||||
{s = table {
|
||||
DirQ => qui.s ! Nom ++ optStr (estCeQue Nom) ++
|
||||
dort.s ! qui.g ! VFin presInd qui.n P3 ;
|
||||
IndirQ => "ce" ++ qui.s ! Nom ++ dort.s ! qui.g ! VFin presInd qui.n P3
|
||||
DirQ => qui.s ! Nom ++ optStr (estCeQue Nom) ++ dort ;
|
||||
IndirQ => "ce" ++ qui.s ! Nom ++ dort
|
||||
}
|
||||
} ;
|
||||
|
||||
|
||||
@@ -22,18 +22,18 @@ lin
|
||||
Light = mkCNomReg "lumière" Fem ;
|
||||
House = mkCNomReg "maison" Fem ;
|
||||
Bottle = mkCNomReg "bouteille" Fem ;
|
||||
Walk = verbPres (conj1aimer "marcher") ;
|
||||
Run = verbPres (conj3courir "courir") ;
|
||||
Send = mkTransVerbDir (verbPres (conj1envoyer "envoyer")) ;
|
||||
Love = mkTransVerbDir (verbPres (conj1aimer "aimer")) ;
|
||||
Drink = mkTransVerbDir (verbPres (conj3boire "boire")) ;
|
||||
Wait = mkTransVerbDir (verbPres (conj3rendre "attendre")) ;
|
||||
Give = mkDitransVerb (verbPres (conj1aimer "donner")) [] dative [] accusative ;
|
||||
Prefer = mkDitransVerb (verbPres (conj1aimer "preférer")) [] accusative [] dative ;
|
||||
Say = verbSent (verbPres (conj3dire "dire")) Ind Ind ;
|
||||
Prove = verbSent (verbPres (conj1aimer "démontrer")) Ind Ind ;
|
||||
SwitchOn = mkTransVerbDir (verbPres (conj1aimer "allumer")) ;
|
||||
SwitchOff = mkTransVerbDir (verbPres (conj3peindre "éteindre")) ;
|
||||
Walk = verbPres (conj1aimer "marcher") AHabere ;
|
||||
Run = verbPres (conj3courir "courir") AHabere ;
|
||||
Send = mkTransVerbDir (verbPres (conj1envoyer "envoyer") AHabere) ;
|
||||
Love = mkTransVerbDir (verbPres (conj1aimer "aimer") AHabere) ;
|
||||
Drink = mkTransVerbDir (verbPres (conj3boire "boire") AHabere) ;
|
||||
Wait = mkTransVerbDir (verbPres (conj3rendre "attendre") AHabere) ;
|
||||
Give = mkDitransVerb (verbPres (conj1aimer "donner") AHabere) [] dative [] accusative ;
|
||||
Prefer = mkDitransVerb (verbPres (conj1aimer "preférer") AHabere) [] accusative [] dative ;
|
||||
Say = verbSent (verbPres (conj3dire "dire") AHabere) Ind Ind ;
|
||||
Prove = verbSent (verbPres (conj1aimer "démontrer") AHabere) Ind Ind ;
|
||||
SwitchOn = mkTransVerbDir (verbPres (conj1aimer "allumer") AHabere) ;
|
||||
SwitchOff = mkTransVerbDir (verbPres (conj3peindre "éteindre") AHabere) ;
|
||||
Mother = funDe (mkCNomReg "mère" Fem) ;
|
||||
Uncle = funDe (mkCNomReg "oncle" Masc) ;
|
||||
Connection = mkCNomReg "connection" Fem **
|
||||
|
||||
@@ -48,8 +48,8 @@ lincat
|
||||
|
||||
V = Verb ;
|
||||
-- = {s : VF => Str} ;
|
||||
VG = {s : Bool => Gender => VF => Str} ;
|
||||
VP = {s : Gender => VF => Str} ;
|
||||
VG = {s : Bool => Gender => VPForm => Str} ;
|
||||
VP = {s : Gender => VPForm => Str} ;
|
||||
V2 = TransVerb ;
|
||||
-- = Verb ** {s2 : Preposition ; c : CaseA} ;
|
||||
V3 = TransVerb ** {s3 : Preposition ; c3 : CaseA} ;
|
||||
@@ -61,6 +61,8 @@ lincat
|
||||
S = Sentence ;
|
||||
-- = {s : Mode => Str} ;
|
||||
Slash = Sentence ** {s2 : Preposition ; c : CaseA} ;
|
||||
Cl = Clause ;
|
||||
-- = {s : Bool => ClForm => Str} ;
|
||||
|
||||
RP = {s : RelForm => Str ; g : RelGen} ;
|
||||
RC = {s : Mode => Gender => Number => Str} ;
|
||||
|
||||
@@ -16,7 +16,7 @@ lin
|
||||
ComplA2 = complAdj ;
|
||||
PositADeg = positAdjPhrase ;
|
||||
ComparADeg = comparAdjPhrase ;
|
||||
SuperlADeg = superlAdjDegr ;
|
||||
SuperlNP = superlNounPhrase ;
|
||||
|
||||
DetNP = detNounPhrase ;
|
||||
IndefOneNP = indefNounPhrase singular ;
|
||||
@@ -38,13 +38,16 @@ lin
|
||||
PosVG = predVerbGroup True ;
|
||||
NegVG = predVerbGroup False ;
|
||||
|
||||
PredVG = predVerbGroupClause ;
|
||||
|
||||
PredV = predVerb ;
|
||||
PredAP = predAdjective ;
|
||||
PredSuperl a = predAdjective (superlAdjDegr a) ;
|
||||
PredCN = predCommNoun ;
|
||||
PredV2 = complTransVerb ;
|
||||
PredV3 = complDitransVerb ;
|
||||
PredNP = predNounPhrase ;
|
||||
PredAdv = predAdverb ;
|
||||
PredPP = predAdverb ;
|
||||
PredVS = complSentVerb ;
|
||||
PredVV = complVerbVerb ;
|
||||
PredPassV = predPassVerb ;
|
||||
|
||||
@@ -390,7 +390,7 @@ oper
|
||||
-- morphology has complete conjugations.
|
||||
|
||||
param
|
||||
VPForm = VPF Anteriority VForm ;
|
||||
VPForm = VPF Anteriority VF ;
|
||||
Anteriority = Simul | Anter ;
|
||||
|
||||
oper
|
||||
@@ -401,8 +401,11 @@ oper
|
||||
s = vg.s ! b
|
||||
} ;
|
||||
|
||||
auxVerb : Verb -> Verb ; -- gives the copula
|
||||
auxVerb : Verb -> Verb ; -- gives the auxiliary
|
||||
|
||||
nombreVerbPhrase : VPForm -> Number = \v -> case v of {
|
||||
VPF _ f => nombreVerb f
|
||||
} ;
|
||||
|
||||
-- Predication is language-dependent in the negative case.
|
||||
|
||||
@@ -416,45 +419,49 @@ oper
|
||||
AHabere => VPart Masc Sg
|
||||
} ;
|
||||
allee = aller.s ! part ;
|
||||
est = (auxVerb aller.aux).s ! v
|
||||
est = (auxVerb aller).s ! v
|
||||
in
|
||||
if_then_Str b est (negVerb est) ++ allee
|
||||
}
|
||||
} ;
|
||||
|
||||
formVerb : Verb -> Bool -> Gender -> VPForm -> Str = \aller,b,g,vf ->
|
||||
let va = (predVerb aller).s in va ! b ! g ! vf ;
|
||||
|
||||
negVerb : Str -> Str ;
|
||||
|
||||
-- Verb phrases can also be formed from adjectives ("est bon"),
|
||||
-- common nouns ("est un homme"), and noun phrases ("est Jean").
|
||||
-- We need a copula, which is of course language-dependent.
|
||||
|
||||
copula : Bool -> VF => Str ;
|
||||
copula : Bool -> VPForm -> Str ;
|
||||
|
||||
-- The third rule is overgenerating: "est chaque homme" has to be ruled out
|
||||
-- on semantic grounds.
|
||||
|
||||
predAdjective : AdjPhrase -> VerbGroup = \bon ->
|
||||
{s = \\b,g,v => copula b ! v ++ bon.s ! AF g (nombreVerb v)} ;
|
||||
{s = \\b,g,v => copula b v ++ bon.s ! AF g (nombreVerbPhrase v)} ;
|
||||
|
||||
predCommNoun : CommNounPhrase -> VerbGroup = \homme ->
|
||||
{s = \\b,g,v => copula b ! v ++ indefNoun (nombreVerb v) homme} ;
|
||||
{s = \\b,g,v => copula b v ++ indefNoun (nombreVerbPhrase v) homme} ;
|
||||
|
||||
predNounPhrase : NounPhrase -> VerbGroup = \jean ->
|
||||
{s = \\b,g,v => copula b ! v ++ jean.s ! stressed nominative} ;
|
||||
{s = \\b,g,v => copula b v ++ jean.s ! stressed nominative} ;
|
||||
|
||||
predAdverb : Adverb -> VerbGroup = \dehors ->
|
||||
{s = \\b,g,v => copula b ! v ++ dehors.s} ;
|
||||
{s = \\b,g,v => copula b v ++ dehors.s} ;
|
||||
|
||||
-- Passivization is like adjectival predication.
|
||||
|
||||
predPassVerb : Verb -> VerbGroup = \aimer ->
|
||||
{s = \\b,g,v => copula b ! v ++ aimer.s ! VPart g (nombreVerb v)} ;
|
||||
{s = \\b,g,v => copula b v ++ aimer.s ! VPart g (nombreVerbPhrase v)} ;
|
||||
|
||||
-- complement a verb with noun phrase and optional preposition
|
||||
|
||||
TransVerb : Type = Verb ** Complement ;
|
||||
|
||||
verbOfTransVerb : TransVerb -> Verb = \v -> {s = v.s} ;
|
||||
verbOfTransVerb : TransVerb -> Verb = \v ->
|
||||
{s = v.s ; aux = v.aux} ;
|
||||
complementOfTransVerb : TransVerb -> Complement = \v -> {s2 = v.s2 ; c = v.c} ;
|
||||
|
||||
isNounPhraseClit : NounPhrase -> Bool = \n -> case n.c of {
|
||||
@@ -483,10 +490,13 @@ oper
|
||||
|
||||
complTransVerb : TransVerb -> NounPhrase -> VerbGroup = \aime,jean ->
|
||||
{s = \\b,g,w => ---- BUG: v gives stack overflow
|
||||
let {Jean = jean.s ! (case2pformClit aime.c) ; Aime = aime.s ! w} in
|
||||
let
|
||||
Jean = jean.s ! (case2pformClit aime.c) ;
|
||||
Aime = formVerb aime b g w
|
||||
in
|
||||
if_then_Str (andB (isNounPhraseClit jean) (isTransVerbClit aime))
|
||||
(posNeg b (Jean ++ Aime) [])
|
||||
(posNeg b Aime Jean)
|
||||
(Jean ++ Aime) ---- (posNeg b (Jean ++ Aime) [])
|
||||
(Aime ++ Jean) ---- (posNeg b Aime Jean)
|
||||
} ;
|
||||
|
||||
mkTransVerb : Verb -> Preposition -> CaseA -> TransVerb = \v,p,c ->
|
||||
@@ -526,7 +536,7 @@ oper
|
||||
DitransVerb -> NounPhrase -> NounPhrase -> VerbGroup = \donner,jean,vin ->
|
||||
{s = \\b,g,w =>
|
||||
let
|
||||
donne = donner.s ! w ;
|
||||
donne = formVerb donner b g w ;
|
||||
cJean = isNounPhraseClit jean ;
|
||||
cVin = isNounPhraseClit vin ;
|
||||
Jean = jean.s ! (case2pformClit donner.c) ;
|
||||
@@ -536,7 +546,8 @@ oper
|
||||
lui = if_then_Str cJean Jean [] ;
|
||||
te = if_then_Str cVin Vin []
|
||||
in
|
||||
posNeg b (te ++ lui ++ donne) (aJean ++ duVin)
|
||||
te ++ lui ++ donne ++ aJean ++ duVin
|
||||
---- posNeg b (te ++ lui ++ donne) (aJean ++ duVin)
|
||||
} ;
|
||||
|
||||
-- The following macro builds the "ne - pas" or "non" negation. The second
|
||||
@@ -600,9 +611,37 @@ oper
|
||||
|
||||
predVerbPhrase : NounPhrase -> VerbPhrase -> Sentence = \jean,dort ->
|
||||
{s = \\m => jean.s ! unstressed nominative ++
|
||||
dort.s ! pgen2gen jean.g ! VFin (VPres m) jean.n jean.p
|
||||
dort.s ! pgen2gen jean.g ! VPF Simul (VFin (VPres m) jean.n jean.p)
|
||||
} ;
|
||||
|
||||
param
|
||||
ClForm =
|
||||
ClPres Anteriority Mode
|
||||
| ClImperf Anteriority Mode
|
||||
| ClPasse Anteriority
|
||||
| ClFut Anteriority
|
||||
| ClCondit Anteriority
|
||||
---- | ClInfinit Anteriority -- "naked infinitive" clauses
|
||||
;
|
||||
|
||||
oper
|
||||
cl2vp : ClForm -> Number -> Person -> VPForm = \c,n,p -> case c of {
|
||||
ClPres a m => VPF a (VFin (VPres m) n p) ;
|
||||
ClImperf a m => VPF a (VFin (VImperf m) n p) ;
|
||||
ClPasse a => VPF a (VFin VPasse n p) ;
|
||||
ClFut a => VPF a (VFin VFut n p) ;
|
||||
ClCondit a => VPF a (VFin VCondit n p)
|
||||
} ;
|
||||
|
||||
Clause = {s : Bool => ClForm => Str} ;
|
||||
|
||||
predVerbGroupClause : NounPhrase -> VerbGroup -> Clause = \jean,dort ->
|
||||
{s = \\b,c =>
|
||||
jean.s ! unstressed nominative ++
|
||||
dort.s ! b ! pgen2gen jean.g ! cl2vp c jean.n jean.p
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
--3 Sentence-complement verbs
|
||||
--
|
||||
@@ -634,8 +673,8 @@ oper
|
||||
VerbVerb : Type = Verb ** {c : CaseA} ;
|
||||
|
||||
complVerbVerb : VerbVerb -> VerbGroup -> VerbGroup = \devoir, nager ->
|
||||
{s = \\b,g,v => if_then_Str b (devoir.s ! v) (negVerb (devoir.s ! v)) ++
|
||||
prepCase devoir.c ++ nager.s ! True ! g ! VInfin
|
||||
{s = \\b,g,v => formVerb devoir b g v ++
|
||||
prepCase devoir.c ++ nager.s ! True ! g ! VPF Simul VInfin ---- anter
|
||||
} ;
|
||||
|
||||
mkVerbVerbDir : Verb -> VerbVerb = \v -> v ** {c = accusative} ;
|
||||
@@ -699,7 +738,7 @@ oper
|
||||
|
||||
relVerbPhrase : RelPron -> VerbPhrase -> RelClause = \qui,dort ->
|
||||
{s = \\m,g,n =>
|
||||
allRelForms qui g n nominative ++ dort.s ! g ! VFin (VPres m) n P3
|
||||
allRelForms qui g n nominative ++ dort.s ! g ! VPF Simul (VFin (VPres m) n P3)
|
||||
} ;
|
||||
|
||||
relSlash : RelPron -> SentenceSlashNounPhrase -> RelClause = \dont,jeparle ->
|
||||
@@ -844,7 +883,7 @@ oper
|
||||
Imperative = {s : Gender => Number => Str} ;
|
||||
|
||||
imperVerbPhrase : VerbPhrase -> Imperative = \dormir ->
|
||||
{s = \\g,n => dormir.s ! g ! vImper n P2
|
||||
{s = \\g,n => dormir.s ! g ! VPF Simul (vImper n P2)
|
||||
} ;
|
||||
|
||||
imperUtterance : Number -> Imperative -> Utterance = \n,I ->
|
||||
|
||||
@@ -13,7 +13,7 @@ lin
|
||||
ComplA2 = complAdj ;
|
||||
PositADeg = positAdjPhrase ;
|
||||
ComparADeg = comparAdjPhrase ;
|
||||
SuperlADeg = superlAdjPhrase ;
|
||||
SuperlNP = superlNounPhrase ;
|
||||
|
||||
DetNP = detNounPhrase ;
|
||||
IndefOneNP = indefNounPhrase singular ;
|
||||
@@ -43,12 +43,13 @@ lin
|
||||
|
||||
PredV = predVerb ;
|
||||
PredAP = predAdjective ;
|
||||
PredSuperl a = predAdjective (superlAdjPhrase a) ;
|
||||
PredCN = predCommNoun ;
|
||||
PredV2 = complTransVerb ;
|
||||
PredV3 = complDitransVerb ;
|
||||
PredPassV = passVerb ;
|
||||
PredNP = predNounPhrase ;
|
||||
PredAdv = predAdverb ;
|
||||
PredPP = predAdverb ;
|
||||
PredVS = complSentVerb ;
|
||||
PredVV = complVerbVerb ;
|
||||
VTrans = transAsVerb ;
|
||||
|
||||
Reference in New Issue
Block a user