summaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authoraarne <aarne@cs.chalmers.se>2008-01-03 10:01:57 +0000
committeraarne <aarne@cs.chalmers.se>2008-01-03 10:01:57 +0000
commita97ac23f1a34b72159b6f185aa13729bc90ea1f9 (patch)
tree4524b70b0b1840b2964096f07ead820f470018e6 /examples
parentcbfb9d5e7d76616b5490083a9f4071fd977c2ec0 (diff)
new division of Nominal in uusisuomi
Diffstat (limited to 'examples')
-rw-r--r--examples/uusisuomi/Declensions.gf353
-rw-r--r--examples/uusisuomi/Nominal.gf393
-rw-r--r--examples/uusisuomi/Nominal1.gf415
-rw-r--r--examples/uusisuomi/correct-Omat.txt18
4 files changed, 815 insertions, 364 deletions
diff --git a/examples/uusisuomi/Declensions.gf b/examples/uusisuomi/Declensions.gf
new file mode 100644
index 000000000..d36343c4b
--- /dev/null
+++ b/examples/uusisuomi/Declensions.gf
@@ -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)
+ } ;
+
+}
diff --git a/examples/uusisuomi/Nominal.gf b/examples/uusisuomi/Nominal.gf
index 8cf60ec57..e8ab2262a 100644
--- a/examples/uusisuomi/Nominal.gf
+++ b/examples/uusisuomi/Nominal.gf
@@ -1,8 +1,8 @@
--# -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
@@ -16,198 +16,68 @@ resource Nominal = ResFin ** open MorphoFin,CatFin,Prelude in {
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 ;
+ renka = Declensions.strongGrade (init ukko) ;
+ rake = Declensions.strongGrade 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")
+ _ + ("us" | "ys") => dLujuus ukko ;
+ _ + "nen" => dNainen ukko ;
+ _ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" |"ää"|"öö") => dPuu ukko ;
+ _ + ("ai" | "ei" | "oi" | "ui" | "yi" | "äi" | "öi") => dPuu ukko ;
+ _ + ("ie" | "uo" | "yö") => dSuo ukko ;
+ _ + ("ea" | "eä") => dKorkea ukko ;
+ _ + "is" => dKaunis ukko ;
+ _ + ("i" | "u") + "n" => dLiitin ukko (renka + "men") ;
+ _ + ("ton" | "tön") => dOnneton ukko ;
+ _ + ("ut" | "yt") => dRae ukko (ukk + "en") ;
+ _ + ("as" | "äs") => dRae ukko (renka + last renka + "n") ;
+ _ + "e" => dRae ukko (rake + "en") ;
+ _ + ("a" | "o" | "u" | "y" | "ä" | "ö") => dUkko ukko (uko + "n") ;
+ _ + "i" => dPaatti ukko (uko + "n") ;
+ _ + ("ar" | "är") => dPiennar ukko (renka + "ren") ;
+ _ + "e" + ("l" | "n") => dPiennar ukko (ukko + "en") ;
+ _ => dUnix ukko
} ;
-
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
+ "ie" | "uo" | "yö" | "ea" | "eä"), _ + "n"> =>
+ nForms1 ukko ; --- to protect
<_ + ("a" | "o" | "u" | "y" | "ä" | "ö"), _ + "n"> =>
- nForms_ukko ukko ukon ; -- auto,auton
- <arp + "i", arv + "en"> =>
- nForms_arpi ukko ukon (arp + "i" + a) ;
+ dUkko ukko ukon ; -- auto,auton
+ <arp + "i", arv + "en"> => dArpi ukko ukon ;
<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"> =>
- 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
- } ;
+ dRae ukko (terv + "een") ;
+ <nukk + "e", nuk + "en"> => dNukke ukko ukon ;
+ <_ + "s", _ + "ksen"> => dJalas ukko ;
+ <_, _ + "n"> => nForms1 ukko ;
_ =>
Predef.error (["second argument should end in n, not"] ++ ukon)
} ;
nForms3 : (_,_,_ : Str) -> NForms = \ukko,ukon,ukkoja ->
let
- ukot = nForms2 ukko ukon ;
+ ukot = nForms2 ukko ukon ;
in
case <ukko,ukon,ukkoja> of {
+
+ <_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" |
+ "ie" | "uo" | "yö" | "ea" | "eä"), _ + "n", _> =>
+ nForms1 ukko ; --- to protect
<_ + "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
- } ;
+ dSilakka ukko ukon ukkoja ;
+ <_, _ + "n", _ + ("a" | "ä")> => ukot ;
_ =>
Predef.error
- (["last arguments should end in n and a/ä, not"] ++ ukon ++ ukkoja)
+ (["last arguments should end in n and a/ä, not"] ++ ukon ++ ukkoja)
} ;
nForms4 : (_,_,_,_ : Str) -> NForms = \ukko,ukon,ukkoa,ukkoja ->
@@ -226,191 +96,4 @@ resource Nominal = ResFin ** open MorphoFin,CatFin,Prelude in {
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)
- } ;
-
}
diff --git a/examples/uusisuomi/Nominal1.gf b/examples/uusisuomi/Nominal1.gf
new file mode 100644
index 000000000..1cbbf1298
--- /dev/null
+++ b/examples/uusisuomi/Nominal1.gf
@@ -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)
+ } ;
+
+}
diff --git a/examples/uusisuomi/correct-Omat.txt b/examples/uusisuomi/correct-Omat.txt
index cd3fe61ed..1c78b60a5 100644
--- a/examples/uusisuomi/correct-Omat.txt
+++ b/examples/uusisuomi/correct-Omat.txt
@@ -14,6 +14,8 @@ syy syyn syytä syynä syyhyn syiden syitä syinä syissä syihin
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
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
-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
@@ -104,7 +106,7 @@ jälsi jällen jälttä jältenä jälteen jälsien jälsiä jälsinä jälsissä jälsiin
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
@@ -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
-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
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
@@ -174,8 +176,6 @@ sankari sankarin sankaria sankarina sankariin sankareiden sankareita sankareina
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
kives kiveksen kivestä kiveksenä kivekseen kivesten/kiveksien kiveksiä kiveksinä kiveksissä kiveksiin