mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-23 11:42:49 -06:00
catalan_smart_paradigms
MorphoCat and ParadigmsCat: smart paradigms for adjectives. ExtraCat: added costruction for negative imperative.
This commit is contained in:
@@ -1,13 +1,16 @@
|
|||||||
concrete ExtraCat of ExtraCatAbs = ExtraRomanceCat **
|
concrete ExtraCat of ExtraCatAbs = ExtraRomanceCat **
|
||||||
open CommonRomance, ParadigmsCat, PhonoCat, MorphoCat, ParamX, ResCat in {
|
open CommonRomance, ParadigmsCat, PhonoCat, MorphoCat, ParamX, ResCat,
|
||||||
|
Prelude in {
|
||||||
|
|
||||||
|
flags coding = utf8 ;
|
||||||
lin
|
lin
|
||||||
i8fem_Pron = mkPronoun
|
i8fem_Pron = mkPronoun
|
||||||
"jo" "em" "em" "mi" ["el meu"] ["la meva"] ["els meus"] ["les meves"]
|
"jo" "em" "em" "mi"
|
||||||
Fem Sg P1 ;
|
["el meu"] ["la meva"] ["els meus"] ["les meves"]
|
||||||
|
Fem Sg P1 ;
|
||||||
|
|
||||||
these8fem_NP = makeNP "aquestes" Fem Pl ;
|
these8fem_NP = makeNP "aquestes" Fem Pl ;
|
||||||
they8fem_Pron = mkPronoun
|
they8fem_Pron = mkPronoun
|
||||||
"elles" "les" "les" "elles"
|
"elles" "les" "les" "elles"
|
||||||
"llur" "llur" "llurs" "llurs"
|
"llur" "llur" "llurs" "llurs"
|
||||||
Fem Pl P3 ;
|
Fem Pl P3 ;
|
||||||
@@ -15,30 +18,36 @@ lin
|
|||||||
those8fem_NP = makeNP ["aquestes"] Fem Pl ;
|
those8fem_NP = makeNP ["aquestes"] Fem Pl ;
|
||||||
|
|
||||||
we8fem_Pron =
|
we8fem_Pron =
|
||||||
mkPronoun
|
mkPronoun
|
||||||
"nosaltres" "ens" "ens" "nosaltres"
|
"nosaltres" "ens" "ens" "nosaltres"
|
||||||
["el nostre"] ["la nostra"] ["els nostres"] ["les nostres"]
|
["el nostre"] ["la nostra"] ["els nostres"] ["les nostres"]
|
||||||
Fem Pl P1 ;
|
Fem Pl P1 ;
|
||||||
|
|
||||||
whoPl8fem_IP = {s = \\c => prepCase c ++ "qui" ; a = aagr Fem Pl} ;
|
whoPl8fem_IP = {s = \\c => prepCase c ++ "qui" ; a = aagr Fem Pl} ;
|
||||||
whoSg8fem_IP = {s = \\c => prepCase c ++ "qui" ; a = aagr Fem Sg} ;
|
whoSg8fem_IP = {s = \\c => prepCase c ++ "qui" ; a = aagr Fem Sg} ;
|
||||||
|
|
||||||
youSg8fem_Pron = mkPronoun
|
youSg8fem_Pron = mkPronoun
|
||||||
"tu" "et" "et" "tu"
|
"tu" "et" "et" "tu"
|
||||||
["el teu"] ["la teva"] ["els teus"] ["les teves"]
|
["el teu"] ["la teva"] ["els teus"] ["les teves"]
|
||||||
Fem Sg P2 ;
|
Fem Sg P2 ;
|
||||||
youPl8fem_Pron = mkPronoun
|
youPl8fem_Pron = mkPronoun
|
||||||
"vosaltres" "us" "us" "vosaltres"
|
"vosaltres" "us" "us" "vosaltres"
|
||||||
["el vostre"] ["la vostra"] ["els vostres"] ["les vostres"]
|
["el vostre"] ["la vostra"] ["els vostres"] ["les vostres"]
|
||||||
Fem Pl P2 ;
|
Fem Pl P2 ;
|
||||||
youPol8fem_Pron = mkPronoun
|
youPol8fem_Pron = mkPronoun
|
||||||
"vosté" "la" "li" "vosté"
|
"vostè" "la" "li" "vostè"
|
||||||
["el seu"] ["la seva"] ["els seus"] ["les seves"]
|
["el seu"] ["la seva"] ["els seus"] ["les seves"]
|
||||||
Fem Sg P3 ;
|
Fem Sg P3 ;
|
||||||
|
|
||||||
|
--IL 2012-10-12
|
||||||
|
ImpNeg np vp = lin Utt{
|
||||||
|
s = (mkClause (np.s ! Nom).comp np.hasClit False np.a vp).s
|
||||||
|
! DInv ! RPres ! Simul ! RNeg False ! Conjunct
|
||||||
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
vostePl : ParadigmsCat.Gender -> Pron = \g -> lin Pron (mkPronoun
|
vostePl : ParadigmsCat.Gender -> Pron = \g -> lin Pron (mkPronoun
|
||||||
"vostés" "els" "li" "vostés"
|
"vostès" "els" "li" "vostès"
|
||||||
"llur" "llur" "llurs" "llurs"
|
"llur" "llur" "llurs" "llurs"
|
||||||
g Pl P3) ;
|
g Pl P3) ;
|
||||||
lin
|
lin
|
||||||
|
|||||||
@@ -25,4 +25,5 @@ fun
|
|||||||
youPolPl_Pron : Pron ; -- vostés
|
youPolPl_Pron : Pron ; -- vostés
|
||||||
youPolPl8fem_Pron : Pron ;
|
youPolPl8fem_Pron : Pron ;
|
||||||
|
|
||||||
|
ImpNeg : NP -> VP -> Utt ; --IL 2012-10-12
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,31 +28,31 @@ oper
|
|||||||
|
|
||||||
|
|
||||||
nomCasa : Str -> Str -> Number => Str = \es,casa ->
|
nomCasa : Str -> Str -> Number => Str = \es,casa ->
|
||||||
numForms casa (init casa + es) ;
|
numForms casa (init casa + es) ;
|
||||||
|
|
||||||
nomFre : Str -> Number => Str = \fre ->
|
nomFre : Str -> Number => Str = \fre ->
|
||||||
numForms fre (fre + "ns") ;
|
numForms fre (fre + "ns") ;
|
||||||
|
|
||||||
nomCas : Str -> Number => Str = \cas ->
|
nomCas : Str -> Number => Str = \cas ->
|
||||||
numForms cas (cas + "os") ;
|
numForms cas (cas + "os") ;
|
||||||
|
|
||||||
nomTest : Str -> Number => Str = \test ->
|
nomTest : Str -> Number => Str = \test ->
|
||||||
numForms test (variants {test + "s"; test + "os"}) ;
|
numForms test (variants {test + "s"; test + "os"}) ;
|
||||||
|
|
||||||
nomFaig : Str -> Number => Str = \faig ->
|
nomFaig : Str -> Number => Str = \faig ->
|
||||||
let
|
let
|
||||||
fa = Predef.tk 2 faig
|
fa = Predef.tk 2 faig
|
||||||
in
|
in
|
||||||
numForms faig (variants {fa + "jos" ; faig + "s"}) ;
|
numForms faig (variants {fa + "jos" ; faig + "s"}) ;
|
||||||
|
|
||||||
nomDesig : Str -> Number => Str = \desig ->
|
nomDesig : Str -> Number => Str = \desig ->
|
||||||
let
|
let
|
||||||
desi = Predef.tk 1 desig
|
desi = Predef.tk 1 desig
|
||||||
in
|
in
|
||||||
numForms desig (variants {desi + "tjos" ; desi + "gs"}) ;
|
numForms desig (variants {desi + "tjos" ; desi + "gs"}) ;
|
||||||
|
|
||||||
nomTemps : Str -> Number => Str = \temps ->
|
nomTemps : Str -> Number => Str = \temps ->
|
||||||
numForms temps temps ;
|
numForms temps temps ;
|
||||||
|
|
||||||
-- Common nouns are inflected in number and have an inherent gender.
|
-- Common nouns are inflected in number and have an inherent gender.
|
||||||
|
|
||||||
@@ -63,18 +63,18 @@ oper
|
|||||||
mkNoun (numForms vi vins) ;
|
mkNoun (numForms vi vins) ;
|
||||||
|
|
||||||
mkNomReg : Str -> Noun = \noi ->
|
mkNomReg : Str -> Noun = \noi ->
|
||||||
let
|
let
|
||||||
mkNounMas : (Str -> Number => Str) -> Noun = \rule -> mkNoun (rule noi) Masc
|
mkNounMas : (Str -> Number => Str) -> Noun = \rule -> mkNoun (rule noi) Masc
|
||||||
in
|
in
|
||||||
case last noi of {
|
case last noi of {
|
||||||
"a" => mkNoun (nomCasa "es" noi) Fem ;
|
"a" => mkNoun (nomCasa "es" noi) Fem ;
|
||||||
"s"|"x"|"ç" => mkNounMas nomCas ;
|
"s"|"x"|"ç" => mkNounMas nomCas ;
|
||||||
"i" => mkNounMas nomFre ;
|
"i" => mkNounMas nomFre ;
|
||||||
"í" => mkNounMas (nomCasa "ins") ;
|
"í" => mkNounMas (nomCasa "ins") ;
|
||||||
"à" => mkNounMas (nomCasa "ans") ;
|
"à" => mkNounMas (nomCasa "ans") ;
|
||||||
"ó" => mkNounMas (nomCasa "ons") ;
|
"ó" => mkNounMas (nomCasa "ons") ;
|
||||||
"g" => mkNounMas nomFaig ;
|
"g" => mkNounMas nomFaig ;
|
||||||
_ => mkNounMas nomCep
|
_ => mkNounMas nomCep
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
@@ -97,33 +97,155 @@ oper
|
|||||||
mkAdj prim (prim + "a") (prim + "s") (prim + "es") (prim + "ament") ;
|
mkAdj prim (prim + "a") (prim + "s") (prim + "es") (prim + "ament") ;
|
||||||
|
|
||||||
adjBlau : Str -> Str -> Adj = \blau,blava ->
|
adjBlau : Str -> Str -> Adj = \blau,blava ->
|
||||||
let
|
let blav = Predef.tk 1 blava
|
||||||
blav = Predef.tk 1 blava
|
in mkAdj blau blava (blau + "s") (blav + "es")
|
||||||
in
|
(blava + "ment") ;
|
||||||
mkAdj blau blava (blau + "s") (blav + "es") (blava + "ment") ;
|
|
||||||
|
|
||||||
adjFondo : Str -> Adj = \fondo ->
|
adjFondo : Str -> Adj = \fondo ->
|
||||||
let
|
let fond = Predef.tk 1 fondo
|
||||||
fond = Predef.tk 1 fondo
|
in adjBlau fondo (fond + "a") ;
|
||||||
in
|
|
||||||
adjBlau fondo (fond + "a") ;
|
|
||||||
|
|
||||||
adjBo : Str -> Adj = \bo ->
|
adjBo : Str -> Adj = \bo ->
|
||||||
mkAdj bo (bo + "na") (bo + "ns") (bo + "nes") (bo + "nament") ;
|
mkAdj bo (bo + "na") (bo + "ns") (bo + "nes") (bo + "nament") ;
|
||||||
|
|
||||||
adjFidel : Str -> Adj = \fidel ->
|
adjFidel : Str -> Adj = \fidel ->
|
||||||
let
|
let fidels : Str = case (last fidel) of {
|
||||||
fidels = fidel + "s"
|
_ + ("s"|"ç"|"x") => fidel + "os" ; --feliç; capaç
|
||||||
in
|
_ => fidel + "s"
|
||||||
mkAdj fidel fidel fidels fidels (fidel + "ment") ;
|
} ;
|
||||||
|
in mkAdj fidel fidel fidels fidels
|
||||||
|
(fidel + "ment") ;
|
||||||
|
|
||||||
|
--boig, boja, bojos, boges
|
||||||
|
--lleig, lletja, lletjos, lletges
|
||||||
|
adjIg : Str -> Str -> Adj = \boig,boja ->
|
||||||
|
let boj : Str = tk 1 boja ;
|
||||||
|
llet : Str = tk 1 boj
|
||||||
|
in mkAdj boig (boj + "a") (boj + "os") (llet + "ges")
|
||||||
|
(boj + "ament") ;
|
||||||
|
|
||||||
|
--públic pública públics públiques
|
||||||
|
--llarg llarga llargs llargues
|
||||||
|
adjXc : Str -> Adj = \blanc ->
|
||||||
|
let blan : Str = init blanc ;
|
||||||
|
blanqu : Str = case last blanc of {
|
||||||
|
"c" => blan + "qu" ;
|
||||||
|
"g" => blan + "gu" --llarg, not boig.
|
||||||
|
} ;
|
||||||
|
in mkAdj blanc (blanc + "a")
|
||||||
|
(blanc + "s") (blanqu + "es")
|
||||||
|
(blanc + "ament") ;
|
||||||
|
|
||||||
|
--sibilant endings
|
||||||
|
adjXs : Str -> Str -> Adj = \famos,famosa ->
|
||||||
|
let russ : Str = tk 1 famosa ;
|
||||||
|
in mkAdj famos famosa (russ + "os") (russ + "es")
|
||||||
|
(russ + "ament") ;
|
||||||
|
|
||||||
|
-- català catalana catalans catalanes
|
||||||
|
adjVn : Str -> Adj = \catalA ->
|
||||||
|
let catal : Str = init catalA ;
|
||||||
|
v : Str = unaccent (last catalA) ;
|
||||||
|
catalVn : Str = catal + v + "n" ;
|
||||||
|
in mkAdj catalA (catalVn + "a")
|
||||||
|
(catalVn + "s") (catalVn + "es")
|
||||||
|
(catalVn + "ament") ;
|
||||||
|
|
||||||
|
--casat casada ; groc groga
|
||||||
|
adjCasat : Str -> Adj = \casat ->
|
||||||
|
let casa : Str = init casat ;
|
||||||
|
casad : Str = case last casat of {
|
||||||
|
"t" => casa + "d" ;
|
||||||
|
"c" => casa + "g"
|
||||||
|
} ;
|
||||||
|
grogu : Str = case last casad of {
|
||||||
|
"g" => casa + "gu" ;
|
||||||
|
_ => casad
|
||||||
|
} ;
|
||||||
|
in mkAdj casat (casad + "a")
|
||||||
|
(casat + "s") (grogu + "es")
|
||||||
|
(casad + "ament") ;
|
||||||
|
|
||||||
|
-- francès francesa francesos franceses
|
||||||
|
adjFrances : Str -> Adj = \francEs ->
|
||||||
|
let franc : Str = tk 2 francEs ;
|
||||||
|
e : Str = last (tk 1 francEs) ;
|
||||||
|
v : Str = unaccent e ;
|
||||||
|
francVs : Str = franc + v + "s"
|
||||||
|
in mkAdj francEs (francVs + "a")
|
||||||
|
(francVs + "os") (francVs + "es")
|
||||||
|
(francVs + "ament") ;
|
||||||
|
|
||||||
|
--europeu europea europeus europees
|
||||||
|
adjEuropeu : Str -> Adj = \europeu ->
|
||||||
|
let europe : Str = tk 1 europeu ;
|
||||||
|
in mkAdj europeu (europe + "a")
|
||||||
|
(europeu + "s") (europe + "es")
|
||||||
|
(europe + "ament") ;
|
||||||
|
|
||||||
|
--belga belga belgues belgues
|
||||||
|
adjBelga : Str -> Adj = \belga ->
|
||||||
|
let belg : Str = init belga ;
|
||||||
|
belgu : Str = case last belg of {
|
||||||
|
("g"|"c") => belg + "u" ;
|
||||||
|
_ => belg
|
||||||
|
} ;
|
||||||
|
belgues : Str = belgu + "es"
|
||||||
|
in mkAdj belga belga belgues belgues (belga + "ment") ;
|
||||||
|
|
||||||
|
|
||||||
mkAdjReg : Str -> Adj = \prim ->
|
mkAdjReg : Str -> Adj = \prim ->
|
||||||
case prim of {
|
case prim of {
|
||||||
-- _ + "e" + ("r"|"l") => adjPrim prim ;
|
_ + "ll" => adjPrim prim ; --vell~vella
|
||||||
_ + "l" => adjFidel prim ;
|
_ + "rn" => adjPrim prim ; --modern~moderna
|
||||||
_ + ("e"|"u"|"o") => adjFondo prim ;
|
_ + ("l"|"n"|"ç") => adjFidel prim ; --local; gran; capaç. For espanyol~espanyola mk2A.
|
||||||
_ => adjPrim prim
|
_ + "a" => adjBelga prim ; --invariable, -es in plural
|
||||||
} ;
|
_ + ("eu") => adjFidel prim ; --greu; breu. most "eu" are invariable, europeu and jueu with mk2A.
|
||||||
|
_ + ("au"|"ou"|"iu") => adjBlau prim (tk 1 prim + "va"); --blau; nou; viu
|
||||||
|
_ + ("e"|"o") => adjFondo prim ;
|
||||||
|
_ + "ig" => adjIg prim (tk 2 prim + "ja") ; --boig~boja. lleig~lletja with mk2A.
|
||||||
|
_ + ("c"|"g") => adjXc prim ; --públic; llarg. cec~cega with mk2A
|
||||||
|
_ + ("n"|"l"|"r"|"s") + "t" => adjPrim prim ; --mort,llest,distint
|
||||||
|
_ + "t" => adjCasat prim ; --tancat~tancada. petit~petita with mk2A.
|
||||||
|
_ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") => adjVn prim ; --comú~comuna
|
||||||
|
_ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") + "s" => adjFrances prim ;
|
||||||
|
_ + ("s"|"x") => adjXs prim (prim + "a") ; --divers~diversa
|
||||||
|
_ => adjPrim prim
|
||||||
|
} ;
|
||||||
|
|
||||||
|
--Used for the following:
|
||||||
|
--diferent diferent : doesn't end in l/n/ç/eu but has invariant feminine
|
||||||
|
--petit petita petits petites : voiceless plosive in the stem.
|
||||||
|
--ridícul ridícula : ends in l/n/ç but is not invariant.
|
||||||
|
--lleig lletja : the geminated variant of boig boja
|
||||||
|
--bo bona ; pla plana : like adjVn, but for one syllable words
|
||||||
|
--diari diària ; ingenu ingènua : in feminine, stress in antepenultimate
|
||||||
|
--jueu jueva ; europeu europea : exceptional paradigms for "eu" ending
|
||||||
|
--rus russa : voiceless s in the stem
|
||||||
|
--groc groga : voiced g in the stem
|
||||||
|
mkAdj2Reg : Str -> Str -> Adj = \petit,petita ->
|
||||||
|
case <petit,petita> of {
|
||||||
|
<_, _ + ("b"|"c"|"d"|"e"|"f"|"g"|"h"|"i"|"j"|"k"|"l"|"m"|"n"|"o"|"p"|"q"|"r"|"s"|"t"|"u"|"v"|"x"|"y"|"z")> => adjFidel petit ; --feminine doesn't end in "a"
|
||||||
|
<p@(_ + ("t"|"l"|"ç")), p+"a"> => adjPrim petit ; --1) petit~petita 2) ridícul~ridícula, dolç~dolça
|
||||||
|
<_ + "ig", _> => adjIg petit petita ; --lleig~letja
|
||||||
|
<_, _+ "na"> => adjVn petit ; --pla~plana
|
||||||
|
<_, _ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") + _> => adjBlau petit petita ; --diari~diària
|
||||||
|
<_ + "u" , _ + "va"> => adjBlau petit petita ; --jueu~jueva
|
||||||
|
<_ + "eu", _ + "ea"> => adjEuropeu petit ; --europeu~europea
|
||||||
|
<_ + "s" , _> => adjXs petit petita ; --rus~russa
|
||||||
|
<_ + "c" , _ + "ga"> => adjCasat petit ; --groc~groga
|
||||||
|
_ => mkAdjReg petit
|
||||||
|
} ;
|
||||||
|
|
||||||
|
oper unaccent : Str -> Str = \vocal ->
|
||||||
|
case vocal of {
|
||||||
|
("é"|"è") => "e" ;
|
||||||
|
("ó"|"ò") => "o" ;
|
||||||
|
"à" => "a" ;
|
||||||
|
"í" => "i" ;
|
||||||
|
"ú" => "u" ;
|
||||||
|
_ => vocal
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
--2 Personal pronouns
|
--2 Personal pronouns
|
||||||
@@ -146,7 +268,7 @@ oper
|
|||||||
poss = \\n,g => case <n,g> of {
|
poss = \\n,g => case <n,g> of {
|
||||||
<Sg,Masc> => son ;
|
<Sg,Masc> => son ;
|
||||||
<Sg,Fem> => sa ;
|
<Sg,Fem> => sa ;
|
||||||
<Pl,Masc> => elsSeus ;
|
<Pl,Masc> => elsSeus ;
|
||||||
<Pl,Fem> => lesSeves
|
<Pl,Fem> => lesSeves
|
||||||
} ;
|
} ;
|
||||||
a = Ag g n p ;
|
a = Ag g n p ;
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ oper
|
|||||||
-- them to prefix ones (i.e. ones placed before the noun in
|
-- them to prefix ones (i.e. ones placed before the noun in
|
||||||
-- modification, as in "gran casa"), the following function is
|
-- modification, as in "gran casa"), the following function is
|
||||||
-- provided.
|
-- provided.
|
||||||
-- JS: What about vi bÛ -> bon vi ?
|
-- JS: What about vi bo -> bon vi ?
|
||||||
|
|
||||||
prefixA : A -> A ; -- adjective before noun (default: after)
|
prefixA : A -> A ; -- adjective before noun (default: after)
|
||||||
|
|
||||||
@@ -320,6 +320,7 @@ oper
|
|||||||
|
|
||||||
mk5A a b c d e =
|
mk5A a b c d e =
|
||||||
compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ;
|
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 = <>} ;
|
regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ;
|
||||||
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
|
prefA a = {s = a.s ; isPre = True ; lock_A = <>} ;
|
||||||
|
|
||||||
@@ -422,11 +423,13 @@ oper
|
|||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : (util : Str) -> A = regA ;
|
mkA : (util : Str) -> A = regA ;
|
||||||
|
mkA : (lleig,lletja : Str) -> A = mk2A ;
|
||||||
mkA : (fort,forta,forts,fortes,fortament : Str) -> A = mk5A ;
|
mkA : (fort,forta,forts,fortes,fortament : Str) -> A = mk5A ;
|
||||||
mkA : (bo : A) -> (millor : A) -> A = mkADeg ;
|
mkA : (bo : A) -> (millor : A) -> A = mkADeg ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mk5A : (fort,forta,forts,fortes,fortament : Str) -> A ;
|
mk5A : (fort,forta,forts,fortes,fortament : Str) -> A ;
|
||||||
|
mk2A : (lleig,lletja : Str) -> A ;
|
||||||
regA : Str -> A ;
|
regA : Str -> A ;
|
||||||
mkADeg : A -> A -> A ;
|
mkADeg : A -> A -> A ;
|
||||||
compADeg : A -> A ;
|
compADeg : A -> A ;
|
||||||
|
|||||||
Reference in New Issue
Block a user