1
0
forked from GitHub/gf-core

approaching french

This commit is contained in:
aarne
2004-11-18 15:11:27 +00:00
parent 2754a5a758
commit 5104521a0e
9 changed files with 105 additions and 51 deletions

View File

@@ -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"

View File

@@ -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.

View File

@@ -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

View File

@@ -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
}
} ;

View File

@@ -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 **

View File

@@ -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} ;

View File

@@ -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 ;

View File

@@ -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 ->

View File

@@ -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 ;