mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 17:08:54 -06:00
(Romance) Attributive and predicative adjective forms (#93)
* (Fre,Por) accomodate changes to Romance adjectives - to support Spanish buen/bueno, gran/grande and catalan bo/bon * (Cat) Update paradigms to allow predicative and attributive forms of adj * (Spa) fix argument order in Spanish adjective paradigms * (Eng) fix missing paradigm invarA * (Spa) Flip order of args in mkAdj constructor
This commit is contained in:
@@ -45,8 +45,8 @@ lin
|
||||
s1 = heading1 (nounHeading adjective_Category).s ;
|
||||
s2 = frameTable (
|
||||
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl)))
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Masc Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Fem Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
|
||||
)
|
||||
} ;
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ lin
|
||||
become_VA = reflV (mkV "tornar") ; -- esdevenir
|
||||
beer_N = regFN "cervesa" ;
|
||||
beg_V2V = mkV2V (mkV "demanar") accusative dative ;
|
||||
big_A = regADeg "gros" ;
|
||||
big_A = mkA "gros" "grossa" ;
|
||||
bike_N = regFN "bicicleta" ;
|
||||
bird_N = regMN "ocell" ;
|
||||
black_A = compADeg (mkA "negre" "negra" "negres" "negres" "negrament") ;
|
||||
@@ -92,7 +92,7 @@ lin
|
||||
girl_N = regFN "noia" ;
|
||||
glove_N = regMN "guant" ;
|
||||
gold_N = regMN "or" ;
|
||||
good_A = prefA (mkADeg (mkA "bo" "bona") (mkA "millor")) ;
|
||||
good_A = mkA (prefA "bo" "bon") (mkA "millor") ;
|
||||
go_V = (verbV (anar_4 "anar")) ;
|
||||
green_A = regADeg "verd" ;
|
||||
harbour_N = regMN "port" ;
|
||||
|
||||
@@ -94,14 +94,19 @@ oper
|
||||
-- Here are some patterns. First one that describes the worst case.
|
||||
-- gcc M2.1
|
||||
|
||||
mkAdj : (_,_,_,_,_ : Str) -> Adj = \prim,prima,prims,primes,primament ->
|
||||
mkAdjFull : (x1,_,_,_,_,x6 : Str) -> Adj = \bon,bo,prima,prims,primes,primament ->
|
||||
{s = table {
|
||||
AF Masc n => numForms prim prims ! n ;
|
||||
AF Fem n => numForms prima primes ! n ;
|
||||
ASg Masc AAttr => bon ;
|
||||
ASg Masc APred => bo ;
|
||||
ASg Fem _ => prima ;
|
||||
APl Masc => prims ;
|
||||
APl Fem => primes ;
|
||||
AA => primament
|
||||
}
|
||||
} ;
|
||||
|
||||
mkAdj : (x1,_,_,_,x5 : Str) -> Adj = \a,b,c,d,e -> mkAdjFull a a b c d e ;
|
||||
|
||||
--- Then the regular and invariant patterns.
|
||||
|
||||
adjPrim : Str -> Adj = \prim ->
|
||||
@@ -116,16 +121,15 @@ oper
|
||||
let fond = Predef.tk 1 fondo
|
||||
in adjBlau fondo (fond + "a") ;
|
||||
|
||||
adjBo : Str -> Adj = \bo ->
|
||||
mkAdj bo (bo + "na") (bo + "ns") (bo + "nes") (bo + "nament") ;
|
||||
adjBo : (bo,bon : Str) -> Adj = \bo,bon ->
|
||||
mkAdjFull bon bo (bon + "a") (bon + "s") (bon + "es") (bon + "ament") ;
|
||||
|
||||
adjFidel : Str -> Adj = \fidel ->
|
||||
let fidels : Str = case (last fidel) of {
|
||||
_ + ("s"|"ç"|"x") => fidel + "os" ; --feliç; capaç
|
||||
_ => fidel + "s"
|
||||
} ;
|
||||
in mkAdj fidel fidel fidels fidels
|
||||
(fidel + "ment") ;
|
||||
in mkAdj fidel fidel fidels fidels (fidel + "ment") ;
|
||||
|
||||
--boig, boja, bojos, boges
|
||||
--lleig, lletja, lletjos, lletges
|
||||
@@ -300,6 +304,6 @@ oper unaccent : Str -> Str = \vocal ->
|
||||
-- Determiners, traditionally called indefinite pronouns, are inflected
|
||||
-- in gender and number, like adjectives.
|
||||
|
||||
pronForms : Adj -> Gender -> Number -> Str = \tal,g,n -> tal.s ! AF g n ;
|
||||
pronForms : Adj -> Gender -> Number -> Str = \tal,g,n -> tal.s ! genNum2Aform g n ;
|
||||
|
||||
}
|
||||
|
||||
@@ -327,7 +327,11 @@ oper
|
||||
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ;
|
||||
mk2A a b = compADeg {s = \\_ => (mkAdj2Reg a b).s ; isPre = False ; lock_A = <>} ;
|
||||
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ;
|
||||
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
|
||||
prefA = overload {
|
||||
prefA : A -> A = \a -> a ** {isPre = True} ;
|
||||
prefA : Str -> Str -> A = \bo,bon ->
|
||||
compADeg (lin A {s = \\_ => (adjBo bo bon).s ; isPre = True}) ;
|
||||
} ;
|
||||
|
||||
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
|
||||
|
||||
@@ -425,7 +429,7 @@ oper
|
||||
|
||||
special_ppV ve pa = {
|
||||
s = table {
|
||||
VPart g n => (regA pa).s ! Posit ! AF g n ;
|
||||
VPart g n => (regA pa).s ! Posit ! genNum2Aform g n ;
|
||||
p => ve.s ! p
|
||||
} ;
|
||||
lock_V = <> ;
|
||||
@@ -504,7 +508,10 @@ oper
|
||||
mkADeg : A -> A -> A ;
|
||||
compADeg : A -> A ;
|
||||
regADeg : Str -> A ;
|
||||
prefA : A -> A ;
|
||||
prefA : overload {
|
||||
prefA : A -> A ; -- gran
|
||||
prefA : (bo,bon : Str) -> A -- predicative masc, attributive masc
|
||||
} ;
|
||||
prefixA = prefA ;
|
||||
|
||||
mkV = overload {
|
||||
|
||||
@@ -45,8 +45,8 @@ lin
|
||||
s1 = heading1 (nounHeading adjective_Category).s ;
|
||||
s2 = frameTable (
|
||||
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl)))
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Masc Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Fem Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
|
||||
)
|
||||
} ;
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ lin
|
||||
bad_A = prefA (mkADeg (regA "mauvais") (regA "pire")) ;
|
||||
bank_N = regGenN "banque" feminine ;
|
||||
beautiful_A =
|
||||
prefA (compADeg (mkA (pre {voyelle => "bel" ; _ => "beau" }) "belle" "beaux" "bellement")) ;
|
||||
prefA (compADeg (mkA "beau" "bel" "beaux" "belle" "bellement")) ;
|
||||
become_VA = mkVA devenir_V ;
|
||||
beer_N = regGenN "bière" feminine ;
|
||||
beg_V2V = mkV2V (regV "demander") accusative dative ;
|
||||
@@ -129,11 +129,11 @@ lin
|
||||
music_N = regGenN "musique" feminine ;
|
||||
narrow_A = regA "étroit" ;
|
||||
new_A =
|
||||
prefA (compADeg (mkA (pre {voyelle => "nouvel" ; _ => "nouveau" }) "nouvelle" "nouveaux" "nouvellement")) ;
|
||||
prefA (compADeg (mkA "nouveau" "nouvel" "nouveaux" "nouvelle" "nouvellement")) ;
|
||||
newspaper_N = regGenN "journal" masculine ;
|
||||
oil_N = regGenN "huile" feminine ;
|
||||
old_A =
|
||||
prefA (compADeg (mkA (pre {voyelle => "vieil" ; _ => "vieux" }) "vieille" "vieux" "vieillement")) ;
|
||||
prefA (compADeg (mkA "vieux" "vieil" "vieux" "vieille" "vieillement")) ;
|
||||
open_V2 = ouvrir_V2 ;
|
||||
paint_V2A = mkV2A (v2V peindre_V2) accusative (mkPrep "en") ;
|
||||
paper_N = regGenN "papier" masculine ;
|
||||
|
||||
@@ -72,14 +72,19 @@ oper
|
||||
-- Adjectives are conveniently seen as gender-dependent nouns.
|
||||
-- Here are some patterns. First one that describes the worst case.
|
||||
|
||||
mkAdj : (_,_,_,_ : Str) -> Adj = \vieux,vieuxs,vieille,vieillement ->
|
||||
{s = table {
|
||||
AF Masc n => numForms vieux vieuxs ! n ;
|
||||
AF Fem n => nomReg vieille ! n ;
|
||||
mkAdj' : (_,_,_,_,_ : Str) -> Adj ;
|
||||
mkAdj' vieux vieil vieuxs vieille vieillement = {
|
||||
s = table {
|
||||
ASg Masc _ => pre {#voyelle => vieil ; "h" => vieil ; _ => vieux} ;
|
||||
ASg Fem _ => vieille ;
|
||||
APl g => genForms vieuxs (vieille + "s") ! g ;
|
||||
AA => vieillement
|
||||
}
|
||||
} ;
|
||||
|
||||
mkAdj : (_,_,_,_ : Str) -> Adj ;
|
||||
mkAdj bleu bleus bleue bleuement = mkAdj' bleu bleu bleus bleue bleuement ;
|
||||
|
||||
-- Then the regular and invariant patterns.
|
||||
|
||||
adjReg : Str -> Gender => Number => Str = \bu -> table {
|
||||
|
||||
@@ -160,9 +160,12 @@ oper
|
||||
|
||||
mkA : (banal,banale,banaux : Str) -> A ;
|
||||
|
||||
-- This is the worst-case paradigm for the positive forms.
|
||||
-- This is the worst-case paradigm for the positive forms, except for "vieux/vieil".
|
||||
|
||||
mkA : (banal,banale,banaux,banalement : Str) -> A ; -- worst-case adjective
|
||||
mkA : (banal,banale,banaux,banalement : Str) -> A ; -- almost worst-case adjective
|
||||
|
||||
-- This is the worst-case paradigm for the positive forms, used for "vieux/vieil".
|
||||
mkA : (vieux,vieil,vieille,vieuxs,vieuxment : Str) -> A ; -- worst-case adjetive
|
||||
|
||||
-- If comparison forms are irregular (i.e. not formed by "plus", e.g.
|
||||
-- "bon-meilleur"), the positive and comparative can be given as separate
|
||||
@@ -387,7 +390,8 @@ oper
|
||||
mkPN : N -> PN = \x -> lin PN {s = x.s ! Sg ; g = x.g} ;
|
||||
} ;
|
||||
|
||||
mk4A a b c d = compADeg {s = \\_ => (mkAdj a c b d).s ; isPre = False ; lock_A = <>} ;
|
||||
mk4A a b c d = mk5A a a b c d ;
|
||||
mk5A a b c d e = compADeg {s = \\_ => (mkAdj' a b c d e).s ; isPre = False ; lock_A = <>} ;
|
||||
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ;
|
||||
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
|
||||
|
||||
@@ -398,6 +402,7 @@ oper
|
||||
mkA : (sec,seche : Str) -> A = \sec,seche -> mk4A sec seche (sec + "s") (seche + "ment") ;
|
||||
mkA : (banal,banale,banaux : Str) -> A = \sec,seche,secs -> mk4A sec seche secs (seche + "ment") ;
|
||||
mkA : (banal,banale,banaux,banalement : Str) -> A = mk4A ;
|
||||
mkA : (vieux,vieil,vieille,vieuxs,vieuxment : Str) -> A = mk5A ;
|
||||
mkA : A -> A -> A = mkADeg
|
||||
};
|
||||
|
||||
@@ -471,6 +476,7 @@ oper
|
||||
|
||||
regA : Str -> A ;
|
||||
mk4A : (banal,banale,banaux,banalement : Str) -> A ;
|
||||
mk5A : (vieux,vieil,vieille,vieuxs,vieuxment : Str) -> A ; -- worst-case adjetive
|
||||
|
||||
prefA : A -> A ;
|
||||
|
||||
|
||||
@@ -45,8 +45,8 @@ lin
|
||||
s1 = heading1 (nounHeading adjective_Category).s ;
|
||||
s2 = frameTable (
|
||||
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl)))
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Masc Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Fem Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
|
||||
)
|
||||
} ;
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@ oper
|
||||
|
||||
mkPredet = overload {
|
||||
mkPredet : A -> Predet = \adj -> lin Predet {
|
||||
s = \\a,c => prepCase c ++ adj.s ! Posit ! AF a.g a.n ;
|
||||
s = \\a,c => prepCase c ++ adj.s ! Posit ! genNum2Aform a.g a.n ;
|
||||
c = Nom ;
|
||||
a = PNoAg
|
||||
} ;
|
||||
|
||||
@@ -78,8 +78,10 @@ oper
|
||||
|
||||
mkAdj : (_,_,_,_,_ : Str) -> Adj = \solo,sola,soli,sole,solamente ->
|
||||
{s = table {
|
||||
AF Masc n => numForms solo soli ! n ;
|
||||
AF Fem n => numForms sola sole ! n ;
|
||||
ASg Masc _ => solo ;
|
||||
ASg Fem _ => sola ;
|
||||
APl Masc => soli ;
|
||||
APl Fem => sole ;
|
||||
AA => solamente
|
||||
}
|
||||
} ;
|
||||
@@ -189,6 +191,6 @@ oper
|
||||
-- Determiners, traditionally called indefinite pronouns, are inflected
|
||||
-- in gender and number, like adjectives.
|
||||
|
||||
pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ;
|
||||
pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! genNum2Aform g n ;
|
||||
|
||||
}
|
||||
|
||||
@@ -45,8 +45,8 @@ lin
|
||||
s1 = heading1 (nounHeading adjective_Category).s ;
|
||||
s2 = frameTable (
|
||||
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl)))
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Masc Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (genNum2Aform Fem Sg)) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
|
||||
)
|
||||
} ;
|
||||
|
||||
|
||||
@@ -127,7 +127,7 @@ concrete ExtendPor of Extend =
|
||||
} ;
|
||||
|
||||
ICompAP ap = {
|
||||
s =\\a => "o quão" ++ ap.s ! AF a.g a.n ;
|
||||
s =\\a => "o quão" ++ ap.s ! (genNum2Aform a.g a.n) ;
|
||||
cop = serCopula
|
||||
} ;
|
||||
|
||||
@@ -165,12 +165,12 @@ concrete ExtendPor of Extend =
|
||||
ComplBareVS = ComplVS ;
|
||||
|
||||
AdjAsCN ap = {
|
||||
s =\\n => ap.s ! AF Masc n ;
|
||||
s =\\n => ap.s ! (genNum2Aform Masc n) ;
|
||||
g = Masc
|
||||
} ;
|
||||
|
||||
AdjAsNP ap = heavyNP {
|
||||
s = \\_c => ap.s ! AF Masc Sg ;
|
||||
s = \\_c => ap.s ! ASg Masc APred ;
|
||||
a = Ag Masc Sg P3
|
||||
} ;
|
||||
|
||||
@@ -200,10 +200,8 @@ concrete ExtendPor of Extend =
|
||||
} ;
|
||||
|
||||
CompoundAP noun adj = {
|
||||
s = \\af => case af of {
|
||||
AF g n => adj.s ! Posit ! AF noun.g n ++ "de" ++ noun.s ! n ;
|
||||
-- do I need do(s)/da(s)?
|
||||
_ => adj.s ! Posit ! AF noun.g Sg ++ "de" ++ noun.s ! Sg
|
||||
s = \\af => case (aform2aagr af) of {
|
||||
{n = n} => adj.s ! Posit ! (genNum2Aform noun.g n) ++ "de" ++ noun.s ! n
|
||||
} ;
|
||||
isPre = adj.isPre
|
||||
} ;
|
||||
|
||||
@@ -118,8 +118,8 @@ oper
|
||||
mkAdj : (_,_,_,_,_ : Str) -> Adj =
|
||||
\burro,burra,burros,burras,burramente ->
|
||||
{s = table {
|
||||
AF Masc n => numForms burro burros ! n ;
|
||||
AF Fem n => numForms burra burras ! n ;
|
||||
ASg g _ => genForms burro burra ! g ;
|
||||
APl g => genForms burros burras ! g ;
|
||||
AA => burramente
|
||||
}
|
||||
} ;
|
||||
@@ -129,7 +129,8 @@ oper
|
||||
adj = mkAdjReg aj
|
||||
in {
|
||||
s = table {
|
||||
AF g n => adj.s ! AF g n ;
|
||||
ASg g _ => adj.s ! ASg g APred ;
|
||||
APl g => adj.s ! APl g ;
|
||||
AA => av
|
||||
}
|
||||
} ;
|
||||
@@ -245,11 +246,11 @@ oper
|
||||
-- inflected in gender and number, like adjectives.
|
||||
|
||||
pronForms : Adj -> Gender -> Number -> Str =
|
||||
\tale,g,n -> tale.s ! AF g n ;
|
||||
\tale,g,n -> tale.s ! (genNum2Aform g n) ;
|
||||
|
||||
mkOrdinal : A -> Ord = \adj ->
|
||||
lin Ord {
|
||||
s = \\ag => adj.s ! Posit ! AF ag.g ag.n ;
|
||||
s = \\ag => adj.s ! Posit ! (genNum2Aform ag.g ag.n) ;
|
||||
} ;
|
||||
|
||||
mkQuantifier : (esse,essa,esses,essas : Str) -> Quant = \esse,essa,esses,essas->
|
||||
|
||||
@@ -366,7 +366,7 @@ oper
|
||||
-- deviant past participle, e.g. abrir - aberto
|
||||
special_ppV ve pa = {
|
||||
s = table {
|
||||
VPart g n => (adjPreto pa).s ! AF g n ;
|
||||
VPart g n => (adjPreto pa).s ! (genNum2Aform g n) ;
|
||||
p => ve.s ! p
|
||||
} ;
|
||||
lock_V = <> ;
|
||||
|
||||
@@ -20,10 +20,7 @@ incomplete concrete AdjectiveRomance of Adjective =
|
||||
isPre = a.isPre
|
||||
} ;
|
||||
AdjOrd ord = {
|
||||
s = \\af => ord.s ! (case af of {
|
||||
AF g n => aagr g n ;
|
||||
_ => aagr Masc Sg ----
|
||||
}) ;
|
||||
s = \\af => ord.s ! aform2aagr af ; ----
|
||||
isPre = False ----
|
||||
} ;
|
||||
|
||||
|
||||
@@ -134,8 +134,8 @@ incomplete concrete CatRomance of Cat = CommonX - [SC,Pol]
|
||||
NP = \np -> (np.s ! Nom).comp ;
|
||||
Conj = \c -> c.s2 ;
|
||||
|
||||
A = \a -> a.s ! Posit ! AF Masc Sg ;
|
||||
A2 = \a -> a.s ! Posit ! AF Masc Sg ++ a.c2.s ;
|
||||
A = \a -> a.s ! Posit ! ASg Masc APred ;
|
||||
A2 = \a -> a.s ! Posit ! ASg Masc APred ++ a.c2.s ;
|
||||
|
||||
N = \n -> n.s ! Sg ;
|
||||
N2 = \n -> n.s ! Sg ++ n.c2.s ;
|
||||
|
||||
@@ -30,7 +30,9 @@ param
|
||||
-- Comparative adjectives are moreover inflected in degree
|
||||
-- (which in Romance is usually syntactic, though).
|
||||
|
||||
AForm = AF Gender Number | AA ;
|
||||
AForm = ASg Gender APosition | APl Gender | AA ;
|
||||
|
||||
APosition = AAttr | APred ;
|
||||
|
||||
-- Gender is not morphologically determined for first and second person pronouns.
|
||||
|
||||
@@ -49,18 +51,44 @@ oper
|
||||
} ;
|
||||
|
||||
|
||||
-- genderpos2gender : GenderPosition -> {p1:Gender,p2:Number} = \gp -> case gp of {
|
||||
-- MascSg _ => <Masc,Sg> ;
|
||||
-- MascPl => <Masc,Pl> ;
|
||||
-- FemSg => <Fem,Sg> ;
|
||||
-- FemPl => <Fem,Pl>
|
||||
-- } ;
|
||||
|
||||
|
||||
aform2gender : AForm -> Gender = \a -> case a of {
|
||||
AF g _ => g ;
|
||||
ASg g _ => g ;
|
||||
APl g => g ;
|
||||
_ => Masc -- "le plus lentement"
|
||||
} ;
|
||||
aform2number : AForm -> Number = \a -> case a of {
|
||||
AF _ n => n ;
|
||||
APl _ => Pl ;
|
||||
_ => Sg -- "le plus lentement"
|
||||
} ;
|
||||
aform2aagr : AForm -> AAgr = \a -> case a of {
|
||||
AF g n => aagr g n ;
|
||||
ASg g _ => aagr g Sg ;
|
||||
APl g => aagr g Pl ;
|
||||
_ => aagr Masc Sg -- "le plus lentement"
|
||||
} ;
|
||||
aagr2aform : AAgr -> AForm = \gn -> case gn of {
|
||||
{g=g ; n=Sg} => ASg g APred ;
|
||||
{g=g ; n=Pl} => APl g
|
||||
} ;
|
||||
|
||||
genNum2Aform : Gender -> Number -> AForm ;
|
||||
genNum2Aform g n = case n of {
|
||||
Sg => ASg g APred ;
|
||||
Pl => APl g
|
||||
} ;
|
||||
|
||||
genNumPos2Aform : Gender -> Number -> Bool -> AForm ;
|
||||
genNumPos2Aform g n isPre = case n of {
|
||||
Sg => ASg g (if_then_else APosition isPre AAttr APred) ;
|
||||
Pl => APl g
|
||||
} ;
|
||||
|
||||
conjGender : Gender -> Gender -> Gender = \m,n ->
|
||||
case m of {
|
||||
@@ -236,7 +264,7 @@ oper
|
||||
|
||||
oper
|
||||
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 ! aagr2aform ag } ;
|
||||
|
||||
-- This is used in Spanish and Italian to bind clitics with preceding verb.
|
||||
|
||||
|
||||
@@ -101,9 +101,9 @@ incomplete concrete NounRomance of Noun =
|
||||
|
||||
AdNum adn num = {s = \\a => adn.s ++ num.s ! a ; isNum = num.isNum ; n = num.n} ;
|
||||
|
||||
OrdSuperl adj = {s = \\a => adj.s ! Superl ! AF a.g a.n} ;
|
||||
OrdSuperl adj = {s = \\a => adj.s ! Superl ! genNum2Aform a.g a.n} ;
|
||||
|
||||
OrdNumeralSuperl num adj = {s = \\a => num.s ! NOrd a.g a.n ++ adj.s ! Superl ! AF a.g a.n} ; -- la terza più grande
|
||||
OrdNumeralSuperl num adj = {s = \\a => num.s ! NOrd a.g a.n ++ adj.s ! Superl ! genNum2Aform a.g a.n} ; -- la terza più grande
|
||||
---- could be discontinuous: la terza città più grande
|
||||
|
||||
DefArt = {
|
||||
@@ -153,7 +153,7 @@ incomplete concrete NounRomance of Noun =
|
||||
let
|
||||
g = cn.g
|
||||
in {
|
||||
s = \\n => preOrPost ap.isPre (ap.s ! (AF g n)) (cn.s ! n) ;
|
||||
s = \\n => preOrPost ap.isPre (ap.s ! genNumPos2Aform g n ap.isPre) (cn.s ! n) ;
|
||||
g = g ;
|
||||
} ;
|
||||
|
||||
@@ -190,7 +190,7 @@ incomplete concrete NounRomance of Noun =
|
||||
a = np.a ** {n = det.n} } ;
|
||||
|
||||
AdjDAP det ap = {
|
||||
s = \\g => det.s ! g ++ ap.s ! AF g det.n ;
|
||||
s = \\g => det.s ! g ++ ap.s ! genNum2Aform g det.n ;
|
||||
n = det.n ;
|
||||
} ;
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@ incomplete concrete PhraseRomance of Phrase =
|
||||
UttVP vp = {s = infVP vp (agrP3 Fem Sg)} ; --- Agr
|
||||
UttAdv adv = adv ;
|
||||
UttCN n = {s = n.s ! Sg} ;
|
||||
UttAP ap = {s = ap.s ! AF Masc Sg} ;
|
||||
UttAP ap = {s = ap.s ! genNum2Aform Masc Sg} ;
|
||||
UttCard n = {s = n.s ! Masc} ;
|
||||
UttInterj i = i ;
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@ incomplete concrete VerbRomance of Verb =
|
||||
ComplVS v s = insertExtrapos (\\b => conjThat ++ s.s ! (v.m ! b)) (predV v) ;
|
||||
ComplVQ v q = insertExtrapos (\\_ => q.s ! QIndir) (predV v) ;
|
||||
ComplVA v ap =
|
||||
insertComplement (\\a => let agr = complAgr a in ap.s ! AF agr.g agr.n) (predV v) ;
|
||||
insertComplement (\\a => let agr = complAgr a in ap.s ! genNum2Aform agr.g agr.n) (predV v) ;
|
||||
|
||||
SlashV2a v = mkVPSlash v.c2 (predV v) ;
|
||||
|
||||
@@ -40,13 +40,13 @@ incomplete concrete VerbRomance of Verb =
|
||||
SlashV2A v ap =
|
||||
|
||||
let af = case v.c3.isDir of {
|
||||
True => AF np.a.g np.a.n ; -- ... bleues
|
||||
_ => AF Masc Sg -- il les peint en bleu
|
||||
True => genNum2Aform np.a.g np.a.n ; -- ... bleues
|
||||
_ => genNum2Aform Masc Sg -- il les peint en bleu
|
||||
}
|
||||
-}
|
||||
|
||||
SlashV2A v ap =
|
||||
let af = AF Masc Sg
|
||||
let af = genNum2Aform Masc Sg
|
||||
in
|
||||
mkVPSlash v.c2
|
||||
(insertComplement
|
||||
@@ -91,7 +91,7 @@ incomplete concrete VerbRomance of Verb =
|
||||
|
||||
UseCopula = predV copula ;
|
||||
|
||||
CompAP ap = {s = \\ag => let agr = complAgr ag in ap.s ! AF agr.g agr.n ; cop = serCopula} ;
|
||||
CompAP ap = {s = \\ag => let agr = complAgr ag in ap.s ! genNum2Aform agr.g agr.n ; cop = serCopula} ;
|
||||
CompCN cn = { s = \\ag =>
|
||||
let agr = complAgr ag in
|
||||
artIndef False cn.g agr.n Nom ++ cn.s ! agr.n ;
|
||||
@@ -116,4 +116,3 @@ incomplete concrete VerbRomance of Verb =
|
||||
c2 = {s = prep.s ; c = prep.c ; isDir = False}
|
||||
} ;
|
||||
}
|
||||
|
||||
|
||||
@@ -45,8 +45,8 @@ lin
|
||||
s1 = heading1 (nounHeading adjective_Category).s ;
|
||||
s2 = frameTable (
|
||||
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter)) ++
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! (AF Masc Sg)) ++ td (adj.s ! Posit ! (AF Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! (AF Fem Sg)) ++ td (adj.s ! Posit ! (AF Fem Pl)))
|
||||
tr (th (heading masculine_Parameter) ++ td (adj.s ! Posit ! genNum2Aform Masc Sg) ++ td (adj.s ! Posit ! (genNum2Aform Masc Pl))) ++
|
||||
tr (th (heading feminine_Parameter) ++ td (adj.s ! Posit ! genNum2Aform Fem Sg) ++ td (adj.s ! Posit ! (genNum2Aform Fem Pl)))
|
||||
)
|
||||
} ;
|
||||
|
||||
|
||||
@@ -57,10 +57,14 @@ oper
|
||||
-- Adjectives are conveniently seen as gender-dependent nouns.
|
||||
-- Here are some patterns. First one that describes the worst case.
|
||||
|
||||
mkAdj : (_,_,_,_,_ : Str) -> Adj = \solo,sola,soli,sole,solamente ->
|
||||
mkAdj : (x1,_,_,_,_,_,x7 : Str) -> Adj = \buen,solo,gran,sola,solos,solas,solamente ->
|
||||
{s = table {
|
||||
AF Masc n => numForms solo soli ! n ;
|
||||
AF Fem n => numForms sola sole ! n ;
|
||||
ASg Masc AAttr => buen ;
|
||||
ASg Masc APred => solo ;
|
||||
ASg Fem AAttr => gran ;
|
||||
ASg Fem APred => sola ;
|
||||
APl Masc => solos ;
|
||||
APl Fem => solas ;
|
||||
AA => solamente
|
||||
}
|
||||
} ;
|
||||
@@ -71,26 +75,36 @@ oper
|
||||
let
|
||||
sol = Predef.tk 1 solo
|
||||
in
|
||||
mkAdj solo (sol + "a") (sol + "os") (sol + "as") (sol + "amente") ;
|
||||
mkAdj solo solo (sol + "a") (sol + "a")
|
||||
(sol + "os") (sol + "as") (sol + "amente") ;
|
||||
|
||||
-- masculine and feminine are identical:
|
||||
-- adjectives ending with -e, -a and many but not all that end in a consonant
|
||||
adjUtil : Str -> Str -> Adj = \util,utiles ->
|
||||
mkAdj util util utiles utiles (util + "mente") ;
|
||||
mkAdj util util util util
|
||||
utiles utiles (util + "mente") ;
|
||||
|
||||
-- adjectives that end in consonant but have different masc and fem forms
|
||||
-- español, hablador ...
|
||||
adjEspanol : Str -> Str -> Adj = \espanol,espanola ->
|
||||
mkAdj espanol espanola (espanol + "es") (espanol + "as") (espanola + "mente") ;
|
||||
mkAdj espanol espanol espanola espanola
|
||||
(espanol + "es") (espanol + "as") (espanola + "mente") ;
|
||||
|
||||
adjBlu : Str -> Adj = \blu ->
|
||||
mkAdj blu blu blu blu blu ; ---
|
||||
adjBueno : Str -> Adj = \bueno ->
|
||||
let buen = init bueno in
|
||||
mkAdj buen bueno (buen + "a") (buen + "a")
|
||||
(buen + "os") (buen + "as") (buen + "amente") ;
|
||||
|
||||
adjGrande : Str -> Str -> Adj = \gran,grande ->
|
||||
mkAdj gran grande gran grande
|
||||
(grande + "s") (grande + "s") (grande + "mente") ;
|
||||
|
||||
-- francés francesa franceses francesas
|
||||
adjEs : Str -> Adj = \francEs ->
|
||||
let franc : Str = Predef.tk 2 francEs ;
|
||||
frances : Str = franc + "es" ;
|
||||
in mkAdj francEs (frances + "a") (frances + "es") (frances + "as") (frances + "amente") ;
|
||||
in mkAdj francEs francEs (frances + "a") (frances + "a")
|
||||
(frances + "es") (frances + "as") (frances + "amente") ;
|
||||
|
||||
|
||||
-- alemán alemana alemanes alemanas
|
||||
@@ -106,11 +120,13 @@ oper
|
||||
"ú" => "u"
|
||||
} ;
|
||||
alemVn : Str = alem + V + "n" ;
|
||||
in mkAdj alemAn (alemVn + "a") (alemVn + "es")
|
||||
(alemVn + "as") (alemVn + "amente") ;
|
||||
in mkAdj alemAn alemAn (alemVn + "a") (alemVn + "a")
|
||||
(alemVn + "es") (alemVn + "as") (alemVn + "amente") ;
|
||||
|
||||
mkAdjReg : Str -> Adj = \solo ->
|
||||
case solo of {
|
||||
"grande" => adjGrande "gran" "grande" ;
|
||||
"bueno" => adjBueno solo ;
|
||||
_ + "o" => adjSolo solo ;
|
||||
_ + ("e" | "a") => adjUtil solo (solo + "s") ;
|
||||
_ + "és" => adjEs solo ;
|
||||
@@ -153,11 +169,11 @@ oper
|
||||
-- Determiners, traditionally called indefinite pronouns, are inflected
|
||||
-- in gender and number, like adjectives.
|
||||
|
||||
pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ;
|
||||
pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! genNum2Aform g n ;
|
||||
|
||||
mkOrdinal : A -> Ord = \adj->
|
||||
lin Ord {
|
||||
s = \\ag => adj.s ! Posit ! AF ag.g ag.n ;
|
||||
s = \\ag => adj.s ! Posit ! genNum2Aform ag.g ag.n ;
|
||||
} ;
|
||||
|
||||
mkQuantifier : (ese,esa,esos,esas : Str) -> Quant = \ese,esa,esos,esas->
|
||||
|
||||
@@ -156,7 +156,9 @@ oper
|
||||
-- One-place adjectives compared with "mas" need five forms in the worst
|
||||
-- case (masc and fem singular, masc plural, adverbial).
|
||||
|
||||
mkA : (solo,sola,solos,solas,solamente : Str) -> A ; -- worst-case
|
||||
mkA : (solo,sola,solos,solas,solamente : Str) -> A ; -- almost worst-case, except for buen/bueno gran/grande
|
||||
|
||||
mkA : (gran,grande,gran,grande,grandes,grandes,solamente : Str) -> A ; -- worst-case
|
||||
|
||||
-- In the worst case, two separate adjectives are given:
|
||||
-- the positive ("bueno"), and the comparative ("mejor").
|
||||
@@ -354,11 +356,12 @@ oper
|
||||
|
||||
makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False ; isPol = False ; isNeg = False} ** {lock_NP = <>} ;
|
||||
|
||||
mk5A a b c d e =
|
||||
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ;
|
||||
mk7A a b c d e f g =
|
||||
compADeg {s = \\_ => (mkAdj a b c d e f g).s ; isPre = False ; lock_A = <>} ;
|
||||
|
||||
mk2A a b =
|
||||
compADeg {s = \\_ => (adjEspanol a b).s ; isPre = False ; lock_A = <>} ;
|
||||
mk5A a b c d e = mk7A a a b b c d e ;
|
||||
|
||||
mk2A a b = compADeg {s = \\_ => (adjEspanol a b).s ; isPre = False ; lock_A = <>} ;
|
||||
|
||||
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ;
|
||||
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
|
||||
@@ -407,7 +410,7 @@ oper
|
||||
|
||||
special_ppV ve pa = {
|
||||
s = table {
|
||||
VPart g n => (adjSolo pa).s ! AF g n ;
|
||||
VPart g n => (adjSolo pa).s ! genNum2Aform g n ;
|
||||
p => ve.s ! p
|
||||
} ;
|
||||
lock_V = <> ;
|
||||
@@ -508,11 +511,13 @@ oper
|
||||
mkA : (util : Str) -> A = regA ;
|
||||
mkA : (espanol,espanola : Str) -> A = mk2A ;
|
||||
mkA : (solo,sola,solos,solas,solamente : Str) -> A = mk5A ;
|
||||
mkA : (_,_,_,_,_,_,_ : Str) -> A = mk7A ;
|
||||
mkA : (bueno : A) -> (mejor : A) -> A = mkADeg ;
|
||||
mkA : (blanco : A) -> (hueso : Str) -> A = \blanco,hueso -> blanco **
|
||||
{ s = \\x,y => blanco.s ! x ! y ++ hueso } ;
|
||||
} ;
|
||||
|
||||
mk7A : (_,_,_,_,_,_,_ : Str) -> A ;
|
||||
mk5A : (solo,sola,solos,solas,solamente : Str) -> A ;
|
||||
mk2A : (espanol,espanola : Str) -> A ;
|
||||
regA : Str -> A ;
|
||||
|
||||
@@ -89,7 +89,8 @@ lin
|
||||
|
||||
PastPartAP v = {
|
||||
s = table {
|
||||
AF g n => v.s ! VPart g n ;
|
||||
ASg g _ => v.s ! VPart g Sg ;
|
||||
APl g _ => v.s ! VPart g Pl ;
|
||||
_ => v.s ! VPart Masc Sg ---- the adverb form
|
||||
} ;
|
||||
isPre = True
|
||||
|
||||
Reference in New Issue
Block a user