Hrv masc noun declensions done

This commit is contained in:
Aarne Ranta
2022-09-21 17:17:49 +02:00
parent 912de3f664
commit bca75fae7b
3 changed files with 113 additions and 51 deletions

View File

@@ -24,7 +24,6 @@ param
-- phonology
oper
hardConsonant : pattern Str = #("d"|"t"|"g"|"h"|"k"|"n"|"r") ; ----
softConsonant : pattern Str = #("c"|"č"|"ć"|"đ"|"j"|"lj"|"nj"|"š"|"ž"|"št") ;
--- wiki "and sometimes r"; BCMS slightly different
@@ -34,6 +33,8 @@ oper
_ => shard
} ;
animate = Masc Anim ;
inanimate = Masc Inanim ;
palatalize : Str -> Str = \s -> case s of {
x + "ki" => x + "ci" ;
@@ -42,7 +43,7 @@ palatalize : Str -> Str = \s -> case s of {
x + "ge" => x + "že" ;
x + "hi" => x + "si" ;
x + "he" => x + "še" ;
x + "ce" => x + "če" ; ---- TODO stric but check sins: stricem, klincem, pacc klince
x + "ce" => x + "če" ;
_ => s
} ;
@@ -58,7 +59,7 @@ palatalize : Str -> Str = \s -> case s of {
-- so this is the lincat of N
NounForms : Type = {snom,sgen,sdat,sacc,svoc,sins,pnom,pgen,pdat,pacc : Str ; g : Gender} ;
NounForms : Type = {snom,sgen,sdat,sacc,svoc,sins,pnom,pgen,pdat,pacc : Str} ;
-- But traditional tables make agreement easier to handle in syntax
-- so this is the lincat of CN
@@ -67,14 +68,17 @@ palatalize : Str -> Str = \s -> case s of {
-- this is used in UseN
nounFormsNoun : NounForms -> Noun
= \forms -> {
nounFormsNoun : NounForms -> Gender -> Noun
= \forms, g -> {
s = table {
Sg => table {
Nom => forms.snom ;
Gen => forms.sgen ;
Dat => forms.sdat ;
Acc => forms.sacc ;
Acc => case g of {
Masc Anim | Fem => forms.sacc ;
_ => forms.snom
} ;
Voc => forms.svoc ;
Loc => forms.sdat ;
Ins => forms.sins
@@ -89,7 +93,7 @@ palatalize : Str -> Str = \s -> case s of {
Ins => forms.pdat
}
} ;
g = forms.g
g = g
} ;
@@ -144,24 +148,20 @@ palatalize : Str -> Str = \s -> case s of {
-}
ifAnim : Animacy -> (anim, inanim : Str) -> Str = \anim, sanim, sinanim ->
case anim of {
Anim => sanim ;
Inanim => sinanim
} ;
-- the traditional declensions, following Wiki
-- they are also exported in ParadigmsHrv with names izvorN etc
izvorN : Animacy -> DeclensionType = \anim, izvor ->
izvorN : DeclensionType = \izvor ->
{
snom = izvor ;
sgen = izvor + "a" ;
sdat = izvor + "u" ;
sacc = ifAnim anim (izvor + "a") izvor ;
svoc = palatalize (izvor + "e") ;
sacc = izvor + "a" ;
svoc = ifSoft izvor
(izvor + "u")
(palatalize (izvor + "e")) ;
sins = ifSoft izvor
(palatalize (izvor + "e") + "m")
(izvor + "em")
(izvor + "om") ;
pnom = palatalize (izvor + "i") ;
@@ -170,38 +170,100 @@ palatalize : Str -> Str = \s -> case s of {
ifSoft izvor
(palatalize (izvor + "e") + "vima")
(palatalize (izvor + "i") + "ma") ;
pacc = palatalize (izvor + "e") ;
g = Masc anim
pacc = izvor + "e" ;
} ;
nokatN : Animacy -> DeclensionType = \anim, nokat ->
nokatN : DeclensionType = \nokat ->
let
nokt = Predef.tk 2 nokat + last nokat
in izvorN anim nokt ** {
in izvorN nokt ** {
snom = nokat ;
sacc = ifAnim anim (nokt + "a") nokat ;
sacc = nokt + "a" ;
pgen = nokat + "a" ;
} ;
gradaninN : Animacy -> DeclensionType = \anim, gradanin ->
gradaninN : DeclensionType = \gradanin ->
let
gradan = Predef.tk 2 gradanin ;
gradanN = izvorN anim gradan
in izvorN anim gradanin ** {
pnom = gradanN.pnom ;
pgen = gradanN.pgen ;
pdat = gradanN.pdat ;
pacc = gradanN.pacc ;
gradanN = izvorN gradan
in numbersNounForms (izvorN gradanin) gradanN ;
numbersNounForms : (sg, pl : NounForms) -> NounForms =
\sg, pl -> sg ** {
pnom = pl.pnom ;
pgen = pl.pgen ;
pdat = pl.pdat ;
pacc = pl.pacc ;
} ;
-- vojnik, bubreg, trbuh, stric by izvorN, čvórak, klinac by nokatN
---- TODO
vojnikN : DeclensionType = izvorN ;
bubregN : DeclensionType = izvorN ;
trbuhN : DeclensionType = izvorN ;
cvorakN : DeclensionType = nokatN ;
panjN : DeclensionType = \panj ->
numbersNounForms (izvorN panj) (izvorN (palatalize (panj + "e") + "v")) ;
suzanjN : DeclensionType = \suzanj ->
let
suznj = Predef.tk 3 suzanj + Predef.dp 2 suzanj
in
numbersNounForms
(izvorN suzanj)
(izvorN suznj ** {
pgen = "sužanja" ;
pdat = "sužnjima"
}) ;
pristN : DeclensionType = panjN ;
stricN : DeclensionType = \stric ->
panjN stric ** {
svoc = palatalize (stric + "e")
} ;
klinacN : DeclensionType = \klinac ->
let
klinc = Predef.tk 2 klinac + last klinac
in nokatN klinac ** {
svoc = palatalize (klinc + "e") ;
pdat = klinc + "ima" ;
} ;
posjetilacN : DeclensionType = \posjetilac ->
let
posjetioc = Predef.tk 3 posjetilac + "oc"
in izvorN posjetioc ** {
snom = posjetilac ;
svoc = palatalize (posjetioc + "e") ;
sins = palatalize (posjetioc + "e") + "m" ;
pgen = posjetilac + "a" ;
pdat = palatalize (posjetioc + "i") + "ma" ;
} ;
pepeoN : DeclensionType = \pepeo ->
let
pepel = init pepeo + "l"
in izvorN pepel ** {snom = pepeo} ;
ugaoN : DeclensionType = \ugao ->
let
ugal = init ugao + "l" ;
ugl = Predef.tk 2 ugal + last ugal
in numbersNounForms
(nokatN ugal ** {snom = ugao})
(izvorN (ugl + "ov")) ;
bifeN : DeclensionType = \bife ->
izvorN bife ** {svoc = bife + "u"} ;
ziriN : DeclensionType = \ziri ->
bifeN (ziri + "j") ** {
snom = ziri ;
pdat = ziri + "jima" ;
} ;
taksiN : DeclensionType = ziriN ;
{-

View File

@@ -141,7 +141,7 @@ s . Sg => Voc => prištu
s . Sg => Loc => prištu
s . Sg => Ins => prištem
s . Pl => Nom => prištevi
s . Pl => Gen => prištava
s . Pl => Gen => prišteva
s . Pl => Dat => prištevima
s . Pl => Acc => prišteve
s . Pl => Voc => prištevi
@@ -245,7 +245,7 @@ s . Sg => Acc => žiri
s . Sg => Voc => žiriju
s . Sg => Loc => žiriju
s . Sg => Ins => žirijem
s . Pl => Nom => žirji
s . Pl => Nom => žiriji
s . Pl => Gen => žirija
s . Pl => Dat => žirijima
s . Pl => Acc => žirije

View File

@@ -1,18 +1,18 @@
cc -table -unqual nounFormsNoun (izvorN Inanim "izvor")
cc -table -unqual nounFormsNoun (nokatN Inanim "nokat")
cc -table -unqual nounFormsNoun (gradaninN Anim "građanin")
cc -table -unqual nounFormsNoun (izvorN Anim "vojnik")
cc -table -unqual nounFormsNoun (izvorN Anim "bubreg")
cc -table -unqual nounFormsNoun (izvorN Anim "trbuh")
cc -table -unqual nounFormsNoun (nokatN Anim "čvorak")
cc -table -unqual nounFormsNoun (izvorN Inanim "panj")
cc -table -unqual nounFormsNoun (nokatN Inanim "sužanj")
cc -table -unqual nounFormsNoun (izvorN Inanim "prišt")
cc -table -unqual nounFormsNoun (izvorN Anim "stric")
cc -table -unqual nounFormsNoun (nokatN Inanim "klinac")
cc -table -unqual nounFormsNoun (nokatN Anim "posjetilac")
cc -table -unqual nounFormsNoun (izvorN Inanim "pepeo")
cc -table -unqual nounFormsNoun (izvorN Inanim "ugao")
cc -table -unqual nounFormsNoun (izvorN Inanim "bife")
cc -table -unqual nounFormsNoun (izvorN Inanim "žiri")
cc -table -unqual nounFormsNoun (izvorN Inanim "taksi")
cc -table -unqual nounFormsNoun (izvorN "izvor") inanimate
cc -table -unqual nounFormsNoun (nokatN "nokat") inanimate
cc -table -unqual nounFormsNoun (gradaninN "građanin") animate
cc -table -unqual nounFormsNoun (vojnikN "vojnik") animate
cc -table -unqual nounFormsNoun (bubregN "bubreg") animate
cc -table -unqual nounFormsNoun (trbuhN "trbuh") animate
cc -table -unqual nounFormsNoun (cvorakN "čvorak") animate
cc -table -unqual nounFormsNoun (panjN "panj") inanimate
cc -table -unqual nounFormsNoun (suzanjN "sužanj") inanimate
cc -table -unqual nounFormsNoun (pristN "prišt") inanimate
cc -table -unqual nounFormsNoun (stricN "stric") animate
cc -table -unqual nounFormsNoun (klinacN "klinac") inanimate
cc -table -unqual nounFormsNoun (posjetilacN "posjetilac") animate
cc -table -unqual nounFormsNoun (pepeoN "pepeo") inanimate
cc -table -unqual nounFormsNoun (ugaoN "ugao") inanimate
cc -table -unqual nounFormsNoun (bifeN "bife") inanimate
cc -table -unqual nounFormsNoun (ziriN "žiri") inanimate
cc -table -unqual nounFormsNoun (taksiN "taksi") inanimate