mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-23 09:52:55 -06:00
new division of Nominal in uusisuomi
This commit is contained in:
353
examples/uusisuomi/Declensions.gf
Normal file
353
examples/uusisuomi/Declensions.gf
Normal file
@@ -0,0 +1,353 @@
|
|||||||
|
--# -path=.:alltenses
|
||||||
|
|
||||||
|
resource Declensions = ResFin ** open MorphoFin,CatFin,Prelude in {
|
||||||
|
|
||||||
|
flags optimize=all ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
|
||||||
|
dLujuus : Str -> NForms = \lujuus ->
|
||||||
|
let
|
||||||
|
lujuu = init lujuus ;
|
||||||
|
lujuuksi = lujuu + "ksi" ;
|
||||||
|
a = vowelHarmony (last lujuu) ;
|
||||||
|
in nForms10
|
||||||
|
lujuus (lujuu + "den") (lujuu + "tt" + a)
|
||||||
|
(lujuu + "ten" + a) (lujuu + "teen")
|
||||||
|
(lujuuksi + "en") (lujuuksi + a)
|
||||||
|
(lujuuksi + "n" + a) (lujuuksi + "ss" + a) (lujuuksi + "in") ;
|
||||||
|
|
||||||
|
dNainen : Str -> NForms = \nainen ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony nainen ;
|
||||||
|
nais = Predef.tk 3 nainen + "s"
|
||||||
|
in nForms10
|
||||||
|
nainen (nais + "en") (nais + "t" + a) (nais + "en" + a) (nais + "een")
|
||||||
|
(nais + "ten") (nais + "i" + a)
|
||||||
|
(nais + "in" + a) (nais + "iss" + a) (nais + "iin") ;
|
||||||
|
|
||||||
|
dPuu : Str -> NForms = \puu ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony puu ;
|
||||||
|
pui = init puu + "i" ;
|
||||||
|
u = last puu ;
|
||||||
|
in nForms10
|
||||||
|
puu (puu + "n") (puu + "t" + a) (puu + "n" + a) (puu + "h" + u + "n")
|
||||||
|
(pui + "den") (pui + "t" + a)
|
||||||
|
(pui + "n" + a) (pui + "ss" + a) (pui + "hin") ;
|
||||||
|
|
||||||
|
dSuo : Str -> NForms = \suo ->
|
||||||
|
let
|
||||||
|
o = last suo ;
|
||||||
|
a = vowelHarmony o ;
|
||||||
|
soi = Predef.tk 2 suo + o + "i" ;
|
||||||
|
in nForms10
|
||||||
|
suo (suo + "n") (suo + "t" + a) (suo + "n" + a) (suo + "h" + o + "n")
|
||||||
|
(soi + "den") (soi + "t" + a)
|
||||||
|
(soi + "n" + a) (soi + "ss" + a) (soi + "hin") ;
|
||||||
|
|
||||||
|
dKorkea : Str -> NForms = \korkea ->
|
||||||
|
let
|
||||||
|
a = last korkea ;
|
||||||
|
korke = init korkea ;
|
||||||
|
in nForms10
|
||||||
|
korkea (korkea + "n") (korkea + a)
|
||||||
|
(korkea + "n" + a) (korkea + a + "n")
|
||||||
|
(korke + "iden") (korke + "it" + a)
|
||||||
|
(korke + "in" + a) (korke + "iss" + a)
|
||||||
|
(korke + "isiin") ; --- NSSK: korkeihin
|
||||||
|
|
||||||
|
dKaunis : Str -> NForms = \kaunis ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony kaunis ;
|
||||||
|
kaunii = init kaunis + "i" ;
|
||||||
|
in nForms10
|
||||||
|
kaunis (kaunii + "n") (kaunis + "t" + a)
|
||||||
|
(kaunii + "n" + a) (kaunii + "seen")
|
||||||
|
(kaunii + "den") (kaunii + "t" + a)
|
||||||
|
(kaunii + "n" + a) (kaunii + "ss" + a)
|
||||||
|
(kaunii + "siin") ;
|
||||||
|
|
||||||
|
dLiitin : (_,_ : Str) -> NForms = \liitin,liittimen ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony liitin ;
|
||||||
|
liittim = Predef.tk 2 liittimen ;
|
||||||
|
in nForms10
|
||||||
|
liitin (liittim + "en") (liitin + "t" + a)
|
||||||
|
(liittim + "en" + a) (liittim + "een")
|
||||||
|
(liittim + "ien") (liittim + "i" + a)
|
||||||
|
(liittim + "in" + a) (liittim + "iss" + a)
|
||||||
|
(liittim + "iin") ;
|
||||||
|
|
||||||
|
dOnneton : Str -> NForms = \onneton ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony onneton ;
|
||||||
|
onnettom = Predef.tk 2 onneton + "t" + last (init onneton) + "m" ;
|
||||||
|
in nForms10
|
||||||
|
onneton (onnettom + a + "n") (onneton + "t" + a)
|
||||||
|
(onnettom + a + "n" + a) (onnettom + a + a + "n")
|
||||||
|
(onnettom + "ien") (onnettom + "i" + a)
|
||||||
|
(onnettom + "in" + a) (onnettom + "iss" + a)
|
||||||
|
(onnettom + "iin") ;
|
||||||
|
|
||||||
|
|
||||||
|
dUkko : (_,_ : Str) -> NForms = \ukko,ukon ->
|
||||||
|
let
|
||||||
|
o = last ukko ;
|
||||||
|
a = vowelHarmony o ;
|
||||||
|
ukk = init ukko ;
|
||||||
|
uko = init ukon ;
|
||||||
|
uk = init uko ;
|
||||||
|
ukkoja = case <ukko : Str> of {
|
||||||
|
_ + "ä" => -- kylä,kyliä,kylien,kylissä,kyliin
|
||||||
|
<ukk + "iä", ukk + "ien", ukk, uk, ukk + "iin"> ;
|
||||||
|
_ + ("au" | "eu") + _ + "a" => -- kauhojen,seurojen
|
||||||
|
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
|
||||||
|
_ + ("o" | "u") + _ + "a" => -- pula,pulia,pulien,pulissa,puliin
|
||||||
|
<ukk + "ia", ukk + "ien", ukk, uk, ukk + "iin"> ;
|
||||||
|
_ + "a" => -- kala,kaloja,kalojen,-oissa,-oihin
|
||||||
|
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
|
||||||
|
_ => -- suku,sukuja,sukujen,-uissa,-uihin
|
||||||
|
<ukko + "j" + a,ukko + "jen",ukko, uko, ukko + "ihin">
|
||||||
|
} ;
|
||||||
|
ukkoina = ukkoja.p3 + "in" + a ;
|
||||||
|
ukoissa = ukkoja.p4 + "iss" + a ;
|
||||||
|
in nForms10
|
||||||
|
ukko ukon (ukko + a) (ukko + "n" + a) (ukko + o + "n")
|
||||||
|
ukkoja.p2 ukkoja.p1
|
||||||
|
ukkoina ukoissa ukkoja.p5 ;
|
||||||
|
|
||||||
|
dSilakka : (_,_,_ : Str) -> NForms = \silakka,silakan,silakoita ->
|
||||||
|
let
|
||||||
|
a = last silakka ;
|
||||||
|
silakk = init silakka ;
|
||||||
|
silaka = init silakan ;
|
||||||
|
silak = init silaka ;
|
||||||
|
silakoiden = case <silakoita : Str> of {
|
||||||
|
_ + "i" + ("a" | "ä") => -- asemia
|
||||||
|
<silakk + "ien", silakk, silak, silakk + "iin"> ;
|
||||||
|
_ + o@("o" | "ö") + ("ja" | "jä") => -- pasuunoja
|
||||||
|
<silakk + o + "jen",silakk + o, silak + o, silakk + o + "ihin"> ;
|
||||||
|
_ + o@("o" | "ö") + ("ita" | "itä") => -- silakoita
|
||||||
|
<silak + o + "iden",silakk + o, silak + o, silakk + o + "ihin"> ;
|
||||||
|
_ => Predef.error silakoita
|
||||||
|
} ;
|
||||||
|
silakkoina = silakoiden.p2 + "in" + a ;
|
||||||
|
silakoissa = silakoiden.p3 + "iss" + a ;
|
||||||
|
in nForms10
|
||||||
|
silakka silakan (silakka + a) (silakka + "n" + a) (silakka + a + "n")
|
||||||
|
silakoiden.p1 silakoita
|
||||||
|
silakkoina silakoissa silakoiden.p4 ;
|
||||||
|
|
||||||
|
dArpi : (_,_ : Str) -> NForms = \arpi,arven ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony arpi ;
|
||||||
|
arp = init arpi ;
|
||||||
|
arv = Predef.tk 2 arven ;
|
||||||
|
ar = init arp ;
|
||||||
|
arpe = case last arp of {
|
||||||
|
"s" => case last arv of {
|
||||||
|
"d" | "l" | "n" | "r" => -- suden,sutta ; jälsi ; kansi ; hirsi
|
||||||
|
<ar + "tt" + a, arpi + "en",arpi,ar + "t"> ;
|
||||||
|
_ => -- kuusta,kuusien
|
||||||
|
<arp + "t" + a,arp + "ien",arpi, arp>
|
||||||
|
} ;
|
||||||
|
"r" | "n" => -- suurta,suurten
|
||||||
|
<arp + "t" + a,arp + "ten",arpi, arp>;
|
||||||
|
"l" | "h" => -- tuulta,tuulien
|
||||||
|
<arp + "t" + a,arp + "ien",arpi, arp>;
|
||||||
|
_ => -- arpea,arpien,arvissa
|
||||||
|
<arp + "e" + a,arp + "ien",arv+"i",arp>
|
||||||
|
} ; ---- pieni,pientä; uni,unta
|
||||||
|
in nForms10
|
||||||
|
arpi arven arpe.p1 (arpe.p4 + "en" + a) (arpe.p4 + "een")
|
||||||
|
arpe.p2 (arpi + a)
|
||||||
|
(arp + "in" + a) (arpe.p3 + "ss" + a) (arp + "iin") ;
|
||||||
|
|
||||||
|
dRae : (_,_ : Str) -> NForms = \rae,rakeen ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony rae ;
|
||||||
|
rakee = init rakeen ;
|
||||||
|
rakei = init rakee + "i" ;
|
||||||
|
raetta = case <rae : Str> of {
|
||||||
|
_ + "e" =>
|
||||||
|
<rae + "tt" + a, rakee + "seen"> ; -- raetta,rakeeseen
|
||||||
|
_ + "s" =>
|
||||||
|
<rae + "t" + a, rakee + "seen"> ; -- rengasta,renkaaseen
|
||||||
|
_ + "t" =>
|
||||||
|
<rae + "t" + a, rakee + "en"> ; -- olutta,olueen
|
||||||
|
_ + "r" =>
|
||||||
|
<rae + "t" + a, rakee + "en"> ; -- sisarta,sisareen
|
||||||
|
_ => Predef.error (["expected ending e/t/s/r, found"] ++ rae)
|
||||||
|
} ;
|
||||||
|
in nForms10
|
||||||
|
rae rakeen raetta.p1 (rakee + "n"+ a) raetta.p2
|
||||||
|
(rakei + "den") (rakei + "t" + a)
|
||||||
|
(rakei + "n" + a) (rakei + "ss" + a) (rakei + "siin") ; ---- sisariin
|
||||||
|
|
||||||
|
dPaatti : (_,_ : Str) -> NForms = \paatti,paatin ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony paatti ;
|
||||||
|
paatte = init paatti + "e" ;
|
||||||
|
paati = init paatin ;
|
||||||
|
paate = init paati + "e" ;
|
||||||
|
in nForms10
|
||||||
|
paatti paatin (paatti + a) (paatti + "n" + a) (paatti + "in")
|
||||||
|
(paatti + "en") (paatte + "j" + a)
|
||||||
|
(paatte + "in" + a) (paate + "iss" + a) (paatte + "ihin") ;
|
||||||
|
|
||||||
|
dPiennar : (_,_ : Str) -> NForms = \piennar,pientaren ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony piennar ;
|
||||||
|
pientar = Predef.tk 2 pientaren ;
|
||||||
|
in nForms10
|
||||||
|
piennar pientaren (piennar +"t" + a)
|
||||||
|
(pientar + "en" + a) (pientar + "een")
|
||||||
|
(piennar + "ten") (pientar + "i" + a) (pientar + "in" + a)
|
||||||
|
(pientar + "iss" + a) (pientar + "iin") ;
|
||||||
|
|
||||||
|
dUnix : (_ : Str) -> NForms = \unix ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony unix ;
|
||||||
|
unixi = unix + "i" ;
|
||||||
|
unixe = unix + "e" ;
|
||||||
|
in nForms10
|
||||||
|
unix (unixi + "n") (unixi + a) (unixi + "n" + a) (unixi + "in")
|
||||||
|
(unixi + "en") (unixe + "j" + a) (unixe + "in" + a)
|
||||||
|
(unixe + "iss" + a) (unixe + "ihin") ;
|
||||||
|
|
||||||
|
dNukke : (_,_ : Str) -> NForms = \nukke,nuken ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony nukke ;
|
||||||
|
nukk = init nukke ;
|
||||||
|
nuke = init nuken ;
|
||||||
|
in
|
||||||
|
nForms10
|
||||||
|
nukke nuken (nukke + a) (nukk +"en" + a) (nukk + "een")
|
||||||
|
(nukk + "ien") (nukk + "ej" + a) (nukk + "ein" + a)
|
||||||
|
(nuke + "iss" + a) (nukk + "eihin") ;
|
||||||
|
|
||||||
|
dJalas : Str -> NForms = \jalas ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony jalas ;
|
||||||
|
jalaks = init jalas + "ks" ;
|
||||||
|
jalaksi = jalaks + "i" ;
|
||||||
|
in nForms10
|
||||||
|
jalas (jalaks + "en") (jalas + "t" + a)
|
||||||
|
(jalaks + "en" + a) (jalaks + "een")
|
||||||
|
(jalas + "ten") (jalaksi + a)
|
||||||
|
(jalaksi + "n" + a) (jalaksi + "ss" + a) (jalaksi + "in") ;
|
||||||
|
|
||||||
|
|
||||||
|
NForms : Type = Predef.Ints 9 => Str ;
|
||||||
|
|
||||||
|
nForms10 : (x1,_,_,_,_,_,_,_,_,x10 : Str) -> NForms =
|
||||||
|
\Ukko,ukon,ukkoa,ukkona,ukkoon,
|
||||||
|
ukkojen,ukkoja,ukkoina,ukoissa,ukkoihin -> table {
|
||||||
|
0 => Ukko ;
|
||||||
|
1 => ukon ;
|
||||||
|
2 => ukkoa ;
|
||||||
|
3 => ukkona ;
|
||||||
|
4 => ukkoon ;
|
||||||
|
5 => ukkojen ;
|
||||||
|
6 => ukkoja ;
|
||||||
|
7 => ukkoina ;
|
||||||
|
8 => ukoissa ;
|
||||||
|
9 => ukkoihin
|
||||||
|
} ;
|
||||||
|
|
||||||
|
nForms2N : NForms -> N = \f ->
|
||||||
|
let
|
||||||
|
Ukko = f ! 0 ;
|
||||||
|
ukon = f ! 1 ;
|
||||||
|
ukkoa = f ! 2 ;
|
||||||
|
ukkona = f ! 3 ;
|
||||||
|
ukkoon = f ! 4 ;
|
||||||
|
ukkojen = f ! 5 ;
|
||||||
|
ukkoja = f ! 6 ;
|
||||||
|
ukkoina = f ! 7 ;
|
||||||
|
ukoissa = f ! 8 ;
|
||||||
|
ukkoihin = f ! 9 ;
|
||||||
|
a = last ukkoja ;
|
||||||
|
uko = init ukon ;
|
||||||
|
ukko = Predef.tk 2 ukkona ;
|
||||||
|
ukkoi = Predef.tk 2 ukkoina ;
|
||||||
|
ukoi = Predef.tk 3 ukoissa ;
|
||||||
|
in
|
||||||
|
{s = table {
|
||||||
|
NCase Sg Nom => Ukko ;
|
||||||
|
NCase Sg Gen => uko + "n" ;
|
||||||
|
NCase Sg Part => ukkoa ;
|
||||||
|
NCase Sg Transl => uko + "ksi" ;
|
||||||
|
NCase Sg Ess => ukkona ;
|
||||||
|
NCase Sg Iness => uko + ("ss" + a) ;
|
||||||
|
NCase Sg Elat => uko + ("st" + a) ;
|
||||||
|
NCase Sg Illat => ukkoon ;
|
||||||
|
NCase Sg Adess => uko + ("ll" + a) ;
|
||||||
|
NCase Sg Ablat => uko + ("lt" + a) ;
|
||||||
|
NCase Sg Allat => uko + "lle" ;
|
||||||
|
NCase Sg Abess => uko + ("tt" + a) ;
|
||||||
|
|
||||||
|
NCase Pl Nom => uko + "t" ;
|
||||||
|
NCase Pl Gen => ukkojen ;
|
||||||
|
NCase Pl Part => ukkoja ;
|
||||||
|
NCase Pl Transl => ukoi + "ksi" ;
|
||||||
|
NCase Pl Ess => ukkoina ;
|
||||||
|
NCase Pl Iness => ukoissa ;
|
||||||
|
NCase Pl Elat => ukoi + ("st" + a) ;
|
||||||
|
NCase Pl Illat => ukkoihin ;
|
||||||
|
NCase Pl Adess => ukoi + ("ll" + a) ;
|
||||||
|
NCase Pl Ablat => ukoi + ("lt" + a) ;
|
||||||
|
NCase Pl Allat => ukoi + "lle" ;
|
||||||
|
NCase Pl Abess => ukoi + ("tt" + a) ;
|
||||||
|
|
||||||
|
NComit => ukkoi + "ne" ;
|
||||||
|
NInstruct => ukoi + "n" ;
|
||||||
|
|
||||||
|
NPossNom _ => ukko ;
|
||||||
|
NPossGen Sg => ukko ;
|
||||||
|
NPossGen Pl => init ukkojen ;
|
||||||
|
NPossTransl Sg => uko + "kse" ;
|
||||||
|
NPossTransl Pl => ukoi + "kse" ;
|
||||||
|
NPossIllat Sg => init ukkoon ;
|
||||||
|
NPossIllat Pl => init ukkoihin
|
||||||
|
} ;
|
||||||
|
lock_N = <>
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
--- This is used to analyse nouns "rae", "hake", "rengas", "laidun", etc.
|
||||||
|
|
||||||
|
strongGrade : Str -> Str = \hanke ->
|
||||||
|
let
|
||||||
|
ha = Predef.tk 3 hanke ;
|
||||||
|
nke = Predef.dp 3 hanke ;
|
||||||
|
in
|
||||||
|
ha + case nke of {
|
||||||
|
"ng" + a => "nk" + a ;
|
||||||
|
"nn" + e => "nt" + e ;
|
||||||
|
"mm" + e => "mp" + e ;
|
||||||
|
"rr" + e => "rt" + e ;
|
||||||
|
"ll" + a => "lt" + a ;
|
||||||
|
h@("h" | "l") + "j" + e => h + "k" + e ; -- pohje/lahje impossible
|
||||||
|
("hk" | "sk" | "sp" | "st") + _ => nke ; -- viuhke,kuiske
|
||||||
|
a + k@("k" | "p" | "t") + e@("e"|"a"|"ä"|"u"|"i") => a + k + k + e ;
|
||||||
|
a + "d" + e@("e"|"a"|"ä"|"u"|"i") => a + "t" + e ;
|
||||||
|
s + a@("a" | "ä") + "e" => s + a + "ke" ; -- säe, tae
|
||||||
|
a + "v" + e@("e"|"a"|"ä"|"u"|"i") => a + "p" + e ; -- taive/toive imposs
|
||||||
|
ase => ase
|
||||||
|
} ;
|
||||||
|
|
||||||
|
part2casePl : Str -> Str * Str * Str * Str = \savia -> case savia of {
|
||||||
|
sav + "i" + a@("a" | "ä") =>
|
||||||
|
<sav + "ien", sav + "in" + a, sav + "iss" + a, sav + "iin"> ;
|
||||||
|
elio + "it" + a@("a" | "ä") =>
|
||||||
|
<elio + "iden", elio + "in" + a, elio + "iss" + a, elio + "ihin"> ;
|
||||||
|
maal + "ej" + a@("a" | "ä") =>
|
||||||
|
<maal + "ien", maal + "ein" + a, maal + "eiss" + a, maal + "eihin"> ;
|
||||||
|
talo + "j" + a@("a" | "ä") =>
|
||||||
|
<talo + "jen", talo + "in" + a, talo + "iss" + a, talo + "ihin"> ;
|
||||||
|
_ => Predef.error (["impossible plural partitive"] ++ savia)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
--# -path=.:alltenses
|
--# -path=.:alltenses
|
||||||
|
|
||||||
resource Nominal = ResFin ** open MorphoFin,CatFin,Prelude in {
|
resource Nominal = ResFin ** open MorphoFin,Declensions,CatFin,Prelude in {
|
||||||
|
|
||||||
flags optimize=all ;
|
flags optimize=noexpand ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
@@ -16,169 +16,49 @@ resource Nominal = ResFin ** open MorphoFin,CatFin,Prelude in {
|
|||||||
|
|
||||||
nForms1 : Str -> NForms = \ukko ->
|
nForms1 : Str -> NForms = \ukko ->
|
||||||
let
|
let
|
||||||
a = vowelHarmony ukko ;
|
|
||||||
ukk = init ukko ;
|
ukk = init ukko ;
|
||||||
uko = weakGrade ukko ;
|
uko = weakGrade ukko ;
|
||||||
rake = Nominal.strongGrade ukko ;
|
renka = Declensions.strongGrade (init ukko) ;
|
||||||
renka = Nominal.strongGrade (init ukko) ;
|
rake = Declensions.strongGrade ukko ;
|
||||||
o = last ukko ;
|
|
||||||
in
|
in
|
||||||
case ukko of {
|
case ukko of {
|
||||||
_ + ("us" | "ys") =>
|
_ + ("us" | "ys") => dLujuus ukko ;
|
||||||
let
|
_ + "nen" => dNainen ukko ;
|
||||||
lujuus = ukko ;
|
_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" |"ää"|"öö") => dPuu ukko ;
|
||||||
lujuu = ukk ;
|
_ + ("ai" | "ei" | "oi" | "ui" | "yi" | "äi" | "öi") => dPuu ukko ;
|
||||||
lujuuksi = ukk + "ksi"
|
_ + ("ie" | "uo" | "yö") => dSuo ukko ;
|
||||||
in nForms10
|
_ + ("ea" | "eä") => dKorkea ukko ;
|
||||||
lujuus (lujuu + "den") (lujuu + "tt" + a)
|
_ + "is" => dKaunis ukko ;
|
||||||
(lujuu + "ten" + a) (lujuu + "teen")
|
_ + ("i" | "u") + "n" => dLiitin ukko (renka + "men") ;
|
||||||
(lujuuksi + "en") (lujuuksi + a)
|
_ + ("ton" | "tön") => dOnneton ukko ;
|
||||||
(lujuuksi + "n" + a) (lujuuksi + "ss" + a) (lujuuksi + "in") ;
|
_ + ("ut" | "yt") => dRae ukko (ukk + "en") ;
|
||||||
_ + "nen" =>
|
_ + ("as" | "äs") => dRae ukko (renka + last renka + "n") ;
|
||||||
let
|
_ + "e" => dRae ukko (rake + "en") ;
|
||||||
nainen = ukko ;
|
_ + ("a" | "o" | "u" | "y" | "ä" | "ö") => dUkko ukko (uko + "n") ;
|
||||||
nais = Predef.tk 3 ukko + "s"
|
_ + "i" => dPaatti ukko (uko + "n") ;
|
||||||
in nForms10
|
_ + ("ar" | "är") => dPiennar ukko (renka + "ren") ;
|
||||||
nainen (nais + "en") (nais + "t" + a) (nais + "en" + a) (nais + "een")
|
_ + "e" + ("l" | "n") => dPiennar ukko (ukko + "en") ;
|
||||||
(nais + "ten") (nais + "i" + a)
|
_ => dUnix ukko
|
||||||
(nais + "in" + a) (nais + "iss" + a) (nais + "iin") ;
|
|
||||||
_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö") =>
|
|
||||||
let
|
|
||||||
puu = ukko ;
|
|
||||||
pui = ukk + "i" ;
|
|
||||||
u = o ;
|
|
||||||
in nForms10
|
|
||||||
puu (puu + "n") (puu + "t" + a) (puu + "n" + a) (puu + "h" + u + "n")
|
|
||||||
(pui + "den") (pui + "t" + a)
|
|
||||||
(pui + "n" + a) (pui + "ss" + a) (pui + "hin") ;
|
|
||||||
_ + ("ie" | "uo" | "yö") =>
|
|
||||||
let
|
|
||||||
suo = ukko ;
|
|
||||||
soi = init ukk + o + "i" ;
|
|
||||||
in nForms10
|
|
||||||
suo (suo + "n") (suo + "t" + a) (suo + "n" + a) (suo + "h" + o + "n")
|
|
||||||
(soi + "den") (soi + "t" + a)
|
|
||||||
(soi + "n" + a) (soi + "ss" + a) (soi + "hin") ;
|
|
||||||
_ + ("ea" | "eä") =>
|
|
||||||
let
|
|
||||||
korkea = ukko ;
|
|
||||||
korke = init ukko ;
|
|
||||||
in nForms10
|
|
||||||
korkea (korkea + "n") (korkea + a)
|
|
||||||
(korkea + "n" + a) (korkea + a + "n")
|
|
||||||
(korke + "iden") (korke + "it" + a)
|
|
||||||
(korke + "in" + a) (korke + "iss" + a)
|
|
||||||
(korke + "isiin") ; --- NSSK: korkeihin
|
|
||||||
_ + "is" =>
|
|
||||||
let
|
|
||||||
kaunis = ukko ;
|
|
||||||
kaunii = init kaunis + "i" ;
|
|
||||||
in nForms10
|
|
||||||
kaunis (kaunii + "n") (kaunis + "t" + a)
|
|
||||||
(kaunii + "n" + a) (kaunii + "seen")
|
|
||||||
(kaunii + "den") (kaunii + "t" + a)
|
|
||||||
(kaunii + "n" + a) (kaunii + "ss" + a)
|
|
||||||
(kaunii + "siin") ;
|
|
||||||
|
|
||||||
_ + ("i" | "u") + "n" => -- liitin,laidun
|
|
||||||
let
|
|
||||||
liitin = ukko ;
|
|
||||||
liittim = renka + "m" ;
|
|
||||||
in nForms10
|
|
||||||
liitin (liittim + "en") (liitin + "t" + a)
|
|
||||||
(liittim + "en" + a) (liittim + "een")
|
|
||||||
(liittim + "ien") (liittim + "i" + a)
|
|
||||||
(liittim + "in" + a) (liittim + "iss" + a)
|
|
||||||
(liittim + "iin") ;
|
|
||||||
|
|
||||||
onne + "t" + on@("on" | "ön") =>
|
|
||||||
let
|
|
||||||
onneton = ukko ;
|
|
||||||
onnettom = onne + "tt" + init on + "m" ;
|
|
||||||
in nForms10
|
|
||||||
onneton (onnettom + a + "n") (onneton + "t" + a)
|
|
||||||
(onnettom + a + "n" + a) (onnettom + a + a + "n")
|
|
||||||
(onnettom + "ien") (onnettom + "i" + a)
|
|
||||||
(onnettom + "in" + a) (onnettom + "iss" + a)
|
|
||||||
(onnettom + "iin") ;
|
|
||||||
|
|
||||||
_ + ("ut" | "yt") => -- olut,kätkyt
|
|
||||||
nForms_rae ukko (ukk + "en" + a) ;
|
|
||||||
_ + ("as" | "äs") => -- rengas,rypäs
|
|
||||||
nForms_rae ukko (renka + a + "n" + a) ;
|
|
||||||
_ + ("ar" | "är") => -- piennar,tytär
|
|
||||||
nForms_rae ukko (renka + "ren" + a) ;
|
|
||||||
_ + "e" =>
|
|
||||||
nForms_rae ukko (rake + "en" + a) ;
|
|
||||||
|
|
||||||
_ + ("a" | "o" | "u" | "y" | "ä" | "ö") =>
|
|
||||||
nForms_ukko ukko (uko + "n") ;
|
|
||||||
|
|
||||||
_ + "i" =>
|
|
||||||
let
|
|
||||||
paatte = ukk + "e" ;
|
|
||||||
paate = init uko + "e" ;
|
|
||||||
in nForms10
|
|
||||||
ukko (uko + "n") (ukko + a) (ukko + "n" + a) (ukko + "in")
|
|
||||||
(ukko + "en") (paatte + "j" + a)
|
|
||||||
(paatte + "in" + a) (paate + "iss" + a) (paatte + "ihin") ;
|
|
||||||
_ + "e" + ("l" | "n") =>
|
|
||||||
let
|
|
||||||
ahven = ukko ;
|
|
||||||
in nForms10
|
|
||||||
ahven (ahven + "en") (ahven +"t" + a)
|
|
||||||
(ahven + "en" + a) (ahven + "een")
|
|
||||||
(ahven + "ten") (ahven + "i" + a) (ahven + "in" + a)
|
|
||||||
(ahven + "iss" + a) (ahven + "iin") ;
|
|
||||||
_ =>
|
|
||||||
let
|
|
||||||
unixi = ukko + "i" ;
|
|
||||||
unixe = ukko + "e" ;
|
|
||||||
in nForms10
|
|
||||||
ukko (unixi + "n") (unixi + a) (unixi + "n" + a) (unixi + "in")
|
|
||||||
(unixi + "en") (unixe + "j" + a) (unixe + "in" + a)
|
|
||||||
(unixe + "iss" + a) (unixe + "ihin")
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
nForms2 : (_,_ : Str) -> NForms = \ukko,ukon ->
|
nForms2 : (_,_ : Str) -> NForms = \ukko,ukon ->
|
||||||
let
|
let
|
||||||
a = vowelHarmony ukko ;
|
|
||||||
ukk = init ukko ;
|
ukk = init ukko ;
|
||||||
ukot = nForms1 ukko ;
|
|
||||||
in
|
in
|
||||||
case <ukko,ukon> of {
|
case <ukko,ukon> of {
|
||||||
<_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" |
|
<_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" |
|
||||||
"ie" | "uo" | "yö"), _ + "n"> => ukot ; --- to protect these
|
"ie" | "uo" | "yö" | "ea" | "eä"), _ + "n"> =>
|
||||||
|
nForms1 ukko ; --- to protect
|
||||||
<_ + ("a" | "o" | "u" | "y" | "ä" | "ö"), _ + "n"> =>
|
<_ + ("a" | "o" | "u" | "y" | "ä" | "ö"), _ + "n"> =>
|
||||||
nForms_ukko ukko ukon ; -- auto,auton
|
dUkko ukko ukon ; -- auto,auton
|
||||||
<arp + "i", arv + "en"> =>
|
<arp + "i", arv + "en"> => dArpi ukko ukon ;
|
||||||
nForms_arpi ukko ukon (arp + "i" + a) ;
|
|
||||||
<arp + "i", _ + "i" + ("a" | "ä")> => -- for b-w compat.
|
<arp + "i", _ + "i" + ("a" | "ä")> => -- for b-w compat.
|
||||||
nForms_arpi ukko (init (weakGrade ukko) + "en") ukon ;
|
dArpi ukko (init (weakGrade ukko) + "en") ;
|
||||||
<terv + "e", terv + "een"> =>
|
<terv + "e", terv + "een"> =>
|
||||||
nForms_rae ukko (terv + "een" + a) ;
|
dRae ukko (terv + "een") ;
|
||||||
<nukk + "e", nuk + "en"> =>
|
<nukk + "e", nuk + "en"> => dNukke ukko ukon ;
|
||||||
nForms10
|
<_ + "s", _ + "ksen"> => dJalas ukko ;
|
||||||
ukko ukon (ukko + a) (nukk +"en" + a) (nukk + "een")
|
<_, _ + "n"> => nForms1 ukko ;
|
||||||
(nukk + "ien") (nukk + "ej" + a) (nukk + "ein" + a)
|
|
||||||
(nuk + "eiss" + a) (nukk + "eihin") ;
|
|
||||||
<_ + "s", _ + "ksen"> => table {
|
|
||||||
1 => ukon ;
|
|
||||||
2 => ukko + "t" + a ;
|
|
||||||
3 => ukk + "ksen" + a ;
|
|
||||||
4 => ukk + "kseen" ;
|
|
||||||
n => ukot ! n
|
|
||||||
} ;
|
|
||||||
<_,_ + "n"> => table {
|
|
||||||
1 => ukon ;
|
|
||||||
n => ukot ! n
|
|
||||||
} ;
|
|
||||||
<_,_ + ("a" | "ä")> => table { -- for b-w compat.
|
|
||||||
5 => (part2casePl ukon).p1 ;
|
|
||||||
6 => ukon ;
|
|
||||||
n => ukot ! n
|
|
||||||
} ;
|
|
||||||
_ =>
|
_ =>
|
||||||
Predef.error (["second argument should end in n, not"] ++ ukon)
|
Predef.error (["second argument should end in n, not"] ++ ukon)
|
||||||
} ;
|
} ;
|
||||||
@@ -188,23 +68,13 @@ resource Nominal = ResFin ** open MorphoFin,CatFin,Prelude in {
|
|||||||
ukot = nForms2 ukko ukon ;
|
ukot = nForms2 ukko ukon ;
|
||||||
in
|
in
|
||||||
case <ukko,ukon,ukkoja> of {
|
case <ukko,ukon,ukkoja> of {
|
||||||
|
|
||||||
|
<_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" |
|
||||||
|
"ie" | "uo" | "yö" | "ea" | "eä"), _ + "n", _> =>
|
||||||
|
nForms1 ukko ; --- to protect
|
||||||
<_ + "a" | "ä", _ + "n", _ + ("a" | "ä")> =>
|
<_ + "a" | "ä", _ + "n", _ + ("a" | "ä")> =>
|
||||||
let ukkojen = part2casePl ukkoja in
|
dSilakka ukko ukon ukkoja ;
|
||||||
table {
|
<_, _ + "n", _ + ("a" | "ä")> => ukot ;
|
||||||
5 => ukkojen.p1 ;
|
|
||||||
6 => ukkoja ;
|
|
||||||
7 => ukkojen.p2 ;
|
|
||||||
8 => ukkojen.p3 ;
|
|
||||||
9 => ukkojen.p4 ;
|
|
||||||
n => ukot ! n
|
|
||||||
} ;
|
|
||||||
<_,_ + "n", _ + ("a" | "ä")> =>
|
|
||||||
let ukkojen = part2casePl ukkoja in
|
|
||||||
table {
|
|
||||||
5 => ukkojen.p1 ;
|
|
||||||
6 => ukkoja ;
|
|
||||||
n => ukot ! n
|
|
||||||
} ;
|
|
||||||
_ =>
|
_ =>
|
||||||
Predef.error
|
Predef.error
|
||||||
(["last arguments should end in n and a/ä, not"] ++ ukon ++ ukkoja)
|
(["last arguments should end in n and a/ä, not"] ++ ukon ++ ukkoja)
|
||||||
@@ -226,191 +96,4 @@ resource Nominal = ResFin ** open MorphoFin,CatFin,Prelude in {
|
|||||||
ukon ++ ukkoa ++ ukkoja)
|
ukon ++ ukkoa ++ ukkoja)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- auxiliary "declensions"
|
|
||||||
|
|
||||||
nForms_ukko : (_,_ : Str) -> NForms = \ukko,ukon ->
|
|
||||||
let
|
|
||||||
o = last ukko ;
|
|
||||||
a = getHarmony o ;
|
|
||||||
ukk = init ukko ;
|
|
||||||
uko = init ukon ;
|
|
||||||
uk = init uko ;
|
|
||||||
ukkoja = case <ukko : Str> of {
|
|
||||||
_ + "ä" => -- kylä,kyliä,kylien,kylissä,kyliin
|
|
||||||
<ukk + "iä", ukk + "ien", ukk, uk, ukk + "iin"> ;
|
|
||||||
_ + ("au" | "eu") + _ + "a" => -- kauhojen,seurojen
|
|
||||||
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
|
|
||||||
_ + ("o" | "u") + _ + "a" => -- pula,pulia,pulien,pulissa,puliin
|
|
||||||
<ukk + "ia", ukk + "ien", ukk, uk, ukk + "iin"> ;
|
|
||||||
_ + "a" => -- kala,kaloja,kalojen,-oissa,-oihin
|
|
||||||
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
|
|
||||||
_ => -- suku,sukuja,sukujen,-uissa,-uihin
|
|
||||||
<ukko + "j" + a,ukko + "jen",ukko, uko, ukko + "ihin">
|
|
||||||
} ;
|
|
||||||
ukkoina = ukkoja.p3 + "in" + a ;
|
|
||||||
ukoissa = ukkoja.p4 + "iss" + a ;
|
|
||||||
in nForms10
|
|
||||||
ukko ukon (ukko + a) (ukko + "n" + a) (ukko + o + "n")
|
|
||||||
ukkoja.p2 ukkoja.p1
|
|
||||||
ukkoina ukoissa ukkoja.p5 ;
|
|
||||||
|
|
||||||
|
|
||||||
nForms_arpi : (_,_,_ : Str) -> NForms = \arpi,arven,arpia ->
|
|
||||||
let
|
|
||||||
a = last arpia ;
|
|
||||||
arp = init arpi ;
|
|
||||||
arv = Predef.tk 2 arven ;
|
|
||||||
ar = init arp ;
|
|
||||||
arpe = case last arp of {
|
|
||||||
"s" => case last arv of {
|
|
||||||
"d" | "l" | "n" | "r" => -- suden,sutta ; jälsi ; kansi ; hirsi
|
|
||||||
<ar + "tt" + a, arpi + "en",arpi,ar + "t"> ;
|
|
||||||
_ => -- kuusen,kuusta
|
|
||||||
<arp + "t" + a,arp + "ten",arpi, arp> ---- suksi,suksen
|
|
||||||
} ;
|
|
||||||
"r" => -- suurta,suurten
|
|
||||||
<arp + "t" + a,arp + "ten",arpi, arp>;
|
|
||||||
"l" | "h" => -- tuulta,tuulien
|
|
||||||
<arp + "t" + a,arp + "ien",arpi, arp>;
|
|
||||||
_ => -- arpea,arpien,arvissa
|
|
||||||
<arp + "e" + a,arp + "ien",arv+"i",arp>
|
|
||||||
} ; ---- pieni,pientä; uni,unta
|
|
||||||
in nForms10
|
|
||||||
arpi arven arpe.p1 (arpe.p4 + "en" + a) (arpe.p4 + "een")
|
|
||||||
arpe.p2 arpia
|
|
||||||
(arp + "in" + a) (arpe.p3 + "ss" + a) (arp + "iin") ;
|
|
||||||
|
|
||||||
nForms_rae : (_,_ : Str) -> NForms = \rae,rakeena ->
|
|
||||||
let
|
|
||||||
a = last rakeena ;
|
|
||||||
rakee = Predef.tk 2 rakeena ;
|
|
||||||
rakei = init rakee + "i" ;
|
|
||||||
raetta = case <rae : Str> of {
|
|
||||||
_ + "e" =>
|
|
||||||
<rae + "tt" + a, rakee + "seen"> ; -- raetta,rakeeseen
|
|
||||||
_ + "s" =>
|
|
||||||
<rae + "t" + a, rakee + "seen"> ; -- rengasta,renkaaseen
|
|
||||||
_ + "t" =>
|
|
||||||
<rae + "t" + a, rakee + "en"> ; -- olutta,olueen
|
|
||||||
_ + "r" =>
|
|
||||||
<rae + "t" + a, rakee + "en"> ; -- sisarta,sisareen
|
|
||||||
_ => Predef.error (["expected ending e/t/s/r, found"] ++ rae)
|
|
||||||
} ;
|
|
||||||
in nForms10
|
|
||||||
rae (rakee + "n") raetta.p1 (rakee + "n"+ a) raetta.p2
|
|
||||||
(rakei + "den") (rakei + "t" + a)
|
|
||||||
(rakei + "n" + a) (rakei + "ss" + a) (rakei + "siin") ; ---- sisariin
|
|
||||||
|
|
||||||
NForms : Type = Predef.Ints 9 => Str ;
|
|
||||||
|
|
||||||
nForms10 : (x1,_,_,_,_,_,_,_,_,x10 : Str) -> NForms =
|
|
||||||
\Ukko,ukon,ukkoa,ukkona,ukkoon,
|
|
||||||
ukkojen,ukkoja,ukkoina,ukoissa,ukkoihin -> table {
|
|
||||||
0 => Ukko ;
|
|
||||||
1 => ukon ;
|
|
||||||
2 => ukkoa ;
|
|
||||||
3 => ukkona ;
|
|
||||||
4 => ukkoon ;
|
|
||||||
5 => ukkojen ;
|
|
||||||
6 => ukkoja ;
|
|
||||||
7 => ukkoina ;
|
|
||||||
8 => ukoissa ;
|
|
||||||
9 => ukkoihin
|
|
||||||
} ;
|
|
||||||
|
|
||||||
nForms2N : NForms -> N = \f ->
|
|
||||||
let
|
|
||||||
Ukko = f ! 0 ;
|
|
||||||
ukon = f ! 1 ;
|
|
||||||
ukkoa = f ! 2 ;
|
|
||||||
ukkona = f ! 3 ;
|
|
||||||
ukkoon = f ! 4 ;
|
|
||||||
ukkojen = f ! 5 ;
|
|
||||||
ukkoja = f ! 6 ;
|
|
||||||
ukkoina = f ! 7 ;
|
|
||||||
ukoissa = f ! 8 ;
|
|
||||||
ukkoihin = f ! 9 ;
|
|
||||||
a = last ukkoja ;
|
|
||||||
uko = init ukon ;
|
|
||||||
ukko = Predef.tk 2 ukkona ;
|
|
||||||
ukkoi = Predef.tk 2 ukkoina ;
|
|
||||||
ukoi = Predef.tk 3 ukoissa ;
|
|
||||||
in
|
|
||||||
{s = table {
|
|
||||||
NCase Sg Nom => Ukko ;
|
|
||||||
NCase Sg Gen => uko + "n" ;
|
|
||||||
NCase Sg Part => ukkoa ;
|
|
||||||
NCase Sg Transl => uko + "ksi" ;
|
|
||||||
NCase Sg Ess => ukkona ;
|
|
||||||
NCase Sg Iness => uko + ("ss" + a) ;
|
|
||||||
NCase Sg Elat => uko + ("st" + a) ;
|
|
||||||
NCase Sg Illat => ukkoon ;
|
|
||||||
NCase Sg Adess => uko + ("ll" + a) ;
|
|
||||||
NCase Sg Ablat => uko + ("lt" + a) ;
|
|
||||||
NCase Sg Allat => uko + "lle" ;
|
|
||||||
NCase Sg Abess => uko + ("tt" + a) ;
|
|
||||||
|
|
||||||
NCase Pl Nom => uko + "t" ;
|
|
||||||
NCase Pl Gen => ukkojen ;
|
|
||||||
NCase Pl Part => ukkoja ;
|
|
||||||
NCase Pl Transl => ukoi + "ksi" ;
|
|
||||||
NCase Pl Ess => ukkoina ;
|
|
||||||
NCase Pl Iness => ukoissa ;
|
|
||||||
NCase Pl Elat => ukoi + ("st" + a) ;
|
|
||||||
NCase Pl Illat => ukkoihin ;
|
|
||||||
NCase Pl Adess => ukoi + ("ll" + a) ;
|
|
||||||
NCase Pl Ablat => ukoi + ("lt" + a) ;
|
|
||||||
NCase Pl Allat => ukoi + "lle" ;
|
|
||||||
NCase Pl Abess => ukoi + ("tt" + a) ;
|
|
||||||
|
|
||||||
NComit => ukkoi + "ne" ;
|
|
||||||
NInstruct => ukoi + "n" ;
|
|
||||||
|
|
||||||
NPossNom _ => ukko ;
|
|
||||||
NPossGen Sg => ukko ;
|
|
||||||
NPossGen Pl => init ukkojen ;
|
|
||||||
NPossTransl Sg => uko + "kse" ;
|
|
||||||
NPossTransl Pl => ukoi + "kse" ;
|
|
||||||
NPossIllat Sg => init ukkoon ;
|
|
||||||
NPossIllat Pl => init ukkoihin
|
|
||||||
} ;
|
|
||||||
lock_N = <>
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
--- This is used to analyse nouns "rae", "hake", "rengas", "laidun", etc.
|
|
||||||
|
|
||||||
strongGrade : Str -> Str = \hanke ->
|
|
||||||
let
|
|
||||||
ha = Predef.tk 3 hanke ;
|
|
||||||
nke = Predef.dp 3 hanke ;
|
|
||||||
in
|
|
||||||
ha + case nke of {
|
|
||||||
"ng" + a => "nk" + a ;
|
|
||||||
"nn" + e => "nt" + e ;
|
|
||||||
"mm" + e => "mp" + e ;
|
|
||||||
"rr" + e => "rt" + e ;
|
|
||||||
"ll" + a => "lt" + a ;
|
|
||||||
h@("h" | "l") + "j" + e => h + "k" + e ; -- pohje/lahje impossible
|
|
||||||
("hk" | "sk" | "sp" | "st") + _ => nke ; -- viuhke,kuiske
|
|
||||||
a + k@("k" | "p" | "t") + e@("e"|"a"|"ä"|"u"|"i") => a + k + k + e ;
|
|
||||||
a + "d" + e@("e"|"a"|"ä"|"u"|"i") => a + "t" + e ;
|
|
||||||
s + a@("a" | "ä") + "e" => s + a + "ke" ; -- säe, tae
|
|
||||||
a + "v" + e@("e"|"a"|"ä"|"u"|"i") => a + "p" + e ; -- taive/toive imposs
|
|
||||||
ase => ase
|
|
||||||
} ;
|
|
||||||
|
|
||||||
part2casePl : Str -> Str * Str * Str * Str = \savia -> case savia of {
|
|
||||||
sav + "i" + a@("a" | "ä") =>
|
|
||||||
<sav + "ien", sav + "in" + a, sav + "iss" + a, sav + "iin"> ;
|
|
||||||
elio + "it" + a@("a" | "ä") =>
|
|
||||||
<elio + "iden", elio + "in" + a, elio + "iss" + a, elio + "ihin"> ;
|
|
||||||
maal + "ej" + a@("a" | "ä") =>
|
|
||||||
<maal + "ien", maal + "ein" + a, maal + "eiss" + a, maal + "eihin"> ;
|
|
||||||
talo + "j" + a@("a" | "ä") =>
|
|
||||||
<talo + "jen", talo + "in" + a, talo + "iss" + a, talo + "ihin"> ;
|
|
||||||
_ => Predef.error (["impossible plural partitive"] ++ savia)
|
|
||||||
} ;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
415
examples/uusisuomi/Nominal1.gf
Normal file
415
examples/uusisuomi/Nominal1.gf
Normal file
@@ -0,0 +1,415 @@
|
|||||||
|
--# -path=.:alltenses
|
||||||
|
|
||||||
|
resource Nominal = ResFin ** open MorphoFin,CatFin,Prelude in {
|
||||||
|
|
||||||
|
flags optimize=all ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
|
||||||
|
-- mkN = overload {
|
||||||
|
mk1N : (talo : Str) -> N = \s -> nForms2N (nForms1 s) ;
|
||||||
|
mk2N : (talo,talon : Str) -> N = \s,t -> nForms2N (nForms2 s t) ;
|
||||||
|
mk3N : (talo,talon,taloja : Str) -> N = \s,t,u -> nForms2N (nForms3 s t u) ;
|
||||||
|
mk4N : (talo,talon,taloa,taloja : Str) -> N = \s,t,u,v ->
|
||||||
|
nForms2N (nForms4 s t u v) ;
|
||||||
|
-- } ;
|
||||||
|
|
||||||
|
nForms1 : Str -> NForms = \ukko ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony ukko ;
|
||||||
|
ukk = init ukko ;
|
||||||
|
uko = weakGrade ukko ;
|
||||||
|
rake = Nominal.strongGrade ukko ;
|
||||||
|
renka = Nominal.strongGrade (init ukko) ;
|
||||||
|
o = last ukko ;
|
||||||
|
in
|
||||||
|
case ukko of {
|
||||||
|
_ + ("us" | "ys") =>
|
||||||
|
let
|
||||||
|
lujuus = ukko ;
|
||||||
|
lujuu = ukk ;
|
||||||
|
lujuuksi = ukk + "ksi"
|
||||||
|
in nForms10
|
||||||
|
lujuus (lujuu + "den") (lujuu + "tt" + a)
|
||||||
|
(lujuu + "ten" + a) (lujuu + "teen")
|
||||||
|
(lujuuksi + "en") (lujuuksi + a)
|
||||||
|
(lujuuksi + "n" + a) (lujuuksi + "ss" + a) (lujuuksi + "in") ;
|
||||||
|
_ + "nen" =>
|
||||||
|
let
|
||||||
|
nainen = ukko ;
|
||||||
|
nais = Predef.tk 3 ukko + "s"
|
||||||
|
in nForms10
|
||||||
|
nainen (nais + "en") (nais + "t" + a) (nais + "en" + a) (nais + "een")
|
||||||
|
(nais + "ten") (nais + "i" + a)
|
||||||
|
(nais + "in" + a) (nais + "iss" + a) (nais + "iin") ;
|
||||||
|
_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö") =>
|
||||||
|
let
|
||||||
|
puu = ukko ;
|
||||||
|
pui = ukk + "i" ;
|
||||||
|
u = o ;
|
||||||
|
in nForms10
|
||||||
|
puu (puu + "n") (puu + "t" + a) (puu + "n" + a) (puu + "h" + u + "n")
|
||||||
|
(pui + "den") (pui + "t" + a)
|
||||||
|
(pui + "n" + a) (pui + "ss" + a) (pui + "hin") ;
|
||||||
|
_ + ("ie" | "uo" | "yö") =>
|
||||||
|
let
|
||||||
|
suo = ukko ;
|
||||||
|
soi = init ukk + o + "i" ;
|
||||||
|
in nForms10
|
||||||
|
suo (suo + "n") (suo + "t" + a) (suo + "n" + a) (suo + "h" + o + "n")
|
||||||
|
(soi + "den") (soi + "t" + a)
|
||||||
|
(soi + "n" + a) (soi + "ss" + a) (soi + "hin") ;
|
||||||
|
_ + ("ea" | "eä") =>
|
||||||
|
let
|
||||||
|
korkea = ukko ;
|
||||||
|
korke = init ukko ;
|
||||||
|
in nForms10
|
||||||
|
korkea (korkea + "n") (korkea + a)
|
||||||
|
(korkea + "n" + a) (korkea + a + "n")
|
||||||
|
(korke + "iden") (korke + "it" + a)
|
||||||
|
(korke + "in" + a) (korke + "iss" + a)
|
||||||
|
(korke + "isiin") ; --- NSSK: korkeihin
|
||||||
|
_ + "is" =>
|
||||||
|
let
|
||||||
|
kaunis = ukko ;
|
||||||
|
kaunii = init kaunis + "i" ;
|
||||||
|
in nForms10
|
||||||
|
kaunis (kaunii + "n") (kaunis + "t" + a)
|
||||||
|
(kaunii + "n" + a) (kaunii + "seen")
|
||||||
|
(kaunii + "den") (kaunii + "t" + a)
|
||||||
|
(kaunii + "n" + a) (kaunii + "ss" + a)
|
||||||
|
(kaunii + "siin") ;
|
||||||
|
_ + ("i" | "u") + "n" => -- liitin,laidun
|
||||||
|
let
|
||||||
|
liitin = ukko ;
|
||||||
|
liittim = renka + "m" ;
|
||||||
|
in nForms10
|
||||||
|
liitin (liittim + "en") (liitin + "t" + a)
|
||||||
|
(liittim + "en" + a) (liittim + "een")
|
||||||
|
(liittim + "ien") (liittim + "i" + a)
|
||||||
|
(liittim + "in" + a) (liittim + "iss" + a)
|
||||||
|
(liittim + "iin") ;
|
||||||
|
|
||||||
|
onne + "t" + on@("on" | "ön") =>
|
||||||
|
let
|
||||||
|
onneton = ukko ;
|
||||||
|
onnettom = onne + "tt" + init on + "m" ;
|
||||||
|
in nForms10
|
||||||
|
onneton (onnettom + a + "n") (onneton + "t" + a)
|
||||||
|
(onnettom + a + "n" + a) (onnettom + a + a + "n")
|
||||||
|
(onnettom + "ien") (onnettom + "i" + a)
|
||||||
|
(onnettom + "in" + a) (onnettom + "iss" + a)
|
||||||
|
(onnettom + "iin") ;
|
||||||
|
|
||||||
|
_ + ("ut" | "yt") => -- olut,kätkyt
|
||||||
|
nForms_rae ukko (ukk + "en" + a) ;
|
||||||
|
_ + ("as" | "äs") => -- rengas,rypäs
|
||||||
|
nForms_rae ukko (renka + a + "n" + a) ;
|
||||||
|
_ + ("ar" | "är") => -- piennar,tytär
|
||||||
|
nForms_rae ukko (renka + "ren" + a) ;
|
||||||
|
_ + "e" =>
|
||||||
|
nForms_rae ukko (rake + "en" + a) ;
|
||||||
|
|
||||||
|
_ + ("a" | "o" | "u" | "y" | "ä" | "ö") =>
|
||||||
|
nForms_ukko ukko (uko + "n") ;
|
||||||
|
|
||||||
|
_ + "i" =>
|
||||||
|
let
|
||||||
|
paatte = ukk + "e" ;
|
||||||
|
paate = init uko + "e" ;
|
||||||
|
in nForms10
|
||||||
|
ukko (uko + "n") (ukko + a) (ukko + "n" + a) (ukko + "in")
|
||||||
|
(ukko + "en") (paatte + "j" + a)
|
||||||
|
(paatte + "in" + a) (paate + "iss" + a) (paatte + "ihin") ;
|
||||||
|
_ + "e" + ("l" | "n") =>
|
||||||
|
let
|
||||||
|
ahven = ukko ;
|
||||||
|
in nForms10
|
||||||
|
ahven (ahven + "en") (ahven +"t" + a)
|
||||||
|
(ahven + "en" + a) (ahven + "een")
|
||||||
|
(ahven + "ten") (ahven + "i" + a) (ahven + "in" + a)
|
||||||
|
(ahven + "iss" + a) (ahven + "iin") ;
|
||||||
|
_ =>
|
||||||
|
let
|
||||||
|
unixi = ukko + "i" ;
|
||||||
|
unixe = ukko + "e" ;
|
||||||
|
in nForms10
|
||||||
|
ukko (unixi + "n") (unixi + a) (unixi + "n" + a) (unixi + "in")
|
||||||
|
(unixi + "en") (unixe + "j" + a) (unixe + "in" + a)
|
||||||
|
(unixe + "iss" + a) (unixe + "ihin")
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
nForms2 : (_,_ : Str) -> NForms = \ukko,ukon ->
|
||||||
|
let
|
||||||
|
a = vowelHarmony ukko ;
|
||||||
|
ukk = init ukko ;
|
||||||
|
ukot = nForms1 ukko ;
|
||||||
|
in
|
||||||
|
case <ukko,ukon> of {
|
||||||
|
<_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" |
|
||||||
|
"ie" | "uo" | "yö"), _ + "n"> => ukot ; --- to protect these
|
||||||
|
<_ + ("a" | "o" | "u" | "y" | "ä" | "ö"), _ + "n"> =>
|
||||||
|
nForms_ukko ukko ukon ; -- auto,auton
|
||||||
|
<arp + "i", arv + "en"> =>
|
||||||
|
nForms_arpi ukko ukon (arp + "i" + a) ;
|
||||||
|
<arp + "i", _ + "i" + ("a" | "ä")> => -- for b-w compat.
|
||||||
|
nForms_arpi ukko (init (weakGrade ukko) + "en") ukon ;
|
||||||
|
<terv + "e", terv + "een"> =>
|
||||||
|
nForms_rae ukko (terv + "een" + a) ;
|
||||||
|
<nukk + "e", nuk + "en"> =>
|
||||||
|
nForms10
|
||||||
|
ukko ukon (ukko + a) (nukk +"en" + a) (nukk + "een")
|
||||||
|
(nukk + "ien") (nukk + "ej" + a) (nukk + "ein" + a)
|
||||||
|
(nuk + "eiss" + a) (nukk + "eihin") ;
|
||||||
|
<_ + "s", _ + "ksen"> => table {
|
||||||
|
1 => ukon ;
|
||||||
|
2 => ukko + "t" + a ;
|
||||||
|
3 => ukk + "ksen" + a ;
|
||||||
|
4 => ukk + "kseen" ;
|
||||||
|
n => ukot ! n
|
||||||
|
} ;
|
||||||
|
<_,_ + "n"> => table {
|
||||||
|
1 => ukon ;
|
||||||
|
n => ukot ! n
|
||||||
|
} ;
|
||||||
|
<_,_ + ("a" | "ä")> => table { -- for b-w compat.
|
||||||
|
5 => (part2casePl ukon).p1 ;
|
||||||
|
6 => ukon ;
|
||||||
|
n => ukot ! n
|
||||||
|
} ;
|
||||||
|
_ =>
|
||||||
|
Predef.error (["second argument should end in n, not"] ++ ukon)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
nForms3 : (_,_,_ : Str) -> NForms = \ukko,ukon,ukkoja ->
|
||||||
|
let
|
||||||
|
ukot = nForms2 ukko ukon ;
|
||||||
|
in
|
||||||
|
case <ukko,ukon,ukkoja> of {
|
||||||
|
<_ + "a" | "ä", _ + "n", _ + ("a" | "ä")> =>
|
||||||
|
let ukkojen = part2casePl ukkoja in
|
||||||
|
table {
|
||||||
|
5 => ukkojen.p1 ;
|
||||||
|
6 => ukkoja ;
|
||||||
|
7 => ukkojen.p2 ;
|
||||||
|
8 => ukkojen.p3 ;
|
||||||
|
9 => ukkojen.p4 ;
|
||||||
|
n => ukot ! n
|
||||||
|
} ;
|
||||||
|
<_,_ + "n", _ + ("a" | "ä")> =>
|
||||||
|
let ukkojen = part2casePl ukkoja in
|
||||||
|
table {
|
||||||
|
5 => ukkojen.p1 ;
|
||||||
|
6 => ukkoja ;
|
||||||
|
n => ukot ! n
|
||||||
|
} ;
|
||||||
|
_ =>
|
||||||
|
Predef.error
|
||||||
|
(["last arguments should end in n and a/ä, not"] ++ ukon ++ ukkoja)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
nForms4 : (_,_,_,_ : Str) -> NForms = \ukko,ukon,ukkoa,ukkoja ->
|
||||||
|
let
|
||||||
|
ukot = nForms3 ukko ukon ukkoja ;
|
||||||
|
in
|
||||||
|
case <ukko,ukon,ukkoa,ukkoja> of {
|
||||||
|
<_,_ + "n", _ + ("a" | "ä"), _ + ("a" | "ä")> =>
|
||||||
|
table {
|
||||||
|
2 => ukkoa ;
|
||||||
|
n => ukot ! n
|
||||||
|
} ;
|
||||||
|
_ =>
|
||||||
|
Predef.error
|
||||||
|
(["last arguments should end in n, a/ä, and a/ä, not"] ++
|
||||||
|
ukon ++ ukkoa ++ ukkoja)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
-- auxiliary "declensions"
|
||||||
|
|
||||||
|
nForms_ukko : (_,_ : Str) -> NForms = \ukko,ukon ->
|
||||||
|
let
|
||||||
|
o = last ukko ;
|
||||||
|
a = getHarmony o ;
|
||||||
|
ukk = init ukko ;
|
||||||
|
uko = init ukon ;
|
||||||
|
uk = init uko ;
|
||||||
|
ukkoja = case <ukko : Str> of {
|
||||||
|
_ + "ä" => -- kylä,kyliä,kylien,kylissä,kyliin
|
||||||
|
<ukk + "iä", ukk + "ien", ukk, uk, ukk + "iin"> ;
|
||||||
|
_ + ("au" | "eu") + _ + "a" => -- kauhojen,seurojen
|
||||||
|
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
|
||||||
|
_ + ("o" | "u") + _ + "a" => -- pula,pulia,pulien,pulissa,puliin
|
||||||
|
<ukk + "ia", ukk + "ien", ukk, uk, ukk + "iin"> ;
|
||||||
|
_ + "a" => -- kala,kaloja,kalojen,-oissa,-oihin
|
||||||
|
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
|
||||||
|
_ => -- suku,sukuja,sukujen,-uissa,-uihin
|
||||||
|
<ukko + "j" + a,ukko + "jen",ukko, uko, ukko + "ihin">
|
||||||
|
} ;
|
||||||
|
ukkoina = ukkoja.p3 + "in" + a ;
|
||||||
|
ukoissa = ukkoja.p4 + "iss" + a ;
|
||||||
|
in nForms10
|
||||||
|
ukko ukon (ukko + a) (ukko + "n" + a) (ukko + o + "n")
|
||||||
|
ukkoja.p2 ukkoja.p1
|
||||||
|
ukkoina ukoissa ukkoja.p5 ;
|
||||||
|
|
||||||
|
|
||||||
|
nForms_arpi : (_,_,_ : Str) -> NForms = \arpi,arven,arpia ->
|
||||||
|
let
|
||||||
|
a = last arpia ;
|
||||||
|
arp = init arpi ;
|
||||||
|
arv = Predef.tk 2 arven ;
|
||||||
|
ar = init arp ;
|
||||||
|
arpe = case last arp of {
|
||||||
|
"s" => case last arv of {
|
||||||
|
"d" | "l" | "n" | "r" => -- suden,sutta ; jälsi ; kansi ; hirsi
|
||||||
|
<ar + "tt" + a, arpi + "en",arpi,ar + "t"> ;
|
||||||
|
_ => -- kuusen,kuusta
|
||||||
|
<arp + "t" + a,arp + "ten",arpi, arp> ---- suksi,suksen
|
||||||
|
} ;
|
||||||
|
"r" => -- suurta,suurten
|
||||||
|
<arp + "t" + a,arp + "ten",arpi, arp>;
|
||||||
|
"l" | "h" => -- tuulta,tuulien
|
||||||
|
<arp + "t" + a,arp + "ien",arpi, arp>;
|
||||||
|
_ => -- arpea,arpien,arvissa
|
||||||
|
<arp + "e" + a,arp + "ien",arv+"i",arp>
|
||||||
|
} ; ---- pieni,pientä; uni,unta
|
||||||
|
in nForms10
|
||||||
|
arpi arven arpe.p1 (arpe.p4 + "en" + a) (arpe.p4 + "een")
|
||||||
|
arpe.p2 arpia
|
||||||
|
(arp + "in" + a) (arpe.p3 + "ss" + a) (arp + "iin") ;
|
||||||
|
|
||||||
|
nForms_rae : (_,_ : Str) -> NForms = \rae,rakeena ->
|
||||||
|
let
|
||||||
|
a = last rakeena ;
|
||||||
|
rakee = Predef.tk 2 rakeena ;
|
||||||
|
rakei = init rakee + "i" ;
|
||||||
|
raetta = case <rae : Str> of {
|
||||||
|
_ + "e" =>
|
||||||
|
<rae + "tt" + a, rakee + "seen"> ; -- raetta,rakeeseen
|
||||||
|
_ + "s" =>
|
||||||
|
<rae + "t" + a, rakee + "seen"> ; -- rengasta,renkaaseen
|
||||||
|
_ + "t" =>
|
||||||
|
<rae + "t" + a, rakee + "en"> ; -- olutta,olueen
|
||||||
|
_ + "r" =>
|
||||||
|
<rae + "t" + a, rakee + "en"> ; -- sisarta,sisareen
|
||||||
|
_ => Predef.error (["expected ending e/t/s/r, found"] ++ rae)
|
||||||
|
} ;
|
||||||
|
in nForms10
|
||||||
|
rae (rakee + "n") raetta.p1 (rakee + "n"+ a) raetta.p2
|
||||||
|
(rakei + "den") (rakei + "t" + a)
|
||||||
|
(rakei + "n" + a) (rakei + "ss" + a) (rakei + "siin") ; ---- sisariin
|
||||||
|
|
||||||
|
NForms : Type = Predef.Ints 9 => Str ;
|
||||||
|
|
||||||
|
nForms10 : (x1,_,_,_,_,_,_,_,_,x10 : Str) -> NForms =
|
||||||
|
\Ukko,ukon,ukkoa,ukkona,ukkoon,
|
||||||
|
ukkojen,ukkoja,ukkoina,ukoissa,ukkoihin -> table {
|
||||||
|
0 => Ukko ;
|
||||||
|
1 => ukon ;
|
||||||
|
2 => ukkoa ;
|
||||||
|
3 => ukkona ;
|
||||||
|
4 => ukkoon ;
|
||||||
|
5 => ukkojen ;
|
||||||
|
6 => ukkoja ;
|
||||||
|
7 => ukkoina ;
|
||||||
|
8 => ukoissa ;
|
||||||
|
9 => ukkoihin
|
||||||
|
} ;
|
||||||
|
|
||||||
|
nForms2N : NForms -> N = \f ->
|
||||||
|
let
|
||||||
|
Ukko = f ! 0 ;
|
||||||
|
ukon = f ! 1 ;
|
||||||
|
ukkoa = f ! 2 ;
|
||||||
|
ukkona = f ! 3 ;
|
||||||
|
ukkoon = f ! 4 ;
|
||||||
|
ukkojen = f ! 5 ;
|
||||||
|
ukkoja = f ! 6 ;
|
||||||
|
ukkoina = f ! 7 ;
|
||||||
|
ukoissa = f ! 8 ;
|
||||||
|
ukkoihin = f ! 9 ;
|
||||||
|
a = last ukkoja ;
|
||||||
|
uko = init ukon ;
|
||||||
|
ukko = Predef.tk 2 ukkona ;
|
||||||
|
ukkoi = Predef.tk 2 ukkoina ;
|
||||||
|
ukoi = Predef.tk 3 ukoissa ;
|
||||||
|
in
|
||||||
|
{s = table {
|
||||||
|
NCase Sg Nom => Ukko ;
|
||||||
|
NCase Sg Gen => uko + "n" ;
|
||||||
|
NCase Sg Part => ukkoa ;
|
||||||
|
NCase Sg Transl => uko + "ksi" ;
|
||||||
|
NCase Sg Ess => ukkona ;
|
||||||
|
NCase Sg Iness => uko + ("ss" + a) ;
|
||||||
|
NCase Sg Elat => uko + ("st" + a) ;
|
||||||
|
NCase Sg Illat => ukkoon ;
|
||||||
|
NCase Sg Adess => uko + ("ll" + a) ;
|
||||||
|
NCase Sg Ablat => uko + ("lt" + a) ;
|
||||||
|
NCase Sg Allat => uko + "lle" ;
|
||||||
|
NCase Sg Abess => uko + ("tt" + a) ;
|
||||||
|
|
||||||
|
NCase Pl Nom => uko + "t" ;
|
||||||
|
NCase Pl Gen => ukkojen ;
|
||||||
|
NCase Pl Part => ukkoja ;
|
||||||
|
NCase Pl Transl => ukoi + "ksi" ;
|
||||||
|
NCase Pl Ess => ukkoina ;
|
||||||
|
NCase Pl Iness => ukoissa ;
|
||||||
|
NCase Pl Elat => ukoi + ("st" + a) ;
|
||||||
|
NCase Pl Illat => ukkoihin ;
|
||||||
|
NCase Pl Adess => ukoi + ("ll" + a) ;
|
||||||
|
NCase Pl Ablat => ukoi + ("lt" + a) ;
|
||||||
|
NCase Pl Allat => ukoi + "lle" ;
|
||||||
|
NCase Pl Abess => ukoi + ("tt" + a) ;
|
||||||
|
|
||||||
|
NComit => ukkoi + "ne" ;
|
||||||
|
NInstruct => ukoi + "n" ;
|
||||||
|
|
||||||
|
NPossNom _ => ukko ;
|
||||||
|
NPossGen Sg => ukko ;
|
||||||
|
NPossGen Pl => init ukkojen ;
|
||||||
|
NPossTransl Sg => uko + "kse" ;
|
||||||
|
NPossTransl Pl => ukoi + "kse" ;
|
||||||
|
NPossIllat Sg => init ukkoon ;
|
||||||
|
NPossIllat Pl => init ukkoihin
|
||||||
|
} ;
|
||||||
|
lock_N = <>
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
--- This is used to analyse nouns "rae", "hake", "rengas", "laidun", etc.
|
||||||
|
|
||||||
|
strongGrade : Str -> Str = \hanke ->
|
||||||
|
let
|
||||||
|
ha = Predef.tk 3 hanke ;
|
||||||
|
nke = Predef.dp 3 hanke ;
|
||||||
|
in
|
||||||
|
ha + case nke of {
|
||||||
|
"ng" + a => "nk" + a ;
|
||||||
|
"nn" + e => "nt" + e ;
|
||||||
|
"mm" + e => "mp" + e ;
|
||||||
|
"rr" + e => "rt" + e ;
|
||||||
|
"ll" + a => "lt" + a ;
|
||||||
|
h@("h" | "l") + "j" + e => h + "k" + e ; -- pohje/lahje impossible
|
||||||
|
("hk" | "sk" | "sp" | "st") + _ => nke ; -- viuhke,kuiske
|
||||||
|
a + k@("k" | "p" | "t") + e@("e"|"a"|"ä"|"u"|"i") => a + k + k + e ;
|
||||||
|
a + "d" + e@("e"|"a"|"ä"|"u"|"i") => a + "t" + e ;
|
||||||
|
s + a@("a" | "ä") + "e" => s + a + "ke" ; -- säe, tae
|
||||||
|
a + "v" + e@("e"|"a"|"ä"|"u"|"i") => a + "p" + e ; -- taive/toive imposs
|
||||||
|
ase => ase
|
||||||
|
} ;
|
||||||
|
|
||||||
|
part2casePl : Str -> Str * Str * Str * Str = \savia -> case savia of {
|
||||||
|
sav + "i" + a@("a" | "ä") =>
|
||||||
|
<sav + "ien", sav + "in" + a, sav + "iss" + a, sav + "iin"> ;
|
||||||
|
elio + "it" + a@("a" | "ä") =>
|
||||||
|
<elio + "iden", elio + "in" + a, elio + "iss" + a, elio + "ihin"> ;
|
||||||
|
maal + "ej" + a@("a" | "ä") =>
|
||||||
|
<maal + "ien", maal + "ein" + a, maal + "eiss" + a, maal + "eihin"> ;
|
||||||
|
talo + "j" + a@("a" | "ä") =>
|
||||||
|
<talo + "jen", talo + "in" + a, talo + "iss" + a, talo + "ihin"> ;
|
||||||
|
_ => Predef.error (["impossible plural partitive"] ++ savia)
|
||||||
|
} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -14,6 +14,8 @@ syy syyn syyt
|
|||||||
|
|
||||||
pii piin piitä piinä piihin piiden piitä piinä piissä piihin
|
pii piin piitä piinä piihin piiden piitä piinä piissä piihin
|
||||||
|
|
||||||
|
hai hain haita haina haihin haiden haita haina haissa haihin
|
||||||
|
|
||||||
tienoo tienoon tienoota tienoona tienoohon tienoiden tienoita tienoina tienoissa tienoihin
|
tienoo tienoon tienoota tienoona tienoohon tienoiden tienoita tienoina tienoissa tienoihin
|
||||||
|
|
||||||
suo suon suota suona suohon soiden soita soina soissa soihin
|
suo suon suota suona suohon soiden soita soina soissa soihin
|
||||||
@@ -52,9 +54,9 @@ rengas renkaan rengasta renkaana renkaaseen renkaiden renkaita renkaina renkaiss
|
|||||||
|
|
||||||
taivas taivaan taivasta taivaana taivaaseen taivaiden taivaita taivaina taivaissa taivaisiin
|
taivas taivaan taivasta taivaana taivaaseen taivaiden taivaita taivaina taivaissa taivaisiin
|
||||||
|
|
||||||
piennar pientaren piennarta pientarena pientaren piennarten pientaria pientarina pientarissa pientariin
|
piennar pientaren piennarta pientarena pientareen pientarien/piennarten pientaria pientarina pientarissa pientariin
|
||||||
|
|
||||||
sisar sisaren sisarta sisarena sisareen sisarien sisaria sisarina sisarissa sisariin
|
sisar sisaren sisarta sisarena sisareen sisarien/sisarten sisaria sisarina sisarissa sisariin
|
||||||
|
|
||||||
rae rakeen raetta rakeena rakeeseen rakeiden rakeita rakeina rakeissa rakeisiin
|
rae rakeen raetta rakeena rakeeseen rakeiden rakeita rakeina rakeissa rakeisiin
|
||||||
|
|
||||||
@@ -104,7 +106,7 @@ j
|
|||||||
|
|
||||||
korsi korren kortta kortena korteen korsien korsia korsina korsissa korsiin
|
korsi korren kortta kortena korteen korsien korsia korsina korsissa korsiin
|
||||||
|
|
||||||
kuusi kuusen kuusta kuusena kuuseen kuusten kuusia kuusina kuusissa kuusiin
|
kuusi kuusen kuusta kuusena kuuseen kuusten/kuusien kuusia kuusina kuusissa kuusiin
|
||||||
|
|
||||||
saari saaren saarta saarena saareen saarten saaria saarina saarissa saariin
|
saari saaren saarta saarena saareen saarten saaria saarina saarissa saariin
|
||||||
|
|
||||||
@@ -114,17 +116,17 @@ arpi arven arpea arpena arpeen arpien arpia arpina arvissa arpiin
|
|||||||
|
|
||||||
jälki jäljen jälkeä jälkenä jälkeen jälkien jälkiä jälkinä jäljissä jälkiin
|
jälki jäljen jälkeä jälkenä jälkeen jälkien jälkiä jälkinä jäljissä jälkiin
|
||||||
|
|
||||||
veitsi veitsen veistä veitsenä veitseen veisten veitsiä veitsinä veitsissä veitsiin
|
veitsi veitsen veistä veitsenä veitseen veisten/veitsien veitsiä veitsinä veitsissä veitsiin
|
||||||
|
|
||||||
meri meren merta merenä mereen merten meriä merinä merissä meriin
|
meri meren merta merenä mereen merten meriä merinä merissä meriin
|
||||||
|
|
||||||
veri veren verta verenä vereen verten veriä verinä verissä veriin
|
veri veren verta verenä vereen verten veriä verinä verissä veriin
|
||||||
|
|
||||||
pakkaus pakkauksen pakkausta pakkauksena pakkaukseen pakkauksien pakkauksia pakkauksina pakkauksissa pakkauksiin
|
pakkaus pakkauksen pakkausta pakkauksena pakkaukseen pakkauksien/pakkausten pakkauksia pakkauksina pakkauksissa pakkauksiin
|
||||||
|
|
||||||
julius juliuksen juliusta juliuksena juliukseen juliuksien juliuksia juliuksina juliuksissa juliuksiin
|
julius juliuksen juliusta juliuksena juliukseen juliuksien/juliusten juliuksia juliuksina juliuksissa juliuksiin
|
||||||
|
|
||||||
hius hiuksen hiusta hiuksena hiukseen hiuksien hiuksia hiuksina hiuksissa hiuksiin
|
hius hiuksen hiusta hiuksena hiukseen hiuksien/hiusten hiuksia hiuksina hiuksissa hiuksiin
|
||||||
|
|
||||||
paperi paperin paperia paperina paperiin papereiden papereita papereina papereissa papereihin
|
paperi paperin paperia paperina paperiin papereiden papereita papereina papereissa papereihin
|
||||||
|
|
||||||
@@ -174,8 +176,6 @@ sankari sankarin sankaria sankarina sankariin sankareiden sankareita sankareina
|
|||||||
|
|
||||||
jumala jumalan jumalaa jumalana jumalaan jumalien jumalia jumalina jumalissa jumaliin
|
jumala jumalan jumalaa jumalana jumalaan jumalien jumalia jumalina jumalissa jumaliin
|
||||||
|
|
||||||
sisar sisaren sisarta sisarena sisareen sisarien sisaria sisarina sisarissa sisariin
|
|
||||||
|
|
||||||
kirves kirveen kirvestä kirveenä kirveeseen kirvesten/kirveiden kirveitä kirveinä kirveissä kirveisiin/kirveihin
|
kirves kirveen kirvestä kirveenä kirveeseen kirvesten/kirveiden kirveitä kirveinä kirveissä kirveisiin/kirveihin
|
||||||
|
|
||||||
kives kiveksen kivestä kiveksenä kivekseen kivesten/kiveksien kiveksiä kiveksinä kiveksissä kiveksiin
|
kives kiveksen kivestä kiveksenä kivekseen kivesten/kiveksien kiveksiä kiveksinä kiveksissä kiveksiin
|
||||||
|
|||||||
Reference in New Issue
Block a user