summaryrefslogtreecommitdiff
path: root/next-lib/src/finnish/MorphoFin.gf
diff options
context:
space:
mode:
authoraarne <aarne@chalmers.se>2009-06-22 15:39:08 +0000
committeraarne <aarne@chalmers.se>2009-06-22 15:39:08 +0000
commite89fdae2fa1626348d8025824a7469252fa85e42 (patch)
treec7d46bbd0494043b4bd6f917a25a7687517d0547 /next-lib/src/finnish/MorphoFin.gf
parent3049b59b35b25381a7c6787444165c200d66e08b (diff)
next-lib renamed to lib, lib to old-lib
Diffstat (limited to 'next-lib/src/finnish/MorphoFin.gf')
-rw-r--r--next-lib/src/finnish/MorphoFin.gf940
1 files changed, 0 insertions, 940 deletions
diff --git a/next-lib/src/finnish/MorphoFin.gf b/next-lib/src/finnish/MorphoFin.gf
deleted file mode 100644
index 56eb7863a..000000000
--- a/next-lib/src/finnish/MorphoFin.gf
+++ /dev/null
@@ -1,940 +0,0 @@
---# -path=.:../common:prelude
-
---1 A Simple Finnish Resource Morphology
---
--- Aarne Ranta 2002 -- 2005
---
--- This resource morphology contains definitions needed in the resource
--- syntax. To build a lexicon, it is better to use $ParadigmsFin$, which
--- gives a higher-level access to this module.
-
-resource MorphoFin = ResFin ** open Prelude in {
-
- flags optimize=all ;
-
- oper
-
- dLujuus : Str -> NForms = \lujuus ->
- let
- lujuu = init lujuus ;
- lujuuksi = lujuu + "ksi" ;
- a = vowHarmony (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 = vowHarmony 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") ;
-
- dPaluu : Str -> NForms = \paluu ->
- let
- a = vowHarmony paluu ;
- palui = init paluu + "i" ;
- u = last paluu ;
- in nForms10
- paluu (paluu + "n") (paluu + "t" + a) (paluu + "n" + a) (paluu + "seen")
- (palui + "den") (palui + "t" + a)
- (palui + "n" + a) (palui + "ss" + a) (palui + "siin") ;
-
- dPuu : Str -> NForms = \puu ->
- let
- a = vowHarmony 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 = vowHarmony 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 = vowHarmony 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 = vowHarmony 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 = vowHarmony 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") ;
-
- -- 2-syllable a/ä, o/ö, u/y
- dUkko : (_,_ : Str) -> NForms = \ukko,ukon ->
- let
- o = last ukko ;
- a = vowHarmony 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 ;
-
- -- 3-syllable a/ä/o/ö
- dSilakka : (_,_,_ : Str) -> NForms = \silakka,silakan,silakoita ->
- let
- o = last silakka ;
- a = getHarmony o ;
- silakk = init silakka ;
- silaka = init silakan ;
- silak = init silaka ;
- silakkaa = silakka + case o of {
- "o" | "ö" => "t" + a ; -- radiota
- _ => a -- sammakkoa
- } ;
- silakoiden = case <silakoita : Str> of {
- _ + "i" + ("a" | "ä") => -- asemia
- <silakka+a, silakk + "ien", silakk, silak, silakk + "iin"> ;
- _ + O@("o" | "ö" | "u" | "y" | "e") + ("ja" | "jä") => -- pasuunoja
- <silakka+a,silakk+O+"jen",silakk+O, silak+O, silakk +O+ "ihin"> ;
- _ + O@("o" | "ö" | "u" | "y" | "e") + ("ita" | "itä") => -- silakoita
- <silakkaa, silak+O+"iden",silakk+O, silak+O, silakk +O+ "ihin"> ;
- _ => Predef.error silakoita
- } ;
- silakkoina = silakoiden.p3 + "in" + a ;
- silakoissa = silakoiden.p4 + "iss" + a ;
- in nForms10
- silakka silakan silakoiden.p1 (silakka + "n" + a) (silakka + o + "n")
- silakoiden.p2 silakoita
- silakkoina silakoissa silakoiden.p5 ;
-
- dArpi : (_,_ : Str) -> NForms = \arpi,arven ->
- let
- a = vowHarmony 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 = vowHarmony 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 = vowHarmony 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") ;
-
- dTohtori : (_ : Str) -> NForms = \tohtori ->
- let
- a = vowHarmony tohtori ;
- tohtor = init tohtori ;
- in nForms10
- tohtori (tohtori+"n") (tohtori + a) (tohtori + "n" + a) (tohtori + "in")
- (tohtor + "eiden") (tohtor + "eit" + a)
- (tohtor + "ein" + a) (tohtor + "eiss" + a) (tohtor + "eihin") ;
-
- dPiennar : (_,_ : Str) -> NForms = \piennar,pientaren ->
- let
- a = vowHarmony 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 = vowHarmony 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 = vowHarmony 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 = vowHarmony 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") ;
-
- dSDP : Str -> NForms = \SDP ->
- let
- c = case last SDP of {
- "A" =>
- <"n","ta","na","han","iden","ita","ina","issa","ihin"> ;
- "B" | "C" | "D" | "E" | "G" | "P" | "T" | "V" | "W" =>
- <"n","tä","nä","hen","iden","itä","inä","issä","ihin"> ;
- "F" | "L" | "M" | "N" | "R" | "S" | "X" =>
- <"n","ää","nä","ään","ien","iä","inä","issä","iin"> ;
- "H" | "K" | "O" | "Å" =>
- <"n","ta","na","hon","iden","ita","ina","issa","ihin"> ;
- "I" | "J" =>
- <"n","tä","nä","hin","iden","itä","inä","issä","ihin"> ;
- "Q" | "U" =>
- <"n","ta","na","hun","iden","ita","ina","issa","ihin"> ;
- "Z" =>
- <"n","aa","na","aan","ojen","oja","oina","oissa","oihin"> ;
- "Ä" =>
- <"n","tä","nä","hän","iden","itä","inä","issä","ihin"> ;
- "Ö" =>
- <"n","tä","nä","hön","iden","itä","inä","issä","ihin"> ;
- _ => Predef.error (["illegal abbreviation"] ++ SDP)
- } ;
- in nForms10
- SDP (SDP + ":" + c.p1) (SDP + ":" + c.p2) (SDP + ":" + c.p3)
- (SDP + ":" + c.p4) (SDP + ":" + c.p5) (SDP + ":" + c.p6)
- (SDP + ":" + c.p7) (SDP + ":" + c.p8) (SDP + ":" + c.p9) ;
-
--- for adjective comparison
-
- dSuurempi : Str -> NForms = \suurempi ->
- let
- a = vowHarmony suurempi ;
- suuremp = init suurempi ;
- suuremm = Predef.tk 2 suurempi + "m" ;
- in nForms10
- suurempi (suuremm + a + "n") (suuremp + a + a)
- (suuremp + a + "n" + a) (suuremp + a + a + "n")
- (suuremp + "ien") (suurempi + a)
- (suurempi + "n" + a) (suuremm + "iss" + a) (suurempi + "in") ;
-
- dSuurin : Str -> NForms = \suurin ->
- let
- a = vowHarmony suurin ;
- suurimm = init suurin + "mm" ;
- suurimp = init suurimm + "p" ;
- in nForms10
- suurin (suurimm + a + "n") (suurin + "t" + a)
- (suurimp + a + "n" + a) (suurimp + a + a + "n")
- (suurimp + "ien") (suurimp + "i" + a)
- (suurimp + "in" + a) (suurimm + "iss" + a) (suurimp + "iin") ;
-
--- for verb participle forms
-
- dOttanut : Str -> NForms = \ottanut ->
- let
- a = vowHarmony ottanut ;
- ottane = Predef.tk 2 ottanut + "e" ;
- ottanee = ottane + "e" ;
- in nForms10
- ottanut (ottanee + "n") (ottanut + "t" + a)
- (ottanee + "n" + a) (ottanee + "seen")
- (ottane + "iden") (ottane + "it" + a)
- (ottane + "in" + a) (ottane + "iss" + a) (ottane + "isiin") ;
-
--------------------
--- auxiliaries ----
--------------------
-
--- the maximal set of technical stems
-
- 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
- } ;
-
- Noun = {s : NForm => Str} ;
-
- nForms2N : NForms -> Noun = \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 = <>
- } ;
-
- n2nforms : Noun -> NForms = \ukko -> table {
- 0 => ukko.s ! NCase Sg Nom ;
- 1 => ukko.s ! NCase Sg Gen ;
- 2 => ukko.s ! NCase Sg Part ;
- 3 => ukko.s ! NCase Sg Ess ;
- 4 => ukko.s ! NCase Sg Illat ;
- 5 => ukko.s ! NCase Pl Gen ;
- 6 => ukko.s ! NCase Pl Part ;
- 7 => ukko.s ! NCase Pl Ess ;
- 8 => ukko.s ! NCase Pl Iness ;
- 9 => ukko.s ! NCase Pl Illat
- } ;
-
--- Adjective forms
-
- AForms : Type = {
- posit : NForms ;
- compar : NForms ;
- superl : NForms ;
- adv_posit, adv_compar, adv_superl : Str ;
- } ;
-
- aForms2A : AForms -> Adjective = \afs -> {
- s = table {
- Posit => table {
- AN n => (nForms2N afs.posit).s ! n ;
- AAdv => afs.adv_posit
- } ;
- Compar => table {
- AN n => (nForms2N afs.compar).s ! n ;
- AAdv => afs.adv_compar
- } ;
- Superl => table {
- AN n => (nForms2N afs.superl).s ! n ;
- AAdv => afs.adv_superl
- }
- } ;
- lock_A = <>
- } ;
-
- nforms2aforms : NForms -> AForms = \nforms ->
- let
- suure = init (nforms ! 1) ;
- suur = Predef.tk 4 (nforms ! 8) ;
- in {
- posit = nforms ;
- compar = dSuurempi (suure ++ "mpi") ;
- superl = dSuurin (suur ++ "in") ;
- adv_posit = suure + "sti" ;
- adv_compar = suure + "mmin" ;
- adv_superl = suur + "immin" ;
- } ;
-
-
- oper
-
- cHukkua : (_,_ : Str) -> VForms = \hukkua,hukun ->
- let
- a = last hukkua ;
- hukku = init hukkua ;
- huku = init hukun ;
- u = last huku ;
- i = case u of {
- "e" | "i" => [] ;
- _ => u
- } ;
- y = uyHarmony a ;
- hukkui = init hukku + i + "i" ;
- hukui = init huku + i + "i" ;
- in vForms12
- hukkua
- hukun
- (hukku + u)
- (hukku + "v" + a + "t")
- (hukku + "k" + a + a)
- (huku + "t" + a + a + "n")
- (hukui + "n")
- hukkui
- (hukkui + "si")
- (hukku + "n" + y + "t")
- (huku + "tt" + y)
- (hukku + "nee") ;
-
- cOttaa : (_,_,_,_ : Str) -> VForms = \ottaa,otan,otin,otti ->
- let
- a = last ottaa ;
- aa = a + a ;
- u = uyHarmony a ;
- ota = init otan ;
- otta = init ottaa ;
- ote = init ota + "e" ;
- in vForms12
- ottaa
- otan
- ottaa
- (otta + "v" + a + "t")
- (otta + "k" + aa)
- (ote + "t" + aa + "n")
- otin
- otti
- (otta + "isi")
- (otta + "n" + u + "t")
- (ote + "tt" + u)
- (otta + "nee") ;
-
- cJuosta : (_,_ : Str) -> VForms = \juosta,juoksen ->
- let
- a = last juosta ;
- juos = Predef.tk 2 juosta ;
- juoss = juos + last juos ;
- juokse = init juoksen ;
- juoks = init juokse ;
- u = uyHarmony a ;
- juoksi = juoks + "i" ;
- in vForms12
- juosta
- (juoksen)
- (juokse + "e")
- (juokse + "v" + a + "t")
- (juos + "k" + a + a)
- (juosta + a + "n")
- (juoks + "in")
- (juoks + "i")
- (juoks + "isi")
- (juoss + u + "t")
- (juos + "t" + u)
- (juoss + "ee") ;
-
- cJuoda : (_ : Str) -> VForms = \juoda ->
- let
- a = last juoda ;
- juo = Predef.tk 2 juoda ;
- joi = case last juo of {
- "i" => juo ; -- naida
- o => Predef.tk 2 juo + o + "i"
- } ;
- u = uyHarmony a ;
- in vForms12
- juoda
- (juo + "n")
- (juo)
- (juo + "v" + a + "t")
- (juo + "k" + a + a)
- (juoda + a + "n")
- (joi + "n")
- (joi)
- (joi + "si")
- (juo + "n" + u + "t")
- (juo + "t" + u)
- (juo + "nee") ;
-
- cPudota : (_,_ : Str) -> VForms = \pudota,putosi ->
- let
- a = last pudota ;
- pudot = init pudota ;
- pudo = init pudot ;
- ai = case last pudo of {
- "a" | "ä" => <[], "i"> ;
- _ => <a, a + "i">
- } ;
- puto = Predef.tk 2 putosi ;
- u = uyHarmony a ;
- in vForms12
- pudota
- (puto + a + "n")
- (puto + ai.p1 + a)
- (puto + a + "v" + a + "t")
- (pudot + "k" + a + a)
- (pudot + a + a + "n")
- (puto + "sin")
- (puto + "si")
- (puto + ai.p2 + "si")
- (pudo + "nn" + u + "t")
- (pudot + "t" + u)
- (pudo + "nnee") ;
-
- cHarkita : (_ : Str) -> VForms = \harkita ->
- let
- a = last harkita ;
- harkit = init harkita ;
- harki = init harkit ;
- u = uyHarmony a ;
- in vForms12
- harkita
- (harkit + "sen")
- (harkit + "se")
- (harkit + "sev" + a + "t")
- (harkit + "k" + a + a)
- (harkit + a + a + "n")
- (harkit + "sin")
- (harkit + "si")
- (harkit + "sisi")
- (harki + "nn" + u + "t")
- (harkit + "t" + u)
- (harki + "nnee") ;
-
- cValjeta : (_,_ : Str) -> VForms = \valjeta,valkeni ->
- let
- a = last valjeta ;
- valjet = init valjeta ;
- valken = init valkeni ;
- valje = init valjet ;
- u = uyHarmony a ;
- in vForms12
- valjeta
- (valken + "en")
- (valken + "ee")
- (valken + "ev" + a + "t")
- (valjet + "k" + a + a)
- (valjet + a + a + "n")
- (valken + "in")
- (valken + "i")
- (valken + "isi")
- (valje + "nn" + u + "t")
- (valjet + "t" + u)
- (valje + "nnee") ;
-
- cKuunnella : (_,_ : Str) -> VForms = \kuunnella,kuuntelin ->
- let
- a = last kuunnella ;
- kuunnel = Predef.tk 2 kuunnella ;
- kuuntel = Predef.tk 2 kuuntelin ;
- u = uyHarmony a ;
- in vForms12
- kuunnella
- (kuuntel + "en")
- (kuuntel + "ee")
- (kuuntel + "ev" + a + "t")
- (kuunnel + "k" + a + a)
- (kuunnella + a + "n")
- (kuuntel + "in")
- (kuuntel + "i")
- (kuuntel + "isi")
- (kuunnel + "l" + u + "t")
- (kuunnel + "t" + u)
- (kuunnel + "lee") ;
-
--- auxiliaries
-
- uyHarmony : Str -> Str = \a -> case a of {
- "a" => "u" ;
- _ => "y"
- } ;
-
- VForms : Type = Predef.Ints 11 => Str ;
-
- vForms12 : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> VForms =
- \olla,olen,on,ovat,olkaa,ollaan,olin,oli,olisi,ollut,oltu,lienee ->
- table {
- 0 => olla ;
- 1 => olen ;
- 2 => on ;
- 3 => ovat ;
- 4 => olkaa ;
- 5 => ollaan ;
- 6 => olin ;
- 7 => oli ;
- 8 => olisi ;
- 9 => ollut ;
- 10 => oltu ;
- 11 => lienee
- } ;
-
- vforms2V : VForms -> Verb ** {qp : Str} = \vh ->
- let
- tulla = vh ! 0 ;
- tulen = vh ! 1 ;
- tulee = vh ! 2 ;
- tulevat = vh ! 3 ;
- tulkaa = vh ! 4 ;
- tullaan = vh ! 5 ;
- tulin = vh ! 6 ;
- tuli = vh ! 7 ;
- tulisi = vh ! 8 ;
- tullut = vh ! 9 ;
- tultu = vh ! 10 ;
- tullun = vh ! 11 ;
- tule_ = init tulen ;
- tuli_ = init tulin ;
- a = last tulkaa ;
- tulko = Predef.tk 2 tulkaa + (ifTok Str a "a" "o" "ö") ;
- tulkoo = tulko + last tulko ;
- tullee = Predef.tk 2 tullut + "ee" ;
- tulleen = (nForms2N (dOttanut tullut)).s ;
- tullu : Str = weakGrade tultu ;
- tullun = (nForms2N (dUkko tultu (tullu + "n"))).s ;
- tulema = Predef.tk 3 tulevat + "m" + a ;
- vat = "v" + a + "t"
- in
- {s = table {
- Inf Inf1 => tulla ;
- Presn Sg P1 => tule_ + "n" ;
- Presn Sg P2 => tule_ + "t" ;
- Presn Sg P3 => tulee ;
- Presn Pl P1 => tule_ + "mme" ;
- Presn Pl P2 => tule_ + "tte" ;
- Presn Pl P3 => tulevat ;
- Impf Sg P1 => tuli_ + "n" ; --# notpresent
- Impf Sg P2 => tuli_ + "t" ; --# notpresent
- Impf Sg P3 => tuli ; --# notpresent
- Impf Pl P1 => tuli_ + "mme" ; --# notpresent
- Impf Pl P2 => tuli_ + "tte" ; --# notpresent
- Impf Pl P3 => tuli + vat ; --# notpresent
- Condit Sg P1 => tulisi + "n" ; --# notpresent
- Condit Sg P2 => tulisi + "t" ; --# notpresent
- Condit Sg P3 => tulisi ; --# notpresent
- Condit Pl P1 => tulisi + "mme" ; --# notpresent
- Condit Pl P2 => tulisi + "tte" ; --# notpresent
- Condit Pl P3 => tulisi + vat ; --# notpresent
- Imper Sg => tule_ ;
- Imper Pl => tulkaa ;
- ImperP3 Sg => tulkoo + "n" ;
- ImperP3 Pl => tulkoo + "t" ;
- ImperP1Pl => tulkaa + "mme" ;
- ImpNegPl => tulko ;
- Pass True => tullaan ;
- Pass False => Predef.tk 2 tullaan ;
- PastPartAct (AN n) => tulleen ! n ;
- PastPartAct AAdv => tullee + "sti" ;
- PastPartPass (AN n) => tullun ! n ;
- PastPartPass AAdv => tullu + "sti" ;
- Inf Inf3Iness => tulema + "ss" + a ;
- Inf Inf3Elat => tulema + "st" + a ;
- Inf Inf3Illat => tulema + a + "n" ;
- Inf Inf3Adess => tulema + "ll" + a ;
- Inf Inf3Abess => tulema + "tt" + a
- } ;
- sc = NPCase Nom ;
- qp = Predef.dp 2 tulko ;
- lock_V = <>
- } ;
-
------------------------------------------
--- Auxiliaries
------------------------------------------
-
--- The following function defines how grade alternation works if it is active.
--- In general, *whether there is* grade alternation must be given in the lexicon
--- (cf. "auto - auton" not "audon"; "vihje - vihjeen" not "vihkeen").
-
- weakGrade : Str -> Str = \kukko ->
- let
- ku = Predef.tk 3 kukko ;
- kko = Predef.dp 3 kukko ;
- o = last kukko
- in
- case kko of {
- "kk" + _ => ku + "k" + o ;
- "pp" + _ => ku + "p" + o ;
- "tt" + _ => ku + "t" + o ;
- "nk" + _ => ku + "ng" + o ;
- "nt" + _ => ku + "nn" + o ;
- "mp" + _ => ku + "mm" + o ;
- "rt" + _ => ku + "rr" + o ;
- "lt" + _ => ku + "ll" + o ;
- "lk" + ("i" | "e") => ku + "lj" + o ;
- "rk" + ("i" | "e") => ku + "rj" + o ;
- "lk" + _ => ku + "l" + o ;
- "rk" + _ => ku + "r" + o ;
- ("hk" | "tk") + _ => kukko ; -- *tahko-tahon, *pitkä-pitkän
- "s" + ("k" | "p" | "t") + _ => kukko ; -- *lasku-lasvun, *raspi-rasvin, *lastu-lasdun
- x + "ku" => ku + x + "vu" ;
- x + "k" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + o ;
- x + "p" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + "v" + o ;
- x + "t" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + "d" + o ;
- _ => kukko
- } ;
-
--- 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") + "je" + e => h + "ke" ; -- pohje/lahje impossible
- ("tk" | "hk" | "sk" | "sp" | "st") + _ => nke ; -- viuhke,kuiske
- a + k@("k"|"p"|"t") + e@("e"|"a"|"ä"|"u"|"i"|"o"|"ö") => a + k + k + e ;
- a + "d" + e@("e"|"a"|"ä"|"u"|"i"|"o"|"ö") => 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
- } ;
-
- vowHarmony : Str -> Str = \s -> case s of {
- _ + ("a" | "o" | "u") + _ => "a" ;
- _ => "ä"
- } ;
-
- getHarmony : Str -> Str = \u -> case u of {
- "a"|"o"|"u" => "a" ;
- _ => "ä"
- } ;
-
------------------------
--- for Structural
------------------------
-
-caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
- \\c => cn.s ! NCase n c ;
-
- mkDet : Number -> CommonNoun -> {
- s1,sp : Case => Str ; -- minun kolme
- s2 : Str ; -- -ni
- n : Number ; -- Pl (agreement feature for verb)
- isNum : Bool ; -- True (a numeral is present)
- isPoss : Bool ; -- True (a possessive suffix is present)
- isDef : Bool -- True (verb agrees in Pl, Nom is not Part)
- } = \n, noun -> heavyDet {
- s1 = \\c => noun.s ! NCase n c ;
- s2 = [] ;
- n = n ;
- isNum, isPoss = False ;
- isDef = True --- does this hold for all new dets?
- } ;
-
--- Here we define personal and relative pronouns.
-
- mkPronoun : (_,_,_,_,_ : Str) -> Number -> Person ->
- {s : NPForm => Str ; a : Agr} =
- \mina, minun, minua, minuna, minuun, n, p ->
- let {
- minu = Predef.tk 2 minuna ;
- a = Predef.dp 1 minuna
- } in
- {s = table {
- NPCase Nom => mina ;
- NPCase Gen => minun ;
- NPCase Part => minua ;
- NPCase Transl => minu + "ksi" ;
- NPCase Ess => minuna ;
- NPCase Iness => minu + ("ss" + a) ;
- NPCase Elat => minu + ("st" + a) ;
- NPCase Illat => minuun ;
- NPCase Adess => minu + ("ll" + a) ;
- NPCase Ablat => minu + ("lt" + a) ;
- NPCase Allat => minu + "lle" ;
- NPCase Abess => minu + ("tt" + a) ;
- NPAcc => Predef.tk 1 minun + "t"
- } ;
- a = {n = n ; p = p}
- } ;
-
- mkDemPronoun : (_,_,_,_,_ : Str) -> Number ->
- {s : NPForm => Str ; a : Agr} =
- \tuo, tuon, tuota, tuona, tuohon, n ->
- let pro = mkPronoun tuo tuon tuota tuona tuohon n P3
- in {
- s = table {
- NPAcc => tuo ;
- c => pro.s ! c
- } ;
- a = pro.a
- } ;
-
--- The relative pronoun, "joka", is inflected in case and number,
--- like common nouns, but it does not take possessive suffixes.
--- The inflextion shows a surprising similarity with "suo".
-
-oper
- relPron : Number => Case => Str =
- let {jo = nForms2N (dSuo "jo")} in
- table {
- Sg => table {
- Nom => "joka" ;
- Gen => "jonka" ;
- c => jo.s ! NCase Sg c
- } ;
- Pl => table {
- Nom => "jotka" ;
- c => "j" + (jo.s ! NCase Pl c)
- }
- } ;
-
- ProperName = {s : Case => Str} ;
-
- pronSe : ProperName = {
- s = table {
- Nom => "se" ;
- Gen => "sen" ;
- Part => "sitä" ;
- Transl => "siksi" ;
- Ess => "sinä" ;
- Iness => "siinä" ;
- Elat => "siitä" ;
- Illat => "siihen" ;
- Adess => "sillä" ;
- Ablat => "siltä" ;
- Allat => "sille" ;
- Abess => "sittä"
- } ;
- } ;
-
- pronNe : ProperName = {
- s = table {
- Nom => "ne" ;
- Gen => "niiden" ;
- Part => "niitä" ;
- Transl => "niiksi" ;
- Ess => "niinä" ;
- Iness => "niissä" ;
- Elat => "niitä" ;
- Illat => "niihin" ;
- Adess => "niillä" ;
- Ablat => "niiltä" ;
- Allat => "niille" ;
- Abess => "niittä"
- } ;
- } ;
-
-
-}