forked from GitHub/gf-rgl
Automatic whitespace removal
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
--# -path=.:../abstract:../common:../api
|
--# -path=.:../abstract:../common:../api
|
||||||
|
|
||||||
concrete LangFin of Lang =
|
concrete LangFin of Lang =
|
||||||
GrammarFin,
|
GrammarFin,
|
||||||
LexiconFin
|
LexiconFin
|
||||||
, ConstructionFin
|
, ConstructionFin
|
||||||
, DocumentationFin --# notpresent
|
, DocumentationFin --# notpresent
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
concrete LexiconFin of Lexicon = CatFin ** open MorphoFin, StemFin, ParadigmsFin in {
|
concrete LexiconFin of Lexicon = CatFin ** open MorphoFin, StemFin, ParadigmsFin in {
|
||||||
|
|
||||||
flags
|
flags
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
optimize=values ;
|
optimize=values ;
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ lin
|
|||||||
beer_N = mkN "olut" "oluita" ;
|
beer_N = mkN "olut" "oluita" ;
|
||||||
beg_V2V = mkV2V (mk2V "pyytää" "pyysi") (casePrep partitive) ;
|
beg_V2V = mkV2V (mk2V "pyytää" "pyysi") (casePrep partitive) ;
|
||||||
big_A = mkA (mkN "suuri" "suuria") "suurempi" "suurin" ;
|
big_A = mkA (mkN "suuri" "suuria") "suurempi" "suurin" ;
|
||||||
bike_N = mkN "polku" (mkN "pyörä") ;
|
bike_N = mkN "polku" (mkN "pyörä") ;
|
||||||
bird_N = mkN "lintu" ;
|
bird_N = mkN "lintu" ;
|
||||||
black_A = mkA (mkN "musta") "mustempi" "mustin" ;
|
black_A = mkA (mkN "musta") "mustempi" "mustin" ;
|
||||||
blue_A = mkA (mkN "sininen") "sinisempi" "sinisin" ;
|
blue_A = mkA (mkN "sininen") "sinisempi" "sinisin" ;
|
||||||
@@ -36,7 +36,7 @@ lin
|
|||||||
break_V2 = mkV2 (mkV "rikkoa") ;
|
break_V2 = mkV2 (mkV "rikkoa") ;
|
||||||
broad_A = mkA (mkN "leveä") "leveämpi" "levein" ;
|
broad_A = mkA (mkN "leveä") "leveämpi" "levein" ;
|
||||||
brother_N2 = mkN2 (
|
brother_N2 = mkN2 (
|
||||||
mkN "veli" "veljen" "veljenä" "veljeä" "veljeen"
|
mkN "veli" "veljen" "veljenä" "veljeä" "veljeen"
|
||||||
"veljinä" "veljissä" "veljien" "veljiä" "veljiin") ;
|
"veljinä" "veljissä" "veljien" "veljiä" "veljiin") ;
|
||||||
brown_A = mkA (mkN "ruskea") "ruskeampi" "ruskein" ;
|
brown_A = mkA (mkN "ruskea") "ruskeampi" "ruskein" ;
|
||||||
butter_N = mk3N "voi" "voin" "voita" ; ---- errors in Part
|
butter_N = mk3N "voi" "voin" "voita" ; ---- errors in Part
|
||||||
@@ -49,7 +49,7 @@ lin
|
|||||||
ceiling_N = mkN "katto" ;
|
ceiling_N = mkN "katto" ;
|
||||||
chair_N = mkN "tuoli" ;
|
chair_N = mkN "tuoli" ;
|
||||||
cheese_N = mkN "juusto" ;
|
cheese_N = mkN "juusto" ;
|
||||||
child_N = mkN "lapsi" "lapsen" "lasta" "lapsena" "lapseen"
|
child_N = mkN "lapsi" "lapsen" "lasta" "lapsena" "lapseen"
|
||||||
"lasten" "lapsia" "lapsina" "lapsissa" "lapsiin" ;
|
"lasten" "lapsia" "lapsina" "lapsissa" "lapsiin" ;
|
||||||
church_N = mkN "kirkko" ;
|
church_N = mkN "kirkko" ;
|
||||||
city_N = mkN "kaupunki" ;
|
city_N = mkN "kaupunki" ;
|
||||||
@@ -70,7 +70,7 @@ lin
|
|||||||
dog_N = mkN "koira" ;
|
dog_N = mkN "koira" ;
|
||||||
door_N = mkN "ovi" "ovia" ;
|
door_N = mkN "ovi" "ovia" ;
|
||||||
drink_V2 = mkV2 (mkV "juoda") (casePrep partitive) ;
|
drink_V2 = mkV2 (mkV "juoda") (casePrep partitive) ;
|
||||||
easy_A2V = mkA2 (mkA (mkN "helppo") "helpompi" "helpoin")
|
easy_A2V = mkA2 (mkA (mkN "helppo") "helpompi" "helpoin")
|
||||||
(casePrep allative) ;
|
(casePrep allative) ;
|
||||||
eat_V2 = mkV2 (mkV "syödä") (casePrep partitive) ;
|
eat_V2 = mkV2 (mkV "syödä") (casePrep partitive) ;
|
||||||
empty_A = mkA (mkN "tyhjä") "tyhjempi" "tyhjin" ;
|
empty_A = mkA (mkN "tyhjä") "tyhjempi" "tyhjin" ;
|
||||||
@@ -111,7 +111,7 @@ lin
|
|||||||
know_V2 = mkV2 (mkV "tuntea" "tunsi") ;
|
know_V2 = mkV2 (mkV "tuntea" "tunsi") ;
|
||||||
lake_N = mkN "järvi" "järviä" ;
|
lake_N = mkN "järvi" "järviä" ;
|
||||||
lamp_N = mkN "lamppu" ;
|
lamp_N = mkN "lamppu" ;
|
||||||
learn_V2 =
|
learn_V2 =
|
||||||
mkV2 (mk12V "oppia" "opin" "oppii" "oppivat" "oppikaa" "opitaan"
|
mkV2 (mk12V "oppia" "opin" "oppii" "oppivat" "oppikaa" "opitaan"
|
||||||
"opin" "oppi" "oppisi" "oppinut" "opittu" "opitun") ;
|
"opin" "oppi" "oppisi" "oppinut" "opittu" "opitun") ;
|
||||||
leather_N = mkN "nahka" ; --- nahan
|
leather_N = mkN "nahka" ; --- nahan
|
||||||
@@ -123,8 +123,8 @@ lin
|
|||||||
lose_V2 = mkV2 (mkV "hävitä" "hävisi") ; --- hukata
|
lose_V2 = mkV2 (mkV "hävitä" "hävisi") ; --- hukata
|
||||||
love_N = mk3N "rakkaus" "rakkauden" "rakkauksia" ;
|
love_N = mk3N "rakkaus" "rakkauden" "rakkauksia" ;
|
||||||
love_V2 = mkV2 (mkV "rakastaa") partitive ;
|
love_V2 = mkV2 (mkV "rakastaa") partitive ;
|
||||||
man_N = mkN "mies" "miehen" "miestä" "miehenä" "mieheen"
|
man_N = mkN "mies" "miehen" "miestä" "miehenä" "mieheen"
|
||||||
"miesten" "miehiä" "miehinä" "miehissä" "miehiin" ;
|
"miesten" "miehiä" "miehinä" "miehissä" "miehiin" ;
|
||||||
married_A2 = mkA2 (mkA "avioitunut") (postPrep genitive "kanssa") ; ---- infl
|
married_A2 = mkA2 (mkA "avioitunut") (postPrep genitive "kanssa") ; ---- infl
|
||||||
meat_N = mkN "liha" ;
|
meat_N = mkN "liha" ;
|
||||||
milk_N = mkN "maito" ;
|
milk_N = mkN "maito" ;
|
||||||
@@ -169,7 +169,7 @@ lin
|
|||||||
seek_V2 = mkV2 (mkV "etsiä") cpartitive ;
|
seek_V2 = mkV2 (mkV "etsiä") cpartitive ;
|
||||||
see_V2 = mkV2 (
|
see_V2 = mkV2 (
|
||||||
mk12V "nähdä" "näen" "näkee" "näkevät" "nähkää" "nähdään"
|
mk12V "nähdä" "näen" "näkee" "näkevät" "nähkää" "nähdään"
|
||||||
"näin" "näki" "näkisi" "nähnyt" "nähty" "nähdyn") ;
|
"näin" "näki" "näkisi" "nähnyt" "nähty" "nähdyn") ;
|
||||||
sell_V3 = mkV3 (mkV "myydä") accPrep (casePrep allative) ;
|
sell_V3 = mkV3 (mkV "myydä") accPrep (casePrep allative) ;
|
||||||
send_V3 = mkV3 (mkV "lähettää") accPrep (casePrep allative) ;
|
send_V3 = mkV3 (mkV "lähettää") accPrep (casePrep allative) ;
|
||||||
sheep_N = mkN "lammas" ;
|
sheep_N = mkN "lammas" ;
|
||||||
@@ -211,10 +211,10 @@ lin
|
|||||||
village_N = mkN "kylä" ;
|
village_N = mkN "kylä" ;
|
||||||
wait_V2 = mkV2 (mkV "odottaa") partitive ;
|
wait_V2 = mkV2 (mkV "odottaa") partitive ;
|
||||||
walk_V = mkV "kävellä" "käveli" ;
|
walk_V = mkV "kävellä" "käveli" ;
|
||||||
warm_A = mkA
|
warm_A = mkA
|
||||||
(mkN "lämmin" "lämpimän" "lämmintä" "lämpimänä" "lämpimään"
|
(mkN "lämmin" "lämpimän" "lämmintä" "lämpimänä" "lämpimään"
|
||||||
"lämpiminä" "lämpimiä" "lämpimien" "lämpimissä" "lämpimiin"
|
"lämpiminä" "lämpimiä" "lämpimien" "lämpimissä" "lämpimiin"
|
||||||
)
|
)
|
||||||
"lämpimämpi" "lämpimin" ;
|
"lämpimämpi" "lämpimin" ;
|
||||||
war_N = mkN "sota" ;
|
war_N = mkN "sota" ;
|
||||||
watch_V2 = mkV2 (mkV "katsella") cpartitive ;
|
watch_V2 = mkV2 (mkV "katsella") cpartitive ;
|
||||||
@@ -232,7 +232,7 @@ lin
|
|||||||
|
|
||||||
do_V2 = mkV2 (
|
do_V2 = mkV2 (
|
||||||
mkV "tehdä" "teen" "tekee" "tekevät" "tehkää" "tehdään"
|
mkV "tehdä" "teen" "tekee" "tekevät" "tehkää" "tehdään"
|
||||||
"tein" "teki" "tekisi" "tehnyt" "tehty" "tehdyn") ;
|
"tein" "teki" "tekisi" "tehnyt" "tehty" "tehdyn") ;
|
||||||
|
|
||||||
now_Adv = mkAdv "nyt" ;
|
now_Adv = mkAdv "nyt" ;
|
||||||
already_Adv = mkAdv "jo" ;
|
already_Adv = mkAdv "jo" ;
|
||||||
@@ -289,8 +289,8 @@ lin
|
|||||||
heart_N = mkN "sydän" "sydämen" "sydäntä" "sydämenä" "sydämeen"
|
heart_N = mkN "sydän" "sydämen" "sydäntä" "sydämenä" "sydämeen"
|
||||||
"sydänten" "sydämiä" "sydäminä" "sydämissä" "sydämiin" ;
|
"sydänten" "sydämiä" "sydäminä" "sydämissä" "sydämiin" ;
|
||||||
horn_N = mk2N "sarvi" "sarvia" ;
|
horn_N = mk2N "sarvi" "sarvia" ;
|
||||||
husband_N = mkN "mies" "miehen" "miestä" "miehenä" "mieheen"
|
husband_N = mkN "mies" "miehen" "miestä" "miehenä" "mieheen"
|
||||||
"miesten" "miehiä" "miehinä" "miehissä" "miehiin" ;
|
"miesten" "miehiä" "miehinä" "miehissä" "miehiin" ;
|
||||||
ice_N = mkN "jää" ;
|
ice_N = mkN "jää" ;
|
||||||
knee_N = mk2N "polvi" "polvia" ;
|
knee_N = mk2N "polvi" "polvia" ;
|
||||||
leaf_N = mk2N "lehti" "lehtiä" ;
|
leaf_N = mk2N "lehti" "lehtiä" ;
|
||||||
|
|||||||
@@ -2,10 +2,10 @@
|
|||||||
|
|
||||||
resource MakeStructuralFin = open CatFin, ParadigmsFin, MorphoFin, Prelude in {
|
resource MakeStructuralFin = open CatFin, ParadigmsFin, MorphoFin, Prelude in {
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mkConj : Str -> Str -> ParadigmsFin.Number -> Conj = \x,y,n ->
|
mkConj : Str -> Str -> ParadigmsFin.Number -> Conj = \x,y,n ->
|
||||||
{s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ;
|
{s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ;
|
||||||
mkSubj : Str -> Subj = \x ->
|
mkSubj : Str -> Subj = \x ->
|
||||||
{s = x ; lock_Subj = <>} ;
|
{s = x ; lock_Subj = <>} ;
|
||||||
mkIQuant : Str -> IQuant = \s ->
|
mkIQuant : Str -> IQuant = \s ->
|
||||||
{s = \\n,c => s ; lock_IQuant = <>} ; ----
|
{s = \\n,c => s ; lock_IQuant = <>} ; ----
|
||||||
@@ -23,7 +23,7 @@ oper
|
|||||||
isNeg = isNeg ;
|
isNeg = isNeg ;
|
||||||
} ;
|
} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
partDet : N -> Number -> Det = \s,n ->
|
partDet : N -> Number -> Det = \s,n ->
|
||||||
lin Det (MorphoFin.partDet False n s) ;
|
lin Det (MorphoFin.partDet False n s) ;
|
||||||
|
|
||||||
|
|||||||
@@ -12,4 +12,4 @@ lin
|
|||||||
MarkupPhr m phr = {s = appMark m phr.s} ;
|
MarkupPhr m phr = {s = appMark m phr.s} ;
|
||||||
MarkupText m txt = {s = appMark m txt.s} ;
|
MarkupText m txt = {s = appMark m txt.s} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,25 +15,25 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
dLujuus : Str -> NForms = \lujuus ->
|
dLujuus : Str -> NForms = \lujuus ->
|
||||||
let
|
let
|
||||||
lujuu = init lujuus ;
|
lujuu = init lujuus ;
|
||||||
lujuuksi = lujuu + "ksi" ;
|
lujuuksi = lujuu + "ksi" ;
|
||||||
a = vowHarmony (last lujuu) ;
|
a = vowHarmony (last lujuu) ;
|
||||||
in nForms10
|
in nForms10
|
||||||
lujuus (lujuu + "den") (lujuu + "tt" + a)
|
lujuus (lujuu + "den") (lujuu + "tt" + a)
|
||||||
(lujuu + "ten" + a) (lujuu + "teen")
|
(lujuu + "ten" + a) (lujuu + "teen")
|
||||||
(lujuuksi + "en") (lujuuksi + a)
|
(lujuuksi + "en") (lujuuksi + a)
|
||||||
(lujuuksi + "n" + a) (lujuuksi + "ss" + a) (lujuuksi + "in") ;
|
(lujuuksi + "n" + a) (lujuuksi + "ss" + a) (lujuuksi + "in") ;
|
||||||
|
|
||||||
dNainen : Str -> NForms = \nainen ->
|
dNainen : Str -> NForms = \nainen ->
|
||||||
let
|
let
|
||||||
a = vowHarmony nainen ;
|
a = vowHarmony nainen ;
|
||||||
nais = Predef.tk 3 nainen + "s"
|
nais = Predef.tk 3 nainen + "s"
|
||||||
in nForms11
|
in nForms11
|
||||||
nainen (nais + "en") (nais + "t" + a) (nais + "en" + a) (nais + "een")
|
nainen (nais + "en") (nais + "t" + a) (nais + "en" + a) (nais + "een")
|
||||||
(nais + "ten") (nais + "i" + a)
|
(nais + "ten") (nais + "i" + a)
|
||||||
(nais + "in" + a) (nais + "iss" + a) (nais + "iin") nais ;
|
(nais + "in" + a) (nais + "iss" + a) (nais + "iin") nais ;
|
||||||
|
|
||||||
dPaluu : Str -> NForms = \paluu ->
|
dPaluu : Str -> NForms = \paluu ->
|
||||||
let
|
let
|
||||||
@@ -42,7 +42,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
u = last paluu ;
|
u = last paluu ;
|
||||||
in nForms10
|
in nForms10
|
||||||
paluu (paluu + "n") (paluu + "t" + a) (paluu + "n" + a) (paluu + "seen")
|
paluu (paluu + "n") (paluu + "t" + a) (paluu + "n" + a) (paluu + "seen")
|
||||||
(palui + "den") (palui + "t" + a)
|
(palui + "den") (palui + "t" + a)
|
||||||
(palui + "n" + a) (palui + "ss" + a) (palui + "siin") ;
|
(palui + "n" + a) (palui + "ss" + a) (palui + "siin") ;
|
||||||
|
|
||||||
dPuu : Str -> NForms = \puu ->
|
dPuu : Str -> NForms = \puu ->
|
||||||
@@ -52,7 +52,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
u = last puu ;
|
u = last puu ;
|
||||||
in nForms10
|
in nForms10
|
||||||
puu (puu + "n") (puu + "t" + a) (puu + "n" + a) (puu + "h" + u + "n")
|
puu (puu + "n") (puu + "t" + a) (puu + "n" + a) (puu + "h" + u + "n")
|
||||||
(pui + "den") (pui + "t" + a)
|
(pui + "den") (pui + "t" + a)
|
||||||
(pui + "n" + a) (pui + "ss" + a) (pui + "hin") ;
|
(pui + "n" + a) (pui + "ss" + a) (pui + "hin") ;
|
||||||
|
|
||||||
dSuo : Str -> NForms = \suo ->
|
dSuo : Str -> NForms = \suo ->
|
||||||
@@ -62,7 +62,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
soi = Predef.tk 2 suo + o + "i" ;
|
soi = Predef.tk 2 suo + o + "i" ;
|
||||||
in nForms10
|
in nForms10
|
||||||
suo (suo + "n") (suo + "t" + a) (suo + "n" + a) (suo + "h" + o + "n")
|
suo (suo + "n") (suo + "t" + a) (suo + "n" + a) (suo + "h" + o + "n")
|
||||||
(soi + "den") (soi + "t" + a)
|
(soi + "den") (soi + "t" + a)
|
||||||
(soi + "n" + a) (soi + "ss" + a) (soi + "hin") ;
|
(soi + "n" + a) (soi + "ss" + a) (soi + "hin") ;
|
||||||
|
|
||||||
dKorkea : Str -> NForms = \korkea ->
|
dKorkea : Str -> NForms = \korkea ->
|
||||||
@@ -70,10 +70,10 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
a = last korkea ;
|
a = last korkea ;
|
||||||
korke = init korkea ;
|
korke = init korkea ;
|
||||||
in nForms10
|
in nForms10
|
||||||
korkea (korkea + "n") (korkea + a)
|
korkea (korkea + "n") (korkea + a)
|
||||||
(korkea + "n" + a) (korkea + a + "n")
|
(korkea + "n" + a) (korkea + a + "n")
|
||||||
(korke + "iden") (korke + "it" + a)
|
(korke + "iden") (korke + "it" + a)
|
||||||
(korke + "in" + a) (korke + "iss" + a)
|
(korke + "in" + a) (korke + "iss" + a)
|
||||||
(korke + "isiin") ; --- NSSK: korkeihin
|
(korke + "isiin") ; --- NSSK: korkeihin
|
||||||
|
|
||||||
dKaunis : Str -> NForms = \kaunis ->
|
dKaunis : Str -> NForms = \kaunis ->
|
||||||
@@ -81,10 +81,10 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
a = vowHarmony kaunis ;
|
a = vowHarmony kaunis ;
|
||||||
kaunii = init kaunis + "i" ;
|
kaunii = init kaunis + "i" ;
|
||||||
in nForms10
|
in nForms10
|
||||||
kaunis (kaunii + "n") (kaunis + "t" + a)
|
kaunis (kaunii + "n") (kaunis + "t" + a)
|
||||||
(kaunii + "n" + a) (kaunii + "seen")
|
(kaunii + "n" + a) (kaunii + "seen")
|
||||||
(kaunii + "den") (kaunii + "t" + a)
|
(kaunii + "den") (kaunii + "t" + a)
|
||||||
(kaunii + "n" + a) (kaunii + "ss" + a)
|
(kaunii + "n" + a) (kaunii + "ss" + a)
|
||||||
(kaunii + "siin") ;
|
(kaunii + "siin") ;
|
||||||
|
|
||||||
dLiitin : (_,_ : Str) -> NForms = \liitin,liittimen ->
|
dLiitin : (_,_ : Str) -> NForms = \liitin,liittimen ->
|
||||||
@@ -92,10 +92,10 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
a = vowHarmony liitin ;
|
a = vowHarmony liitin ;
|
||||||
liittim = Predef.tk 2 liittimen ;
|
liittim = Predef.tk 2 liittimen ;
|
||||||
in nForms10
|
in nForms10
|
||||||
liitin (liittim + "en") (liitin + "t" + a)
|
liitin (liittim + "en") (liitin + "t" + a)
|
||||||
(liittim + "en" + a) (liittim + "een")
|
(liittim + "en" + a) (liittim + "een")
|
||||||
(liittim + "ien") (liittim + "i" + a)
|
(liittim + "ien") (liittim + "i" + a)
|
||||||
(liittim + "in" + a) (liittim + "iss" + a)
|
(liittim + "in" + a) (liittim + "iss" + a)
|
||||||
(liittim + "iin") ;
|
(liittim + "iin") ;
|
||||||
|
|
||||||
dOnneton : Str -> NForms = \onneton ->
|
dOnneton : Str -> NForms = \onneton ->
|
||||||
@@ -103,10 +103,10 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
a = vowHarmony onneton ;
|
a = vowHarmony onneton ;
|
||||||
onnettom = Predef.tk 2 onneton + "t" + last (init onneton) + "m" ;
|
onnettom = Predef.tk 2 onneton + "t" + last (init onneton) + "m" ;
|
||||||
in nForms10
|
in nForms10
|
||||||
onneton (onnettom + a + "n") (onneton + "t" + a)
|
onneton (onnettom + a + "n") (onneton + "t" + a)
|
||||||
(onnettom + a + "n" + a) (onnettom + a + a + "n")
|
(onnettom + a + "n" + a) (onnettom + a + a + "n")
|
||||||
(onnettom + "ien") (onnettom + "i" + a)
|
(onnettom + "ien") (onnettom + "i" + a)
|
||||||
(onnettom + "in" + a) (onnettom + "iss" + a)
|
(onnettom + "in" + a) (onnettom + "iss" + a)
|
||||||
(onnettom + "iin") ;
|
(onnettom + "iin") ;
|
||||||
|
|
||||||
-- 2-syllable a/ä, o/ö, u/y
|
-- 2-syllable a/ä, o/ö, u/y
|
||||||
@@ -118,7 +118,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
uko = init ukon ;
|
uko = init ukon ;
|
||||||
uk = init uko ;
|
uk = init uko ;
|
||||||
ukkoja = case <ukko : Str> of {
|
ukkoja = case <ukko : Str> of {
|
||||||
_ + "ä" => -- kylä,kyliä,kylien,kylissä,kyliin
|
_ + "ä" => -- kylä,kyliä,kylien,kylissä,kyliin
|
||||||
<ukk + "iä", ukk + "ien", ukk, uk, ukk + "iin"> ;
|
<ukk + "iä", ukk + "ien", ukk, uk, ukk + "iin"> ;
|
||||||
_ + ("au" | "eu") + _ + "a" => -- kauhojen,seurojen
|
_ + ("au" | "eu") + _ + "a" => -- kauhojen,seurojen
|
||||||
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
|
<ukk + "oja",ukk + "ojen",ukk + "o", uk + "o", ukk + "oihin"> ;
|
||||||
@@ -129,12 +129,12 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
_ => -- suku,sukuja,sukujen,-uissa,-uihin
|
_ => -- suku,sukuja,sukujen,-uissa,-uihin
|
||||||
<ukko + "j" + a,ukko + "jen",ukko, uko, ukko + "ihin">
|
<ukko + "j" + a,ukko + "jen",ukko, uko, ukko + "ihin">
|
||||||
} ;
|
} ;
|
||||||
ukkoina = ukkoja.p3 + "in" + a ;
|
ukkoina = ukkoja.p3 + "in" + a ;
|
||||||
ukoissa = ukkoja.p4 + "iss" + a ;
|
ukoissa = ukkoja.p4 + "iss" + a ;
|
||||||
in nForms10
|
in nForms10
|
||||||
ukko ukon (ukko + a) (ukko + "n" + a) (ukko + o + "n")
|
ukko ukon (ukko + a) (ukko + "n" + a) (ukko + o + "n")
|
||||||
ukkoja.p2 ukkoja.p1
|
ukkoja.p2 ukkoja.p1
|
||||||
ukkoina ukoissa ukkoja.p5 ;
|
ukkoina ukoissa ukkoja.p5 ;
|
||||||
|
|
||||||
-- 3-syllable a/ä/o/ö
|
-- 3-syllable a/ä/o/ö
|
||||||
dSilakka : (_,_,_ : Str) -> NForms = \silakka,silakan,silakoita ->
|
dSilakka : (_,_,_ : Str) -> NForms = \silakka,silakan,silakoita ->
|
||||||
@@ -155,14 +155,14 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
<silakka+a,silakk+O+"jen",silakk+O, silak+O, silakk +O+ "ihin"> ;
|
<silakka+a,silakk+O+"jen",silakk+O, silak+O, silakk +O+ "ihin"> ;
|
||||||
_ + O@("o" | "ö" | "u" | "y" | "e") + ("ita" | "itä") => -- silakoita
|
_ + O@("o" | "ö" | "u" | "y" | "e") + ("ita" | "itä") => -- silakoita
|
||||||
<silakkaa, silak+O+"iden",silakk+O, silak+O, silakk +O+ "ihin"> ;
|
<silakkaa, silak+O+"iden",silakk+O, silak+O, silakk +O+ "ihin"> ;
|
||||||
_ => Predef.error silakoita
|
_ => Predef.error silakoita
|
||||||
} ;
|
} ;
|
||||||
silakkoina = silakoiden.p3 + "in" + a ;
|
silakkoina = silakoiden.p3 + "in" + a ;
|
||||||
silakoissa = silakoiden.p4 + "iss" + a ;
|
silakoissa = silakoiden.p4 + "iss" + a ;
|
||||||
in nForms10
|
in nForms10
|
||||||
silakka silakan silakoiden.p1 (silakka + "n" + a) (silakka + o + "n")
|
silakka silakan silakoiden.p1 (silakka + "n" + a) (silakka + o + "n")
|
||||||
silakoiden.p2 silakoita
|
silakoiden.p2 silakoita
|
||||||
silakkoina silakoissa silakoiden.p5 ;
|
silakkoina silakoissa silakoiden.p5 ;
|
||||||
|
|
||||||
dArpi : (_,_ : Str) -> NForms = \arpi,arven ->
|
dArpi : (_,_ : Str) -> NForms = \arpi,arven ->
|
||||||
let
|
let
|
||||||
@@ -178,16 +178,16 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
<arp + "t" + a,arp + "ien",arpi, arp>
|
<arp + "t" + a,arp + "ien",arpi, arp>
|
||||||
} ;
|
} ;
|
||||||
"r" | "n" => -- suurta,suurten
|
"r" | "n" => -- suurta,suurten
|
||||||
<arp + "t" + a,arp + "ten",arpi, arp>;
|
<arp + "t" + a,arp + "ten",arpi, arp>;
|
||||||
"l" | "h" => -- tuulta,tuulien
|
"l" | "h" => -- tuulta,tuulien
|
||||||
<arp + "t" + a,arp + "ien",arpi, arp>;
|
<arp + "t" + a,arp + "ien",arpi, arp>;
|
||||||
_ => -- arpea,arpien,arvissa
|
_ => -- arpea,arpien,arvissa
|
||||||
<arp + "e" + a,arp + "ien",arv+"i",arp>
|
<arp + "e" + a,arp + "ien",arv+"i",arp>
|
||||||
} ; ---- pieni,pientä; uni,unta
|
} ; ---- pieni,pientä; uni,unta
|
||||||
in nForms10
|
in nForms10
|
||||||
arpi arven arpe.p1 (arpe.p4 + "en" + a) (arpe.p4 + "een")
|
arpi arven arpe.p1 (arpe.p4 + "en" + a) (arpe.p4 + "een")
|
||||||
arpe.p2 (arpi + a)
|
arpe.p2 (arpi + a)
|
||||||
(arp + "in" + a) (arpe.p3 + "ss" + a) (arp + "iin") ;
|
(arp + "in" + a) (arpe.p3 + "ss" + a) (arp + "iin") ;
|
||||||
|
|
||||||
dRae : (_,_ : Str) -> NForms = \rae,rakeen ->
|
dRae : (_,_ : Str) -> NForms = \rae,rakeen ->
|
||||||
let
|
let
|
||||||
@@ -195,17 +195,17 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
rakee = init rakeen ;
|
rakee = init rakeen ;
|
||||||
rakei = init rakee + "i" ;
|
rakei = init rakee + "i" ;
|
||||||
raetta = case <rae : Str> of {
|
raetta = case <rae : Str> of {
|
||||||
_ + "e" =>
|
_ + "e" =>
|
||||||
<rae + "tt" + a, rakee + "seen"> ; -- raetta,rakeeseen
|
<rae + "tt" + a, rakee + "seen"> ; -- raetta,rakeeseen
|
||||||
_ + "u" =>
|
_ + "u" =>
|
||||||
<rae + "tt" + a, rakee + "seen"> ; -- kiiru, kiiruuseen
|
<rae + "tt" + a, rakee + "seen"> ; -- kiiru, kiiruuseen
|
||||||
_ + "i" =>
|
_ + "i" =>
|
||||||
<rae + "tt" + a, rakee + "seen"> ; -- ori, oriin
|
<rae + "tt" + a, rakee + "seen"> ; -- ori, oriin
|
||||||
_ + "s" =>
|
_ + "s" =>
|
||||||
<rae + "t" + a, rakee + "seen"> ; -- rengasta,renkaaseen
|
<rae + "t" + a, rakee + "seen"> ; -- rengasta,renkaaseen
|
||||||
_ + "t" =>
|
_ + "t" =>
|
||||||
<rae + "t" + a, rakee + "en"> ; -- olutta,olueen
|
<rae + "t" + a, rakee + "en"> ; -- olutta,olueen
|
||||||
_ + "r" =>
|
_ + "r" =>
|
||||||
<rae + "t" + a, rakee + "en"> ; -- sisarta,sisareen
|
<rae + "t" + a, rakee + "en"> ; -- sisarta,sisareen
|
||||||
_ => Predef.error (["expected ending e/t/s/r, found"] ++ rae)
|
_ => Predef.error (["expected ending e/t/s/r, found"] ++ rae)
|
||||||
} ;
|
} ;
|
||||||
@@ -222,8 +222,8 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
paate = init paati + "e" ;
|
paate = init paati + "e" ;
|
||||||
in nForms10
|
in nForms10
|
||||||
paatti paatin (paatti + a) (paatti + "n" + a) (paatti + "in")
|
paatti paatin (paatti + a) (paatti + "n" + a) (paatti + "in")
|
||||||
(paatti + "en") (paatte + "j" + a)
|
(paatti + "en") (paatte + "j" + a)
|
||||||
(paatte + "in" + a) (paate + "iss" + a) (paatte + "ihin") ;
|
(paatte + "in" + a) (paate + "iss" + a) (paatte + "ihin") ;
|
||||||
|
|
||||||
dTohtori : (_ : Str) -> NForms = \tohtori ->
|
dTohtori : (_ : Str) -> NForms = \tohtori ->
|
||||||
let
|
let
|
||||||
@@ -231,24 +231,24 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
tohtor = init tohtori ;
|
tohtor = init tohtori ;
|
||||||
in nForms10
|
in nForms10
|
||||||
tohtori (tohtori+"n") (tohtori + a) (tohtori + "n" + a) (tohtori + "in")
|
tohtori (tohtori+"n") (tohtori + a) (tohtori + "n" + a) (tohtori + "in")
|
||||||
(tohtor + "eiden") (tohtor + "eit" + a)
|
(tohtor + "eiden") (tohtor + "eit" + a)
|
||||||
(tohtor + "ein" + a) (tohtor + "eiss" + a) (tohtor + "eihin") ;
|
(tohtor + "ein" + a) (tohtor + "eiss" + a) (tohtor + "eihin") ;
|
||||||
|
|
||||||
dPiennar : (_,_ : Str) -> NForms = \piennar,pientaren ->
|
dPiennar : (_,_ : Str) -> NForms = \piennar,pientaren ->
|
||||||
let
|
let
|
||||||
a = vowHarmony piennar ;
|
a = vowHarmony piennar ;
|
||||||
pientar = Predef.tk 2 pientaren ;
|
pientar = Predef.tk 2 pientaren ;
|
||||||
in nForms10
|
in nForms10
|
||||||
piennar pientaren (piennar +"t" + a)
|
piennar pientaren (piennar +"t" + a)
|
||||||
(pientar + "en" + a) (pientar + "een")
|
(pientar + "en" + a) (pientar + "een")
|
||||||
(piennar + "ten") (pientar + "i" + a) (pientar + "in" + a)
|
(piennar + "ten") (pientar + "i" + a) (pientar + "in" + a)
|
||||||
(pientar + "iss" + a) (pientar + "iin") ;
|
(pientar + "iss" + a) (pientar + "iin") ;
|
||||||
|
|
||||||
dUnix : (_ : Str) -> NForms = \unix ->
|
dUnix : (_ : Str) -> NForms = \unix ->
|
||||||
let
|
let
|
||||||
a = vowHarmony unix ;
|
a = vowHarmony unix ;
|
||||||
unixi = unix + "i" ;
|
unixi = unix + "i" ;
|
||||||
unixe = unix + "e" ;
|
unixe = unix + "e" ;
|
||||||
in nForms10
|
in nForms10
|
||||||
unix (unixi + "n") (unixi + a) (unixi + "n" + a) (unixi + "in")
|
unix (unixi + "n") (unixi + a) (unixi + "n" + a) (unixi + "in")
|
||||||
(unixi + "en") (unixe + "j" + a) (unixe + "in" + a)
|
(unixi + "en") (unixe + "j" + a) (unixe + "in" + a)
|
||||||
@@ -265,45 +265,45 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
(nukk + "ien") (nukk + "ej" + a) (nukk + "ein" + a)
|
(nukk + "ien") (nukk + "ej" + a) (nukk + "ein" + a)
|
||||||
(nuke + "iss" + a) (nukk + "eihin") ;
|
(nuke + "iss" + a) (nukk + "eihin") ;
|
||||||
|
|
||||||
dJalas : Str -> NForms = \jalas ->
|
dJalas : Str -> NForms = \jalas ->
|
||||||
let
|
let
|
||||||
a = vowHarmony jalas ;
|
a = vowHarmony jalas ;
|
||||||
jalaks = init jalas + "ks" ;
|
jalaks = init jalas + "ks" ;
|
||||||
jalaksi = jalaks + "i" ;
|
jalaksi = jalaks + "i" ;
|
||||||
in nForms10
|
in nForms10
|
||||||
jalas (jalaks + "en") (jalas + "t" + a)
|
jalas (jalaks + "en") (jalas + "t" + a)
|
||||||
(jalaks + "en" + a) (jalaks + "een")
|
(jalaks + "en" + a) (jalaks + "een")
|
||||||
(jalas + "ten") (jalaksi + a)
|
(jalas + "ten") (jalaksi + a)
|
||||||
(jalaksi + "n" + a) (jalaksi + "ss" + a) (jalaksi + "in") ;
|
(jalaksi + "n" + a) (jalaksi + "ss" + a) (jalaksi + "in") ;
|
||||||
|
|
||||||
dSDP : Str -> NForms = \SDP ->
|
dSDP : Str -> NForms = \SDP ->
|
||||||
let
|
let
|
||||||
c = case Predef.toUpper (last SDP) of {
|
c = case Predef.toUpper (last SDP) of {
|
||||||
"A" =>
|
"A" =>
|
||||||
<"n","ta","na","han","iden","ita","ina","issa","ihin"> ;
|
<"n","ta","na","han","iden","ita","ina","issa","ihin"> ;
|
||||||
"B" | "C" | "D" | "E" | "G" | "P" | "T" | "V" | "W" =>
|
"B" | "C" | "D" | "E" | "G" | "P" | "T" | "V" | "W" =>
|
||||||
<"n","tä","nä","hen","iden","itä","inä","issä","ihin"> ;
|
<"n","tä","nä","hen","iden","itä","inä","issä","ihin"> ;
|
||||||
"F" | "L" | "M" | "N" | "R" | "S" | "X" =>
|
"F" | "L" | "M" | "N" | "R" | "S" | "X" =>
|
||||||
<"n","ää","nä","ään","ien","iä","inä","issä","iin"> ;
|
<"n","ää","nä","ään","ien","iä","inä","issä","iin"> ;
|
||||||
"H" | "K" | "O" | "Å" =>
|
"H" | "K" | "O" | "Å" =>
|
||||||
<"n","ta","na","hon","iden","ita","ina","issa","ihin"> ;
|
<"n","ta","na","hon","iden","ita","ina","issa","ihin"> ;
|
||||||
"I" | "J" =>
|
"I" | "J" =>
|
||||||
<"n","tä","nä","hin","iden","itä","inä","issä","ihin"> ;
|
<"n","tä","nä","hin","iden","itä","inä","issä","ihin"> ;
|
||||||
"Q" | "U" =>
|
"Q" | "U" =>
|
||||||
<"n","ta","na","hun","iden","ita","ina","issa","ihin"> ;
|
<"n","ta","na","hun","iden","ita","ina","issa","ihin"> ;
|
||||||
"Z" =>
|
"Z" =>
|
||||||
<"n","aa","na","aan","ojen","oja","oina","oissa","oihin"> ;
|
<"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"> ;
|
||||||
"Ö" =>
|
"Ö" =>
|
||||||
<"n","tä","nä","hön","iden","itä","inä","issä","ihin"> ;
|
<"n","tä","nä","hön","iden","itä","inä","issä","ihin"> ;
|
||||||
"Y" =>
|
"Y" =>
|
||||||
<"n","tä","nä","hyn","iden","itä","inä","issä","ihin"> ;
|
<"n","tä","nä","hyn","iden","itä","inä","issä","ihin"> ;
|
||||||
_ => Predef.error (["illegal abbreviation"] ++ SDP)
|
_ => Predef.error (["illegal abbreviation"] ++ SDP)
|
||||||
} ;
|
} ;
|
||||||
in nForms10
|
in nForms10
|
||||||
SDP (SDP + ":" + c.p1) (SDP + ":" + c.p2) (SDP + ":" + c.p3)
|
SDP (SDP + ":" + c.p1) (SDP + ":" + c.p2) (SDP + ":" + c.p3)
|
||||||
(SDP + ":" + c.p4) (SDP + ":" + c.p5) (SDP + ":" + c.p6)
|
(SDP + ":" + c.p4) (SDP + ":" + c.p5) (SDP + ":" + c.p6)
|
||||||
(SDP + ":" + c.p7) (SDP + ":" + c.p8) (SDP + ":" + c.p9) ;
|
(SDP + ":" + c.p7) (SDP + ":" + c.p8) (SDP + ":" + c.p9) ;
|
||||||
|
|
||||||
-- for adjective comparison
|
-- for adjective comparison
|
||||||
@@ -314,10 +314,10 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
suuremp = init suurempi ;
|
suuremp = init suurempi ;
|
||||||
suuremm = Predef.tk 2 suurempi + "m" ;
|
suuremm = Predef.tk 2 suurempi + "m" ;
|
||||||
in nForms10
|
in nForms10
|
||||||
suurempi (suuremm + a + "n") (suuremp + a + a)
|
suurempi (suuremm + a + "n") (suuremp + a + a)
|
||||||
(suuremp + a + "n" + a) (suuremp + a + a + "n")
|
(suuremp + a + "n" + a) (suuremp + a + a + "n")
|
||||||
(suuremp + "ien") (suurempi + a)
|
(suuremp + "ien") (suurempi + a)
|
||||||
(suurempi + "n" + a) (suuremm + "iss" + a) (suurempi + "in") ;
|
(suurempi + "n" + a) (suuremm + "iss" + a) (suurempi + "in") ;
|
||||||
|
|
||||||
dSuurin : Str -> NForms = \suurin ->
|
dSuurin : Str -> NForms = \suurin ->
|
||||||
let
|
let
|
||||||
@@ -325,10 +325,10 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
suurimm = init suurin + "mm" ;
|
suurimm = init suurin + "mm" ;
|
||||||
suurimp = init suurimm + "p" ;
|
suurimp = init suurimm + "p" ;
|
||||||
in nForms10
|
in nForms10
|
||||||
suurin (suurimm + a + "n") (suurin + "t" + a)
|
suurin (suurimm + a + "n") (suurin + "t" + a)
|
||||||
(suurimp + a + "n" + a) (suurimp + a + a + "n")
|
(suurimp + a + "n" + a) (suurimp + a + a + "n")
|
||||||
(suurimp + "ien") (suurimp + "i" + a)
|
(suurimp + "ien") (suurimp + "i" + a)
|
||||||
(suurimp + "in" + a) (suurimm + "iss" + a) (suurimp + "iin") ;
|
(suurimp + "in" + a) (suurimm + "iss" + a) (suurimp + "iin") ;
|
||||||
|
|
||||||
-- for verb participle forms
|
-- for verb participle forms
|
||||||
|
|
||||||
@@ -338,10 +338,10 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
ottane = Predef.tk 2 ottanut + "e" ;
|
ottane = Predef.tk 2 ottanut + "e" ;
|
||||||
ottanee = ottane + "e" ;
|
ottanee = ottane + "e" ;
|
||||||
in nForms10
|
in nForms10
|
||||||
ottanut (ottanee + "n") (ottanut + "t" + a)
|
ottanut (ottanee + "n") (ottanut + "t" + a)
|
||||||
(ottanee + "n" + a) (ottanee + "seen")
|
(ottanee + "n" + a) (ottanee + "seen")
|
||||||
(ottane + "iden") (ottane + "it" + a)
|
(ottane + "iden") (ottane + "it" + a)
|
||||||
(ottane + "in" + a) (ottane + "iss" + a) (ottane + "isiin") ;
|
(ottane + "in" + a) (ottane + "iss" + a) (ottane + "isiin") ;
|
||||||
|
|
||||||
-------------------
|
-------------------
|
||||||
-- auxiliaries ----
|
-- auxiliaries ----
|
||||||
@@ -351,7 +351,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
|
|
||||||
NForms : Type = Predef.Ints 10 => Str ;
|
NForms : Type = Predef.Ints 10 => Str ;
|
||||||
|
|
||||||
nForms10 : (x1,_,_,_,_,_,_,_,_,x10 : Str) -> NForms =
|
nForms10 : (x1,_,_,_,_,_,_,_,_,x10 : Str) -> NForms =
|
||||||
\Ukko,ukon,ukkoa,ukkona,ukkoon,
|
\Ukko,ukon,ukkoa,ukkona,ukkoon,
|
||||||
ukkojen,ukkoja,ukkoina,ukoissa,ukkoihin -> table {
|
ukkojen,ukkoja,ukkoina,ukoissa,ukkoihin -> table {
|
||||||
0 => Ukko ;
|
0 => Ukko ;
|
||||||
@@ -366,8 +366,8 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
9 => ukkoihin ;
|
9 => ukkoihin ;
|
||||||
10 => Ukko
|
10 => Ukko
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
nForms11 : (x1,_,_,_,_,_,_,_,_,_,x11 : Str) -> NForms =
|
nForms11 : (x1,_,_,_,_,_,_,_,_,_,x11 : Str) -> NForms =
|
||||||
\Ukko,ukon,ukkoa,ukkona,ukkoon,
|
\Ukko,ukon,ukkoa,ukkona,ukkoon,
|
||||||
ukkojen,ukkoja,ukkoina,ukoissa,ukkoihin,ukko_ -> table {
|
ukkojen,ukkoja,ukkoina,ukoissa,ukkoihin,ukko_ -> table {
|
||||||
0 => Ukko ;
|
0 => Ukko ;
|
||||||
@@ -385,7 +385,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
|
|
||||||
Noun = {s : NForm => Str; h : Harmony} ;
|
Noun = {s : NForm => Str; h : Harmony} ;
|
||||||
|
|
||||||
nForms2N : NForms -> Noun = \f ->
|
nForms2N : NForms -> Noun = \f ->
|
||||||
let
|
let
|
||||||
Ukko = f ! 0 ;
|
Ukko = f ! 0 ;
|
||||||
ukon = f ! 1 ;
|
ukon = f ! 1 ;
|
||||||
@@ -404,9 +404,9 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
ukko = Predef.tk 2 ukkona ;
|
ukko = Predef.tk 2 ukkona ;
|
||||||
ukkoi = Predef.tk 2 ukkoina ;
|
ukkoi = Predef.tk 2 ukkoina ;
|
||||||
ukoi = Predef.tk 3 ukoissa ;
|
ukoi = Predef.tk 3 ukoissa ;
|
||||||
harmony : Harmony = case a of
|
harmony : Harmony = case a of
|
||||||
{"a" => Back ; _ => Front } ;
|
{"a" => Back ; _ => Front } ;
|
||||||
in
|
in
|
||||||
{s = table {
|
{s = table {
|
||||||
NCase Sg Nom => Ukko ;
|
NCase Sg Nom => Ukko ;
|
||||||
NCase Sg Gen => uko + "n" ;
|
NCase Sg Gen => uko + "n" ;
|
||||||
@@ -477,22 +477,22 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
aForms2A : AForms -> Adjective = \afs -> {
|
aForms2A : AForms -> Adjective = \afs -> {
|
||||||
s = table {
|
s = table {
|
||||||
Posit => table {
|
Posit => table {
|
||||||
AN n => (nForms2N afs.posit).s ! n ;
|
AN n => (nForms2N afs.posit).s ! n ;
|
||||||
AAdv => afs.adv_posit
|
AAdv => afs.adv_posit
|
||||||
} ;
|
} ;
|
||||||
Compar => table {
|
Compar => table {
|
||||||
AN n => (nForms2N afs.compar).s ! n ;
|
AN n => (nForms2N afs.compar).s ! n ;
|
||||||
AAdv => afs.adv_compar
|
AAdv => afs.adv_compar
|
||||||
} ;
|
} ;
|
||||||
Superl => table {
|
Superl => table {
|
||||||
AN n => (nForms2N afs.superl).s ! n ;
|
AN n => (nForms2N afs.superl).s ! n ;
|
||||||
AAdv => afs.adv_superl
|
AAdv => afs.adv_superl
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
lock_A = <>
|
lock_A = <>
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
nforms2aforms : NForms -> AForms = \nforms ->
|
nforms2aforms : NForms -> AForms = \nforms ->
|
||||||
let
|
let
|
||||||
suure = init (nforms ! 1) ;
|
suure = init (nforms ! 1) ;
|
||||||
suur = Predef.tk 4 (nforms ! 8) ;
|
suur = Predef.tk 4 (nforms ! 8) ;
|
||||||
@@ -508,7 +508,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
cHukkua : (_,_ : Str) -> VForms = \hukkua,hukun ->
|
cHukkua : (_,_ : Str) -> VForms = \hukkua,hukun ->
|
||||||
let
|
let
|
||||||
a = last hukkua ;
|
a = last hukkua ;
|
||||||
hukku = init hukkua ;
|
hukku = init hukkua ;
|
||||||
@@ -519,8 +519,8 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
_ => u
|
_ => u
|
||||||
} ;
|
} ;
|
||||||
y = uyHarmony a ;
|
y = uyHarmony a ;
|
||||||
hukkui = init hukku + i + "i" ;
|
hukkui = init hukku + i + "i" ;
|
||||||
hukui = init huku + i + "i" ;
|
hukui = init huku + i + "i" ;
|
||||||
in vForms12
|
in vForms12
|
||||||
hukkua
|
hukkua
|
||||||
hukun
|
hukun
|
||||||
@@ -535,7 +535,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
(huku + "tt" + y)
|
(huku + "tt" + y)
|
||||||
(hukku + "nee") ;
|
(hukku + "nee") ;
|
||||||
|
|
||||||
cOttaa : (_,_,_,_ : Str) -> VForms = \ottaa,otan,otin,otti ->
|
cOttaa : (_,_,_,_ : Str) -> VForms = \ottaa,otan,otin,otti ->
|
||||||
let
|
let
|
||||||
a = last ottaa ;
|
a = last ottaa ;
|
||||||
aa = a + a ;
|
aa = a + a ;
|
||||||
@@ -547,8 +547,8 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
ottaa
|
ottaa
|
||||||
otan
|
otan
|
||||||
ottaa
|
ottaa
|
||||||
(otta + "v" + a + "t")
|
(otta + "v" + a + "t")
|
||||||
(otta + "k" + aa)
|
(otta + "k" + aa)
|
||||||
(ote + "t" + aa + "n")
|
(ote + "t" + aa + "n")
|
||||||
otin
|
otin
|
||||||
otti
|
otti
|
||||||
@@ -557,7 +557,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
(ote + "tt" + u)
|
(ote + "tt" + u)
|
||||||
(otta + "nee") ;
|
(otta + "nee") ;
|
||||||
|
|
||||||
cJuosta : (_,_ : Str) -> VForms = \juosta,juoksen ->
|
cJuosta : (_,_ : Str) -> VForms = \juosta,juoksen ->
|
||||||
let
|
let
|
||||||
a = last juosta ;
|
a = last juosta ;
|
||||||
juos = Predef.tk 2 juosta ;
|
juos = Predef.tk 2 juosta ;
|
||||||
@@ -580,7 +580,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
(juos + "t" + u)
|
(juos + "t" + u)
|
||||||
(juoss + "ee") ;
|
(juoss + "ee") ;
|
||||||
|
|
||||||
cJuoda : (_ : Str) -> VForms = \juoda ->
|
cJuoda : (_ : Str) -> VForms = \juoda ->
|
||||||
let
|
let
|
||||||
a = last juoda ;
|
a = last juoda ;
|
||||||
juo = Predef.tk 2 juoda ;
|
juo = Predef.tk 2 juoda ;
|
||||||
@@ -605,7 +605,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
(juo + "t" + u)
|
(juo + "t" + u)
|
||||||
(juo + "nee") ;
|
(juo + "nee") ;
|
||||||
|
|
||||||
cPudota : (_,_ : Str) -> VForms = \pudota,putosi ->
|
cPudota : (_,_ : Str) -> VForms = \pudota,putosi ->
|
||||||
let
|
let
|
||||||
a = last pudota ;
|
a = last pudota ;
|
||||||
pudot = init pudota ;
|
pudot = init pudota ;
|
||||||
@@ -630,7 +630,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
(pudot + "t" + u)
|
(pudot + "t" + u)
|
||||||
(pudo + "nnee") ;
|
(pudo + "nnee") ;
|
||||||
|
|
||||||
cHarkita : (_ : Str) -> VForms = \harkita ->
|
cHarkita : (_ : Str) -> VForms = \harkita ->
|
||||||
let
|
let
|
||||||
a = last harkita ;
|
a = last harkita ;
|
||||||
harkit = init harkita ;
|
harkit = init harkita ;
|
||||||
@@ -650,7 +650,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
(harkit + "t" + u)
|
(harkit + "t" + u)
|
||||||
(harki + "nnee") ;
|
(harki + "nnee") ;
|
||||||
|
|
||||||
cValjeta : (_,_ : Str) -> VForms = \valjeta,valkeni ->
|
cValjeta : (_,_ : Str) -> VForms = \valjeta,valkeni ->
|
||||||
let
|
let
|
||||||
a = last valjeta ;
|
a = last valjeta ;
|
||||||
valjet = init valjeta ;
|
valjet = init valjeta ;
|
||||||
@@ -671,7 +671,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
(valjet + "t" + u)
|
(valjet + "t" + u)
|
||||||
(valje + "nnee") ;
|
(valje + "nnee") ;
|
||||||
|
|
||||||
cKuunnella : (_,_ : Str) -> VForms = \kuunnella,kuuntelin ->
|
cKuunnella : (_,_ : Str) -> VForms = \kuunnella,kuuntelin ->
|
||||||
let
|
let
|
||||||
a = last kuunnella ;
|
a = last kuunnella ;
|
||||||
kuunnel = Predef.tk 2 kuunnella ;
|
kuunnel = Predef.tk 2 kuunnella ;
|
||||||
@@ -701,7 +701,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
|
|
||||||
VForms : Type = Predef.Ints 11 => Str ;
|
VForms : Type = Predef.Ints 11 => Str ;
|
||||||
|
|
||||||
vForms12 : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> VForms =
|
vForms12 : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> VForms =
|
||||||
\olla,olen,on,ovat,olkaa,ollaan,olin,oli,olisi,ollut,oltu,lienee ->
|
\olla,olen,on,ovat,olkaa,ollaan,olin,oli,olisi,ollut,oltu,lienee ->
|
||||||
table {
|
table {
|
||||||
0 => olla ;
|
0 => olla ;
|
||||||
@@ -718,16 +718,16 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
11 => lienee
|
11 => lienee
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
vforms2V : VForms -> Verb ** {qp : Bool} = \vh ->
|
vforms2V : VForms -> Verb ** {qp : Bool} = \vh ->
|
||||||
let
|
let
|
||||||
tulla = vh ! 0 ;
|
tulla = vh ! 0 ;
|
||||||
tull = init tulla ;
|
tull = init tulla ;
|
||||||
tulen = vh ! 1 ;
|
tulen = vh ! 1 ;
|
||||||
tulee = vh ! 2 ;
|
tulee = vh ! 2 ;
|
||||||
tulevat = vh ! 3 ;
|
tulevat = vh ! 3 ;
|
||||||
tulkaa = vh ! 4 ;
|
tulkaa = vh ! 4 ;
|
||||||
tullaan = vh ! 5 ;
|
tullaan = vh ! 5 ;
|
||||||
tulin = vh ! 6 ;
|
tulin = vh ! 6 ;
|
||||||
tuli = vh ! 7 ;
|
tuli = vh ! 7 ;
|
||||||
tulisi = vh ! 8 ;
|
tulisi = vh ! 8 ;
|
||||||
tullut = vh ! 9 ;
|
tullut = vh ! 9 ;
|
||||||
@@ -744,7 +744,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
tulleen = (nForms2N (dOttanut tullut)).s ;
|
tulleen = (nForms2N (dOttanut tullut)).s ;
|
||||||
tullu : Str = weakGrade tultu ;
|
tullu : Str = weakGrade tultu ;
|
||||||
tullun = (nForms2N (dUkko tultu (tullu + "n"))).s ;
|
tullun = (nForms2N (dUkko tultu (tullu + "n"))).s ;
|
||||||
tule__ = Predef.tk 3 tulevat ;
|
tule__ = Predef.tk 3 tulevat ;
|
||||||
tulema = tule__ + "m" + a ;
|
tulema = tule__ + "m" + a ;
|
||||||
tuleva = tule__ + "v" + a ;
|
tuleva = tule__ + "v" + a ;
|
||||||
vat = "v" + a + "t" ;
|
vat = "v" + a + "t" ;
|
||||||
@@ -769,7 +769,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
Inf Inf3Instr => tulema + "n" ;
|
Inf Inf3Instr => tulema + "n" ;
|
||||||
Inf Inf3InstrPass => tult + a + "m" + a + "n" ;
|
Inf Inf3InstrPass => tult + a + "m" + a + "n" ;
|
||||||
Inf Inf4Nom => tule__ + "minen" ;
|
Inf Inf4Nom => tule__ + "minen" ;
|
||||||
Inf Inf4Part => tule__ + "mist" + a ;
|
Inf Inf4Part => tule__ + "mist" + a ;
|
||||||
Inf Inf5 => tulema + "isill" + a ;
|
Inf Inf5 => tulema + "isill" + a ;
|
||||||
Inf InfPresPart => tuleva + "n" ;
|
Inf InfPresPart => tuleva + "n" ;
|
||||||
Inf InfPresPartAgr => tuleva ;
|
Inf InfPresPartAgr => tuleva ;
|
||||||
@@ -861,9 +861,9 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
("k"|"p") + "t" + _ => kukko ; -- *projekti-projekdin
|
("k"|"p") + "t" + _ => kukko ; -- *projekti-projekdin
|
||||||
"uku" => ku + "uvu" ;
|
"uku" => ku + "uvu" ;
|
||||||
"yky" => ku + "yvy" ;
|
"yky" => ku + "yvy" ;
|
||||||
x + "k" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + o ;
|
x + "k" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + o ;
|
||||||
x + "p" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + "v" + 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 ;
|
x + "t" + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") => ku + x + "d" + o ;
|
||||||
_ => kukko
|
_ => kukko
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -872,8 +872,8 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
strongGrade : Str -> Str = \hanke ->
|
strongGrade : Str -> Str = \hanke ->
|
||||||
let
|
let
|
||||||
ha = Predef.tk 3 hanke ;
|
ha = Predef.tk 3 hanke ;
|
||||||
nke = Predef.dp 3 hanke ;
|
nke = Predef.dp 3 hanke ;
|
||||||
in
|
in
|
||||||
ha + case nke of {
|
ha + case nke of {
|
||||||
"ng" + a => "nk" + a ;
|
"ng" + a => "nk" + a ;
|
||||||
"nn" + e => "nt" + e ;
|
"nn" + e => "nt" + e ;
|
||||||
@@ -881,9 +881,9 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
"rr" + e => "rt" + e ;
|
"rr" + e => "rt" + e ;
|
||||||
"ll" + a => "lt" + a ;
|
"ll" + a => "lt" + a ;
|
||||||
h@("h" | "l") + "je" + e => h + "ke" ; -- pohje/lahje impossible
|
h@("h" | "l") + "je" + e => h + "ke" ; -- pohje/lahje impossible
|
||||||
("tk" | "hk" | "sk" | "sp" | "st") + _ => nke ; -- viuhke,kuiske
|
("tk" | "hk" | "sk" | "sp" | "st") + _ => nke ; -- viuhke,kuiske
|
||||||
a + k@("k"|"p"|"t") + e@("e"|"a"|"ä"|"u"|"y"|"i"|"o"|"ö") => a + k + k + e ;
|
a + k@("k"|"p"|"t") + e@("e"|"a"|"ä"|"u"|"y"|"i"|"o"|"ö") => a + k + k + e ;
|
||||||
a + "d" + e@("e"|"a"|"ä"|"u"|"i"|"o"|"ö") => a + "t" + e ;
|
a + "d" + e@("e"|"a"|"ä"|"u"|"i"|"o"|"ö") => a + "t" + e ;
|
||||||
s + a@("a"|"ä"|"o"|"ö") + "e" => s + a + "ke" ; -- säe, tae, koe
|
s + a@("a"|"ä"|"o"|"ö") + "e" => s + a + "ke" ; -- säe, tae, koe
|
||||||
s + "u" + i@("i"|"e") => s + "uk" + i ; -- ruis, aueta
|
s + "u" + i@("i"|"e") => s + "uk" + i ; -- ruis, aueta
|
||||||
s + "aa" => s + "aka" ; -- taata
|
s + "aa" => s + "aka" ; -- taata
|
||||||
@@ -911,7 +911,7 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
-- for Structural
|
-- for Structural
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
||||||
\\c => cn.s ! NCase n c ;
|
\\c => cn.s ! NCase n c ;
|
||||||
|
|
||||||
mkDet = mkDetPol False ;
|
mkDet = mkDetPol False ;
|
||||||
@@ -940,16 +940,16 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
|||||||
-- Here we define personal and relative pronouns.
|
-- Here we define personal and relative pronouns.
|
||||||
-- Personal pronouns have possessive suffix (hänen talonsa) but "se" doesn't (sen talo)
|
-- Personal pronouns have possessive suffix (hänen talonsa) but "se" doesn't (sen talo)
|
||||||
|
|
||||||
mkPronoun : (_,_,_,_,_ : Str) -> Number -> Person ->
|
mkPronoun : (_,_,_,_,_ : Str) -> Number -> Person ->
|
||||||
{s : NPForm => Str ; a : Agr ; hasPoss : Bool ; poss : Str} = mkPronounGen True ;
|
{s : NPForm => Str ; a : Agr ; hasPoss : Bool ; poss : Str} = mkPronounGen True ;
|
||||||
|
|
||||||
mkPronounGen : Bool -> (_,_,_,_,_ : Str) -> Number -> Person ->
|
mkPronounGen : Bool -> (_,_,_,_,_ : Str) -> Number -> Person ->
|
||||||
{s : NPForm => Str ; a : Agr ; hasPoss : Bool ; poss : Str} =
|
{s : NPForm => Str ; a : Agr ; hasPoss : Bool ; poss : Str} =
|
||||||
\hasPoss, mina, minun, minua, minuna, minuun, n, p ->
|
\hasPoss, mina, minun, minua, minuna, minuun, n, p ->
|
||||||
let {
|
let {
|
||||||
minu = Predef.tk 2 minuna ;
|
minu = Predef.tk 2 minuna ;
|
||||||
a = Predef.dp 1 minuna
|
a = Predef.dp 1 minuna
|
||||||
} in
|
} in
|
||||||
{s = table {
|
{s = table {
|
||||||
NPCase Nom | NPSep => mina ;
|
NPCase Nom | NPSep => mina ;
|
||||||
NPCase Gen => minun ;
|
NPCase Gen => minun ;
|
||||||
@@ -968,10 +968,10 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
|||||||
a = Ag n p ;
|
a = Ag n p ;
|
||||||
hasPoss = hasPoss ;
|
hasPoss = hasPoss ;
|
||||||
poss = minun ;
|
poss = minun ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkDemPronoun : (_,_,_,_,_ : Str) -> Number ->
|
mkDemPronoun : (_,_,_,_,_ : Str) -> Number ->
|
||||||
{s : NPForm => Str ; a : Agr} =
|
{s : NPForm => Str ; a : Agr} =
|
||||||
\tuo, tuon, tuota, tuona, tuohon, n ->
|
\tuo, tuon, tuota, tuona, tuohon, n ->
|
||||||
let pro = mkPronoun tuo tuon tuota tuona tuohon n P3
|
let pro = mkPronoun tuo tuon tuota tuona tuohon n P3
|
||||||
in {
|
in {
|
||||||
@@ -982,7 +982,7 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
|||||||
a = pro.a
|
a = pro.a
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- The relative pronoun, "joka", is inflected in case and number,
|
-- The relative pronoun, "joka", is inflected in case and number,
|
||||||
-- like common nouns, but it does not take possessive suffixes.
|
-- like common nouns, but it does not take possessive suffixes.
|
||||||
-- The inflextion shows a surprising similarity with "suo".
|
-- The inflextion shows a surprising similarity with "suo".
|
||||||
|
|
||||||
@@ -994,7 +994,7 @@ oper
|
|||||||
Nom => "joka" ;
|
Nom => "joka" ;
|
||||||
Gen => "jonka" ;
|
Gen => "jonka" ;
|
||||||
c => jo.s ! NCase Sg c
|
c => jo.s ! NCase Sg c
|
||||||
} ;
|
} ;
|
||||||
Pl => table {
|
Pl => table {
|
||||||
Nom => "jotka" ;
|
Nom => "jotka" ;
|
||||||
c => "j" + (jo.s ! NCase Pl c)
|
c => "j" + (jo.s ! NCase Pl c)
|
||||||
|
|||||||
@@ -6,15 +6,15 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
-- The $Number$ is subtle: "nuo autot", "nuo kolme autoa" are both plural
|
-- The $Number$ is subtle: "nuo autot", "nuo kolme autoa" are both plural
|
||||||
-- for verb agreement, but the noun form is singular in the latter.
|
-- for verb agreement, but the noun form is singular in the latter.
|
||||||
|
|
||||||
DetCN det cn =
|
DetCN det cn =
|
||||||
let
|
let
|
||||||
n : Number = case det.isNum of {
|
n : Number = case det.isNum of {
|
||||||
True => Sg ;
|
True => Sg ;
|
||||||
_ => det.n
|
_ => det.n
|
||||||
} ;
|
} ;
|
||||||
ncase : NPForm -> Case * NForm = \c ->
|
ncase : NPForm -> Case * NForm = \c ->
|
||||||
let k = npform2case n c
|
let k = npform2case n c
|
||||||
in
|
in
|
||||||
case <n, c, det.isNum, det.isPoss, det.isDef> of {
|
case <n, c, det.isNum, det.isPoss, det.isDef> of {
|
||||||
<_, NPAcc, True,_,_> => <Nom,NCase Sg Part> ; -- myin kolme kytkintä(ni)
|
<_, NPAcc, True,_,_> => <Nom,NCase Sg Part> ; -- myin kolme kytkintä(ni)
|
||||||
<_, NPCase Nom | NPSep, True,_,_> => <Nom,NCase Sg Part> ; -- kolme kytkintä(ni) on
|
<_, NPCase Nom | NPSep, True,_,_> => <Nom,NCase Sg Part> ; -- kolme kytkintä(ni) on
|
||||||
@@ -25,11 +25,11 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
<_, NPCase Gen,_,True,_> => <k, NPossGen n> ; -- kytkime+ni vika
|
<_, NPCase Gen,_,True,_> => <k, NPossGen n> ; -- kytkime+ni vika
|
||||||
<_, NPCase Transl,_,True,_> => <k, NPossTransl n> ; -- kytkim(e|i)kse+ni
|
<_, NPCase Transl,_,True,_> => <k, NPossTransl n> ; -- kytkim(e|i)kse+ni
|
||||||
<_, NPCase Illat,_,True,_> => <k, NPossIllat n> ; -- kytkim(ee|ii)+ni
|
<_, NPCase Illat,_,True,_> => <k, NPossIllat n> ; -- kytkim(ee|ii)+ni
|
||||||
|
|
||||||
_ => <k, NCase n k> -- kytkin, kytkimen,...
|
_ => <k, NCase n k> -- kytkin, kytkimen,...
|
||||||
}
|
}
|
||||||
in {
|
in {
|
||||||
s = \\c => let
|
s = \\c => let
|
||||||
k = ncase c ;
|
k = ncase c ;
|
||||||
in
|
in
|
||||||
det.s1 ! k.p1 ++ cn.s ! k.p2 ++ det.s2 ! cn.h ;
|
det.s1 ! k.p1 ++ cn.s ! k.p2 ++ det.s2 ! cn.h ;
|
||||||
@@ -40,7 +40,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
isPron = False ; isNeg = det.isNeg
|
isPron = False ; isNeg = det.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetNP det =
|
DetNP det =
|
||||||
let
|
let
|
||||||
n : Number = case det.isNum of {
|
n : Number = case det.isNum of {
|
||||||
True => Sg ;
|
True => Sg ;
|
||||||
@@ -48,7 +48,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
} ;
|
} ;
|
||||||
in {
|
in {
|
||||||
s = \\c => let k = npform2case n c in
|
s = \\c => let k = npform2case n c in
|
||||||
det.sp ! k ; -- det.s2 is possessive suffix
|
det.sp ! k ; -- det.s2 is possessive suffix
|
||||||
a = agrP3 (case det.isDef of {
|
a = agrP3 (case det.isDef of {
|
||||||
False => Sg ; -- autoja menee; kolme autoa menee
|
False => Sg ; -- autoja menee; kolme autoa menee
|
||||||
_ => det.n
|
_ => det.n
|
||||||
@@ -57,7 +57,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
UsePN pn = {
|
UsePN pn = {
|
||||||
s = snoun2np Sg pn ;
|
s = snoun2np Sg pn ;
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False ; isNeg = False
|
isPron = False ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
@@ -92,8 +92,8 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetQuantOrd quant num ord = {
|
DetQuantOrd quant num ord = {
|
||||||
s1 = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! NCase num.n c ;
|
s1 = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! NCase num.n c ;
|
||||||
sp = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! NCase num.n c ;
|
sp = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! NCase num.n c ;
|
||||||
s2 = quant.s2 ;
|
s2 = quant.s2 ;
|
||||||
n = num.n ;
|
n = num.n ;
|
||||||
isNum = num.isNum ;
|
isNum = num.isNum ;
|
||||||
@@ -105,7 +105,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
DetQuant quant num = {
|
DetQuant quant num = {
|
||||||
s1 = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ;
|
s1 = \\c => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ;
|
||||||
sp = \\c => case num.isNum of {
|
sp = \\c => case num.isNum of {
|
||||||
True => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ; -- 0 kolme with Indef
|
True => quant.s1 ! num.n ! c ++ num.s ! Sg ! c ; -- 0 kolme with Indef
|
||||||
False => quant.sp ! num.n ! c ++ num.s ! Sg ! c -- yksi 0
|
False => quant.sp ! num.n ! c ++ num.s ! Sg ! c -- yksi 0
|
||||||
} ;
|
} ;
|
||||||
s2 = quant.s2 ;
|
s2 = quant.s2 ;
|
||||||
@@ -119,7 +119,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
s1 = \\_,_ => p.poss ; -- [] in det position with proDrop
|
s1 = \\_,_ => p.poss ; -- [] in det position with proDrop
|
||||||
sp = \\_,_ => p.s ! NPCase Gen ; -- to prevent [] with proDrop
|
sp = \\_,_ => p.s ! NPCase Gen ; -- to prevent [] with proDrop
|
||||||
s2 = case p.hasPoss of {
|
s2 = case p.hasPoss of {
|
||||||
True => table {Front => BIND ++ possSuffixFront p.a ;
|
True => table {Front => BIND ++ possSuffixFront p.a ;
|
||||||
Back => BIND ++ possSuffix p.a } ;
|
Back => BIND ++ possSuffix p.a } ;
|
||||||
False => \\_ => []
|
False => \\_ => []
|
||||||
} ;
|
} ;
|
||||||
@@ -135,19 +135,19 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
NumCard n = n ** {isNum = case n.n of {Sg => False ; _ => True}} ; -- yksi talo/kaksi taloa
|
NumCard n = n ** {isNum = case n.n of {Sg => False ; _ => True}} ; -- yksi talo/kaksi taloa
|
||||||
|
|
||||||
NumDigits numeral = {
|
NumDigits numeral = {
|
||||||
s = \\n,c => numeral.s ! NCard (NCase n c) ;
|
s = \\n,c => numeral.s ! NCard (NCase n c) ;
|
||||||
n = numeral.n
|
n = numeral.n
|
||||||
} ;
|
} ;
|
||||||
OrdDigits numeral = {s = \\f => numeral.s ! NOrd f} ;
|
OrdDigits numeral = {s = \\f => numeral.s ! NOrd f} ;
|
||||||
|
|
||||||
NumNumeral numeral = {
|
NumNumeral numeral = {
|
||||||
s = \\n,c => numeral.s ! NCard (NCase n c) ;
|
s = \\n,c => numeral.s ! NCard (NCase n c) ;
|
||||||
n = numeral.n
|
n = numeral.n
|
||||||
} ;
|
} ;
|
||||||
OrdNumeral numeral = {s = \\f => numeral.s ! NOrd f} ;
|
OrdNumeral numeral = {s = \\f => numeral.s ! NOrd f} ;
|
||||||
|
|
||||||
AdNum adn num = {
|
AdNum adn num = {
|
||||||
s = \\n,c => adn.s ++ num.s ! n ! c ;
|
s = \\n,c => adn.s ++ num.s ! n ! c ;
|
||||||
n = num.n
|
n = num.n
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -157,7 +157,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
{s = \\f => n.s ! NOrd (NCase Sg Transl) ++ (snoun2nounSep {s = \\nc => a.s ! Superl ! sAN nc ; h = a.h}).s ! f} ;
|
{s = \\f => n.s ! NOrd (NCase Sg Transl) ++ (snoun2nounSep {s = \\nc => a.s ! Superl ! sAN nc ; h = a.h}).s ! f} ;
|
||||||
|
|
||||||
DefArt = {
|
DefArt = {
|
||||||
s1 = \\_,_ => [] ;
|
s1 = \\_,_ => [] ;
|
||||||
sp = table {Sg => pronSe.s ; Pl => pronNe.s} ;
|
sp = table {Sg => pronSe.s ; Pl => pronNe.s} ;
|
||||||
s2 = \\_ => [] ;
|
s2 = \\_ => [] ;
|
||||||
isNum,isPoss,isNeg = False ;
|
isNum,isPoss,isNeg = False ;
|
||||||
@@ -166,10 +166,10 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
|
|
||||||
IndefArt = {
|
IndefArt = {
|
||||||
s1 = \\_,_ => [] ; -- Nom is Part in Pl: use isDef in DetCN
|
s1 = \\_,_ => [] ; -- Nom is Part in Pl: use isDef in DetCN
|
||||||
sp = \\n,c =>
|
sp = \\n,c =>
|
||||||
(nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
(nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
||||||
"yksien" "yksiä" "yksiin")).s ! NCase n c ;
|
"yksien" "yksiä" "yksiin")).s ! NCase n c ;
|
||||||
s2 = \\_ => [] ;
|
s2 = \\_ => [] ;
|
||||||
isNum,isPoss,isDef,isNeg = False -- autoja on
|
isNum,isPoss,isDef,isNeg = False -- autoja on
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -179,7 +179,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
ncase : Case -> NForm = \c -> NCase n c ;
|
ncase : Case -> NForm = \c -> NCase n c ;
|
||||||
in {
|
in {
|
||||||
s = \\c => let k = npform2case n c in
|
s = \\c => let k = npform2case n c in
|
||||||
cn.s ! ncase k ;
|
cn.s ! ncase k ;
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False ; isNeg = False
|
isPron = False ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
@@ -210,7 +210,7 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
ComplN3 f x = {
|
ComplN3 f x = {
|
||||||
s = \\nf => preOrPost f.isPre (f.s ! nf) (appCompl True Pos f.c2 x) ;
|
s = \\nf => preOrPost f.isPre (f.s ! nf) (appCompl True Pos f.c2 x) ;
|
||||||
c2 = f.c3 ;
|
c2 = f.c3 ;
|
||||||
h = f.h ;
|
h = f.h ;
|
||||||
isPre = f.isPre2
|
isPre = f.isPre2
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -224,8 +224,8 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
h = cn.h } ;
|
h = cn.h } ;
|
||||||
|
|
||||||
RelNP np rs = {
|
RelNP np rs = {
|
||||||
s = \\c => np.s ! c ++ BIND ++ "," ++ rs.s ! np.a ;
|
s = \\c => np.s ! c ++ BIND ++ "," ++ rs.s ! np.a ;
|
||||||
a = np.a ;
|
a = np.a ;
|
||||||
isPron = np.isPron ; ---- correct ?
|
isPron = np.isPron ; ---- correct ?
|
||||||
isNeg = np.isNeg
|
isNeg = np.isNeg
|
||||||
} ;
|
} ;
|
||||||
@@ -236,19 +236,19 @@ concrete NounFin of Noun = CatFin ** open ResFin, MorphoFin, StemFin, Prelude in
|
|||||||
SentCN cn sc = {s = \\nf=> cn.s ! nf ++ sc.s;
|
SentCN cn sc = {s = \\nf=> cn.s ! nf ++ sc.s;
|
||||||
h = cn.h } ;
|
h = cn.h } ;
|
||||||
|
|
||||||
ApposCN cn np = {s = \\nf=> cn.s ! nf ++ np.s ! NPSep ;
|
ApposCN cn np = {s = \\nf=> cn.s ! nf ++ np.s ! NPSep ;
|
||||||
h = cn.h } ; --- luvun x
|
h = cn.h } ; --- luvun x
|
||||||
|
|
||||||
PossNP cn np = {s = \\nf => np.s ! NPCase Gen ++ cn.s ! nf ;
|
PossNP cn np = {s = \\nf => np.s ! NPCase Gen ++ cn.s ! nf ;
|
||||||
h = cn.h
|
h = cn.h
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PartNP cn np = {s = \\nf => cn.s ! nf ++ np.s ! NPCase Part ;
|
PartNP cn np = {s = \\nf => cn.s ! nf ++ np.s ! NPCase Part ;
|
||||||
h = cn.h ---- gives "lasin viiniänsa" ; should be "lasinsa viiniä"
|
h = cn.h ---- gives "lasin viiniänsa" ; should be "lasinsa viiniä"
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
CountNP det np =
|
CountNP det np =
|
||||||
let
|
let
|
||||||
n : Number = case det.isNum of {
|
n : Number = case det.isNum of {
|
||||||
True => Sg ;
|
True => Sg ;
|
||||||
|
|||||||
@@ -6,39 +6,39 @@ concrete NumeralFin of Numeral = CatFin [Numeral,Digits] ** open Prelude, Parad
|
|||||||
flags optimize = all_subs ;
|
flags optimize = all_subs ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
Sub1000000 = {s : CardOrd => Str ; n : MorphoFin.Number} ;
|
Sub1000000 = {s : CardOrd => Str ; n : MorphoFin.Number} ;
|
||||||
Digit = {s : CardOrd => Str} ;
|
Digit = {s : CardOrd => Str} ;
|
||||||
Sub10, Sub100, Sub1000 = {s : NumPlace => CardOrd => Str ; n : MorphoFin.Number} ;
|
Sub10, Sub100, Sub1000 = {s : NumPlace => CardOrd => Str ; n : MorphoFin.Number} ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
num x = x ;
|
num x = x ;
|
||||||
n2 = kaksi_toinenN ;
|
n2 = kaksi_toinenN ;
|
||||||
n3 = co
|
n3 = co
|
||||||
(nhn (mkSubst "a" "kolme" "kolme" "kolme" "kolmea" "kolmeen" "kolmi" "kolmi"
|
(nhn (mkSubst "a" "kolme" "kolme" "kolme" "kolmea" "kolmeen" "kolmi" "kolmi"
|
||||||
"kolmien" "kolmia" "kolmiin"))
|
"kolmien" "kolmia" "kolmiin"))
|
||||||
(ordN "a" "kolmas") ;
|
(ordN "a" "kolmas") ;
|
||||||
n4 = co (snoun2nounBind (mkN "neljä")) (ordN "ä" "neljäs") ;
|
n4 = co (snoun2nounBind (mkN "neljä")) (ordN "ä" "neljäs") ;
|
||||||
n5 = co (snoun2nounBind (mkN "viisi" "viiden" "viisiä")) (ordN "ä" "viides") ;
|
n5 = co (snoun2nounBind (mkN "viisi" "viiden" "viisiä")) (ordN "ä" "viides") ;
|
||||||
n6 = co (snoun2nounBind (mkN "kuusi" "kuuden" "kuusia")) (ordN "a" "kuudes") ;
|
n6 = co (snoun2nounBind (mkN "kuusi" "kuuden" "kuusia")) (ordN "a" "kuudes") ;
|
||||||
n7 = co
|
n7 = co
|
||||||
(nhn (mkSubst "ä" "seitsemän" "seitsemä" "seitsemä" "seitsemää"
|
(nhn (mkSubst "ä" "seitsemän" "seitsemä" "seitsemä" "seitsemää"
|
||||||
"seitsemään" "seitsemi" "seitsemi" "seitsemien" "seitsemiä"
|
"seitsemään" "seitsemi" "seitsemi" "seitsemien" "seitsemiä"
|
||||||
"seitsemiin"))
|
"seitsemiin"))
|
||||||
(ordN "ä" "seitsemäs") ;
|
(ordN "ä" "seitsemäs") ;
|
||||||
n8 = co
|
n8 = co
|
||||||
(nhn (mkSubst "a" "kahdeksan" "kahdeksa" "kahdeksa" "kahdeksaa"
|
(nhn (mkSubst "a" "kahdeksan" "kahdeksa" "kahdeksa" "kahdeksaa"
|
||||||
"kahdeksaan" "kahdeksi" "kahdeksi" "kahdeksien" "kahdeksia"
|
"kahdeksaan" "kahdeksi" "kahdeksi" "kahdeksien" "kahdeksia"
|
||||||
"kahdeksiin"))
|
"kahdeksiin"))
|
||||||
(ordN "a" "kahdeksas") ;
|
(ordN "a" "kahdeksas") ;
|
||||||
n9 = co
|
n9 = co
|
||||||
(nhn (mkSubst "ä" "yhdeksän" "yhdeksä" "yhdeksä" "yhdeksää"
|
(nhn (mkSubst "ä" "yhdeksän" "yhdeksä" "yhdeksä" "yhdeksää"
|
||||||
"yhdeksään" "yhdeksi" "yhdeksi" "yhdeksien" "yhdeksiä" "yhdeksiin"))
|
"yhdeksään" "yhdeksi" "yhdeksi" "yhdeksien" "yhdeksiä" "yhdeksiin"))
|
||||||
(ordN "ä" "yhdeksäs") ;
|
(ordN "ä" "yhdeksäs") ;
|
||||||
|
|
||||||
pot01 =
|
pot01 =
|
||||||
{s = table {
|
{s = table {
|
||||||
NumAttr => \\_ => [] ;
|
NumAttr => \\_ => [] ;
|
||||||
NumIndep => yksi_ensiN.s
|
NumIndep => yksi_ensiN.s
|
||||||
} ;
|
} ;
|
||||||
n = Sg
|
n = Sg
|
||||||
@@ -55,14 +55,14 @@ lin
|
|||||||
|
|
||||||
pot1 d = {n = Pl ; s = \\_,c => d.s ! c ++ BIND ++ kymmentaN.s ! c} ;
|
pot1 d = {n = Pl ; s = \\_,c => d.s ! c ++ BIND ++ kymmentaN.s ! c} ;
|
||||||
pot1plus d e = {
|
pot1plus d e = {
|
||||||
n = Pl ;
|
n = Pl ;
|
||||||
s = \\_,c => d.s ! c ++ BIND ++ kymmentaN.s ! c ++ BIND ++ e.s ! NumIndep ! c
|
s = \\_,c => d.s ! c ++ BIND ++ kymmentaN.s ! c ++ BIND ++ e.s ! NumIndep ! c
|
||||||
} ;
|
} ;
|
||||||
pot1as2 n = n ;
|
pot1as2 n = n ;
|
||||||
pot2 d = {n = Pl ; s = \\_,c => d.s ! NumAttr ! c ++ nBIND d.n ++ sataaN.s ! d.n ! c} ; ----
|
pot2 d = {n = Pl ; s = \\_,c => d.s ! NumAttr ! c ++ nBIND d.n ++ sataaN.s ! d.n ! c} ; ----
|
||||||
pot2plus d e = {
|
pot2plus d e = {
|
||||||
n = Pl ;
|
n = Pl ;
|
||||||
s = \\_,c => d.s ! NumAttr ! c ++ nBIND d.n ++ sataaN.s ! d.n ! c ++
|
s = \\_,c => d.s ! NumAttr ! c ++ nBIND d.n ++ sataaN.s ! d.n ! c ++
|
||||||
BIND ++ e.s ! NumIndep ! c
|
BIND ++ e.s ! NumIndep ! c
|
||||||
} ;
|
} ;
|
||||||
pot2as3 n = {n = n.n ; s = n.s ! NumIndep} ;
|
pot2as3 n = {n = n.n ; s = n.s ! NumIndep} ;
|
||||||
@@ -85,38 +85,38 @@ oper
|
|||||||
|
|
||||||
-- Too much trouble to infer vowel, cf. "kuudes" vs. "viides".
|
-- Too much trouble to infer vowel, cf. "kuudes" vs. "viides".
|
||||||
|
|
||||||
-- ordN : Str -> Str -> {s : NForm => Str} = \a,sadas ->
|
-- ordN : Str -> Str -> {s : NForm => Str} = \a,sadas ->
|
||||||
ordN : Str -> Str -> CommonNoun = \a,sadas ->
|
ordN : Str -> Str -> CommonNoun = \a,sadas ->
|
||||||
let
|
let
|
||||||
sada = init sadas
|
sada = init sadas
|
||||||
in
|
in
|
||||||
snoun2nounBind (mkN
|
snoun2nounBind (mkN
|
||||||
sadas (sada + "nnen") (sada + "tt" + a) (sada + "nten" + a) (sada + "nteen")
|
sadas (sada + "nnen") (sada + "tt" + a) (sada + "nten" + a) (sada + "nteen")
|
||||||
(sada + "nsien") (sada + "nsi" + a) (sada + "nsin" + a)
|
(sada + "nsien") (sada + "nsi" + a) (sada + "nsin" + a)
|
||||||
(sada + "nsiss" + a) (sada + "nsiin")) ;
|
(sada + "nsiss" + a) (sada + "nsiin")) ;
|
||||||
|
|
||||||
param
|
param
|
||||||
NumPlace = NumIndep | NumAttr ;
|
NumPlace = NumIndep | NumAttr ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
yksiN = co
|
yksiN = co
|
||||||
(nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
(nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
||||||
"yksien" "yksiä" "yksiin"))
|
"yksien" "yksiä" "yksiin"))
|
||||||
(ordN "ä" "yhdes") ; -- yhdestoista
|
(ordN "ä" "yhdes") ; -- yhdestoista
|
||||||
yksi_ensiN = co
|
yksi_ensiN = co
|
||||||
(nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
(nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
|
||||||
"yksien" "yksiä" "yksiin"))
|
"yksien" "yksiä" "yksiin"))
|
||||||
(snoun2nounBind (mkN "ensimmäinen")) ; -- ensimmäinen ---- sadasensimmäinentuhannes
|
(snoun2nounBind (mkN "ensimmäinen")) ; -- ensimmäinen ---- sadasensimmäinentuhannes
|
||||||
kaksi_toinenN = co
|
kaksi_toinenN = co
|
||||||
(nhn (mkSubst "a" "kaksi" "kahde" "kahte" "kahta" "kahteen" "kaksi" "kaksi"
|
(nhn (mkSubst "a" "kaksi" "kahde" "kahte" "kahta" "kahteen" "kaksi" "kaksi"
|
||||||
"kaksien" "kaksia" "kaksiin"))
|
"kaksien" "kaksia" "kaksiin"))
|
||||||
(snoun2nounBind (mkN "toinen")) ;
|
(snoun2nounBind (mkN "toinen")) ;
|
||||||
kymmenenN = co
|
kymmenenN = co
|
||||||
(nhn (mkSubst "ä" "kymmenen" "kymmene" "kymmene" "kymmentä"
|
(nhn (mkSubst "ä" "kymmenen" "kymmene" "kymmene" "kymmentä"
|
||||||
"kymmeneen" "kymmeni" "kymmeni" "kymmenien" "kymmeniä" "kymmeniin"))
|
"kymmeneen" "kymmeni" "kymmeni" "kymmenien" "kymmeniä" "kymmeniin"))
|
||||||
(ordN "ä" "kymmenes") ;
|
(ordN "ä" "kymmenes") ;
|
||||||
sataN = co
|
sataN = co
|
||||||
(snoun2nounBind (mkN "sata"))
|
(snoun2nounBind (mkN "sata"))
|
||||||
(ordN "a" "sadas") ;
|
(ordN "a" "sadas") ;
|
||||||
|
|
||||||
tuhatN = co
|
tuhatN = co
|
||||||
@@ -137,7 +137,7 @@ oper
|
|||||||
NCard (NCase Sg Nom) => "sataa" ;
|
NCard (NCase Sg Nom) => "sataa" ;
|
||||||
k => sataN.s ! k
|
k => sataN.s ! k
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
tuhattaN = {s = table {
|
tuhattaN = {s = table {
|
||||||
@@ -150,11 +150,11 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
Dig = TDigit ;
|
Dig = TDigit ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
IDig d = d ;
|
IDig d = d ;
|
||||||
|
|
||||||
IIDig d i = {
|
IIDig d i = {
|
||||||
s = \\o => d.s ! NCard (NCase Sg Nom) ++ BIND ++ i.s ! o ;
|
s = \\o => d.s ! NCard (NCase Sg Nom) ++ BIND ++ i.s ! o ;
|
||||||
@@ -187,4 +187,3 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,12 +4,12 @@
|
|||||||
--
|
--
|
||||||
-- Aarne Ranta 2003--2008
|
-- Aarne Ranta 2003--2008
|
||||||
--
|
--
|
||||||
-- This is an API to the user of the resource grammar
|
-- This is an API to the user of the resource grammar
|
||||||
-- for adding lexical items. It gives functions for forming
|
-- for adding lexical items. It gives functions for forming
|
||||||
-- expressions of open categories: nouns, adjectives, verbs.
|
-- expressions of open categories: nouns, adjectives, verbs.
|
||||||
--
|
--
|
||||||
-- Closed categories (determiners, pronouns, conjunctions) are
|
-- Closed categories (determiners, pronouns, conjunctions) are
|
||||||
-- accessed through the resource syntax API and $Structural.gf$.
|
-- accessed through the resource syntax API and $Structural.gf$.
|
||||||
--
|
--
|
||||||
-- The main difference with $MorphoFin.gf$ is that the types
|
-- The main difference with $MorphoFin.gf$ is that the types
|
||||||
-- referred to are compiled resource grammar types. We have moreover
|
-- referred to are compiled resource grammar types. We have moreover
|
||||||
@@ -21,9 +21,9 @@
|
|||||||
-- a few arguments. In Finnish, one argument is enough in 80-90% of
|
-- a few arguments. In Finnish, one argument is enough in 80-90% of
|
||||||
-- cases in average.
|
-- cases in average.
|
||||||
|
|
||||||
resource ParadigmsFin = Kotus ** open
|
resource ParadigmsFin = Kotus ** open
|
||||||
(Predef=Predef),
|
(Predef=Predef),
|
||||||
Prelude,
|
Prelude,
|
||||||
MorphoFin,
|
MorphoFin,
|
||||||
CatFin, StemFin
|
CatFin, StemFin
|
||||||
in {
|
in {
|
||||||
@@ -31,9 +31,9 @@ resource ParadigmsFin = Kotus ** open
|
|||||||
flags optimize=noexpand ;
|
flags optimize=noexpand ;
|
||||||
coding=utf8 ;
|
coding=utf8 ;
|
||||||
|
|
||||||
--2 Parameters
|
--2 Parameters
|
||||||
--
|
--
|
||||||
-- To abstract over gender, number, and (some) case names,
|
-- To abstract over gender, number, and (some) case names,
|
||||||
-- we define the following identifiers. The application programmer
|
-- we define the following identifiers. The application programmer
|
||||||
-- should always use these constants instead of the constructors
|
-- should always use these constants instead of the constructors
|
||||||
-- defined in $ResFin$.
|
-- defined in $ResFin$.
|
||||||
@@ -76,7 +76,7 @@ oper
|
|||||||
casePrep : Case -> Prep ; -- just case, e.g. adessive
|
casePrep : Case -> Prep ; -- just case, e.g. adessive
|
||||||
|
|
||||||
mkPrep = overload {
|
mkPrep = overload {
|
||||||
mkPrep : Case -> Prep
|
mkPrep : Case -> Prep
|
||||||
= casePrep ;
|
= casePrep ;
|
||||||
mkPrep : Str -> Prep
|
mkPrep : Str -> Prep
|
||||||
= postGenPrep ;
|
= postGenPrep ;
|
||||||
@@ -107,10 +107,10 @@ oper
|
|||||||
-- It does automatic grade alternation, and is hence not usable
|
-- It does automatic grade alternation, and is hence not usable
|
||||||
-- for words like "auto" (whose genitive would become "audon").
|
-- for words like "auto" (whose genitive would become "audon").
|
||||||
--
|
--
|
||||||
-- If the one-argument paradigm does not give the correct result, one can try and give
|
-- If the one-argument paradigm does not give the correct result, one can try and give
|
||||||
-- two or three forms. Most notably, the two-argument variant is used
|
-- two or three forms. Most notably, the two-argument variant is used
|
||||||
-- for nouns like "kivi - kiviä", which would otherwise become like
|
-- for nouns like "kivi - kiviä", which would otherwise become like
|
||||||
-- "rivi - rivejä". Three arguments are used e.g. for
|
-- "rivi - rivejä". Three arguments are used e.g. for
|
||||||
-- "auto - auton - autoja", which would otherwise become
|
-- "auto - auton - autoja", which would otherwise become
|
||||||
-- "auto - audon".
|
-- "auto - audon".
|
||||||
|
|
||||||
@@ -133,9 +133,9 @@ oper
|
|||||||
-- Nouns where the parts are separate (should perhaps be treated as CN)
|
-- Nouns where the parts are separate (should perhaps be treated as CN)
|
||||||
|
|
||||||
separateN = overload {
|
separateN = overload {
|
||||||
separateN : Str -> N -> N
|
separateN : Str -> N -> N
|
||||||
= \s,n -> mkN (s + "_") n ;
|
= \s,n -> mkN (s + "_") n ;
|
||||||
separateN : N -> N -> N
|
separateN : N -> N -> N
|
||||||
= \oma, asunto -> lin N {s = \\c => oma.s ! c + "_" + asunto.s ! c ; h = asunto.h} ;
|
= \oma, asunto -> lin N {s = \\c => oma.s ! c + "_" + asunto.s ! c ; h = asunto.h} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -149,7 +149,7 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
genitiveCompoundN : Number -> N -> N -> N = \n,veri,paine -> paine ** {
|
genitiveCompoundN : Number -> N -> N -> N = \n,veri,paine -> paine ** {
|
||||||
s = \\c => (StemFin.snoun2nounBind veri).s ! NCase n Gen + paine.s ! c
|
s = \\c => (StemFin.snoun2nounBind veri).s ! NCase n Gen + paine.s ! c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Nouns used as functions need a case, of which the default is
|
-- Nouns used as functions need a case, of which the default is
|
||||||
@@ -178,7 +178,7 @@ oper
|
|||||||
|
|
||||||
-- Non-comparison one-place adjectives are just like nouns.
|
-- Non-comparison one-place adjectives are just like nouns.
|
||||||
-- The regular adjectives are based on $regN$ in the positive.
|
-- The regular adjectives are based on $regN$ in the positive.
|
||||||
-- Comparison adjectives have three forms.
|
-- Comparison adjectives have three forms.
|
||||||
-- The comparative and the superlative
|
-- The comparative and the superlative
|
||||||
-- are always inflected in the same way, so the nominative of them is actually
|
-- are always inflected in the same way, so the nominative of them is actually
|
||||||
-- enough (except for the superlative "paras" of "hyvä").
|
-- enough (except for the superlative "paras" of "hyvä").
|
||||||
@@ -198,7 +198,7 @@ oper
|
|||||||
p = pr ;
|
p = pr ;
|
||||||
hasPrefix = True
|
hasPrefix = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Two-place adjectives need a case for the second argument.
|
-- Two-place adjectives need a case for the second argument.
|
||||||
|
|
||||||
mkA2 = overload {
|
mkA2 = overload {
|
||||||
@@ -265,11 +265,11 @@ oper
|
|||||||
|
|
||||||
mkV3 = overload {
|
mkV3 = overload {
|
||||||
mkV3 : Str -> V3
|
mkV3 : Str -> V3
|
||||||
= \s -> dirdirV3 (mkV s) ;
|
= \s -> dirdirV3 (mkV s) ;
|
||||||
mkV3 : V -> V3
|
mkV3 : V -> V3
|
||||||
= \v -> dirdirV3 v ;
|
= \v -> dirdirV3 v ;
|
||||||
mkV3 : V -> Prep -> Prep -> V3 -- e.g. puhua, allative, elative
|
mkV3 : V -> Prep -> Prep -> V3 -- e.g. puhua, allative, elative
|
||||||
= \v,p,q -> v ** {c2 = p ; c3 = q ; lock_V3 = <>} ;
|
= \v,p,q -> v ** {c2 = p ; c3 = q ; lock_V3 = <>} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
dirV3 : V -> Case -> V3 ; -- siirtää, (accusative), illative
|
dirV3 : V -> Case -> V3 ; -- siirtää, (accusative), illative
|
||||||
@@ -283,9 +283,9 @@ oper
|
|||||||
|
|
||||||
mkVV = overload {
|
mkVV = overload {
|
||||||
mkVV : Str -> VV -- e.g. "yrittää" (puhua)
|
mkVV : Str -> VV -- e.g. "yrittää" (puhua)
|
||||||
= \s -> mkVVf (mkV s) infFirst ;
|
= \s -> mkVVf (mkV s) infFirst ;
|
||||||
mkVV : V -> VV -- e.g. "alkaa" (puhua)
|
mkVV : V -> VV -- e.g. "alkaa" (puhua)
|
||||||
= \v -> mkVVf v infFirst ;
|
= \v -> mkVVf v infFirst ;
|
||||||
mkVV : Str -> InfForm -> VV -- e.g. "ruveta" (puhumaan)
|
mkVV : Str -> InfForm -> VV -- e.g. "ruveta" (puhumaan)
|
||||||
= \s,i -> mkVVf (mkV s) i ;
|
= \s,i -> mkVVf (mkV s) i ;
|
||||||
mkVV : V -> InfForm -> VV -- e.g. "lakata" (puhumasta)
|
mkVV : V -> InfForm -> VV -- e.g. "lakata" (puhumasta)
|
||||||
@@ -300,15 +300,15 @@ mkVS = overload {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV2V = overload {
|
mkV2V = overload {
|
||||||
mkV2V : Str -> V2V -- reg verb, partitive + infIllat
|
mkV2V : Str -> V2V -- reg verb, partitive + infIllat
|
||||||
= \s -> mkV2Vf (mkV s) (casePrep partitive) infIllat ; ----
|
= \s -> mkV2Vf (mkV s) (casePrep partitive) infIllat ; ----
|
||||||
mkV2V : V -> V2V -- partitive + infillat
|
mkV2V : V -> V2V -- partitive + infillat
|
||||||
= \v -> mkV2Vf v (casePrep partitive) infIllat ; ----
|
= \v -> mkV2Vf v (casePrep partitive) infIllat ; ----
|
||||||
mkV2V : V -> Prep -> V2V -- e.g. "käskeä" genitive + infFiilat
|
mkV2V : V -> Prep -> V2V -- e.g. "käskeä" genitive + infFiilat
|
||||||
= \v,p -> mkV2Vf v p infIllat ;
|
= \v,p -> mkV2Vf v p infIllat ;
|
||||||
mkV2V : V -> Prep -> InfForm -> V2V -- e.g. "kieltää" partitive infElat
|
mkV2V : V -> Prep -> InfForm -> V2V -- e.g. "kieltää" partitive infElat
|
||||||
= \v,p,f -> mk2V2 v p ** {vi = infform2vvtype f ; lock_V2V = <>} ;
|
= \v,p,f -> mk2V2 v p ** {vi = infform2vvtype f ; lock_V2V = <>} ;
|
||||||
mkV2V : V -> Case -> InfForm -> V2V
|
mkV2V : V -> Case -> InfForm -> V2V
|
||||||
= \v,c,f -> mk2V2 v (casePrep c) ** {vi = infform2vvtype f ; lock_V2V = <>} ;
|
= \v,c,f -> mk2V2 v (casePrep c) ** {vi = infform2vvtype f ; lock_V2V = <>} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -316,20 +316,20 @@ mkVS = overload {
|
|||||||
|
|
||||||
mkV2S : V -> Prep -> V2S ; -- e.g. "sanoa" allative
|
mkV2S : V -> Prep -> V2S ; -- e.g. "sanoa" allative
|
||||||
mkVVf : V -> InfForm -> VV ; -- e.g. "ruveta" infIllat
|
mkVVf : V -> InfForm -> VV ; -- e.g. "ruveta" infIllat
|
||||||
mkV2Vf : V -> Prep -> InfForm -> V2V ; -- e.g. "kieltää" partitive infElat
|
mkV2Vf : V -> Prep -> InfForm -> V2V ; -- e.g. "kieltää" partitive infElat
|
||||||
mkVA : V -> Prep -> VA ; -- e.g. "maistua" ablative
|
mkVA : V -> Prep -> VA ; -- e.g. "maistua" ablative
|
||||||
mkV2A : V -> Prep -> Prep -> V2A ; -- e.g. "maalata" accusative translative
|
mkV2A : V -> Prep -> Prep -> V2A ; -- e.g. "maalata" accusative translative
|
||||||
mkVQ : V -> VQ ;
|
mkVQ : V -> VQ ;
|
||||||
mkV2Q : V -> Prep -> V2Q ; -- e.g. "kysyä" ablative
|
mkV2Q : V -> Prep -> V2Q ; -- e.g. "kysyä" ablative
|
||||||
|
|
||||||
mkAS : A -> AS ; --%
|
mkAS : A -> AS ; --%
|
||||||
--- mkA2S : A -> Prep -> A2S ; --%
|
--- mkA2S : A -> Prep -> A2S ; --%
|
||||||
mkAV : A -> AV ; --%
|
mkAV : A -> AV ; --%
|
||||||
--- mkA2V : A -> Prep -> A2V ; --%
|
--- mkA2V : A -> Prep -> A2V ; --%
|
||||||
|
|
||||||
-- Notice: categories $AS, A2S, AV, A2V$ are just $A$,
|
-- Notice: categories $AS, A2S, AV, A2V$ are just $A$,
|
||||||
-- and the second argument is given
|
-- and the second argument is given
|
||||||
-- as an adverb. Likewise
|
-- as an adverb. Likewise
|
||||||
-- $V0$ is just $V$.
|
-- $V0$ is just $V$.
|
||||||
|
|
||||||
V0 : Type ; --%
|
V0 : Type ; --%
|
||||||
@@ -354,16 +354,16 @@ mkVS = overload {
|
|||||||
mkConj = overload {
|
mkConj = overload {
|
||||||
mkConj : Str -> Conj
|
mkConj : Str -> Conj
|
||||||
= \y -> {s1 = [] ; s2 = y ; n = Pl ; lock_Conj = <>} ;
|
= \y -> {s1 = [] ; s2 = y ; n = Pl ; lock_Conj = <>} ;
|
||||||
mkConj : Str -> Str -> Conj
|
mkConj : Str -> Str -> Conj
|
||||||
= \x,y -> {s1 = x ; s2 = y ; n = Pl ; lock_Conj = <>} ;
|
= \x,y -> {s1 = x ; s2 = y ; n = Pl ; lock_Conj = <>} ;
|
||||||
mkConj : Str -> Str -> Number -> Conj
|
mkConj : Str -> Str -> Number -> Conj
|
||||||
= \x,y,n -> {s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ;
|
= \x,y,n -> {s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkDet = overload {
|
mkDet = overload {
|
||||||
mkDet : Number -> N -> Det
|
mkDet : Number -> N -> Det
|
||||||
= \nu,noun -> lin Det (MorphoFin.mkDet nu (snoun2nounBind noun)) ;
|
= \nu,noun -> lin Det (MorphoFin.mkDet nu (snoun2nounBind noun)) ;
|
||||||
mkDet : (isNeg : Bool) -> Number -> N -> Det -- use this with True to create a negative determiner
|
mkDet : (isNeg : Bool) -> Number -> N -> Det -- use this with True to create a negative determiner
|
||||||
= \isNeg,nu,noun -> lin Det (MorphoFin.mkDetPol isNeg nu (snoun2nounBind noun)) ;
|
= \isNeg,nu,noun -> lin Det (MorphoFin.mkDetPol isNeg nu (snoun2nounBind noun)) ;
|
||||||
mkDet : (isNeg : Bool) -> Number -> N -> Case -> Det -- paljon + False + partitive, ei yhtään + True + partitive
|
mkDet : (isNeg : Bool) -> Number -> N -> Case -> Det -- paljon + False + partitive, ei yhtään + True + partitive
|
||||||
= \isNeg,nu,noun,c -> case c of {
|
= \isNeg,nu,noun,c -> case c of {
|
||||||
@@ -373,10 +373,10 @@ mkVS = overload {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkQuant = overload {
|
mkQuant = overload {
|
||||||
mkQuant : N -> Quant =
|
mkQuant : N -> Quant =
|
||||||
\noun -> heavyQuant {s1 = \\n,c => (snoun2nounBind noun).s ! NCase n c ; s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False} ;
|
\noun -> heavyQuant {s1 = \\n,c => (snoun2nounBind noun).s ! NCase n c ; s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False} ;
|
||||||
mkQuant : N -> N -> Quant =
|
mkQuant : N -> N -> Quant =
|
||||||
\sg,pl -> heavyQuant {s1 = table {Sg => \\c => (snoun2nounBind pl).s ! NCase Sg c ; Pl => \\c => (snoun2nounBind pl).s ! NCase Pl c} ;
|
\sg,pl -> heavyQuant {s1 = table {Sg => \\c => (snoun2nounBind pl).s ! NCase Sg c ; Pl => \\c => (snoun2nounBind pl).s ! NCase Pl c} ;
|
||||||
s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False} ;
|
s2 = \\_ => [] ; isNum,isPoss,isNeg,isDef = False} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -411,16 +411,16 @@ mkVS = overload {
|
|||||||
infPart = Inf4Part ;
|
infPart = Inf4Part ;
|
||||||
infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ;
|
infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ;
|
||||||
|
|
||||||
prePrep : Case -> Str -> Prep =
|
prePrep : Case -> Str -> Prep =
|
||||||
\c,p -> lin Prep {c = NPCase c ; s = <tagFeature (tagPOS "ADP" p) "AdvType" "Pre", [],\\_ => []>} ; -- no possessive suffix
|
\c,p -> lin Prep {c = NPCase c ; s = <tagFeature (tagPOS "ADP" p) "AdvType" "Pre", [],\\_ => []>} ; -- no possessive suffix
|
||||||
|
|
||||||
postPrep : Case -> Str -> Prep =
|
postPrep : Case -> Str -> Prep =
|
||||||
\c,p ->
|
\c,p ->
|
||||||
let
|
let
|
||||||
h = guessHarmony p ;
|
h = guessHarmony p ;
|
||||||
a2p : Agr => Str = case c of {
|
a2p : Agr => Str = case c of {
|
||||||
Gen => \\a => p ++ possSuffixGen h a ;
|
Gen => \\a => p ++ possSuffixGen h a ;
|
||||||
_ => \\a => p
|
_ => \\a => p
|
||||||
} ;
|
} ;
|
||||||
pt = tagFeature (tagPOS "ADP" p) "AdvType" "Post" ;
|
pt = tagFeature (tagPOS "ADP" p) "AdvType" "Post" ;
|
||||||
in case p of {
|
in case p of {
|
||||||
@@ -433,7 +433,7 @@ mkVS = overload {
|
|||||||
casePrep : Case -> Prep =
|
casePrep : Case -> Prep =
|
||||||
\c -> lin Prep {c = NPCase c ; s = <[],[],\\_ => []>} ;
|
\c -> lin Prep {c = NPCase c ; s = <[],[],\\_ => []>} ;
|
||||||
|
|
||||||
accPrep : Prep =
|
accPrep : Prep =
|
||||||
lin Prep {c = NPAcc ; s = <[],[],\\_ => []>} ;
|
lin Prep {c = NPAcc ; s = <[],[],\\_ => []>} ;
|
||||||
|
|
||||||
NK = {s : NForms} ; --- lock_NK : {}} ;
|
NK = {s : NForms} ; --- lock_NK : {}} ;
|
||||||
@@ -451,7 +451,7 @@ mkVS = overload {
|
|||||||
-- \s,t,u -> nforms2snoun (nForms3 s t u) ;
|
-- \s,t,u -> nforms2snoun (nForms3 s t u) ;
|
||||||
mkN : (talo,talon,taloja,taloa : Str) -> N = mk4N ;
|
mkN : (talo,talon,taloja,taloa : Str) -> N = mk4N ;
|
||||||
-- \s,t,u,v -> nforms2snoun (nForms4 s t u v) ;
|
-- \s,t,u,v -> nforms2snoun (nForms4 s t u v) ;
|
||||||
mkN :
|
mkN :
|
||||||
(talo,talon,taloa,talona,taloon,talojen,taloja,taloina,taloissa,taloihin
|
(talo,talon,taloa,talona,taloon,talojen,taloja,taloina,taloissa,taloihin
|
||||||
: Str) -> N = mk10N ;
|
: Str) -> N = mk10N ;
|
||||||
mkN : (sora : Str) -> (tie : N) -> N = mkStrN ;
|
mkN : (sora : Str) -> (tie : N) -> N = mkStrN ;
|
||||||
@@ -463,30 +463,30 @@ mkVS = overload {
|
|||||||
exceptNomN : N -> Str -> N = \noun,nom -> lin N (exceptNomSNoun noun nom) ;
|
exceptNomN : N -> Str -> N = \noun,nom -> lin N (exceptNomSNoun noun nom) ;
|
||||||
|
|
||||||
---- mk1A : Str -> A = \jalo -> aForms2A (nforms2aforms (nForms1 jalo)) ;
|
---- mk1A : Str -> A = \jalo -> aForms2A (nforms2aforms (nForms1 jalo)) ;
|
||||||
---- mkNA : N -> A = snoun2sadj ;
|
---- mkNA : N -> A = snoun2sadj ;
|
||||||
|
|
||||||
mk1N : (talo : Str) -> N = \s -> lin N (nforms2snoun (nForms1 s)) ;
|
mk1N : (talo : Str) -> N = \s -> lin N (nforms2snoun (nForms1 s)) ;
|
||||||
mk2N : (talo,talon : Str) -> N = \s,t -> lin N (nforms2snoun (nForms2 s t)) ;
|
mk2N : (talo,talon : Str) -> N = \s,t -> lin N (nforms2snoun (nForms2 s t)) ;
|
||||||
mk3N : (talo,talon,taloja : Str) -> N = \s,t,u -> lin N (nforms2snoun (nForms3 s t u)) ;
|
mk3N : (talo,talon,taloja : Str) -> N = \s,t,u -> lin N (nforms2snoun (nForms3 s t u)) ;
|
||||||
mk4N : (talo,talon,taloa,taloja : Str) -> N = \s,t,u,v ->
|
mk4N : (talo,talon,taloa,taloja : Str) -> N = \s,t,u,v ->
|
||||||
lin N (nforms2snoun (nForms4 s t u v)) ;
|
lin N (nforms2snoun (nForms4 s t u v)) ;
|
||||||
mk10N :
|
mk10N :
|
||||||
(talo,talon,taloa,talona,taloon,talojen,taloja,taloina,taloissa,taloihin
|
(talo,talon,taloa,talona,taloon,talojen,taloja,taloina,taloissa,taloihin
|
||||||
: Str) -> N = \a,b,c,d,e,f,g,h,i,j ->
|
: Str) -> N = \a,b,c,d,e,f,g,h,i,j ->
|
||||||
lin N (nforms2snoun (nForms10 a b c d e f g h i j)) ;
|
lin N (nforms2snoun (nForms10 a b c d e f g h i j)) ;
|
||||||
|
|
||||||
mkSeparateN : Str -> N -> N = \unissa,kulkija -> {
|
mkSeparateN : Str -> N -> N = \unissa,kulkija -> {
|
||||||
s = \\c => unissa ++ kulkija.s ! c ;
|
s = \\c => unissa ++ kulkija.s ! c ;
|
||||||
h = kulkija.h ;
|
h = kulkija.h ;
|
||||||
lock_N = <>
|
lock_N = <>
|
||||||
} ;
|
} ;
|
||||||
mkStrN : Str -> N -> N = \sora,tie -> {
|
mkStrN : Str -> N -> N = \sora,tie -> {
|
||||||
s = \\c => sora + tie.s ! c ;
|
s = \\c => sora + tie.s ! c ;
|
||||||
h = tie.h ;
|
h = tie.h ;
|
||||||
lock_N = <>
|
lock_N = <>
|
||||||
} ;
|
} ;
|
||||||
mkNN : N -> N -> N = \oma,tunto -> {
|
mkNN : N -> N -> N = \oma,tunto -> {
|
||||||
s = \\c => oma.s ! c + tunto.s ! c ;
|
s = \\c => oma.s ! c + tunto.s ! c ;
|
||||||
h = tunto.h ;
|
h = tunto.h ;
|
||||||
lock_N = <>
|
lock_N = <>
|
||||||
} ; ---- TODO: oma in possessive suffix forms
|
} ; ---- TODO: oma in possessive suffix forms
|
||||||
@@ -496,7 +496,7 @@ mkVS = overload {
|
|||||||
ukk = init ukko ;
|
ukk = init ukko ;
|
||||||
uko = weakGrade ukko ;
|
uko = weakGrade ukko ;
|
||||||
ukon = uko + "n" ;
|
ukon = uko + "n" ;
|
||||||
o = case last ukko of {"ä" => "ö" ; "a" => "o"} ; -- only used then
|
o = case last ukko of {"ä" => "ö" ; "a" => "o"} ; -- only used then
|
||||||
renka = strongGrade (init ukko) ;
|
renka = strongGrade (init ukko) ;
|
||||||
rake = strongGrade ukko ;
|
rake = strongGrade ukko ;
|
||||||
in
|
in
|
||||||
@@ -514,26 +514,26 @@ mkVS = overload {
|
|||||||
_ + ("ut" | "yt") => dOttanut ukko ;
|
_ + ("ut" | "yt") => dOttanut ukko ;
|
||||||
_ + ("as" | "äs") => dRae ukko (renka + last renka + "n") ;
|
_ + ("as" | "äs") => dRae ukko (renka + last renka + "n") ;
|
||||||
_ + ("uus" | "yys" | "eus" | "eys") => dLujuus ukko ;
|
_ + ("uus" | "yys" | "eus" | "eys") => dLujuus ukko ;
|
||||||
_ + "s" => dJalas ukko ;
|
_ + "s" => dJalas ukko ;
|
||||||
|
|
||||||
-- {- heuristics for 3-syllable nouns ending a/ä
|
-- {- heuristics for 3-syllable nouns ending a/ä
|
||||||
_ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? +
|
_ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? +
|
||||||
_ + "i" + ? + a@("a" | "ä") =>
|
_ + "i" + ? + a@("a" | "ä") =>
|
||||||
dSilakka ukko (ukko + "n") (ukk + o + "it" + a) ; -- pesijä
|
dSilakka ukko (ukko + "n") (ukk + o + "it" + a) ; -- pesijä
|
||||||
_ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ +
|
_ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ +
|
||||||
("a" | "e" | "o" | "u" | "y" | "ä" | "ö") +
|
("a" | "e" | "o" | "u" | "y" | "ä" | "ö") +
|
||||||
("l" | "r" | "n") + a@("a" | "ä") =>
|
("l" | "r" | "n") + a@("a" | "ä") =>
|
||||||
dSilakka ukko (ukko + "n") (ukk + o + "it" + a) ; -- sarana, omena
|
dSilakka ukko (ukko + "n") (ukk + o + "it" + a) ; -- sarana, omena
|
||||||
_ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ +
|
_ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ +
|
||||||
("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") +
|
("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") +
|
||||||
("n" | "k" | "s") + "k" + a@("a" | "ä") =>
|
("n" | "k" | "s") + "k" + a@("a" | "ä") =>
|
||||||
dSilakka ukko (uko + "n") (init uko + o + "it" + a) ; -- silakka
|
dSilakka ukko (uko + "n") (init uko + o + "it" + a) ; -- silakka
|
||||||
_ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ +
|
_ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ +
|
||||||
("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") +
|
("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") +
|
||||||
("n" | "t" | "s") + "t" + a@("a" | "ä") =>
|
("n" | "t" | "s") + "t" + a@("a" | "ä") =>
|
||||||
dSilakka ukko (uko + "n") (ukk + o + "j" + a) ; -- yhdyntä (but not isäntä)
|
dSilakka ukko (uko + "n") (ukk + o + "j" + a) ; -- yhdyntä (but not isäntä)
|
||||||
_ + ("a" | "e" | "i" | "o" | "u") + ? + _ +
|
_ + ("a" | "e" | "i" | "o" | "u") + ? + _ +
|
||||||
("a" | "e" | "o" | "u") + ? + "a" =>
|
("a" | "e" | "o" | "u") + ? + "a" =>
|
||||||
dSilakka ukko (ukko + "n") (ukk + "ia") ; -- asema, johtaja
|
dSilakka ukko (ukko + "n") (ukk + "ia") ; -- asema, johtaja
|
||||||
-- -}
|
-- -}
|
||||||
_ + "i" +o@("o"|"ö") => dSilakka ukko (ukko+"n") (ukko+"it"+getHarmony o);
|
_ + "i" +o@("o"|"ö") => dSilakka ukko (ukko+"n") (ukko+"it"+getHarmony o);
|
||||||
@@ -544,51 +544,51 @@ mkVS = overload {
|
|||||||
_ + ("ar" | "är") => dPiennar ukko (renka + "ren") ;
|
_ + ("ar" | "är") => dPiennar ukko (renka + "ren") ;
|
||||||
_ + "e" + ("l" | "n") => dPiennar ukko (ukko + "en") ;
|
_ + "e" + ("l" | "n") => dPiennar ukko (ukko + "en") ;
|
||||||
_ => dUnix ukko
|
_ => dUnix ukko
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
nForms2 : (_,_ : Str) -> NForms = \ukko,ukkoja ->
|
nForms2 : (_,_ : Str) -> NForms = \ukko,ukkoja ->
|
||||||
let
|
let
|
||||||
ukot = nForms1 ukko ;
|
ukot = nForms1 ukko ;
|
||||||
ukon = weakGrade ukko + "n" ;
|
ukon = weakGrade ukko + "n" ;
|
||||||
in
|
in
|
||||||
case <ukko,ukkoja> of {
|
case <ukko,ukkoja> of {
|
||||||
<_, _ + ":" + ? + ("a" | "ä")> => dSDP ukko ;
|
<_, _ + ":" + ? + ("a" | "ä")> => dSDP ukko ;
|
||||||
<_ + "ea", _ + "oita"> =>
|
<_ + "ea", _ + "oita"> =>
|
||||||
dSilakka ukko ukon ukkoja ; -- idea, but not korkea
|
dSilakka ukko ukon ukkoja ; -- idea, but not korkea
|
||||||
<_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" |
|
<_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" |
|
||||||
"ie" | "uo" | "yö" | "ea" | "eä" |
|
"ie" | "uo" | "yö" | "ea" | "eä" |
|
||||||
"ia" | "iä" | "io" | "iö"), _ + ("a" | "ä")> =>
|
"ia" | "iä" | "io" | "iö"), _ + ("a" | "ä")> =>
|
||||||
nForms1 ukko ; --- to protect --- how to get "dioja"?
|
nForms1 ukko ; --- to protect --- how to get "dioja"?
|
||||||
<_ + ("a" | "ä" | "o" | "ö"), _ + ("a" | "ä")> =>
|
<_ + ("a" | "ä" | "o" | "ö"), _ + ("a" | "ä")> =>
|
||||||
dSilakka ukko ukon ukkoja ;
|
dSilakka ukko ukon ukkoja ;
|
||||||
<arp + "i", _ + "i" + ("a" | "ä")> =>
|
<arp + "i", _ + "i" + ("a" | "ä")> =>
|
||||||
dArpi ukko (init (weakGrade ukko) + "en") ;
|
dArpi ukko (init (weakGrade ukko) + "en") ;
|
||||||
<_ + "i", _ + ("eita" | "eitä")> =>
|
<_ + "i", _ + ("eita" | "eitä")> =>
|
||||||
dTohtori ukko ;
|
dTohtori ukko ;
|
||||||
<_ + ("ut" | "yt"),_ + ("uita" | "yitä")> => dRae ukko (init ukko + "en") ;
|
<_ + ("ut" | "yt"),_ + ("uita" | "yitä")> => dRae ukko (init ukko + "en") ;
|
||||||
<_ + "e", nuk + ("eja" | "ejä")> =>
|
<_ + "e", nuk + ("eja" | "ejä")> =>
|
||||||
dNukke ukko ukon ;
|
dNukke ukko ukon ;
|
||||||
<_ + "s", _ + "ksi" + ?> => dJalas ukko ;
|
<_ + "s", _ + "ksi" + ?> => dJalas ukko ;
|
||||||
<_ + ("l" | "n" | "r" | "s"), _ + ("eja" | "ejä")> => dUnix ukko ;
|
<_ + ("l" | "n" | "r" | "s"), _ + ("eja" | "ejä")> => dUnix ukko ;
|
||||||
<_, _ + ("a" | "ä")> => ukot ;
|
<_, _ + ("a" | "ä")> => ukot ;
|
||||||
_ =>
|
_ =>
|
||||||
Predef.error
|
Predef.error
|
||||||
(["last argument should end in a/ä, not"] ++ ukkoja)
|
(["last argument should end in a/ä, not"] ++ ukkoja)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
nForms3 : (_,_,_ : Str) -> NForms = \ukko,ukon,ukkoja ->
|
nForms3 : (_,_,_ : Str) -> NForms = \ukko,ukon,ukkoja ->
|
||||||
let
|
let
|
||||||
ukk = init ukko ;
|
ukk = init ukko ;
|
||||||
ukot = nForms2 ukko ukkoja ;
|
ukot = nForms2 ukko ukkoja ;
|
||||||
in
|
in
|
||||||
case <ukko,ukon> of {
|
case <ukko,ukon> of {
|
||||||
<_, _ + ":n"> => dSDP ukko ;
|
<_, _ + ":n"> => dSDP ukko ;
|
||||||
<_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" |
|
<_ + ("aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" |
|
||||||
"ie" | "uo" | "yö" | "ea" | "eä" |
|
"ie" | "uo" | "yö" | "ea" | "eä" |
|
||||||
"ia" | "iä" | "io" | "iö" | "ja" | "jä"), _ + "n"> =>
|
"ia" | "iä" | "io" | "iö" | "ja" | "jä"), _ + "n"> =>
|
||||||
ukot ; --- to protect
|
ukot ; --- to protect
|
||||||
<_ + ("a" | "o" | "u" | "y" | "ä" | "ö"), _ + "n"> =>
|
<_ + ("a" | "o" | "u" | "y" | "ä" | "ö"), _ + "n"> =>
|
||||||
dSilakka ukko ukon ukkoja ; -- auto,auton
|
dSilakka ukko ukon ukkoja ; -- auto,auton
|
||||||
<_ + "mpi", _ + ("emman" | "emmän")> => dSuurempi ukko ;
|
<_ + "mpi", _ + ("emman" | "emmän")> => dSuurempi ukko ;
|
||||||
<_ + "in", _ + ("imman" | "immän")> => dSuurin ukko ;
|
<_ + "in", _ + ("imman" | "immän")> => dSuurin ukko ;
|
||||||
@@ -602,26 +602,26 @@ mkVS = overload {
|
|||||||
muk__ + "ej" + ("a"|"ä")> => -- don't match voi - voin - voita
|
muk__ + "ej" + ("a"|"ä")> => -- don't match voi - voin - voita
|
||||||
dPaatti ukko ukon ; -- 1-arg paradigm forces consonant gradation
|
dPaatti ukko ukon ; -- 1-arg paradigm forces consonant gradation
|
||||||
<_ + ("us" | "ys"), _ + "den"> => dLujuus ukko ;
|
<_ + ("us" | "ys"), _ + "den"> => dLujuus ukko ;
|
||||||
<laid + ("u"|"a"|"ä") + "n", laitu + "men">
|
<laid + ("u"|"a"|"ä") + "n", laitu + "men">
|
||||||
=> dLiitin ukko ukon ; -- laidun,hapan,sydän not caught in previous
|
=> dLiitin ukko ukon ; -- laidun,hapan,sydän not caught in previous
|
||||||
<_, _ + "n"> => ukot ;
|
<_, _ + "n"> => ukot ;
|
||||||
_ =>
|
_ =>
|
||||||
Predef.error (["second argument should end in n, not"] ++ ukon)
|
Predef.error (["second argument should end in n, not"] ++ ukon)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
nForms4 : (_,_,_,_ : Str) -> NForms = \ukko,ukon,ukkoja,ukkoa ->
|
nForms4 : (_,_,_,_ : Str) -> NForms = \ukko,ukon,ukkoja,ukkoa ->
|
||||||
let
|
let
|
||||||
ukot = nForms3 ukko ukon ukkoja ;
|
ukot = nForms3 ukko ukon ukkoja ;
|
||||||
in
|
in
|
||||||
case <ukko,ukon,ukkoja,ukkoa> of {
|
case <ukko,ukon,ukkoja,ukkoa> of {
|
||||||
<_,_ + "n", _ + ("a" | "ä"), _ + ("a" | "ä")> =>
|
<_,_ + "n", _ + ("a" | "ä"), _ + ("a" | "ä")> =>
|
||||||
table {
|
table {
|
||||||
2 => ukkoa ;
|
2 => ukkoa ;
|
||||||
n => ukot ! n
|
n => ukot ! n
|
||||||
} ;
|
} ;
|
||||||
_ =>
|
_ =>
|
||||||
Predef.error
|
Predef.error
|
||||||
(["last arguments should end in n, a/ä, and a/ä, not"] ++
|
(["last arguments should end in n, a/ä, and a/ä, not"] ++
|
||||||
ukon ++ ukkoja ++ ukkoa)
|
ukon ++ ukkoja ++ ukkoa)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -631,15 +631,15 @@ mkVS = overload {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
mmkN2 : N -> Prep -> N2 = \n,c -> n ** {c2 = c ; isPre = mkIsPre c ; lock_N2 = <>} ;
|
mmkN2 : N -> Prep -> N2 = \n,c -> n ** {c2 = c ; isPre = mkIsPre c ; lock_N2 = <>} ;
|
||||||
mkN3 = \n,c,e -> n ** {c2 = c ; c3 = e ;
|
mkN3 = \n,c,e -> n ** {c2 = c ; c3 = e ;
|
||||||
isPre = mkIsPre c ; -- matka Lontoosta Pariisiin
|
isPre = mkIsPre c ; -- matka Lontoosta Pariisiin
|
||||||
isPre2 = mkIsPre e ; -- Suomen voitto Ruotsista
|
isPre2 = mkIsPre e ; -- Suomen voitto Ruotsista
|
||||||
lock_N3 = <>
|
lock_N3 = <>
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkIsPre : Prep -> Bool = \p -> case p.c of {
|
mkIsPre : Prep -> Bool = \p -> case p.c of {
|
||||||
NPCase Gen => case p.s.p2 of {
|
NPCase Gen => case p.s.p2 of {
|
||||||
"" => False ; -- Jussin veli
|
"" => False ; -- Jussin veli
|
||||||
_ => True -- puhe Jussin puolesta
|
_ => True -- puhe Jussin puolesta
|
||||||
} ;
|
} ;
|
||||||
_ => True -- syyte Jussia vastaan ; puhe Jussille
|
_ => True -- syyte Jussia vastaan ; puhe Jussille
|
||||||
@@ -660,7 +660,7 @@ mkVS = overload {
|
|||||||
_ => dUnix s
|
_ => dUnix s
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
-- adjectives
|
-- adjectives
|
||||||
|
|
||||||
@@ -670,7 +670,7 @@ mkVS = overload {
|
|||||||
mkA : N -> (kivempi,kivin : Str) -> A = \n -> regAdjective n ;
|
mkA : N -> (kivempi,kivin : Str) -> A = \n -> regAdjective n ;
|
||||||
mkA : (sana : AK) -> A = \w -> noun2adjDeg (nforms2snoun w.s) ;
|
mkA : (sana : AK) -> A = \w -> noun2adjDeg (nforms2snoun w.s) ;
|
||||||
|
|
||||||
mkA : (hyva,parempi,paras : N) -> (hyvin,paremmin,parhaiten : Str) -> A
|
mkA : (hyva,parempi,paras : N) -> (hyvin,paremmin,parhaiten : Str) -> A
|
||||||
= \h,p,ps,hn,pn,ph -> lin A (mkAdj h p ps hn pn ph ** {p=[]; hasPrefix=False}) ;
|
= \h,p,ps,hn,pn,ph -> lin A (mkAdj h p ps hn pn ph ** {p=[]; hasPrefix=False}) ;
|
||||||
mkA : V -> A = presActA ;
|
mkA : V -> A = presActA ;
|
||||||
} ;
|
} ;
|
||||||
@@ -689,17 +689,17 @@ mkVS = overload {
|
|||||||
hasPrefix = False
|
hasPrefix = False
|
||||||
} ;
|
} ;
|
||||||
regAdjective : SNoun -> Str -> Str -> A = \kiva, kivempi, kivin ->
|
regAdjective : SNoun -> Str -> Str -> A = \kiva, kivempi, kivin ->
|
||||||
mkAdjective
|
mkAdjective
|
||||||
(snoun2sadj kiva)
|
(snoun2sadj kiva)
|
||||||
(snoun2sadjComp False (nforms2snoun (dSuurempi kivempi)))
|
(snoun2sadjComp False (nforms2snoun (dSuurempi kivempi)))
|
||||||
(snoun2sadjComp False (nforms2snoun (dSuurin kivin))) ;
|
(snoun2sadjComp False (nforms2snoun (dSuurin kivin))) ;
|
||||||
noun2adjDeg : SNoun -> A = \suuri ->
|
noun2adjDeg : SNoun -> A = \suuri ->
|
||||||
regAdjective
|
regAdjective
|
||||||
suuri
|
suuri
|
||||||
(snoun2compar suuri)
|
(snoun2compar suuri)
|
||||||
(snoun2superl suuri) ;
|
(snoun2superl suuri) ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
presActA : SVerb -> A = \tulla ->
|
presActA : SVerb -> A = \tulla ->
|
||||||
let tuleva : NForm => Str = \\nf => (sverb2verb True tulla).s ! PresPartAct (AN nf) ;
|
let tuleva : NForm => Str = \\nf => (sverb2verb True tulla).s ! PresPartAct (AN nf) ;
|
||||||
in noun2adjDeg { s = tuleva ; h = tulla.h } ;
|
in noun2adjDeg { s = tuleva ; h = tulla.h } ;
|
||||||
@@ -707,7 +707,7 @@ mkVS = overload {
|
|||||||
presPassA : SVerb -> A = \mennä ->
|
presPassA : SVerb -> A = \mennä ->
|
||||||
let mentävä : NForm => Str = \\nf => (sverb2verb True mennä).s ! PresPartPass (AN nf) ;
|
let mentävä : NForm => Str = \\nf => (sverb2verb True mennä).s ! PresPartPass (AN nf) ;
|
||||||
in noun2adjDeg { s = mentävä ; h = mennä.h } ;
|
in noun2adjDeg { s = mentävä ; h = mennä.h } ;
|
||||||
|
|
||||||
pastActA : SVerb -> A = \syntyä ->
|
pastActA : SVerb -> A = \syntyä ->
|
||||||
let syntynyt : NForm => Str = \\nf => (sverb2verb True syntyä).s ! PastPartAct (AN nf) ;
|
let syntynyt : NForm => Str = \\nf => (sverb2verb True syntyä).s ! PastPartAct (AN nf) ;
|
||||||
in noun2adjDeg { s = syntynyt ; h = syntyä.h } ;
|
in noun2adjDeg { s = syntynyt ; h = syntyä.h } ;
|
||||||
@@ -730,22 +730,22 @@ mkVS = overload {
|
|||||||
mkV : Str -> V -> V = \s,v -> {s = \\f => s + v.s ! f ; sc = v.sc ; lock_V = <> ; h = v.h ; p = v.p} ;
|
mkV : Str -> V -> V = \s,v -> {s = \\f => s + v.s ! f ; sc = v.sc ; lock_V = <> ; h = v.h ; p = v.p} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mk1V : Str -> V = \s ->
|
mk1V : Str -> V = \s ->
|
||||||
let vfs = vforms2sverb (vForms1 s) in
|
let vfs = vforms2sverb (vForms1 s) in
|
||||||
vfs ** {sc = SCNom ; lock_V = <> ; p = []} ;
|
vfs ** {sc = SCNom ; lock_V = <> ; p = []} ;
|
||||||
mk2V : (_,_ : Str) -> V = \x,y ->
|
mk2V : (_,_ : Str) -> V = \x,y ->
|
||||||
let vfs = vforms2sverb (vForms2 x y) in vfs ** {sc = SCNom ; lock_V = <> ; p = []} ;
|
let vfs = vforms2sverb (vForms2 x y) in vfs ** {sc = SCNom ; lock_V = <> ; p = []} ;
|
||||||
mk3V : (huutaa,huudan,huusi : Str) -> V = \x,_,y -> mk2V x y ; ----
|
mk3V : (huutaa,huudan,huusi : Str) -> V = \x,_,y -> mk2V x y ; ----
|
||||||
mk12V : (
|
mk12V : (
|
||||||
huutaa,huudan,huutaa,huutavat,huutakaa,huudetaan,
|
huutaa,huudan,huutaa,huutavat,huutakaa,huudetaan,
|
||||||
huusin,huusi,huusisi,huutanut,huudettu,huutanee : Str) -> V =
|
huusin,huusi,huusisi,huutanut,huudettu,huutanee : Str) -> V =
|
||||||
\a,b,c,d,e,f,g,h,i,j,k,l ->
|
\a,b,c,d,e,f,g,h,i,j,k,l ->
|
||||||
vforms2sverb (vForms12 a b c d e f g h i j k l) ** {sc = SCNom ; lock_V = <> ; p = []} ;
|
vforms2sverb (vForms12 a b c d e f g h i j k l) ** {sc = SCNom ; lock_V = <> ; p = []} ;
|
||||||
|
|
||||||
vForms1 : Str -> VForms = \ottaa ->
|
vForms1 : Str -> VForms = \ottaa ->
|
||||||
let
|
let
|
||||||
a = last ottaa ;
|
a = last ottaa ;
|
||||||
otta = init ottaa ;
|
otta = init ottaa ;
|
||||||
ott = init otta ;
|
ott = init otta ;
|
||||||
ots = init ott + "s" ;
|
ots = init ott + "s" ;
|
||||||
ota = weakGrade otta ;
|
ota = weakGrade otta ;
|
||||||
@@ -755,36 +755,36 @@ mkVS = overload {
|
|||||||
case ottaa of {
|
case ottaa of {
|
||||||
_ + ("e" | "i" | "o" | "u" | "y" | "ö") + ("a" | "ä") =>
|
_ + ("e" | "i" | "o" | "u" | "y" | "ö") + ("a" | "ä") =>
|
||||||
cHukkua ottaa (ota + "n") ;
|
cHukkua ottaa (ota + "n") ;
|
||||||
_ + ("l" | "n" | "r") + ("taa" | "tää") =>
|
_ + ("l" | "n" | "r") + ("taa" | "tää") =>
|
||||||
cOttaa ottaa (ota + "n") (ots + "in") (ots + "i") ;
|
cOttaa ottaa (ota + "n") (ots + "in") (ots + "i") ;
|
||||||
("" | ?) + ("a" | "e" | "i" | "o" | "u") + ? + _ +
|
("" | ?) + ("a" | "e" | "i" | "o" | "u") + ? + _ +
|
||||||
("a" | "e" | "i" | "o" | "u") + _ + "aa" =>
|
("a" | "e" | "i" | "o" | "u") + _ + "aa" =>
|
||||||
cOttaa ottaa (ota + "n") (ot + "in") (ott + "i") ;
|
cOttaa ottaa (ota + "n") (ot + "in") (ott + "i") ;
|
||||||
("" | ?) + ("a" | "e" | "i") + _ + "aa" =>
|
("" | ?) + ("a" | "e" | "i") + _ + "aa" =>
|
||||||
cOttaa ottaa (ota + "n") (ot + "oin") (ott + "oi") ;
|
cOttaa ottaa (ota + "n") (ot + "oin") (ott + "oi") ;
|
||||||
_ + ("aa" | "ää") =>
|
_ + ("aa" | "ää") =>
|
||||||
cOttaa ottaa (ota + "n") (ot + "in") (ott + "i") ;
|
cOttaa ottaa (ota + "n") (ot + "in") (ott + "i") ;
|
||||||
_ + ("ella" | "ellä") =>
|
_ + ("ella" | "ellä") =>
|
||||||
cKuunnella ottaa otin ;
|
cKuunnella ottaa otin ;
|
||||||
_ + ("osta" | "östä") =>
|
_ + ("osta" | "östä") =>
|
||||||
cJuosta ottaa (init ott + "ksen") ;
|
cJuosta ottaa (init ott + "ksen") ;
|
||||||
_ + ("st" | "nn" | "ll" | "rr") + ("a" | "ä") =>
|
_ + ("st" | "nn" | "ll" | "rr") + ("a" | "ä") =>
|
||||||
cJuosta ottaa (ott + "en") ;
|
cJuosta ottaa (ott + "en") ;
|
||||||
_ + ("ita" | "itä") =>
|
_ + ("ita" | "itä") =>
|
||||||
cHarkita ottaa ;
|
cHarkita ottaa ;
|
||||||
_ + ("eta" | "etä" | "ota" | "ata" | "uta" | "ytä" | "ätä" | "ötä") =>
|
_ + ("eta" | "etä" | "ota" | "ata" | "uta" | "ytä" | "ätä" | "ötä") =>
|
||||||
cPudota ottaa (strongGrade ott + "si") ;
|
cPudota ottaa (strongGrade ott + "si") ;
|
||||||
_ + ("da" | "dä") =>
|
_ + ("da" | "dä") =>
|
||||||
cJuoda ottaa ;
|
cJuoda ottaa ;
|
||||||
_ => Predef.error (["expected infinitive, found"] ++ ottaa)
|
_ => Predef.error (["expected infinitive, found"] ++ ottaa)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
vForms2 : (_,_ : Str) -> VForms = \huutaa,huusi ->
|
vForms2 : (_,_ : Str) -> VForms = \huutaa,huusi ->
|
||||||
let
|
let
|
||||||
huuda = weakGrade (init huutaa) ;
|
huuda = weakGrade (init huutaa) ;
|
||||||
huusin = weakGrade huusi + "n" ;
|
huusin = weakGrade huusi + "n" ;
|
||||||
autoin = weakGrade (init huusi) + "in" ;
|
autoin = weakGrade (init huusi) + "in" ;
|
||||||
in
|
in
|
||||||
case <huutaa,huusi> of {
|
case <huutaa,huusi> of {
|
||||||
<_ + ("taa" | "tää"), _ + ("oi" | "öi")> =>
|
<_ + ("taa" | "tää"), _ + ("oi" | "öi")> =>
|
||||||
cOttaa huutaa (huuda + "n") autoin huusi ;
|
cOttaa huutaa (huuda + "n") autoin huusi ;
|
||||||
@@ -810,10 +810,10 @@ mkVS = overload {
|
|||||||
sc = SCNom ; h = Back ; lock_V = <> ; p = []} ; ---- lieneekö
|
sc = SCNom ; h = Back ; lock_V = <> ; p = []} ; ---- lieneekö
|
||||||
|
|
||||||
mk2V2 : V -> Prep -> V2 = \v,c -> v ** {c2 = c ; lock_V2 = <>} ;
|
mk2V2 : V -> Prep -> V2 = \v,c -> v ** {c2 = c ; lock_V2 = <>} ;
|
||||||
caseV2 : V -> Case -> V2 = \v,c -> mk2V2 v (casePrep c) ;
|
caseV2 : V -> Case -> V2 = \v,c -> mk2V2 v (casePrep c) ;
|
||||||
dirV2 v = mk2V2 v accPrep ;
|
dirV2 v = mk2V2 v accPrep ;
|
||||||
|
|
||||||
mkAdv = overload {
|
mkAdv = overload {
|
||||||
mkAdv : Str -> Adv = \s -> {s = tagPOS "ADV" s ; lock_Adv = <>} ;
|
mkAdv : Str -> Adv = \s -> {s = tagPOS "ADV" s ; lock_Adv = <>} ;
|
||||||
mkAdv : AdvK -> Adv = \s -> {s = tagPOS "ADV" s.s ; lock_Adv = <>} ;
|
mkAdv : AdvK -> Adv = \s -> {s = tagPOS "ADV" s.s ; lock_Adv = <>} ;
|
||||||
} ;
|
} ;
|
||||||
@@ -831,7 +831,7 @@ mkVS = overload {
|
|||||||
caseV2 : V -> Case -> V2 ;
|
caseV2 : V -> Case -> V2 ;
|
||||||
dirV2 : V -> V2 ;
|
dirV2 : V -> V2 ;
|
||||||
|
|
||||||
dirV3 v p = v ** {c2 = accPrep ; c3 = casePrep p ; lock_V3 = <>} ;
|
dirV3 v p = v ** {c2 = accPrep ; c3 = casePrep p ; lock_V3 = <>} ;
|
||||||
dirdirV3 v = dirV3 v allative ;
|
dirdirV3 v = dirV3 v allative ;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,16 +9,16 @@ concrete QuestionFin of Question = CatFin ** open ResFin, StemFin, Prelude in {
|
|||||||
s = \\t,a,p => cl.s ! t ! a ! p ! SQuest
|
s = \\t,a,p => cl.s ! t ! a ! p ! SQuest
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
QuestVP ip vp =
|
QuestVP ip vp =
|
||||||
let
|
let
|
||||||
cl = mkClause (subjForm (ip ** {isPron = False ; a = agrP3 ip.n}) vp.s.sc) (agrP3 ip.n) vp
|
cl = mkClause (subjForm (ip ** {isPron = False ; a = agrP3 ip.n}) vp.s.sc) (agrP3 ip.n) vp
|
||||||
in {
|
in {
|
||||||
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
|
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
QuestSlash ip slash = {
|
QuestSlash ip slash = {
|
||||||
s = \\t,a,p =>
|
s = \\t,a,p =>
|
||||||
let
|
let
|
||||||
cls = slash.s ! t ! a ! p ;
|
cls = slash.s ! t ! a ! p ;
|
||||||
who = appCompl True p slash.c2 (ip ** {a = agrP3 ip.n ; isPron = False})
|
who = appCompl True p slash.c2 (ip ** {a = agrP3 ip.n ; isPron = False})
|
||||||
in
|
in
|
||||||
@@ -30,15 +30,15 @@ concrete QuestionFin of Question = CatFin ** open ResFin, StemFin, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
QuestIComp icomp np = {
|
QuestIComp icomp np = {
|
||||||
s = \\t,a,p =>
|
s = \\t,a,p =>
|
||||||
let
|
let
|
||||||
vp = predV vpVerbOlla ;
|
vp = predV vpVerbOlla ;
|
||||||
cl = mkClause (subjForm np vp.s.sc) np.a vp ;
|
cl = mkClause (subjForm np vp.s.sc) np.a vp ;
|
||||||
in
|
in
|
||||||
icomp.s ! np.a ++ cl.s ! t ! a ! p ! SDecl
|
icomp.s ! np.a ++ cl.s ! t ! a ! p ! SDecl
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PrepIP p ip = {s =
|
PrepIP p ip = {s =
|
||||||
appCompl True Pos p (ip ** {a = agrP3 ip.n ; isPron = False})} ;
|
appCompl True Pos p (ip ** {a = agrP3 ip.n ; isPron = False})} ;
|
||||||
|
|
||||||
AdvIP ip adv = {
|
AdvIP ip adv = {
|
||||||
@@ -47,12 +47,12 @@ concrete QuestionFin of Question = CatFin ** open ResFin, StemFin, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- The computation of $ncase$ is a special case of that in $NounFin.DetCN$,
|
-- The computation of $ncase$ is a special case of that in $NounFin.DetCN$,
|
||||||
-- since we don't have possessive suffixes or definiteness.
|
-- since we don't have possessive suffixes or definiteness.
|
||||||
--- It could still be nice to have a common oper...
|
--- It could still be nice to have a common oper...
|
||||||
|
|
||||||
IdetCN idet cn = let n = idet.n in {
|
IdetCN idet cn = let n = idet.n in {
|
||||||
s = \\c =>
|
s = \\c =>
|
||||||
let
|
let
|
||||||
k = npform2case n c ;
|
k = npform2case n c ;
|
||||||
ncase = case <k,idet.isNum> of {
|
ncase = case <k,idet.isNum> of {
|
||||||
<Nom, True> => NCase Sg Part ; -- mitkä kolme kytkintä
|
<Nom, True> => NCase Sg Part ; -- mitkä kolme kytkintä
|
||||||
@@ -60,33 +60,33 @@ concrete QuestionFin of Question = CatFin ** open ResFin, StemFin, Prelude in {
|
|||||||
_ => NCase n k -- mitkä kytkimet
|
_ => NCase n k -- mitkä kytkimet
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
idet.s ! k ++ cn.s ! ncase ;
|
idet.s ! k ++ cn.s ! ncase ;
|
||||||
n = n
|
n = n
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
IdetIP idet = let n = idet.n in {
|
IdetIP idet = let n = idet.n in {
|
||||||
s = \\c =>
|
s = \\c =>
|
||||||
let
|
let
|
||||||
k = npform2case n c ;
|
k = npform2case n c ;
|
||||||
in
|
in
|
||||||
idet.s ! k ;
|
idet.s ! k ;
|
||||||
n = n
|
n = n
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
IdetQuant idet num =
|
IdetQuant idet num =
|
||||||
let
|
let
|
||||||
n = num.n ;
|
n = num.n ;
|
||||||
isn = num.isNum
|
isn = num.isNum
|
||||||
in {
|
in {
|
||||||
s = \\k =>
|
s = \\k =>
|
||||||
let
|
let
|
||||||
ncase = case <k,isn> of {
|
ncase = case <k,isn> of {
|
||||||
<Nom, True> => NCase Sg Part ; -- mitkä kolme kytkintä
|
<Nom, True> => NCase Sg Part ; -- mitkä kolme kytkintä
|
||||||
<_, True> => NCase Sg k ; -- miksi kolmeksi kytkimeksi
|
<_, True> => NCase Sg k ; -- miksi kolmeksi kytkimeksi
|
||||||
_ => NCase n k -- mitkä kytkimet
|
_ => NCase n k -- mitkä kytkimet
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
idet.s ! n ! k ++ num.s ! Sg ! k ;
|
idet.s ! n ! k ++ num.s ! Sg ! k ;
|
||||||
n = n ;
|
n = n ;
|
||||||
isNum = isn
|
isNum = isn
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -12,14 +12,14 @@ concrete RelativeFin of Relative = CatFin ** open Prelude, ResFin, MorphoFin, St
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
RelVP rp vp = {
|
RelVP rp vp = {
|
||||||
s = \\t,ant,b,ag =>
|
s = \\t,ant,b,ag =>
|
||||||
let
|
let
|
||||||
agr = case rp.a of {
|
agr = case rp.a of {
|
||||||
RNoAg => ag ;
|
RNoAg => ag ;
|
||||||
RAg a => a
|
RAg a => a
|
||||||
} ;
|
} ;
|
||||||
cl = mkClause
|
cl = mkClause
|
||||||
(subjForm {s = rp.s ! (complNumAgr agr) ;
|
(subjForm {s = rp.s ! (complNumAgr agr) ;
|
||||||
a = agr ; isPron = False} vp.s.sc) agr vp
|
a = agr ; isPron = False} vp.s.sc) agr vp
|
||||||
in
|
in
|
||||||
cl.s ! t ! ant ! b ! SDecl ;
|
cl.s ! t ! ant ! b ! SDecl ;
|
||||||
@@ -27,8 +27,8 @@ concrete RelativeFin of Relative = CatFin ** open Prelude, ResFin, MorphoFin, St
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
RelSlash rp slash = {
|
RelSlash rp slash = {
|
||||||
s = \\t,a,p,ag =>
|
s = \\t,a,p,ag =>
|
||||||
let
|
let
|
||||||
cls = slash.s ! t ! a ! p ;
|
cls = slash.s ! t ! a ! p ;
|
||||||
who = appCompl True p slash.c2 (rp2np (complNumAgr ag) rp)
|
who = appCompl True p slash.c2 (rp2np (complNumAgr ag) rp)
|
||||||
in
|
in
|
||||||
|
|||||||
@@ -18,19 +18,19 @@ resource ResFin = ParamX ** open Prelude in {
|
|||||||
-- This is the $Case$ as needed for both nouns and $NP$s.
|
-- This is the $Case$ as needed for both nouns and $NP$s.
|
||||||
|
|
||||||
param
|
param
|
||||||
Case = Nom | Gen | Part | Transl | Ess
|
Case = Nom | Gen | Part | Transl | Ess
|
||||||
| Iness | Elat | Illat | Adess | Ablat | Allat
|
| Iness | Elat | Illat | Adess | Ablat | Allat
|
||||||
| Abess ; -- Comit, Instruct in NForm
|
| Abess ; -- Comit, Instruct in NForm
|
||||||
|
|
||||||
NForm = NCase Number Case
|
NForm = NCase Number Case
|
||||||
| NComit | NInstruct -- no number dist
|
| NComit | NInstruct -- no number dist
|
||||||
| NPossNom Number | NPossGen Number --- number needed for syntax of AdjCN
|
| NPossNom Number | NPossGen Number --- number needed for syntax of AdjCN
|
||||||
| NPossTransl Number | NPossIllat Number
|
| NPossTransl Number | NPossIllat Number
|
||||||
| NCompound ; -- special compound form, e.g. "nais"
|
| NCompound ; -- special compound form, e.g. "nais"
|
||||||
|
|
||||||
--- These cases are possible for subjects.
|
--- These cases are possible for subjects.
|
||||||
|
|
||||||
SubjCase = SCNom | SCGen | SCPart | SCIness | SCElat | SCAdess | SCAblat ;
|
SubjCase = SCNom | SCGen | SCPart | SCIness | SCElat | SCAdess | SCAblat ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
appSubjCase : SubjCase -> ResFin.NP -> Str = \sc,np -> np.s ! subjcase2npform sc ;
|
appSubjCase : SubjCase -> ResFin.NP -> Str = \sc,np -> np.s ! subjcase2npform sc ;
|
||||||
@@ -59,13 +59,13 @@ oper
|
|||||||
|
|
||||||
param
|
param
|
||||||
Agr = Ag Number Person | AgPol ;
|
Agr = Ag Number Person | AgPol ;
|
||||||
|
|
||||||
|
|
||||||
-- Vowel harmony, used for CNs in determining the correct possessive suffix.
|
-- Vowel harmony, used for CNs in determining the correct possessive suffix.
|
||||||
|
|
||||||
Harmony = Back | Front ;
|
Harmony = Back | Front ;
|
||||||
|
|
||||||
|
|
||||||
oper
|
oper
|
||||||
complNumAgr : Agr -> Number = \a -> case a of {
|
complNumAgr : Agr -> Number = \a -> case a of {
|
||||||
Ag n _ => n ;
|
Ag n _ => n ;
|
||||||
@@ -93,12 +93,12 @@ oper
|
|||||||
|
|
||||||
--2 Noun phrases
|
--2 Noun phrases
|
||||||
--
|
--
|
||||||
-- Two forms of *virtual accusative* are needed for nouns in singular,
|
-- Two forms of *virtual accusative* are needed for nouns in singular,
|
||||||
-- the nominative and the genitive one ("ostan talon"/"osta talo").
|
-- the nominative and the genitive one ("ostan talon"/"osta talo").
|
||||||
-- For nouns in plural, only a nominative accusative exist. Pronouns
|
-- For nouns in plural, only a nominative accusative exist. Pronouns
|
||||||
-- have a uniform, special accusative form ("minut", etc).
|
-- have a uniform, special accusative form ("minut", etc).
|
||||||
|
|
||||||
param
|
param
|
||||||
NPForm = NPCase Case | NPAcc | NPSep ; -- NPSep is NP used alone, e.g. in an Utt and as complement to copula. Equals NPCase Nom except for pro-drop
|
NPForm = NPCase Case | NPAcc | NPSep ; -- NPSep is NP used alone, e.g. in an Utt and as complement to copula. Equals NPCase Nom except for pro-drop
|
||||||
|
|
||||||
oper
|
oper
|
||||||
@@ -126,7 +126,7 @@ oper
|
|||||||
-- A special form is needed for the negated plural imperative.
|
-- A special form is needed for the negated plural imperative.
|
||||||
|
|
||||||
param
|
param
|
||||||
VForm =
|
VForm =
|
||||||
Inf InfForm
|
Inf InfForm
|
||||||
| Presn Number Person
|
| Presn Number Person
|
||||||
| Impf Number Person --# notpresent
|
| Impf Number Person --# notpresent
|
||||||
@@ -137,11 +137,11 @@ param
|
|||||||
| ImperP3 Number
|
| ImperP3 Number
|
||||||
| ImperP1Pl
|
| ImperP1Pl
|
||||||
| ImpNegPl
|
| ImpNegPl
|
||||||
| PassPresn Bool
|
| PassPresn Bool
|
||||||
| PassImpf Bool --# notpresent
|
| PassImpf Bool --# notpresent
|
||||||
| PassCondit Bool --# notpresent
|
| PassCondit Bool --# notpresent
|
||||||
| PassPotent Bool --# notpresent
|
| PassPotent Bool --# notpresent
|
||||||
| PassImper Bool
|
| PassImper Bool
|
||||||
| PastPartAct AForm
|
| PastPartAct AForm
|
||||||
| PastPartPass AForm
|
| PastPartPass AForm
|
||||||
| PresPartAct AForm
|
| PresPartAct AForm
|
||||||
@@ -195,7 +195,7 @@ param
|
|||||||
SType = SDecl | SQuest ;
|
SType = SDecl | SQuest ;
|
||||||
|
|
||||||
--2 For $Relative$
|
--2 For $Relative$
|
||||||
|
|
||||||
RAgr = RNoAg | RAg Agr ;
|
RAgr = RNoAg | RAg Agr ;
|
||||||
|
|
||||||
--2 For $Numeral$
|
--2 For $Numeral$
|
||||||
@@ -205,21 +205,21 @@ param
|
|||||||
--2 Transformations between parameter types
|
--2 Transformations between parameter types
|
||||||
|
|
||||||
oper
|
oper
|
||||||
agrP3 : Number -> Agr = \n ->
|
agrP3 : Number -> Agr = \n ->
|
||||||
Ag n P3 ;
|
Ag n P3 ;
|
||||||
|
|
||||||
conjAgr : Agr -> Agr -> Agr = \a,b -> case <a,b> of {
|
conjAgr : Agr -> Agr -> Agr = \a,b -> case <a,b> of {
|
||||||
<Ag n p, Ag m q> => Ag (conjNumber n m) (conjPerson p q) ;
|
<Ag n p, Ag m q> => Ag (conjNumber n m) (conjPerson p q) ;
|
||||||
<Ag n p, AgPol> => Ag Pl (conjPerson p P2) ;
|
<Ag n p, AgPol> => Ag Pl (conjPerson p P2) ;
|
||||||
<AgPol, Ag n p> => Ag Pl (conjPerson p P2) ;
|
<AgPol, Ag n p> => Ag Pl (conjPerson p P2) ;
|
||||||
_ => b
|
_ => b
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Compl : Type = {
|
Compl : Type = {
|
||||||
s : Str * Str * (Agr => Str) ;
|
s : Str * Str * (Agr => Str) ;
|
||||||
c : NPForm ;
|
c : NPForm ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
appCompl : Bool -> Polarity -> Compl -> ResFin.NP -> Str = \isFin,b,co,np ->
|
appCompl : Bool -> Polarity -> Compl -> ResFin.NP -> Str = \isFin,b,co,np ->
|
||||||
@@ -257,14 +257,14 @@ param
|
|||||||
|
|
||||||
param
|
param
|
||||||
VIForm =
|
VIForm =
|
||||||
VIFin Tense
|
VIFin Tense
|
||||||
| VIInf InfForm
|
| VIInf InfForm
|
||||||
| VIPass Tense
|
| VIPass Tense
|
||||||
| VIImper
|
| VIImper
|
||||||
;
|
;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
|
|
||||||
-- For $Sentence$.
|
-- For $Sentence$.
|
||||||
|
|
||||||
@@ -276,10 +276,10 @@ oper
|
|||||||
s : Tense => Anteriority => Polarity => {subj,fin,inf,compl,adv,ext : Str ; h : Harmony}
|
s : Tense => Anteriority => Polarity => {subj,fin,inf,compl,adv,ext : Str ; h : Harmony}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertKinClausePlus : Predef.Ints 1 -> ClausePlus -> ClausePlus = \p,cl -> {
|
insertKinClausePlus : Predef.Ints 1 -> ClausePlus -> ClausePlus = \p,cl -> {
|
||||||
s = \\t,a,b =>
|
s = \\t,a,b =>
|
||||||
let
|
let
|
||||||
c = cl.s ! t ! a ! b
|
c = cl.s ! t ! a ! b
|
||||||
in
|
in
|
||||||
case p of {
|
case p of {
|
||||||
0 => {subj = c.subj ++ kin b Back ; fin = c.fin ; inf = c.inf ; -- Jussikin nukkuu
|
0 => {subj = c.subj ++ kin b Back ; fin = c.fin ; inf = c.inf ; -- Jussikin nukkuu
|
||||||
@@ -289,21 +289,21 @@ oper
|
|||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertObjClausePlus : Predef.Ints 1 -> Bool -> (Polarity => Str) -> ClausePlus -> ClausePlus =
|
insertObjClausePlus : Predef.Ints 1 -> Bool -> (Polarity => Str) -> ClausePlus -> ClausePlus =
|
||||||
\p,ifKin,obj,cl -> {
|
\p,ifKin,obj,cl -> {
|
||||||
s = \\t,a,b =>
|
s = \\t,a,b =>
|
||||||
let
|
let
|
||||||
c = cl.s ! t ! a ! b ;
|
c = cl.s ! t ! a ! b ;
|
||||||
co = obj ! b ++ if_then_Str ifKin (kin b Back) [] ;
|
co = obj ! b ++ if_then_Str ifKin (kin b Back) [] ;
|
||||||
in case p of {
|
in case p of {
|
||||||
0 => {subj = c.subj ; fin = c.fin ; inf = c.inf ;
|
0 => {subj = c.subj ; fin = c.fin ; inf = c.inf ;
|
||||||
compl = co ; adv = c.compl ++ c.adv ; ext = c.ext ; h = c.h} ; -- Jussi juo maitoakin
|
compl = co ; adv = c.compl ++ c.adv ; ext = c.ext ; h = c.h} ; -- Jussi juo maitoakin
|
||||||
1 => {subj = c.subj ; fin = c.fin ; inf = c.inf ;
|
1 => {subj = c.subj ; fin = c.fin ; inf = c.inf ;
|
||||||
compl = c.compl ; adv = co ; ext = c.adv ++ c.ext ; h = c.h} -- Jussi nukkuu nytkin
|
compl = c.compl ; adv = co ; ext = c.adv ++ c.ext ; h = c.h} -- Jussi nukkuu nytkin
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
kin : Polarity -> Harmony -> Str =
|
kin : Polarity -> Harmony -> Str =
|
||||||
\p,b -> case p of {Pos => (mkPart "kin" "kin").s ! b ; Neg => (mkPart "kaan" "kään").s ! b} ;
|
\p,b -> case p of {Pos => (mkPart "kin" "kin").s ! b ; Neg => (mkPart "kaan" "kään").s ! b} ;
|
||||||
|
|
||||||
mkPart : Str -> Str -> {s : Harmony => Str} = \ko,koe ->
|
mkPart : Str -> Str -> {s : Harmony => Str} = \ko,koe ->
|
||||||
@@ -320,7 +320,7 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
-- This is used for subjects of passives: therefore isFin in False.
|
-- This is used for subjects of passives: therefore isFin in False.
|
||||||
|
|
||||||
subjForm : NP -> SubjCase -> Polarity -> Str = \np,sc,b ->
|
subjForm : NP -> SubjCase -> Polarity -> Str = \np,sc,b ->
|
||||||
appCompl False b {s = <[],[],\\_ => []> ; c = subjcase2npform sc} np ;
|
appCompl False b {s = <[],[],\\_ => []> ; c = subjcase2npform sc} np ;
|
||||||
|
|
||||||
questPart : Harmony -> Str = \b -> case b of {Back => "ko" ; _ => "kö"} ;
|
questPart : Harmony -> Str = \b -> case b of {Back => "ko" ; _ => "kö"} ;
|
||||||
@@ -328,7 +328,7 @@ oper
|
|||||||
-- The definitions below were moved here from $MorphoFin$ so that the
|
-- The definitions below were moved here from $MorphoFin$ so that the
|
||||||
-- auxiliary of predication can be defined.
|
-- auxiliary of predication can be defined.
|
||||||
|
|
||||||
verbOlla : Verb =
|
verbOlla : Verb =
|
||||||
let
|
let
|
||||||
ollut = (noun2adj (nhn (sRae "ollut" "olleena"))).s ;
|
ollut = (noun2adj (nhn (sRae "ollut" "olleena"))).s ;
|
||||||
oltu = (noun2adj (nhn (sKukko "oltu" "ollun" "oltuja"))).s ;
|
oltu = (noun2adj (nhn (sKukko "oltu" "ollun" "oltuja"))).s ;
|
||||||
@@ -417,8 +417,8 @@ oper
|
|||||||
noun2adj : CommonNoun -> Adj = noun2adjComp True ;
|
noun2adj : CommonNoun -> Adj = noun2adjComp True ;
|
||||||
|
|
||||||
noun2adjComp : Bool -> CommonNoun -> Adj = \isPos,tuore ->
|
noun2adjComp : Bool -> CommonNoun -> Adj = \isPos,tuore ->
|
||||||
let
|
let
|
||||||
tuoreesti = Predef.tk 1 (tuore.s ! NCase Sg Gen) + "sti" ;
|
tuoreesti = Predef.tk 1 (tuore.s ! NCase Sg Gen) + "sti" ;
|
||||||
tuoreemmin = Predef.tk 2 (tuore.s ! NCase Sg Gen) + "in"
|
tuoreemmin = Predef.tk 2 (tuore.s ! NCase Sg Gen) + "in"
|
||||||
in {s = table {
|
in {s = table {
|
||||||
AN f => tuore.s ! f ;
|
AN f => tuore.s ! f ;
|
||||||
@@ -439,8 +439,8 @@ oper
|
|||||||
|
|
||||||
-- worst-case macro
|
-- worst-case macro
|
||||||
|
|
||||||
mkSubst : Str -> (_,_,_,_,_,_,_,_,_,_ : Str) -> NounH =
|
mkSubst : Str -> (_,_,_,_,_,_,_,_,_,_ : Str) -> NounH =
|
||||||
\a,vesi,vede,vete,vetta,veteen,vetii,vesii,vesien,vesia,vesiin ->
|
\a,vesi,vede,vete,vetta,veteen,vetii,vesii,vesien,vesia,vesiin ->
|
||||||
{a = a ;
|
{a = a ;
|
||||||
vesi = vesi ;
|
vesi = vesi ;
|
||||||
vede = vede ;
|
vede = vede ;
|
||||||
@@ -467,8 +467,8 @@ oper
|
|||||||
vesien = nh.vesien ;
|
vesien = nh.vesien ;
|
||||||
vesia = nh.vesia ;
|
vesia = nh.vesia ;
|
||||||
vesiin = nh.vesiin ;
|
vesiin = nh.vesiin ;
|
||||||
harmony : Harmony = case a of
|
harmony : Harmony = case a of
|
||||||
{"a" => Back ; _ => Front }
|
{"a" => Back ; _ => Front }
|
||||||
in
|
in
|
||||||
{s = table {
|
{s = table {
|
||||||
NCase Sg Nom => vesi ;
|
NCase Sg Nom => vesi ;
|
||||||
@@ -509,7 +509,7 @@ oper
|
|||||||
NPossIllat Pl => Predef.tk 1 vesiin ;
|
NPossIllat Pl => Predef.tk 1 vesiin ;
|
||||||
NCompound => vesi
|
NCompound => vesi
|
||||||
} ;
|
} ;
|
||||||
h = harmony
|
h = harmony
|
||||||
} ;
|
} ;
|
||||||
-- Surprisingly, making the test for the partitive, this not only covers
|
-- Surprisingly, making the test for the partitive, this not only covers
|
||||||
-- "rae", "perhe", "savuke", but also "rengas", "lyhyt" (except $Sg Illat$), etc.
|
-- "rae", "perhe", "savuke", but also "rengas", "lyhyt" (except $Sg Illat$), etc.
|
||||||
@@ -520,20 +520,20 @@ oper
|
|||||||
rakee = Predef.tk 2 rakeena ;
|
rakee = Predef.tk 2 rakeena ;
|
||||||
rakei = Predef.tk 1 rakee + "i" ;
|
rakei = Predef.tk 1 rakee + "i" ;
|
||||||
raet = rae + (ifTok Str (Predef.dp 1 rae) "e" "t" [])
|
raet = rae + (ifTok Str (Predef.dp 1 rae) "e" "t" [])
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
mkSubst a
|
mkSubst a
|
||||||
rae
|
rae
|
||||||
rakee
|
|
||||||
rakee
|
rakee
|
||||||
(raet + ("t" + a))
|
rakee
|
||||||
|
(raet + ("t" + a))
|
||||||
(rakee + "seen")
|
(rakee + "seen")
|
||||||
rakei
|
rakei
|
||||||
rakei
|
rakei
|
||||||
(rakei + "den")
|
(rakei + "den")
|
||||||
(rakei + ("t" + a))
|
(rakei + ("t" + a))
|
||||||
(rakei + "siin") ;
|
(rakei + "siin") ;
|
||||||
-- Nouns with partitive "a"/"ä" ;
|
-- Nouns with partitive "a"/"ä" ;
|
||||||
-- to account for grade and vowel alternation, three forms are usually enough
|
-- to account for grade and vowel alternation, three forms are usually enough
|
||||||
-- Examples: "talo", "kukko", "huippu", "koira", "kukka", "syylä",...
|
-- Examples: "talo", "kukko", "huippu", "koira", "kukka", "syylä",...
|
||||||
|
|
||||||
@@ -547,26 +547,26 @@ oper
|
|||||||
kukkoi = ifi kukkoj (Predef.tk 1 kukkoj) ;
|
kukkoi = ifi kukkoj (Predef.tk 1 kukkoj) ;
|
||||||
e = Predef.dp 1 kukkoi ;
|
e = Predef.dp 1 kukkoi ;
|
||||||
kukoi = Predef.tk 2 kukon + Predef.dp 1 kukkoi
|
kukoi = Predef.tk 2 kukon + Predef.dp 1 kukkoi
|
||||||
}
|
}
|
||||||
in
|
in
|
||||||
mkSubst a
|
mkSubst a
|
||||||
kukko
|
|
||||||
(Predef.tk 1 kukon)
|
|
||||||
kukko
|
kukko
|
||||||
(kukko + a)
|
(Predef.tk 1 kukon)
|
||||||
|
kukko
|
||||||
|
(kukko + a)
|
||||||
(kukko + o + "n")
|
(kukko + o + "n")
|
||||||
(kukkoi + ifi "" "i")
|
(kukkoi + ifi "" "i")
|
||||||
(kukoi + ifi "" "i")
|
(kukoi + ifi "" "i")
|
||||||
(ifTok Str e "e" (Predef.tk 1 kukkoi + "ien") (kukkoi + ifi "en" "jen"))
|
(ifTok Str e "e" (Predef.tk 1 kukkoi + "ien") (kukkoi + ifi "en" "jen"))
|
||||||
kukkoja
|
kukkoja
|
||||||
(kukkoi + ifi "in" "ihin") ;
|
(kukkoi + ifi "in" "ihin") ;
|
||||||
|
|
||||||
-- Reflexive pronoun.
|
-- Reflexive pronoun.
|
||||||
--- Possessive could be shared with the more general $NounFin.DetCN$.
|
--- Possessive could be shared with the more general $NounFin.DetCN$.
|
||||||
|
|
||||||
oper
|
oper
|
||||||
reflPron : Agr -> NP = \agr ->
|
reflPron : Agr -> NP = \agr ->
|
||||||
let
|
let
|
||||||
itse = (nhn (sKukko "itse" "itsen" "itsejä")).s ;
|
itse = (nhn (sKukko "itse" "itsen" "itsejä")).s ;
|
||||||
nsa = possSuffixFront agr
|
nsa = possSuffixFront agr
|
||||||
in {
|
in {
|
||||||
@@ -582,13 +582,13 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
possSuffixGen : Harmony -> Agr -> Str = \h,agr -> case h of {
|
possSuffixGen : Harmony -> Agr -> Str = \h,agr -> case h of {
|
||||||
Front => BIND ++ possSuffixFront agr ;
|
Front => BIND ++ possSuffixFront agr ;
|
||||||
Back => BIND ++ possSuffix agr
|
Back => BIND ++ possSuffix agr
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
possSuffixFront : Agr -> Str = \agr ->
|
possSuffixFront : Agr -> Str = \agr ->
|
||||||
table Agr ["ni" ; "si" ; "nsä" ; "mme" ; "nne" ; "nsä" ; "nne"] ! agr ;
|
table Agr ["ni" ; "si" ; "nsä" ; "mme" ; "nne" ; "nsä" ; "nne"] ! agr ;
|
||||||
possSuffix : Agr -> Str = \agr ->
|
possSuffix : Agr -> Str = \agr ->
|
||||||
table Agr ["ni" ; "si" ; "nsa" ; "mme" ; "nne" ; "nsa" ; "nne"] ! agr ;
|
table Agr ["ni" ; "si" ; "nsa" ; "mme" ; "nne" ; "nsa" ; "nne"] ! agr ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
@@ -611,14 +611,14 @@ oper
|
|||||||
isNeg : Bool
|
isNeg : Bool
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
heavyQuant : PQuant -> PQuant ** {sp : Number => Case => Str} = \d ->
|
heavyQuant : PQuant -> PQuant ** {sp : Number => Case => Str} = \d ->
|
||||||
d ** {sp = d.s1} ;
|
d ** {sp = d.s1} ;
|
||||||
PQuant : Type = {
|
PQuant : Type = {
|
||||||
s1 : Number => Case => Str ;
|
s1 : Number => Case => Str ;
|
||||||
s2 : Harmony => Str ;
|
s2 : Harmony => Str ;
|
||||||
isPoss : Bool ;
|
isPoss : Bool ;
|
||||||
isDef : Bool ;
|
isDef : Bool ;
|
||||||
isNeg : Bool
|
isNeg : Bool
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,8 +10,8 @@ concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin, StemFin in {
|
|||||||
PredSCVP sc vp = mkClause (\_ -> sc.s) (agrP3 Sg) vp ;
|
PredSCVP sc vp = mkClause (\_ -> sc.s) (agrP3 Sg) vp ;
|
||||||
|
|
||||||
ImpVP vp0 = let vp = vp2old_vp vp0 in {
|
ImpVP vp0 = let vp = vp2old_vp vp0 in {
|
||||||
s = \\pol,agr =>
|
s = \\pol,agr =>
|
||||||
let
|
let
|
||||||
verb = vp.s ! VIImper ! Simul ! pol ! agr ;
|
verb = vp.s ! VIImper ! Simul ! pol ! agr ;
|
||||||
compl = vp.s2 ! False ! pol ! agr ++ vp.adv ! pol ++ vp.ext --- False = like inf (osta auto)
|
compl = vp.s2 ! False ! pol ! agr ++ vp.adv ! pol ++ vp.ext --- False = like inf (osta auto)
|
||||||
in
|
in
|
||||||
@@ -20,7 +20,7 @@ concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin, StemFin in {
|
|||||||
|
|
||||||
-- The object case is formed at the use site of $c2$, in $Relative$ and $Question$.
|
-- The object case is formed at the use site of $c2$, in $Relative$ and $Question$.
|
||||||
|
|
||||||
SlashVP np vp = {
|
SlashVP np vp = {
|
||||||
s = \\t,a,p => (mkClause (subjForm np vp.s.sc) np.a vp).s ! t ! a ! p ! SDecl ;
|
s = \\t,a,p => (mkClause (subjForm np vp.s.sc) np.a vp).s ! t ! a ! p ! SDecl ;
|
||||||
c2 = vp.c2
|
c2 = vp.c2
|
||||||
} ;
|
} ;
|
||||||
@@ -31,14 +31,14 @@ concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin, StemFin in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
SlashPrep cl prep = {
|
SlashPrep cl prep = {
|
||||||
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl ;
|
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl ;
|
||||||
c2 = prep
|
c2 = prep
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
SlashVS np vs slash = {
|
SlashVS np vs slash = {
|
||||||
s = \\t,a,p =>
|
s = \\t,a,p =>
|
||||||
(mkClause (subjForm np vs.sc) np.a
|
(mkClause (subjForm np vs.sc) np.a
|
||||||
(insertExtrapos ("että" ++ slash.s)
|
(insertExtrapos ("että" ++ slash.s)
|
||||||
(predSV vs))
|
(predSV vs))
|
||||||
).s ! t ! a ! p ! SDecl ;
|
).s ! t ! a ! p ! SDecl ;
|
||||||
c2 = slash.c2
|
c2 = slash.c2
|
||||||
|
|||||||
@@ -23,16 +23,16 @@ oper
|
|||||||
|
|
||||||
|
|
||||||
snoun2np : Number -> SPN -> NPForm => Str = \n,sn ->
|
snoun2np : Number -> SPN -> NPForm => Str = \n,sn ->
|
||||||
\\c => sn.s ! (npform2case n c) ;
|
\\c => sn.s ! (npform2case n c) ;
|
||||||
|
|
||||||
noun2snoun : Noun -> SNoun = \n -> n ;
|
noun2snoun : Noun -> SNoun = \n -> n ;
|
||||||
|
|
||||||
aHarmony : Str -> Harmony = \a -> case a of
|
aHarmony : Str -> Harmony = \a -> case a of
|
||||||
{"a" => Back ; _ => Front} ;
|
{"a" => Back ; _ => Front} ;
|
||||||
|
|
||||||
harmonyA : Harmony -> Str = harmonyV "a" "ä" ;
|
harmonyA : Harmony -> Str = harmonyV "a" "ä" ;
|
||||||
|
|
||||||
harmonyV : Str -> Str -> Harmony -> Str = \u,y,h -> case h of
|
harmonyV : Str -> Str -> Harmony -> Str = \u,y,h -> case h of
|
||||||
{Back => u ; Front => y} ;
|
{Back => u ; Front => y} ;
|
||||||
|
|
||||||
|
|
||||||
@@ -64,9 +64,9 @@ oper
|
|||||||
snoun2sadj : SNoun -> SAdj = snoun2sadjComp True ;
|
snoun2sadj : SNoun -> SAdj = snoun2sadjComp True ;
|
||||||
|
|
||||||
snoun2sadjComp : Bool -> SNoun -> SAdj = \isPos,tuore ->
|
snoun2sadjComp : Bool -> SNoun -> SAdj = \isPos,tuore ->
|
||||||
let
|
let
|
||||||
tuoree = init (tuore.s ! NCase Sg Gen) ;
|
tuoree = init (tuore.s ! NCase Sg Gen) ;
|
||||||
tuoreesti = tuoree + "sti" ;
|
tuoreesti = tuoree + "sti" ;
|
||||||
tuoreemmin = init tuoree ;
|
tuoreemmin = init tuoree ;
|
||||||
in {s = table {
|
in {s = table {
|
||||||
AN f => tuore.s ! f ;
|
AN f => tuore.s ! f ;
|
||||||
@@ -84,11 +84,11 @@ oper
|
|||||||
Posit => table {
|
Posit => table {
|
||||||
AN nf => h.s ! nf ;
|
AN nf => h.s ! nf ;
|
||||||
AAdv => hn
|
AAdv => hn
|
||||||
} ;
|
} ;
|
||||||
Compar => table {
|
Compar => table {
|
||||||
AN nf => p.s ! nf ;
|
AN nf => p.s ! nf ;
|
||||||
AAdv => pn
|
AAdv => pn
|
||||||
} ;
|
} ;
|
||||||
Superl => table {
|
Superl => table {
|
||||||
AN nf => ps.s ! nf ;
|
AN nf => ps.s ! nf ;
|
||||||
AAdv => ph
|
AAdv => ph
|
||||||
@@ -114,24 +114,24 @@ oper
|
|||||||
sverb2verbBind : SVerb -> Verb = sverb2verb True ;
|
sverb2verbBind : SVerb -> Verb = sverb2verb True ;
|
||||||
sverb2verbSep : SVerb -> Verb = sverb2verb False ;
|
sverb2verbSep : SVerb -> Verb = sverb2verb False ;
|
||||||
|
|
||||||
vforms2sverb : VForms -> SVerb = \v ->
|
vforms2sverb : VForms -> SVerb = \v ->
|
||||||
{s = (vforms2V v).s ; h = case (last (v ! 0)) of {"a" => Back ; _ => Front}} ;
|
{s = (vforms2V v).s ; h = case (last (v ! 0)) of {"a" => Back ; _ => Front}} ;
|
||||||
|
|
||||||
sverb2verb : Bool -> SVerb -> Verb = \b,sverb -> {s = sverb.s} ;
|
sverb2verb : Bool -> SVerb -> Verb = \b,sverb -> {s = sverb.s} ;
|
||||||
|
|
||||||
predSV : SVerb1 -> VP = \sv ->
|
predSV : SVerb1 -> VP = \sv ->
|
||||||
predV sv ;
|
predV sv ;
|
||||||
-- (sverb2verbSep sv ** {p = sv.p ; sc = sv.sc ; h = sv.h}) ;
|
-- (sverb2verbSep sv ** {p = sv.p ; sc = sv.sc ; h = sv.h}) ;
|
||||||
|
|
||||||
-- word formation functions
|
-- word formation functions
|
||||||
|
|
||||||
sverb2snoun : SVerb1 -> SNoun = \v -> -- syöminen
|
sverb2snoun : SVerb1 -> SNoun = \v -> -- syöminen
|
||||||
let tekem = Predef.tk 4 (v.s ! Inf Inf3Iness) in
|
let tekem = Predef.tk 4 (v.s ! Inf Inf3Iness) in
|
||||||
nforms2snoun (dNainen (tekem + "inen")) ;
|
nforms2snoun (dNainen (tekem + "inen")) ;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
sverb2nounPresPartAct : SVerb1 -> SNoun = \v -> -- syövä
|
sverb2nounPresPartAct : SVerb1 -> SNoun = \v -> -- syövä
|
||||||
let teke = Predef.tk 5 (v.s ! Inf Inf3Iness) in
|
let teke = Predef.tk 5 (v.s ! Inf Inf3Iness) in
|
||||||
nforms2snoun (dLava (teke + "v" + last (v.s ! Inf1))) ;
|
nforms2snoun (dLava (teke + "v" + last (v.s ! Inf1))) ;
|
||||||
|
|
||||||
sverb2nounPresPartPass : SVerb1 -> SNoun = \v -> -- syötävä
|
sverb2nounPresPartPass : SVerb1 -> SNoun = \v -> -- syötävä
|
||||||
@@ -140,7 +140,7 @@ oper
|
|||||||
-}
|
-}
|
||||||
|
|
||||||
dLava : Str -> NForms = \s -> dUkko s (s + "n") ;
|
dLava : Str -> NForms = \s -> dUkko s (s + "n") ;
|
||||||
|
|
||||||
--- to use these at run time in ParseFin
|
--- to use these at run time in ParseFin
|
||||||
partPlus = glue ;
|
partPlus = glue ;
|
||||||
|
|
||||||
@@ -148,12 +148,12 @@ oper
|
|||||||
|
|
||||||
plusIf : Bool -> Str -> Str -> Str = \b,x,y -> case b of {
|
plusIf : Bool -> Str -> Str -> Str = \b,x,y -> case b of {
|
||||||
True => x + y ;
|
True => x + y ;
|
||||||
False => glue x y
|
False => glue x y
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- for Symbol
|
-- for Symbol
|
||||||
|
|
||||||
addStemEnding : Str -> SPN = \i ->
|
addStemEnding : Str -> SPN = \i ->
|
||||||
{s = \\c => i ++ bindColonIfS (NCase Sg c) ++ defaultCaseEnding c} ;
|
{s = \\c => i ++ bindColonIfS (NCase Sg c) ++ defaultCaseEnding c} ;
|
||||||
|
|
||||||
bindIfS : SNForm -> Str = \c -> case c of {
|
bindIfS : SNForm -> Str = \c -> case c of {
|
||||||
@@ -167,15 +167,15 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
---- a hack to make VerbFin compile accurately for library (here),
|
---- a hack to make VerbFin compile accurately for library (here),
|
||||||
---- and in a simplified way for ParseFin (in stemmed/)
|
---- and in a simplified way for ParseFin (in stemmed/)
|
||||||
|
|
||||||
slashV2VNP : (SVerb1 ** {c2 : Compl ; vi : VVType}) -> (NP ** {isNeg : Bool}) ->
|
slashV2VNP : (SVerb1 ** {c2 : Compl ; vi : VVType}) -> (NP ** {isNeg : Bool}) ->
|
||||||
(VP ** {c2 : Compl}) -> (VP ** {c2 : Compl})
|
(VP ** {c2 : Compl}) -> (VP ** {c2 : Compl})
|
||||||
= \v, np, vp ->
|
= \v, np, vp ->
|
||||||
insertObjPre np.isNeg
|
insertObjPre np.isNeg
|
||||||
(\fin,b,a -> appCompl fin b v.c2 np ++
|
(\fin,b,a -> appCompl fin b v.c2 np ++
|
||||||
infVP v.sc b a vp (vvtype2infform v.vi))
|
infVP v.sc b a vp (vvtype2infform v.vi))
|
||||||
(predSV v) ** {c2 = vp.c2} ;
|
(predSV v) ** {c2 = vp.c2} ;
|
||||||
|
|
||||||
|
|
||||||
@@ -190,9 +190,9 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
defaultVPTyp = {isNeg = False ; isPass = False} ;
|
defaultVPTyp = {isNeg = False ; isPass = False} ;
|
||||||
|
|
||||||
HVerb : Type = Verb ** {sc : SubjCase ; h : Harmony ; p : Str} ;
|
HVerb : Type = Verb ** {sc : SubjCase ; h : Harmony ; p : Str} ;
|
||||||
|
|
||||||
predV : HVerb -> VP = \verb -> {
|
predV : HVerb -> VP = \verb -> {
|
||||||
s = verb ;
|
s = verb ;
|
||||||
s2 = \\_,_,_ => [] ;
|
s2 = \\_,_,_ => [] ;
|
||||||
@@ -202,7 +202,7 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
old_VP = {
|
old_VP = {
|
||||||
s : VIForm => Anteriority => Polarity => Agr => {fin, inf : Str} ;
|
s : VIForm => Anteriority => Polarity => Agr => {fin, inf : Str} ;
|
||||||
s2 : Bool => Polarity => Agr => Str ; -- talo/talon/taloa
|
s2 : Bool => Polarity => Agr => Str ; -- talo/talon/taloa
|
||||||
adv : Polarity => Str ; -- ainakin/ainakaan
|
adv : Polarity => Str ; -- ainakin/ainakaan
|
||||||
ext : Str ;
|
ext : Str ;
|
||||||
@@ -211,17 +211,17 @@ oper
|
|||||||
h : Harmony
|
h : Harmony
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
vp2old_vp : VP -> old_VP = \vp ->
|
vp2old_vp : VP -> old_VP = \vp ->
|
||||||
let
|
let
|
||||||
verb = vp.s ;
|
verb = vp.s ;
|
||||||
sverb : VIForm => Anteriority => Polarity => Agr => {fin, inf : Str} = \\vi,ant,b,agr0 =>
|
sverb : VIForm => Anteriority => Polarity => Agr => {fin, inf : Str} = \\vi,ant,b,agr0 =>
|
||||||
let
|
let
|
||||||
agr = verbAgr agr0 ;
|
agr = verbAgr agr0 ;
|
||||||
verbs = verb.s ;
|
verbs = verb.s ;
|
||||||
part : Str = case vi of {
|
part : Str = case vi of {
|
||||||
VIPass _ => verbs ! PastPartPass (AN (NCase agr.n Nom)) ;
|
VIPass _ => verbs ! PastPartPass (AN (NCase agr.n Nom)) ;
|
||||||
_ => verbs ! PastPartAct (AN (NCase agr.n Nom))
|
_ => verbs ! PastPartAct (AN (NCase agr.n Nom))
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
eiv : Str = case agr of {
|
eiv : Str = case agr of {
|
||||||
{n = Sg ; p = P1} => "en" ;
|
{n = Sg ; p = P1} => "en" ;
|
||||||
@@ -258,7 +258,7 @@ oper
|
|||||||
vf => verbOlla.s ! vf
|
vf => verbOlla.s ! vf
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
vf : Str -> Str -> {fin, inf : Str} = \x,y ->
|
vf : Str -> Str -> {fin, inf : Str} = \x,y ->
|
||||||
{fin = x ; inf = y} ;
|
{fin = x ; inf = y} ;
|
||||||
mkvf : VForm -> {fin, inf : Str} = \p -> case <ant,b> of {
|
mkvf : VForm -> {fin, inf : Str} = \p -> case <ant,b> of {
|
||||||
<Simul,Pos> => vf (verbs ! p) [] ;
|
<Simul,Pos> => vf (verbs ! p) [] ;
|
||||||
@@ -277,14 +277,14 @@ oper
|
|||||||
VIPass Past => mkvf (PassImpf passPol) ; --# notpresent
|
VIPass Past => mkvf (PassImpf passPol) ; --# notpresent
|
||||||
VIPass Cond => mkvf (PassCondit passPol) ; --# notpresent
|
VIPass Cond => mkvf (PassCondit passPol) ; --# notpresent
|
||||||
VIPass Fut => mkvf (PassPresn passPol) ; --# notpresent
|
VIPass Fut => mkvf (PassPresn passPol) ; --# notpresent
|
||||||
VIPass Pres => mkvf (PassPresn passPol) ;
|
VIPass Pres => mkvf (PassPresn passPol) ;
|
||||||
VIInf i => mkvf (Inf i)
|
VIInf i => mkvf (Inf i)
|
||||||
}
|
}
|
||||||
in {
|
in {
|
||||||
s = case vp.vptyp.isPass of {
|
s = case vp.vptyp.isPass of {
|
||||||
True => \\vif,ant,pol,agr => case vif of {
|
True => \\vif,ant,pol,agr => case vif of {
|
||||||
VIFin t => sverb ! VIPass t ! ant ! pol ! agr ;
|
VIFin t => sverb ! VIPass t ! ant ! pol ! agr ;
|
||||||
_ => sverb ! vif ! ant ! pol ! agr
|
_ => sverb ! vif ! ant ! pol ! agr
|
||||||
} ;
|
} ;
|
||||||
_ => sverb
|
_ => sverb
|
||||||
} ;
|
} ;
|
||||||
@@ -293,7 +293,7 @@ oper
|
|||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
sc = verb.sc ;
|
sc = verb.sc ;
|
||||||
h = verb.h ;
|
h = verb.h ;
|
||||||
isNeg = vp.vptyp.isNeg
|
isNeg = vp.vptyp.isNeg
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertObj : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
|
insertObj : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
|
||||||
@@ -301,7 +301,7 @@ oper
|
|||||||
s2 = \\fin,b,a => vp.s2 ! fin ! b ! a ++ obj ! fin ! b ! a ;
|
s2 = \\fin,b,a => vp.s2 ! fin ! b ! a ++ obj ! fin ! b ! a ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
sc = vp.sc ;
|
sc = vp.sc ;
|
||||||
h = vp.h ;
|
h = vp.h ;
|
||||||
vptyp = vp.vptyp
|
vptyp = vp.vptyp
|
||||||
} ;
|
} ;
|
||||||
@@ -319,7 +319,7 @@ oper
|
|||||||
s2 = vp.s2 ;
|
s2 = vp.s2 ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
adv = \\b => vp.adv ! b ++ adv ! b ;
|
adv = \\b => vp.adv ! b ++ adv ! b ;
|
||||||
sc = vp.sc ;
|
sc = vp.sc ;
|
||||||
h = vp.h ;
|
h = vp.h ;
|
||||||
vptyp = vp.vptyp --- missään
|
vptyp = vp.vptyp --- missään
|
||||||
} ;
|
} ;
|
||||||
@@ -329,7 +329,7 @@ oper
|
|||||||
s2 = \\b,p,a => pr.s.p1 ++ vp.s2 ! b ! p ! a ++ pr.s.p2 ; ---- possessive suffix
|
s2 = \\b,p,a => pr.s.p1 ++ vp.s2 ! b ! p ! a ++ pr.s.p2 ; ---- possessive suffix
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
vptyp = {isNeg = vp.vptyp.isNeg ; isPass = True} ;
|
vptyp = {isNeg = vp.vptyp.isNeg ; isPass = True} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertExtrapos : Str -> VP -> VP = \obj,vp -> {
|
insertExtrapos : Str -> VP -> VP = \obj,vp -> {
|
||||||
@@ -337,29 +337,29 @@ oper
|
|||||||
s2 = vp.s2 ;
|
s2 = vp.s2 ;
|
||||||
ext = vp.ext ++ obj ;
|
ext = vp.ext ++ obj ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
sc = vp.sc ;
|
sc = vp.sc ;
|
||||||
h = vp.h ;
|
h = vp.h ;
|
||||||
vptyp = vp.vptyp
|
vptyp = vp.vptyp
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkClausePol : Bool -> (Polarity -> Str) -> Agr -> VP -> Clause =
|
mkClausePol : Bool -> (Polarity -> Str) -> Agr -> VP -> Clause =
|
||||||
\isNeg,sub,agr,vp -> {
|
\isNeg,sub,agr,vp -> {
|
||||||
s = \\t,a,b =>
|
s = \\t,a,b =>
|
||||||
let
|
let
|
||||||
pol = case isNeg of {
|
pol = case isNeg of {
|
||||||
True => Neg ;
|
True => Neg ;
|
||||||
_ => b
|
_ => b
|
||||||
} ;
|
} ;
|
||||||
c = (mkClausePlus sub agr vp).s ! t ! a ! pol
|
c = (mkClausePlus sub agr vp).s ! t ! a ! pol
|
||||||
in
|
in
|
||||||
table {
|
table {
|
||||||
SDecl => c.subj ++ c.fin ++ c.inf ++ c.compl ++ c.adv ++ c.ext ;
|
SDecl => c.subj ++ c.fin ++ c.inf ++ c.compl ++ c.adv ++ c.ext ;
|
||||||
SQuest => c.fin ++ BIND ++ questPart c.h ++ c.subj ++ c.inf ++ c.compl ++ c.adv ++ c.ext
|
SQuest => c.fin ++ BIND ++ questPart c.h ++ c.subj ++ c.inf ++ c.compl ++ c.adv ++ c.ext
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
mkClause : (Polarity -> Str) -> Agr -> VP -> Clause =
|
mkClause : (Polarity -> Str) -> Agr -> VP -> Clause =
|
||||||
\sub,agr,vp -> {
|
\sub,agr,vp -> {
|
||||||
s = \\t,a,b => let c = (mkClausePlus sub agr vp).s ! t ! a ! b in
|
s = \\t,a,b => let c = (mkClausePlus sub agr vp).s ! t ! a ! b in
|
||||||
table {
|
table {
|
||||||
SDecl => c.subj ++ c.fin ++ c.inf ++ c.compl ++ c.adv ++ c.ext ;
|
SDecl => c.subj ++ c.fin ++ c.inf ++ c.compl ++ c.adv ++ c.ext ;
|
||||||
SQuest => c.fin ++ BIND ++ questPart c.h ++ c.subj ++ c.inf ++ c.compl ++ c.adv ++ c.ext
|
SQuest => c.fin ++ BIND ++ questPart c.h ++ c.subj ++ c.inf ++ c.compl ++ c.adv ++ c.ext
|
||||||
@@ -368,24 +368,24 @@ oper
|
|||||||
|
|
||||||
mkClausePlus : (Polarity -> Str) -> Agr -> VP -> ClausePlus =
|
mkClausePlus : (Polarity -> Str) -> Agr -> VP -> ClausePlus =
|
||||||
\sub,agr,vp0 -> let vp = vp2old_vp vp0 in {
|
\sub,agr,vp0 -> let vp = vp2old_vp vp0 in {
|
||||||
s = \\t,a,b =>
|
s = \\t,a,b =>
|
||||||
let
|
let
|
||||||
agrfin = case vp.sc of {
|
agrfin = case vp.sc of {
|
||||||
SCNom => <agr,True> ;
|
SCNom => <agr,True> ;
|
||||||
_ => <agrP3 Sg,False> -- minun täytyy, minulla on
|
_ => <agrP3 Sg,False> -- minun täytyy, minulla on
|
||||||
} ;
|
} ;
|
||||||
verb = vp.s ! VIFin t ! a ! b ! agrfin.p1 ;
|
verb = vp.s ! VIFin t ! a ! b ! agrfin.p1 ;
|
||||||
in {subj = sub b ;
|
in {subj = sub b ;
|
||||||
fin = verb.fin ;
|
fin = verb.fin ;
|
||||||
inf = verb.inf ;
|
inf = verb.inf ;
|
||||||
compl = vp.s2 ! agrfin.p2 ! b ! agr ;
|
compl = vp.s2 ! agrfin.p2 ! b ! agr ;
|
||||||
adv = vp.adv ! b ;
|
adv = vp.adv ! b ;
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
h = selectPart vp0 a b
|
h = selectPart vp0 a b
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
selectPart : VP -> Anteriority -> Polarity -> Harmony = \vp,a,p ->
|
selectPart : VP -> Anteriority -> Polarity -> Harmony = \vp,a,p ->
|
||||||
case p of {
|
case p of {
|
||||||
Neg => Front ; -- eikö tule
|
Neg => Front ; -- eikö tule
|
||||||
_ => case a of {
|
_ => case a of {
|
||||||
@@ -398,7 +398,7 @@ oper
|
|||||||
-- ([main] tahdon | en tahdo) ([internal] nukkua | olla nukkumatta)
|
-- ([main] tahdon | en tahdo) ([internal] nukkua | olla nukkumatta)
|
||||||
infVPGen : Polarity -> SubjCase -> Polarity -> Agr -> VP -> InfForm -> Str =
|
infVPGen : Polarity -> SubjCase -> Polarity -> Agr -> VP -> InfForm -> Str =
|
||||||
\ipol,sc,pol,agr,vp0,vi ->
|
\ipol,sc,pol,agr,vp0,vi ->
|
||||||
let
|
let
|
||||||
vp = vp2old_vp vp0 ;
|
vp = vp2old_vp vp0 ;
|
||||||
fin = case sc of { -- subject case
|
fin = case sc of { -- subject case
|
||||||
SCNom => True ; -- minä tahdon nähdä auton
|
SCNom => True ; -- minä tahdon nähdä auton
|
||||||
@@ -422,4 +422,4 @@ oper
|
|||||||
|
|
||||||
vpVerbOlla : HVerb = verbOlla ** {sc = SCNom ; h = Back ; p = []} ;
|
vpVerbOlla : HVerb = verbOlla ** {sc = SCNom ; h = Back ; p = []} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ concrete StructuralFin of Structural = CatFin **
|
|||||||
above_Prep = postGenPrep "yläpuolella" ;
|
above_Prep = postGenPrep "yläpuolella" ;
|
||||||
after_Prep = postGenPrep "jälkeen" ;
|
after_Prep = postGenPrep "jälkeen" ;
|
||||||
|
|
||||||
all_Predet = {s = \\n,c =>
|
all_Predet = {s = \\n,c =>
|
||||||
let
|
let
|
||||||
kaiket = caseTable n (snoun2nounBind (mkN "kaikki" "kaiken" "kaikkena"))
|
kaiket = caseTable n (snoun2nounBind (mkN "kaikki" "kaiken" "kaikkena"))
|
||||||
in
|
in
|
||||||
@@ -47,15 +47,15 @@ concrete StructuralFin of Structural = CatFin **
|
|||||||
here7from_Adv = mkAdv "täältä" ;
|
here7from_Adv = mkAdv "täältä" ;
|
||||||
how_IAdv = ssp "ADV" "miten" ;
|
how_IAdv = ssp "ADV" "miten" ;
|
||||||
how8much_IAdv = ssp "ADV" ("kuinka" ++ tagPOS "ADV" "paljon") ;
|
how8much_IAdv = ssp "ADV" ("kuinka" ++ tagPOS "ADV" "paljon") ;
|
||||||
how8many_IDet =
|
how8many_IDet =
|
||||||
{s = \\c => "kuinka" ++ (snoun2nounBind (mkN "moni" "monia")).s ! NCase Sg c ; n = Sg ; isNum = False} ;
|
{s = \\c => "kuinka" ++ (snoun2nounBind (mkN "moni" "monia")).s ! NCase Sg c ; n = Sg ; isNum = False} ;
|
||||||
if_Subj = ssp "CONJ" "jos" ;
|
if_Subj = ssp "CONJ" "jos" ;
|
||||||
in8front_Prep = postGenPrep "edessä" ;
|
in8front_Prep = postGenPrep "edessä" ;
|
||||||
i_Pron = mkPersonPronoun "minä" "minun" "minua" "minuna" "minuun" Sg P1 ;
|
i_Pron = mkPersonPronoun "minä" "minun" "minua" "minuna" "minuun" Sg P1 ;
|
||||||
in_Prep = casePrep inessive ;
|
in_Prep = casePrep inessive ;
|
||||||
it_Pron = {
|
it_Pron = {
|
||||||
s = \\c => pronSe.s ! npform2case Sg c ;
|
s = \\c => pronSe.s ! npform2case Sg c ;
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
hasPoss = False ;
|
hasPoss = False ;
|
||||||
poss = "sen" ;
|
poss = "sen" ;
|
||||||
} ;
|
} ;
|
||||||
@@ -79,7 +79,7 @@ concrete StructuralFin of Structural = CatFin **
|
|||||||
so_AdA = ssp "ADV" "niin" ;
|
so_AdA = ssp "ADV" "niin" ;
|
||||||
somebody_NP = {
|
somebody_NP = {
|
||||||
s = \\c => jokuPron ! Sg ! npform2case Sg c ;
|
s = \\c => jokuPron ! Sg ! npform2case Sg c ;
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False ; isNeg = False
|
isPron = False ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
someSg_Det = heavyDet {
|
someSg_Det = heavyDet {
|
||||||
@@ -89,12 +89,12 @@ concrete StructuralFin of Structural = CatFin **
|
|||||||
} ;
|
} ;
|
||||||
somePl_Det = heavyDet {
|
somePl_Det = heavyDet {
|
||||||
s1 = jokuPron ! Pl ;
|
s1 = jokuPron ! Pl ;
|
||||||
s2 = \\_ => [] ; isNum,isPoss = False ; isNeg = False ; isDef = True ;
|
s2 = \\_ => [] ; isNum,isPoss = False ; isNeg = False ; isDef = True ;
|
||||||
n = Pl ; isNeg = False
|
n = Pl ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
something_NP = {
|
something_NP = {
|
||||||
s = \\c => jokinPron ! Sg ! npform2case Sg c ;
|
s = \\c => jokinPron ! Sg ! npform2case Sg c ;
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False ; isNeg = False ; isNeg = False
|
isPron = False ; isNeg = False ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
somewhere_Adv = ssp "ADV" "jossain" ;
|
somewhere_Adv = ssp "ADV" "jossain" ;
|
||||||
@@ -107,7 +107,7 @@ concrete StructuralFin of Structural = CatFin **
|
|||||||
c => (mkPersonPronoun "nuo" "noiden" "noita" "noina" "noihin" Sg P3).s ! NPCase c
|
c => (mkPersonPronoun "nuo" "noiden" "noita" "noina" "noihin" Sg P3).s ! NPCase c
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
s2 = \\_ => [] ; isNum,isPoss = False ; isDef = True ; isNeg = False
|
s2 = \\_ => [] ; isNum,isPoss = False ; isDef = True ; isNeg = False
|
||||||
} ;
|
} ;
|
||||||
that_Subj = ssp "CONJ" "että" ;
|
that_Subj = ssp "CONJ" "että" ;
|
||||||
there_Adv = ssp "ADV" "siellä" ; --- tuolla
|
there_Adv = ssp "ADV" "siellä" ; --- tuolla
|
||||||
@@ -161,21 +161,21 @@ concrete StructuralFin of Structural = CatFin **
|
|||||||
yes_Utt = ssp "INTERJ" "kyllä" ;
|
yes_Utt = ssp "INTERJ" "kyllä" ;
|
||||||
youSg_Pron = mkPersonPronoun "sinä" "sinun" "sinua" "sinuna" "sinuun" Sg P2 ;
|
youSg_Pron = mkPersonPronoun "sinä" "sinun" "sinua" "sinuna" "sinuun" Sg P2 ;
|
||||||
youPl_Pron = mkPersonPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 ;
|
youPl_Pron = mkPersonPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 ;
|
||||||
youPol_Pron =
|
youPol_Pron =
|
||||||
let p = mkPersonPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 in
|
let p = mkPersonPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 in
|
||||||
{s = p.s ; a = AgPol ; hasPoss = True ; poss = p.poss} ;
|
{s = p.s ; a = AgPol ; hasPoss = True ; poss = p.poss} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
jokuPron : MorphoFin.Number => (MorphoFin.Case) => Str =
|
jokuPron : MorphoFin.Number => (MorphoFin.Case) => Str =
|
||||||
let
|
let
|
||||||
kui = snoun2nounBind (mkN "kuu")
|
kui = snoun2nounBind (mkN "kuu")
|
||||||
in
|
in
|
||||||
table {
|
table {
|
||||||
Sg => table {
|
Sg => table {
|
||||||
Nom => "joku" ;
|
Nom => "joku" ;
|
||||||
Gen => "jonkun" ;
|
Gen => "jonkun" ;
|
||||||
c => relPron ! Sg ! c + "ku" + Predef.drop 3 (kui.s ! NCase Sg c)
|
c => relPron ! Sg ! c + "ku" + Predef.drop 3 (kui.s ! NCase Sg c)
|
||||||
} ;
|
} ;
|
||||||
Pl => table {
|
Pl => table {
|
||||||
Nom => "jotkut" ;
|
Nom => "jotkut" ;
|
||||||
c => relPron ! Pl ! c + kui.s ! NCase Pl c
|
c => relPron ! Pl ! c + kui.s ! NCase Pl c
|
||||||
@@ -188,14 +188,14 @@ oper
|
|||||||
Nom => "jokin" ;
|
Nom => "jokin" ;
|
||||||
Gen => "jonkin" ;
|
Gen => "jonkin" ;
|
||||||
c => relPron ! Sg ! c + "kin"
|
c => relPron ! Sg ! c + "kin"
|
||||||
} ;
|
} ;
|
||||||
Pl => table {
|
Pl => table {
|
||||||
Nom => "jotkin" ;
|
Nom => "jotkin" ;
|
||||||
c => relPron ! Pl ! c + "kin"
|
c => relPron ! Pl ! c + "kin"
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mikaInt : MorphoFin.Number => (MorphoFin.Case) => Str =
|
mikaInt : MorphoFin.Number => (MorphoFin.Case) => Str =
|
||||||
let {
|
let {
|
||||||
mi = snoun2nounBind (mkN "mi")
|
mi = snoun2nounBind (mkN "mi")
|
||||||
} in
|
} in
|
||||||
@@ -206,7 +206,7 @@ oper
|
|||||||
Part => "mitä" ;
|
Part => "mitä" ;
|
||||||
Illat => "mihin" ;
|
Illat => "mihin" ;
|
||||||
c => mi.s ! NCase Sg c
|
c => mi.s ! NCase Sg c
|
||||||
} ;
|
} ;
|
||||||
Pl => table {
|
Pl => table {
|
||||||
Nom => "mitkä" ;
|
Nom => "mitkä" ;
|
||||||
Gen => "minkä" ;
|
Gen => "minkä" ;
|
||||||
@@ -216,15 +216,15 @@ oper
|
|||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
kukaInt : MorphoFin.Number => (MorphoFin.Case) => Str =
|
kukaInt : MorphoFin.Number => (MorphoFin.Case) => Str =
|
||||||
let
|
let
|
||||||
kuka = snoun2nounBind (mkN "kuka" "kenen" "ketä" "kenä" "keneen"
|
kuka = snoun2nounBind (mkN "kuka" "kenen" "ketä" "kenä" "keneen"
|
||||||
"keiden" "keitä" "keinä" "keissä" "keihin") ;
|
"keiden" "keitä" "keinä" "keissä" "keihin") ;
|
||||||
in
|
in
|
||||||
table {
|
table {
|
||||||
Sg => table {
|
Sg => table {
|
||||||
c => kuka.s ! NCase Sg c
|
c => kuka.s ! NCase Sg c
|
||||||
} ;
|
} ;
|
||||||
Pl => table {
|
Pl => table {
|
||||||
Nom => "ketkä" ;
|
Nom => "ketkä" ;
|
||||||
c => kuka.s ! NCase Pl c
|
c => kuka.s ! NCase Pl c
|
||||||
@@ -243,7 +243,7 @@ oper
|
|||||||
<_,Adess> => "millään" ;
|
<_,Adess> => "millään" ;
|
||||||
<_,Ablat> => "miltään" ;
|
<_,Ablat> => "miltään" ;
|
||||||
_ => mikaInt ! n ! c + "kään"
|
_ => mikaInt ! n ! c + "kään"
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
kukaanPron : MorphoFin.Number => (MorphoFin.Case) => Str =
|
kukaanPron : MorphoFin.Number => (MorphoFin.Case) => Str =
|
||||||
table {
|
table {
|
||||||
@@ -257,7 +257,7 @@ oper
|
|||||||
Adess => "kellään" ;
|
Adess => "kellään" ;
|
||||||
Ablat => "keltään" ;
|
Ablat => "keltään" ;
|
||||||
c => kukaInt ! Sg ! c + "kään"
|
c => kukaInt ! Sg ! c + "kään"
|
||||||
} ;
|
} ;
|
||||||
Pl => table {
|
Pl => table {
|
||||||
Nom => "ketkään" ;
|
Nom => "ketkään" ;
|
||||||
Part => "keitään" ;
|
Part => "keitään" ;
|
||||||
@@ -271,9 +271,9 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
makeNP : SNoun -> MorphoFin.Number -> CatFin.NP ;
|
makeNP : SNoun -> MorphoFin.Number -> CatFin.NP ;
|
||||||
makeNP noun num = {
|
makeNP noun num = {
|
||||||
s = \\c => (snoun2nounBind noun).s ! NCase num (npform2case num c) ;
|
s = \\c => (snoun2nounBind noun).s ! NCase num (npform2case num c) ;
|
||||||
a = agrP3 num ;
|
a = agrP3 num ;
|
||||||
isPron, isNeg = False ;
|
isPron, isNeg = False ;
|
||||||
lock_NP = <>
|
lock_NP = <>
|
||||||
@@ -290,13 +290,13 @@ lin
|
|||||||
if_then_Conj = {s1 = "jos" ; s2 = "niin" ; n = Sg} ;
|
if_then_Conj = {s1 = "jos" ; s2 = "niin" ; n = Sg} ;
|
||||||
nobody_NP = {
|
nobody_NP = {
|
||||||
s = \\c => kukaanPron ! Sg ! npform2case Sg c ; --- requires negative polarity
|
s = \\c => kukaanPron ! Sg ! npform2case Sg c ; --- requires negative polarity
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False ; isNeg = True
|
isPron = False ; isNeg = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
nothing_NP = {
|
nothing_NP = {
|
||||||
s = \\c => mikaanPron ! Sg ! npform2case Sg c ; --- requires negative polarity
|
s = \\c => mikaanPron ! Sg ! npform2case Sg c ; --- requires negative polarity
|
||||||
a = agrP3 Sg ;
|
a = agrP3 Sg ;
|
||||||
isPron = False ; isNeg = True
|
isPron = False ; isNeg = True
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -317,4 +317,3 @@ oper
|
|||||||
mkPersonPronoun : (_,_,_,_,_ : Str) -> Number -> Person -> Pron = \a,b,c,d,e,n,p ->
|
mkPersonPronoun : (_,_,_,_,_ : Str) -> Number -> Person -> Pron = \a,b,c,d,e,n,p ->
|
||||||
lin Pron (MorphoFin.mkPronoun a b c d e n p) ;
|
lin Pron (MorphoFin.mkPronoun a b c d e n p) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,9 +3,9 @@
|
|||||||
concrete SymbolFin of Symbol = CatFin ** open Prelude, NounFin, ResFin, MorphoFin, StemFin in {
|
concrete SymbolFin of Symbol = CatFin ** open Prelude, NounFin, ResFin, MorphoFin, StemFin in {
|
||||||
|
|
||||||
lin
|
lin
|
||||||
SymbPN i = addStemEnding i.s ;
|
SymbPN i = addStemEnding i.s ;
|
||||||
IntPN i = addStemEnding i.s ;
|
IntPN i = addStemEnding i.s ;
|
||||||
FloatPN i = addStemEnding i.s ;
|
FloatPN i = addStemEnding i.s ;
|
||||||
NumPN i = {s = \\c => i.s!Sg!Nom ; h = Back} ; --- c
|
NumPN i = {s = \\c => i.s!Sg!Nom ; h = Back} ; --- c
|
||||||
|
|
||||||
CNIntNP cn i = {
|
CNIntNP cn i = {
|
||||||
@@ -29,7 +29,7 @@ lin
|
|||||||
SymbNum n = {s = \\_,_ => n.s ; isNum = True ; n = Pl} ;
|
SymbNum n = {s = \\_,_ => n.s ; isNum = True ; n = Pl} ;
|
||||||
SymbOrd n = {s = \\_ => glue n.s "."} ;
|
SymbOrd n = {s = \\_ => glue n.s "."} ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
|
|
||||||
Symb, [Symb] = SS ;
|
Symb, [Symb] = SS ;
|
||||||
|
|
||||||
@@ -41,4 +41,3 @@ lin
|
|||||||
ConsSymb = infixSS (SOFT_BIND ++ ",") ;
|
ConsSymb = infixSS (SOFT_BIND ++ ",") ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--# -path=.:../abstract:../common
|
--# -path=.:../abstract:../common
|
||||||
|
|
||||||
concrete TerminologyFin of Terminology = CatFin ** open
|
concrete TerminologyFin of Terminology = CatFin ** open
|
||||||
ResFin,
|
ResFin,
|
||||||
StemFin,
|
StemFin,
|
||||||
ParadigmsFin,
|
ParadigmsFin,
|
||||||
@@ -18,9 +18,9 @@ lincat
|
|||||||
ParameterType = G.N ;
|
ParameterType = G.N ;
|
||||||
Parameter = G.N ;
|
Parameter = G.N ;
|
||||||
Modifier = G.A ;
|
Modifier = G.A ;
|
||||||
|
|
||||||
Heading = {s : Str} ;
|
Heading = {s : Str} ;
|
||||||
|
|
||||||
|
|
||||||
lin
|
lin
|
||||||
noun_Category = mkN "substantiivi" ;
|
noun_Category = mkN "substantiivi" ;
|
||||||
@@ -59,7 +59,7 @@ lin
|
|||||||
|
|
||||||
active_Parameter = mkN "aktiivi" ;
|
active_Parameter = mkN "aktiivi" ;
|
||||||
passive_Parameter = mkN "passiivi" ;
|
passive_Parameter = mkN "passiivi" ;
|
||||||
|
|
||||||
imperative_Parameter = mkN "imperatiivi" ;
|
imperative_Parameter = mkN "imperatiivi" ;
|
||||||
indicative_Parameter = mkN "indikatiivi" ;
|
indicative_Parameter = mkN "indikatiivi" ;
|
||||||
conjunctive_Parameter = mkN "konjunktiivi" ;
|
conjunctive_Parameter = mkN "konjunktiivi" ;
|
||||||
|
|||||||
@@ -10,17 +10,17 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin, StemFin in {
|
|||||||
|
|
||||||
SlashV2a v = predSV v ** {c2 = v.c2} ;
|
SlashV2a v = predSV v ** {c2 = v.c2} ;
|
||||||
|
|
||||||
Slash2V3 v np =
|
Slash2V3 v np =
|
||||||
insertObj
|
insertObj
|
||||||
(\\fin,b,_ => appCompl fin b v.c2 np) (predSV v) ** {c2 = v.c3} ;
|
(\\fin,b,_ => appCompl fin b v.c2 np) (predSV v) ** {c2 = v.c3} ;
|
||||||
Slash3V3 v np =
|
Slash3V3 v np =
|
||||||
insertObj
|
insertObj
|
||||||
(\\fin,b,_ => appCompl fin b v.c3 np) (predSV v) ** {c2 = v.c2} ;
|
(\\fin,b,_ => appCompl fin b v.c3 np) (predSV v) ** {c2 = v.c2} ;
|
||||||
|
|
||||||
ComplVV v vp =
|
ComplVV v vp =
|
||||||
insertObj
|
insertObj
|
||||||
(\\_,b,a => infVP v.sc b a vp (vvtype2infform v.vi))
|
(\\_,b,a => infVP v.sc b a vp (vvtype2infform v.vi))
|
||||||
(predSV {s = v.s ;
|
(predSV {s = v.s ;
|
||||||
sc = case vp.s.sc of {
|
sc = case vp.s.sc of {
|
||||||
SCNom => v.sc ; -- minun täytyy pestä auto
|
SCNom => v.sc ; -- minun täytyy pestä auto
|
||||||
c => c -- minulla täytyy olla auto
|
c => c -- minulla täytyy olla auto
|
||||||
@@ -31,34 +31,34 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin, StemFin in {
|
|||||||
|
|
||||||
ComplVS v s = insertExtrapos (SOFT_BIND ++ "," ++ etta_Conj ++ s.s) (predSV v) ;
|
ComplVS v s = insertExtrapos (SOFT_BIND ++ "," ++ etta_Conj ++ s.s) (predSV v) ;
|
||||||
ComplVQ v q = insertExtrapos (SOFT_BIND ++ "," ++ q.s) (predSV v) ;
|
ComplVQ v q = insertExtrapos (SOFT_BIND ++ "," ++ q.s) (predSV v) ;
|
||||||
ComplVA v ap =
|
ComplVA v ap =
|
||||||
insertObj
|
insertObj
|
||||||
(\\_,b,agr =>
|
(\\_,b,agr =>
|
||||||
let n = (complNumAgr agr) in
|
let n = (complNumAgr agr) in
|
||||||
ap.s ! False ! (NCase n (npform2case n v.c2.c))) --- v.cs.s ignored
|
ap.s ! False ! (NCase n (npform2case n v.c2.c))) --- v.cs.s ignored
|
||||||
(predSV v) ;
|
(predSV v) ;
|
||||||
|
|
||||||
SlashV2S v s =
|
SlashV2S v s =
|
||||||
insertExtrapos (SOFT_BIND ++ "," ++ etta_Conj ++ s.s) (predSV v) ** {c2 = v.c2} ;
|
insertExtrapos (SOFT_BIND ++ "," ++ etta_Conj ++ s.s) (predSV v) ** {c2 = v.c2} ;
|
||||||
SlashV2Q v q =
|
SlashV2Q v q =
|
||||||
insertExtrapos (SOFT_BIND ++ "," ++ q.s) (predSV v) ** {c2 = v.c2} ;
|
insertExtrapos (SOFT_BIND ++ "," ++ q.s) (predSV v) ** {c2 = v.c2} ;
|
||||||
SlashV2V v vp =
|
SlashV2V v vp =
|
||||||
insertObj (\\_,b,a => infVP v.sc b a vp (vvtype2infform v.vi)) (predSV v) ** {c2 = v.c2} ;
|
insertObj (\\_,b,a => infVP v.sc b a vp (vvtype2infform v.vi)) (predSV v) ** {c2 = v.c2} ;
|
||||||
SlashV2A v ap =
|
SlashV2A v ap =
|
||||||
insertObj
|
insertObj
|
||||||
(\\fin,b,_ =>
|
(\\fin,b,_ =>
|
||||||
ap.s ! False ! (NCase Sg (npform2case Sg v.c3.c))) ----agr to obj
|
ap.s ! False ! (NCase Sg (npform2case Sg v.c3.c))) ----agr to obj
|
||||||
(predSV v) ** {c2 = v.c2} ;
|
(predSV v) ** {c2 = v.c2} ;
|
||||||
|
|
||||||
ComplSlash vp np = insertObjPre np.isNeg (\fin,b,_ -> appCompl fin b vp.c2 np) vp ;
|
ComplSlash vp np = insertObjPre np.isNeg (\fin,b,_ -> appCompl fin b vp.c2 np) vp ;
|
||||||
|
|
||||||
UseComp comp =
|
UseComp comp =
|
||||||
insertObj (\\_,_ => comp.s) (predV vpVerbOlla) ;
|
insertObj (\\_,_ => comp.s) (predV vpVerbOlla) ;
|
||||||
|
|
||||||
UseCopula = predV vpVerbOlla ;
|
UseCopula = predV vpVerbOlla ;
|
||||||
|
|
||||||
SlashVV v vp = {
|
SlashVV v vp = {
|
||||||
s = v ;
|
s = v ;
|
||||||
s2 = \\_,b,a => infVP v.sc b a vp (vvtype2infform v.vi) ;
|
s2 = \\_,b,a => infVP v.sc b a vp (vvtype2infform v.vi) ;
|
||||||
adv = \\_ => v.p ;
|
adv = \\_ => v.p ;
|
||||||
vptyp = vp.vptyp ;
|
vptyp = vp.vptyp ;
|
||||||
@@ -66,10 +66,10 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin, StemFin in {
|
|||||||
c2 = vp.c2
|
c2 = vp.c2
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
insertObj
|
insertObj
|
||||||
(\\_,b,a => infVP v.sc b a vp v.vi)
|
(\\_,b,a => infVP v.sc b a vp v.vi)
|
||||||
(predSV {s = v.s ;
|
(predSV {s = v.s ;
|
||||||
sc = case vp.s.sc of {
|
sc = case vp.s.sc of {
|
||||||
NPCase Nom => v.sc ; -- minun täytyy pestä auto
|
NPCase Nom => v.sc ; -- minun täytyy pestä auto
|
||||||
c => c -- minulla täytyy olla auto
|
c => c -- minulla täytyy olla auto
|
||||||
@@ -97,14 +97,14 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin, StemFin in {
|
|||||||
{- ----
|
{- ----
|
||||||
s = \\vif,ant,pol,agr => case vif of {
|
s = \\vif,ant,pol,agr => case vif of {
|
||||||
VIFin t => vp.s ! VIPass t ! ant ! pol ! agr ;
|
VIFin t => vp.s ! VIPass t ! ant ! pol ! agr ;
|
||||||
_ => vp.s ! vif ! ant ! pol ! agr
|
_ => vp.s ! vif ! ant ! pol ! agr
|
||||||
} ;
|
} ;
|
||||||
sc = v.c2.c ; -- minut valitaan ; minua rakastetaan ; minulle kuiskataan
|
sc = v.c2.c ; -- minut valitaan ; minua rakastetaan ; minulle kuiskataan
|
||||||
} ; ---- talon valitaan: should be marked like inf.
|
} ; ---- talon valitaan: should be marked like inf.
|
||||||
-}
|
-}
|
||||||
|
|
||||||
CompAP ap = {
|
CompAP ap = {
|
||||||
s = \\agr =>
|
s = \\agr =>
|
||||||
let
|
let
|
||||||
n = complNumAgr agr ;
|
n = complNumAgr agr ;
|
||||||
c = case n of {
|
c = case n of {
|
||||||
@@ -114,7 +114,7 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin, StemFin in {
|
|||||||
in ap.s ! False ! (NCase n c)
|
in ap.s ! False ! (NCase n c)
|
||||||
} ;
|
} ;
|
||||||
CompCN cn = {
|
CompCN cn = {
|
||||||
s = \\agr =>
|
s = \\agr =>
|
||||||
let
|
let
|
||||||
n = complNumAgr agr ;
|
n = complNumAgr agr ;
|
||||||
c = case n of {
|
c = case n of {
|
||||||
@@ -133,17 +133,17 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin, StemFin in {
|
|||||||
--2 The object case
|
--2 The object case
|
||||||
--
|
--
|
||||||
-- The rules involved are ComplV2 and ComplVV above.
|
-- The rules involved are ComplV2 and ComplVV above.
|
||||||
-- The work is done jointly in ResFin.infVP and appCompl.
|
-- The work is done jointly in ResFin.infVP and appCompl.
|
||||||
-- Cases to test: l -table (to see negated forms)
|
-- Cases to test: l -table (to see negated forms)
|
||||||
--```
|
--```
|
||||||
-- minun täytyy ostaa auto
|
-- minun täytyy ostaa auto
|
||||||
-- PredVP (UsePron i_Pron) (ComplVV must_VV
|
-- PredVP (UsePron i_Pron) (ComplVV must_VV
|
||||||
-- (ComplV2 buy_V2 (DetCN (DetSg (SgQuant DefArt) NoOrd) (UseN car_N))))
|
-- (ComplV2 buy_V2 (DetCN (DetSg (SgQuant DefArt) NoOrd) (UseN car_N))))
|
||||||
-- minä tahdon ostaa auton
|
-- minä tahdon ostaa auton
|
||||||
-- PredVP (UsePron i_Pron) (ComplVV want_VV
|
-- PredVP (UsePron i_Pron) (ComplVV want_VV
|
||||||
-- (ComplV2 buy_V2 (DetCN (DetSg (SgQuant DefArt) NoOrd) (UseN car_N))))
|
-- (ComplV2 buy_V2 (DetCN (DetSg (SgQuant DefArt) NoOrd) (UseN car_N))))
|
||||||
-- minulla täytyy olla auto
|
-- minulla täytyy olla auto
|
||||||
-- PredVP (UsePron i_Pron) (ComplVV must_VV
|
-- PredVP (UsePron i_Pron) (ComplVV must_VV
|
||||||
-- (ComplV2 have_V2 (DetCN (DetSg (SgQuant DefArt) NoOrd) (UseN car_N))))
|
-- (ComplV2 have_V2 (DetCN (DetSg (SgQuant DefArt) NoOrd) (UseN car_N))))
|
||||||
--```
|
--```
|
||||||
-- Unfortunately, there is no nice way to say "I want to have a car".
|
-- Unfortunately, there is no nice way to say "I want to have a car".
|
||||||
|
|||||||
Reference in New Issue
Block a user