1
0
forked from GitHub/gf-rgl

(Romance, #38) rm numForms from Morpho{Cat,Ita}

This commit is contained in:
odanoburu
2018-05-09 15:59:20 -03:00
parent ba094d3af1
commit 5bf1e1d10a
2 changed files with 38 additions and 52 deletions

View File

@@ -3,28 +3,22 @@
--1 A Simple Catalan Resource Morphology --1 A Simple Catalan Resource Morphology
-- --
-- Aarne Ranta 2002 -- 2005 -- Aarne Ranta 2002 -- 2005
-- Jordi Saludes 2008: Derived from MorphoSpa. -- Jordi Saludes 2008: Derived from MorphoSpa.
-- Inari Listenmaa 2012: Added smart paradigms for adjectives. -- Inari Listenmaa 2012: Added smart paradigms for adjectives.
-- --
-- This resource morphology contains definitions needed in the resource -- This resource morphology contains definitions needed in the resource
-- syntax. To build a lexicon, it is better to use $ParadigmsCat$, which -- syntax. To build a lexicon, it is better to use $ParadigmsCat$, which
-- gives a higher-level access to this module. -- gives a higher-level access to this module.
resource MorphoCat = CommonRomance, ResCat ** resource MorphoCat = CommonRomance, ResCat **
open PhonoCat, Prelude, Predef in { open PhonoCat, Prelude, Predef in {
flags optimize=all ; coding=utf8 ; flags optimize=all ; coding=utf8 ;
--2 Nouns --2 Nouns
-- --
-- The following macro is useful for creating the forms of number-dependent
-- tables, such as common nouns.
-- gcc M2.3
oper oper
numForms : (_,_ : Str) -> Number => Str = \vi, vins -> nomCep : Str -> Number => Str = \cep ->
table {Sg => vi ; Pl => vins} ;
nomCep : Str -> Number => Str = \cep ->
numForms cep (cep + "s") ; numForms cep (cep + "s") ;
nomVaca : Str -> Number => Str = \vaca -> nomVaca : Str -> Number => Str = \vaca ->
@@ -41,12 +35,12 @@ oper
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"}) ;
nomLlengua: Str -> Number => Str = \llengua -> nomLlengua: Str -> Number => Str = \llengua ->
let let
@@ -59,22 +53,22 @@ oper
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.
mkNoun : (Number => Str) -> Gender -> Noun = \noinois,gen -> mkNoun : (Number => Str) -> Gender -> Noun = \noinois,gen ->
{s = noinois ; g = gen} ; {s = noinois ; g = gen} ;
mkNounIrreg : Str -> Str -> Gender -> Noun = \vi,vins -> mkNounIrreg : Str -> Str -> Gender -> Noun = \vi,vins ->
mkNoun (numForms vi vins) ; mkNoun (numForms vi vins) ;
mkNomReg : Str -> Noun = \noi -> mkNomReg : Str -> Noun = \noi ->
@@ -110,18 +104,18 @@ oper
--- Then the regular and invariant patterns. --- Then the regular and invariant patterns.
adjPrim : Str -> Adj = \prim -> adjPrim : Str -> Adj = \prim ->
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 blav = Predef.tk 1 blava let blav = Predef.tk 1 blava
in mkAdj blau blava (blau + "s") (blav + "es") in mkAdj blau blava (blau + "s") (blav + "es")
(blava + "ment") ; (blava + "ment") ;
adjFondo : Str -> Adj = \fondo -> adjFondo : Str -> Adj = \fondo ->
let fond = Predef.tk 1 fondo let 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") ;
@@ -129,10 +123,10 @@ oper
let fidels : Str = case (last fidel) of { let fidels : Str = case (last fidel) of {
_ + ("s"|"ç"|"x") => fidel + "os" ; --feliç; capaç _ + ("s"|"ç"|"x") => fidel + "os" ; --feliç; capaç
_ => fidel + "s" _ => fidel + "s"
} ; } ;
in mkAdj fidel fidel fidels fidels in mkAdj fidel fidel fidels fidels
(fidel + "ment") ; (fidel + "ment") ;
--boig, boja, bojos, boges --boig, boja, bojos, boges
--lleig, lletja, lletjos, lletges --lleig, lletja, lletjos, lletges
adjIg : Str -> Str -> Adj = \boig,boja -> adjIg : Str -> Str -> Adj = \boig,boja ->
@@ -140,7 +134,7 @@ oper
llet : Str = tk 1 boj llet : Str = tk 1 boj
in mkAdj boig (boj + "a") (boj + "os") (llet + "ges") in mkAdj boig (boj + "a") (boj + "os") (llet + "ges")
(boj + "ament") ; (boj + "ament") ;
--públic pública públics públiques --públic pública públics públiques
--llarg llarga llargs llargues --llarg llarga llargs llargues
adjXc : Str -> Adj = \blanc -> adjXc : Str -> Adj = \blanc ->
@@ -156,19 +150,19 @@ oper
--sibilant endings --sibilant endings
adjXs : Str -> Str -> Adj = \famos,famosa -> adjXs : Str -> Str -> Adj = \famos,famosa ->
let russ : Str = tk 1 famosa ; let russ : Str = tk 1 famosa ;
in mkAdj famos famosa (russ + "os") (russ + "es") in mkAdj famos famosa (russ + "os") (russ + "es")
(russ + "ament") ; (russ + "ament") ;
-- català catalana catalans catalanes -- català catalana catalans catalanes
adjVn : Str -> Adj = \catalA -> adjVn : Str -> Adj = \catalA ->
let catal : Str = init catalA ; let catal : Str = init catalA ;
v : Str = unaccent (last catalA) ; v : Str = unaccent (last catalA) ;
catalVn : Str = catal + v + "n" ; catalVn : Str = catal + v + "n" ;
in mkAdj catalA (catalVn + "a") in mkAdj catalA (catalVn + "a")
(catalVn + "s") (catalVn + "es") (catalVn + "s") (catalVn + "es")
(catalVn + "ament") ; (catalVn + "ament") ;
--casat casada ; groc groga --casat casada ; groc groga
adjCasat : Str -> Adj = \casat -> adjCasat : Str -> Adj = \casat ->
let casa : Str = init casat ; let casa : Str = init casat ;
casad : Str = case last casat of { casad : Str = case last casat of {
@@ -178,9 +172,9 @@ oper
grogu : Str = case last casad of { grogu : Str = case last casad of {
"g" => casa + "gu" ; "g" => casa + "gu" ;
_ => casad _ => casad
} ; } ;
in mkAdj casat (casad + "a") in mkAdj casat (casad + "a")
(casat + "s") (grogu + "es") (casat + "s") (grogu + "es")
(casad + "ament") ; (casad + "ament") ;
-- francès francesa francesos franceses -- francès francesa francesos franceses
@@ -188,18 +182,18 @@ oper
let franc : Str = tk 2 francEs ; let franc : Str = tk 2 francEs ;
e : Str = last (tk 1 francEs) ; e : Str = last (tk 1 francEs) ;
v : Str = unaccent e ; v : Str = unaccent e ;
francVs : Str = franc + v + "s" francVs : Str = franc + v + "s"
in mkAdj francEs (francVs + "a") in mkAdj francEs (francVs + "a")
(francVs + "os") (francVs + "es") (francVs + "os") (francVs + "es")
(francVs + "ament") ; (francVs + "ament") ;
--europeu europea europeus europees --europeu europea europeus europees
adjEuropeu : Str -> Adj = \europeu -> adjEuropeu : Str -> Adj = \europeu ->
let europe : Str = tk 1 europeu ; let europe : Str = tk 1 europeu ;
in mkAdj europeu (europe + "a") in mkAdj europeu (europe + "a")
(europeu + "s") (europe + "es") (europeu + "s") (europe + "es")
(europe + "ament") ; (europe + "ament") ;
--belga belga belgues belgues --belga belga belgues belgues
adjBelga : Str -> Adj = \belga -> adjBelga : Str -> Adj = \belga ->
let belg : Str = init belga ; let belg : Str = init belga ;
@@ -207,10 +201,10 @@ oper
("g"|"c") => belg + "u" ; ("g"|"c") => belg + "u" ;
_ => belg _ => belg
} ; } ;
belgues : Str = belgu + "es" belgues : Str = belgu + "es"
in mkAdj belga belga belgues belgues (belga + "ment") ; in mkAdj belga belga belgues belgues (belga + "ment") ;
mkAdjReg : Str -> Adj = \prim -> mkAdjReg : Str -> Adj = \prim ->
case prim of { case prim of {
_ + "ll" => adjPrim prim ; --vell~vella _ + "ll" => adjPrim prim ; --vell~vella
@@ -219,20 +213,20 @@ oper
_ + "a" => adjBelga prim ; --invariable, -es in plural _ + "a" => adjBelga prim ; --invariable, -es in plural
_ + ("eu") => adjFidel prim ; --greu; breu. most "eu" are invariable, europeu and jueu with mk2A. _ + ("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 _ + ("au"|"ou"|"iu") => adjBlau prim (tk 1 prim + "va"); --blau; nou; viu
_ + ("e"|"o") => adjFondo prim ; _ + ("e"|"o") => adjFondo prim ;
_ + "ig" => adjIg prim (tk 2 prim + "ja") ; --boig~boja. lleig~lletja with mk2A. _ + "ig" => adjIg prim (tk 2 prim + "ja") ; --boig~boja. lleig~lletja with mk2A.
_ + ("c"|"g") => adjXc prim ; --públic; llarg. cec~cega with mk2A _ + ("c"|"g") => adjXc prim ; --públic; llarg. cec~cega with mk2A
_ + ("n"|"l"|"r"|"s") + "t" => adjPrim prim ; --mort,llest,distint _ + ("n"|"l"|"r"|"s") + "t" => adjPrim prim ; --mort,llest,distint
_ + "t" => adjCasat prim ; --tancat~tancada. petit~petita with mk2A. _ + "t" => adjCasat prim ; --tancat~tancada. petit~petita with mk2A.
_ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") => adjVn prim ; --comú~comuna _ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") => adjVn prim ; --comú~comuna
_ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") + "s" => adjFrances prim ; _ + ("à"|"é"|"è"|"í"|"ó"|"ò"|"ú") + "s" => adjFrances prim ;
_ + ("s"|"x") => adjXs prim (prim + "a") ; --divers~diversa _ + ("s"|"x") => adjXs prim (prim + "a") ; --divers~diversa
_ => adjPrim prim _ => adjPrim prim
} ; } ;
--Used for the following: --Used for the following:
--diferent diferent : doesn't end in l/n/ç/eu but has invariant feminine --diferent diferent : doesn't end in l/n/ç/eu but has invariant feminine
--petit petita petits petites : voiceless plosive in the stem. --petit petita petits petites : voiceless plosive in the stem.
--ridícul ridícula : ends in l/n/ç but is not invariant. --ridícul ridícula : ends in l/n/ç but is not invariant.
--lleig lletja : the geminated variant of boig boja --lleig lletja : the geminated variant of boig boja
--bo bona ; pla plana : like adjVn, but for one syllable words --bo bona ; pla plana : like adjVn, but for one syllable words
@@ -251,7 +245,7 @@ oper
<_ + "eu", _ + "ea"> => adjEuropeu petit ; --europeu~europea <_ + "eu", _ + "ea"> => adjEuropeu petit ; --europeu~europea
<_ + "s" , _> => adjXs petit petita ; --rus~russa <_ + "s" , _> => adjXs petit petita ; --rus~russa
<_ + "c" , _ + "ga"> => adjCasat petit ; --groc~groga <_ + "c" , _ + "ga"> => adjCasat petit ; --groc~groga
_ => mkAdjReg petit _ => mkAdjReg petit
} ; } ;
oper unaccent : Str -> Str = \vocal -> oper unaccent : Str -> Str = \vocal ->
@@ -270,7 +264,7 @@ oper unaccent : Str -> Str = \vocal ->
-- All the eight personal pronouns can be built by the following macro. -- All the eight personal pronouns can be built by the following macro.
-- The use of "en" as atonic genitive is debatable. -- The use of "en" as atonic genitive is debatable.
mkPronoun : (_,_,_,_,_,_,_,_ : Str) -> mkPronoun : (_,_,_,_,_,_,_,_ : Str) ->
Gender -> Number -> Person -> Pronoun = Gender -> Number -> Person -> Pronoun =
\ell,el,li,Ell,son,sa,elsSeus,lesSeves,g,n,p -> \ell,el,li,Ell,son,sa,elsSeus,lesSeves,g,n,p ->
let let

View File

@@ -18,15 +18,7 @@ resource MorphoIta = CommonRomance, ResIta **
--2 Nouns --2 Nouns
-- --
-- The following macro is useful for creating the forms of number-dependent
-- tables, such as common nouns.
oper oper
numForms : (_,_ : Str) -> Number => Str = \vino, vini ->
table {Sg => vino ; Pl => vini} ;
-- For example:
nomVino : Str -> Number => Str = \vino -> let {vin = Predef.tk 1 vino} in nomVino : Str -> Number => Str = \vino -> let {vin = Predef.tk 1 vino} in
numForms vino (vin + "i") ; numForms vino (vin + "i") ;