1
0
forked from GitHub/gf-rgl

(Hun) Add new paradigms and a 4-arg smart paradigm

This commit is contained in:
Inari Listenmaa
2020-04-27 21:15:43 +02:00
parent 95eb7104c8
commit 6cbcbd99fb
3 changed files with 91 additions and 52 deletions

View File

@@ -37,7 +37,7 @@ lin black_A = mkA "fekete" ;
lin blood_N = mkN "vér" "vért"; lin blood_N = mkN "vér" "vért";
-- lin blow_V = mkV "" ; -- lin blow_V = mkV "" ;
lin blue_A = mkA "kék" ; lin blue_A = mkA "kék" ;
lin boat_N = mkN "hajó" "hajót" ; lin boat_N = mkN "hajó" "hajót" "hajók" "hajója" ;
-- lin bone_N = mkN "" ; -- lin bone_N = mkN "" ;
-- lin boot_N = mkN "" ; -- lin boot_N = mkN "" ;
-- lin boss_N = mkN "" ; -- lin boss_N = mkN "" ;
@@ -130,7 +130,7 @@ lin fish_N = mkN "hal" "halat" ;
-- lin float_V = mkV "" ; -- lin float_V = mkV "" ;
lin floor_N = mkN "padló" "padlót" ; lin floor_N = mkN "padló" "padlót" ;
-- lin flow_V = mkV "" ; -- lin flow_V = mkV "" ;
lin flower_N = mkN "virág" "virágot" ; lin flower_N = mkN "virág" "virágot" "virágok" "virága" ;
lin fly_V = mkV "repül" ; lin fly_V = mkV "repül" ;
lin fog_N = mkN "köd" "ködöt"; -- TODO ködöket lin fog_N = mkN "köd" "ködöt"; -- TODO ködöket
lin foot_N = leg_N ; --same as leg, to specify "lábfej" lin foot_N = leg_N ; --same as leg, to specify "lábfej"
@@ -285,7 +285,7 @@ lin restaurant_N = mkN "étterem" "éttermet";
lin river_N = mkN "folyó" "folyót" ; lin river_N = mkN "folyó" "folyót" ;
lin road_N = mkN "út" "utat" ; lin road_N = mkN "út" "utat" ;
lin rock_N = mkN "szikla" "sziklát"; lin rock_N = mkN "szikla" "sziklát";
lin roof_N = mkN "plafon" "plafont" ; lin roof_N = mkN "plafon" "plafont" "plafonok" "plafonja" ;
lin root_N = mkN "gyökér" "gyökeret"; lin root_N = mkN "gyökér" "gyökeret";
lin rope_N = mkN "kötél" "kötelet"; lin rope_N = mkN "kötél" "kötelet";
-- lin rotten_A = mkA "" ; -- lin rotten_A = mkA "" ;

View File

@@ -116,25 +116,47 @@ oper
-- Examples: "hajó, hajója, zseni, zsenije, kestyű, kestyűje" -- Examples: "hajó, hajója, zseni, zsenije, kestyű, kestyűje"
dHajó : (nom : Str) -> (acc : Str) -> Noun = \hajó,hajót -> dHajó : (nom : Str) -> (acc : Str) -> Noun = \hajó,hajót ->
let nHajó = mkNoun hajó ; let nHajó = mkNoun hajó ;
hajój = hajó + "j" ;
in nHajó ** { in nHajó ** {
s = \\nc => case nc of { s = \\nc => case nc of {
-- All plural forms and Sg Acc use the "tolla" stem PossdSg_PossrPl1 => hajó ;
PlStem | PlAcc | SgAccStem => nHajó.s ! nc ;
PossdSg_PossrPl1 => hajój + harm "u" "ü" ! nHajó.h ; PossdSg_PossrP3 => hajó + "j" ;
PossdSg_PossrP3 => hajój ;
-- The plural morpheme before possessive suffixes: hajói -- The plural morpheme before possessive suffixes: hajói
PossdPl => hajó + "i" ; PossdPl => hajó + "i" ;
-- The rest of the forms are formed with the regular constructor, -- The rest of the forms are formed with the regular constructor
-- using "toll" as the stem.
_ => nHajó.s ! nc _ => nHajó.s ! nc
} }
} ; } ;
-- Unexpected j after consonant
dPlafon : (nom : Str) -> (acc : Str) -> Noun = \plafon,plafont ->
let nPlafon = mkNoun plafon ;
h = nPlafon.h ;
in nPlafon ** {
s = \\nc => case nc of {
PossdSg_PossrPl1 => plafon + harm "u" "ü" ! h ;
PossdSg_PossrP3 => plafon + "j" ;
PossdPl => plafon + harm "jai" "jei" ! h ;
-- The rest of the forms are formed with the regular constructor
_ => nPlafon.s ! nc
}
} ;
-- Opposite to dHajó: regular paradigm puts j, but these words don't have it.
dVirág : (nom : Str) -> (acc : Str) -> Noun = \virág,virágot ->
let nVirág = mkNoun virág ;
h = nVirág.h ;
in nVirág ** {
s = \\nc => case nc of {
PossdSg_PossrPl1 => virág + harm "u" "ü" ! h ;
PossdSg_PossrP3 => virág ;
PossdPl => virág + harm "a" "e" ! h + "i" ;
_ => nVirág.s ! nc }
} ;
-- Handles many possesive forms -- Handles many possesive forms
dToll : (nom : Str) -> (acc : Str) -> Noun = \toll,tollat -> dToll : (nom : Str) -> (acc : Str) -> Noun = \toll,tollat ->
let tolla = init tollat ; let tolla = init tollat ;
@@ -218,55 +240,67 @@ oper
-- All regNoun* are /smart paradigms/: they take one or a couple of forms, -- All regNoun* are /smart paradigms/: they take one or a couple of forms,
-- and decides which (non-smart) paradigm is the most likely to match. -- and decides which (non-smart) paradigm is the most likely to match.
regNounNomAccPl : (nomsg, accsg, nompl : Str) -> Noun = \nsg,asg,npl -> regNoun4 : (nomsg, accsg, nompl, possdSg_possrP3sg : Str) -> Noun =
case <nsg,asg,npl> of { \nsg,asg,npl,possd -> case possd of {
<_ + ("u"|"ú"|"ü"|"ű"|"ó"), -- falu, falut, falvak ; szó, szót, szavak _ + #v + "j" + ("a"|"e") => dHajó nsg asg ;
_ + ("u"|"ú"|"ü"|"ű"|"ó") + "t", _ + #c + "j" + ("a"|"e") => dPlafon nsg asg ;
_ + "v" + #v + "k"> => dFalu nsg npl ;
-- Fall back to 2-argument smart paradigm _ + #c + ("a"|"e") => dVirág nsg asg ;
_ => regNounNomAcc nsg asg
} ;
regNounNomAcc : (nom : Str) -> (acc : Str) -> Noun = \n,a ->
case <n,a> of {
-- Stem 1: Sg Nom -- Fall back to 3-argument smart paradigm
-- Stem 2: Everything else _ => regNounNomAccPl nsg asg npl
-- alma, almát } ;
<_ + "a", _ + "át">
|<_ + "e" ,_ + "ét"> => dAlma n a ;
-- Stem 1: Sg Nom regNounNomAccPl : (nomsg, accsg, nompl : Str) -> Noun = \nsg,asg,npl ->
-- Stem 2: Sg Gen, Sg Sup, Pl * case <nsg,asg,npl> of {
<_ + #shortv + #c, -- majom, majmot <_ + ("u"|"ú"|"ü"|"ű"|"ó"), -- falu, falut, falvak ; szó, szót, szavak
_ + #c + #shortv + "t"> => dMajom n a ; _ + ("u"|"ú"|"ü"|"ű"|"ó") + "t",
_ + "v" + #v + "k"> => dFalu nsg npl ;
-- Stem 1: Sg Nom -- Fall back to 2-argument smart paradigm
-- Stem 2: Sg Sup _ => regNounNomAcc nsg asg
-- Stem 3: Sg Gen, Pl * } ;
<_ + "ó", -- ló, lovat
_ + "o" + #c + #v + "t">
|<_ + "ó", -- tó, tavat regNounNomAcc : (nom : Str) -> (acc : Str) -> Noun = \n,a ->
_ + "a" + #c + #v + "t"> case <n,a> of {
|<_ + "ő", -- kő, követ -- Stem 1: Sg Nom
_ + "ö" + #c + #v + "t"> -- Stem 2: Everything else
-- alma, almát
<_ + "a", _ + "át">
|<_ + "e" ,_ + "ét"> => dAlma n a ;
|<_ + "ű", -- fű, füvet -- Stem 1: Sg Nom
_ + "ü" + #c + #v + "t"> -- Stem 2: Sg Gen, Sg Sup, Pl *
<_ + #shortv + #c, -- majom, majmot
_ + #c + #shortv + "t"> => dMajom n a ;
|<_ + "é", -- lé, levet -- Stem 1: Sg Nom
_ + "e" + #c + #v + "t"> => dLó n a ; -- Stem 2: Sg Sup
-- Stem 3: Sg Gen, Pl *
<_ + "ó", -- ló, lovat
_ + "o" + #c + #v + "t">
-- Stem 1: Sg Nom, Sg * - [Gen] |<_ + "ó", -- tó, tavat
-- Stem 2: Sg Gen, Pl * _ + "a" + #c + #v + "t">
<_ + "á" + #c, _ + "a" + #c + "at">
|<_ + "é" + #c,_ + "e" + #c + ("et"|"at")> => dMadár n a ;
_ => dToll n a |<_ + "ő", -- kő, követ
} ; _ + "ö" + #c + #v + "t">
|<_ + "ű", -- fű, füvet
_ + "ü" + #c + #v + "t">
|<_ + "é", -- lé, levet
_ + "e" + #c + #v + "t"> => dLó n a ;
-- Stem 1: Sg Nom, Sg * - [Gen]
-- Stem 2: Sg Gen, Pl *
<_ + "á" + #c, _ + "a" + #c + "at">
|<_ + "é" + #c,_ + "e" + #c + ("et"|"at")> => dMadár n a ;
_ => dToll n a
} ;
-- 1-argument smart paradigm -- 1-argument smart paradigm
-- Here we guess the genitive form and give it to appropriate 2-arg paradigm -- Here we guess the genitive form and give it to appropriate 2-arg paradigm

View File

@@ -18,9 +18,11 @@ oper
--2 Nouns --2 Nouns
mkN : overload { mkN : overload {
mkN : (sgnom : Str) -> N ; -- Predictable nouns from singular nominative. Accusative vowel is o for back harmony. No stem lowering (TODO better explanation/examples) mkN : (sgnom : Str) -> N ; -- Predictable nouns from singular nominative. Accusative vowel is o/ö, no stem lowering. Use: `mkN "nap"` for nap, napot.
mkN : (sgnom, sggen : Str) -> N ; -- Singular nominative and accusative. Takes care of cases like … TODO example mkN : (sgnom, sggen : Str) -> N ; -- Singular nominative and accusative. Use: `mkN "név" "nevet"`
mkN : (sgnom, sggen, plnom : Str) -> N ; -- Singular nominative, singular accusative, plural nominative, e.g. `mkN "falu" "falut" "falvak"` mkN : (sgnom, sggen, plnom : Str) -> N ; -- Singular nominative, singular accusative, plural nominative. Use: `mkN "falu" "falut" "falvak"`
mkN : (sgnom, sggen, plnom, sgnom_possdSg3 : Str) -> N ; -- Singular nominative, singular accusative, plural nominative, singular nominative possessed by 3rd person singular. Use: `mkN "virág" "virágot" "virágok" "virága"` (would give "virágja" otherwise)
mkN : (férfi : Str) -> (harm : Harmony) -> (ak : Str) -> N ; -- Noun with unpredictable vowel harmony and plural allomorph mkN : (férfi : Str) -> (harm : Harmony) -> (ak : Str) -> N ; -- Noun with unpredictable vowel harmony and plural allomorph
} ; } ;
@@ -130,6 +132,9 @@ oper
mkN : Str -> Str -> Str -> N = mkN : Str -> Str -> Str -> N =
\n,a,pln-> lin N (regNounNomAccPl n a pln) ; \n,a,pln-> lin N (regNounNomAccPl n a pln) ;
mkN : (x1,_,_,x4 : Str) -> N =
\n,a,pln,possd -> lin N (regNoun4 n a pln possd) ;
mkN : Str -> Harmony -> N = mkN : Str -> Harmony -> N =
\s,h -> lin N (mkNounHarm h (pluralAllomorph s) s) ; \s,h -> lin N (mkNounHarm h (pluralAllomorph s) s) ;