From 6d2484f91c1f0bb4650c60045876c5ac42e969dd Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 13 Sep 2011 08:41:16 +0000 Subject: [PATCH] more smartness in ParadigmsFin enabled by the efficient compiler --- lib/src/finnish/LexiconFin.gf | 2 +- lib/src/finnish/MorphoFin.gf | 2 +- lib/src/finnish/ParadigmsFin.gf | 29 +++++++++++++++++++++-------- 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/lib/src/finnish/LexiconFin.gf b/lib/src/finnish/LexiconFin.gf index 6f5973825..566ba0c71 100644 --- a/lib/src/finnish/LexiconFin.gf +++ b/lib/src/finnish/LexiconFin.gf @@ -21,7 +21,7 @@ lin beer_N = mkN "olut" "oluita" ; beg_V2V = mkV2V (mk2V "pyytää" "pyysi") (casePrep partitive) ; big_A = mkA (mkN "suuri" "suuria") "suurempi" "suurin" ; - bike_N = mkN "polkupyörä" ; --- for correct vowel harmony + bike_N = mkN "polku" (mkN "pyörä") ; bird_N = mkN "lintu" ; black_A = mkA (mkN "musta") "mustempi" "mustin" ; blue_A = mkA (mkN "sininen") "sinisempi" "sinisin" ; diff --git a/lib/src/finnish/MorphoFin.gf b/lib/src/finnish/MorphoFin.gf index 2445125c1..a67b65cf7 100644 --- a/lib/src/finnish/MorphoFin.gf +++ b/lib/src/finnish/MorphoFin.gf @@ -10,7 +10,7 @@ resource MorphoFin = ResFin ** open Prelude in { - flags optimize=all ; + flags optimize=noexpand ; oper diff --git a/lib/src/finnish/ParadigmsFin.gf b/lib/src/finnish/ParadigmsFin.gf index 7c859b43d..c652a9a7a 100644 --- a/lib/src/finnish/ParadigmsFin.gf +++ b/lib/src/finnish/ParadigmsFin.gf @@ -105,6 +105,10 @@ oper mkN : NK -> N ; -- noun from DictFin (Kotus) } ; +-- Some nouns are regular except for the singular nominative (e.g. "mies"). + + exceptNomN : N -> Str -> N ; + -- Nouns used as functions need a case, of which the default is -- the genitive. @@ -284,6 +288,14 @@ oper mkN : (sana : NK) -> N = \w -> nForms2N w.s ; } ; + exceptNomN : N -> Str -> N = \noun,nom -> lin N { + s = table { + NCase Sg Nom => nom ; + f => noun.s ! f + } + } ; + + mk1A : Str -> A = \jalo -> aForms2A (nforms2aforms (nForms1 jalo)) ; mkNA : N -> A = \suuri -> aForms2A (nforms2aforms (n2nforms suuri)) ; @@ -328,26 +340,26 @@ oper _ + ("uus" | "yys" | "eus" | "eys") => dLujuus ukko ; _ + "s" => dJalas ukko ; -{- heuristics for 3-syllable nouns ending a/ä +-- {- heuristics for 3-syllable nouns ending a/ä _ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ + "i" + ? + a@("a" | "ä") => - dSilakka ukko (ukko + "n") (ukk + o + "it" + a) ; + dSilakka ukko (ukko + "n") (ukk + o + "it" + a) ; -- pesijä _ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ + ("a" | "e" | "o" | "u" | "y" | "ä" | "ö") + ("l" | "r" | "n") + a@("a" | "ä") => - dSilakka ukko (ukko + "n") (ukk + o + "it" + a) ; + dSilakka ukko (ukko + "n") (ukk + o + "it" + a) ; -- sarana, omena _ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ("n" | "k" | "s") + "k" + a@("a" | "ä") => - dSilakka ukko (uko + "n") (init uko + o + "it" + a) ; + dSilakka ukko (uko + "n") (init uko + o + "it" + a) ; -- silakka _ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + ? + _ + ("a" | "e" | "i" | "o" | "u" | "y" | "ä" | "ö") + - ("n" | "t" | "s") + "t" + a@("a" | "ä") => - dSilakka ukko (uko + "n") (ukk + o + "j" + a) ; + ("n" | "t" | "s") + "t" + a@("a" | "ä") => + dSilakka ukko (uko + "n") (ukk + o + "j" + a) ; -- yhdyntä (but not isäntä) _ + ("a" | "e" | "i" | "o" | "u") + ? + _ + ("a" | "e" | "o" | "u") + ? + "a" => - dSilakka ukko (ukko + "n") (ukk + "ia") ; --} + dSilakka ukko (ukko + "n") (ukk + "ia") ; -- asema, johtaja +-- -} _ + "i" +o@("o"|"ö") => dSilakka ukko (ukko+"n") (ukko+"it"+getHarmony o); _ + "i" + "a" => dSilakka ukko (ukko + "n") (ukk + "oita") ; _ + "i" + "ä" => dSilakka ukko (ukko + "n") (ukk + "öitä") ; @@ -381,6 +393,7 @@ oper <_ + ("ut" | "yt"),_ + ("uita" | "yitä")> => dRae ukko (init ukko + "en") ; <_ + "e", nuk + ("eja" | "ejä")> => dNukke ukko ukon ; + <_ + "s", _ + "ksi" + ?> => dJalas ukko ; <_ + ("l" | "n" | "r" | "s"), _ + ("eja" | "ejä")> => dUnix ukko ; <_, _ + ("a" | "ä")> => ukot ; _ =>