diff --git a/examples/stoneage/StoneageFin.gf b/examples/stoneage/StoneageFin.gf index f574a5970..22a5c3180 100644 --- a/examples/stoneage/StoneageFin.gf +++ b/examples/stoneage/StoneageFin.gf @@ -79,7 +79,7 @@ lin Swell = PresV swell_V ; Burn = PresV burn_V ; - Give = PresV3 (dirV3 give_V "to") ; +---- Give = PresV3 (dirV3 give_V "to") ; -- Say = ; diff --git a/lib/resource/finnish/BasicFin.gf b/lib/resource/finnish/BasicFin.gf index 6a0db6fda..69f01a0d6 100644 --- a/lib/resource/finnish/BasicFin.gf +++ b/lib/resource/finnish/BasicFin.gf @@ -10,18 +10,18 @@ flags lin airplane_N = regN "lentokone" ; ----- answer_V2S = mkV2S (regV "answer") "to" ; + answer_V2S = mkV2S (regV "vastata") allative [] [] ; apartment_N = regN "asunto" ; apple_N = regN "omena" ; --- omenia, not omenoita art_N = regN "taide" ; ----- ask_V2Q = mkV2Q (regV "ask") [] ; + ask_V2Q = mkV2Q (regV "kysyä") ablative [] [] ; baby_N = regN "vauva" ; bad_ADeg = mkADeg (regN "paha") "pahempi" "pahin" ; bank_N = regN "pankki" ; beautiful_ADeg = mkADeg (regN "kaunis") "kauniimpi" "kaunein" ; ----- become_VA = mkVA (irregV "become" "became" "become") ; + become_VA = mkVA (regV "tulla") translative ; beer_N = regN "olut" ; ----- beg_V2V = mkV2V (regDuplV "beg") [] "to" ; + beg_V2V = mkV2V (reg2V "pyytää" "pyysi") partitive inf_illative ; big_ADeg = mkADeg (reg2N "suuri" "suuria") "suurempi" "suurin" ; bike_N = nLukko "polkupyörä" ; --- for correct vowel harmony bird_N = regN "lintu" ; @@ -37,7 +37,7 @@ lin broad_ADeg = mkADeg (regN "leveä") "leveämpi" "levein" ; brother_N2 = genN2 (reg3N "veli" "veljen" "veljiä") ; ---- errors in Pl brown_ADeg = mkADeg (regN "ruskea") "ruskeampi" "ruskein" ; ---3 butter_N = reg3N "voi" "voin" "voita" ; + butter_N = reg3N "voi" "voin" "voita" ; ---- errors in Part buy_V2 = dirV2 (regV "ostaa") ; camera_N = regN "kamera" ; cap_N = regN "lakki" ; @@ -63,18 +63,18 @@ lin cow_N = regN "lehmä" ; die_V = regV "kuolla" ; dirty_ADeg = mkADeg (regN "likainen") "likaisempi" "likaisin" ; ----- distance_N3 = mkN3 (regN "distance") "from" "to" ; ---3 doctor_N = reg3N "tohtori" "tohtorin" "tohtoreita" ; + distance_N3 = mkN3 (regN "etäisyys") elative illative ; + doctor_N = reg2N "tohtori" "tohtoreita" ; dog_N = regN "koira" ; door_N = reg2N "ovi" "ovia" ; drink_V2 = dirV2 (regV "juoda") ; ----- easy_A2V = mkA2V (regA "easy") "for" ; + easy_A2V = mkA2V (regN (mkA "helppo")) allative ; eat_V2 = dirV2 (regV "syödä") ; empty_ADeg = mkADeg (regN "tyhjä") "tyhjempi" "tyhjin" ; enemy_N = regN "vihollinen" ; factory_N = regN "tehdas" ; father_N2 = genN2 (regN "isä") ; ----- fear_VS = mkVS (reg2V "pelätä" "pelkäsi") ; + fear_VS = mkVS (reg2V "pelätä" "pelkäsi") ; find_V2 = dirV2 (reg2V "löytää" "löysi") ; fish_N = regN "kala" ; floor_N = reg2N "lattia" "lattioita" ; @@ -82,7 +82,7 @@ lin fridge_N = regN "jääkaappi" ; friend_N = regN "ystävä" ; fruit_N = regN "hedelmä" ; ----- fun_AV = mkAV (regA "fun") ; + fun_AV = mkAV (mkA (regN "hauska")) ; garden_N = regN "puutarha" ; girl_N = regN "tyttö" ; glove_N = regN "käsine" ; @@ -96,7 +96,7 @@ lin have_V2 = dirV2 (regV "omistaa") ; ---- olla hear_V2 = dirV2 (regV "kuulla") ; hill_N = regN "kukkula" ; ----- hope_VS = mkVS (regV "toivoa") ; + hope_VS = mkVS (regV "toivoa") ; horse_N = regN "hevonen" ; hot_ADeg = mkADeg (regN "kuuma") "kuumempi" "kuumin" ; house_N = regN "talo" ; @@ -134,8 +134,8 @@ lin oil_N = regN "öljy" ; old_ADeg = mkADeg (regN "vanha") "vanhempi" "vanhin" ; open_V2 = dirV2 (regV "avata") ; ----- paint_V2A = mkV2A (regV "maalata") [] ; ---3 paper_N = reg3N "paperi" "paperin" "papereita" ; + paint_V2A = mkV2A (regV "maalata") translative ; + paper_N = reg2N "paperi" "papereita" ; peace_N = regN "rauha" ; pen_N = regN "kynä" ; planet_N = regN "planeetta" ; @@ -143,29 +143,29 @@ lin play_V2 = dirV2 (regV "pelata") ; --- leikkiä, soittaa policeman_N = regN "poliisi" ; priest_N = regN "pappi" ; ----- probable_AS = mkAS (mkA (nNainen "todennäköistä")) ; --- for vowel harmony ----- queen_N = regN "kuningatar" ; ---3 radio_N = reg3N "radio" "radion" "radioita" ; ----- rain_V0 = mkV0 (vHuoltaa "sataa" "sadan" "satoi" "sadoin") ; + probable_AS = mkAS (mkA (nNainen "todennäköistä")) ; --- for vowel harmony + queen_N = regN "kuningatar" ; + radio_N = reg3N "radio" "radioita" ; + rain_V0 = mkV0 (vHuoltaa "sataa" "sadan" "satoi" "sadoin") ; read_V2 = dirV2 (regV "lukea") ; red_ADeg = regADeg "punainen" ; religion_N = regN "uskonto" ; restaurant_N = regN "ravintola" ; river_N = nArpi "joki" ; ----- rock_N = regN "kallio" ; + rock_N = regN "kallio" "kallioita" ; roof_N = regN "katto" ; rubber_N = regN "kumi" ; run_V = reg2V "juosta" "juoksi" ; ----- say_VS = mkVS (regV "sanoa") ; + say_VS = mkVS (regV "sanoa") ; school_N = regN "koulu" ; science_N = regN "tiede" ; - sea_N = reg2N "meri" "meriä" ; + sea_N = reg2N "meri" "meriä" ; ---- *merea seek_V2 = dirV2 (regV "etsiä") ; see_V2 = dirV2 ( mkV "nähdä" "näkee" "näen" "näkevät" "nähkää" "nähdään" "näki" "näin" "näkisi" "nähnyt" "nähty" "nähdyn") ; ----- sell_V3 = dirV3 (regV "myydä") allative ; ----- send_V3 = dirV3 (regV "lähettää") allative ; + sell_V3 = dirV3 (regV "myydä") allative ; + send_V3 = dirV3 (regV "lähettää") allative ; sheep_N = regN "lammas" ; ship_N = regN "laiva" ; shirt_N = regN "paita" ; @@ -189,10 +189,10 @@ lin switch8off_V2 = dirV2 (regV "sammuttaa") ; --- switch8on_V2 = dirV2 (regV "sytyttää") ; --- table_N = regN "pöytä" ; ----- talk_V3 = mkV3 (regV "puhua") allative elative ; + talk_V3 = mkV3 (regV "puhua") allative elative ; teacher_N = regN "opettaja" ; teach_V2 = dirV2 (regV "opettaa") ; ---3 television_N = reg2N "televisio" "telievisioita" ; + television_N = reg2N "televisio" "telievisioita" ; thick_ADeg = regADeg "paksu" ; thin_ADeg = regADeg "ohut" ; train_N = regN "juna" ; @@ -218,7 +218,7 @@ lin wine_N = regN "viini" ; win_V2 = dirV2 (regV "voittaa") ; woman_N = regN "nainen" ; ---3 wonder_VQ = mkVQ (regV "ihmetellä") ; + wonder_VQ = mkVQ (regV "ihmetellä") ; wood_N = regN "puu" ; write_V2 = dirV2 (regV "kirjoittaa") ; yellow_ADeg = regADeg "keltainen" ; @@ -231,7 +231,7 @@ lin now_Adv = mkAdv "nyt" ; already_Adv = mkAdv "jo" ; song_N = regN "laulu" ; ----- add_V3 = dirV3 (regV "lisätä") illative ; + add_V3 = dirV3 (regV "lisätä") illative ; number_N = reg2N "numero" "numeroita" ; put_V2 = dirV2 (regV "panna") ; stop_V = regV "pysähtyä" ; diff --git a/lib/resource/finnish/MorphoFin.gf b/lib/resource/finnish/MorphoFin.gf index b786db6cb..c01bc5e27 100644 --- a/lib/resource/finnish/MorphoFin.gf +++ b/lib/resource/finnish/MorphoFin.gf @@ -196,6 +196,42 @@ oper (perunoi + ("t" + a)) (perunoi + "hin") ; + sTohtori : Str -> CommonNoun = \tohtoria -> + let + a = last tohtoria ; + tohtori = init tohtoria ; + tohtorei = init tohtori + "ei" ; + in + mkSubst a + tohtori + tohtori + tohtori + tohtoria + (tohtori + "in") + tohtorei + tohtorei + (tohtorei + "den") + (tohtorei + "t" + a) + (tohtorei + "hin") ; + + sRadio : Str -> CommonNoun = \radio -> + let + o = last radio ; + a = getHarmony o ; + radioi = radio + "i" ; + in + mkSubst a + radio + radio + radio + (radio + "t" + a) + (radio + o + "n") + radioi + radioi + (radioi + "den") + (radioi + "t" + a) + (radioi + "hin") ; + -- Surpraisingly, making the test for the partitive, this not only covers -- "rae", "perhe", "savuke", but also "rengas", "lyhyt" (except $Sg Illat$), etc. @@ -220,21 +256,21 @@ oper (rakei + "siin") ; sSusi : (_,_,_ : Str) -> CommonNoun = \susi,suden,sutena -> - let { + let a = Predef.dp 1 sutena ; sude = Predef.tk 1 suden ; - sute = Predef.tk 2 sutena - } + sute = Predef.tk 2 sutena ; + sutt = Predef.tk 1 sute + "t" in mkSubst a susi sude sute - (Predef.tk 1 sute + ("t" + a)) + (sutt + a) (sute + "en") susi susi - (susi + "en") + (sutt + "en") --- var susi + "en" bad with suuri (susi + a) (susi + "in") ; @@ -898,6 +934,7 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn -> vHuoltaa : (_,_,_,_ : Str) -> Verb = \ottaa,otan,otti,otin -> let { a = Predef.dp 1 ottaa ; + aa = a + a ; u = case a of {"a" => "u" ; _ => "y"} ; ota = Predef.tk 1 otan ; otta = Predef.tk 1 ottaa ; @@ -907,9 +944,9 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn -> ottaa ottaa otan - (otta + (("v" + a) + "t")) - (otta + (("k" + a) + a)) - (ote + ((("t" + a) + a) + "n")) + (otta + "v" + a + "t") + (otta + "k" + aa) + (ote + "t" + aa + "n") otti otin (otta + "isi") @@ -967,9 +1004,11 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn -> vJuosta : (_,_,_,_ : Str) -> Verb = \juosta,juoksen,juossut,juostu -> let a = Predef.dp 1 juosta ; + t = last (init juosta) ; juokse = Predef.tk 1 juoksen ; juoksi = Predef.tk 2 juoksen + "i" ; - juos = Predef.tk 2 juosta + juos = Predef.tk 2 juosta ; + juostun = ifTok Str t "t" (juostu + "n") (init juossut + "n") ; in mkVerb juosta @@ -983,7 +1022,7 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn -> (juoksi + "si") juossut juostu - (init juossut + "n") ; + juostun ; -- For "juoda", "syödä", "viedä", "naida", "saada". diff --git a/lib/resource/finnish/ParadigmsFin.gf b/lib/resource/finnish/ParadigmsFin.gf index 1c8e0be23..d2bc21667 100644 --- a/lib/resource/finnish/ParadigmsFin.gf +++ b/lib/resource/finnish/ParadigmsFin.gf @@ -50,6 +50,10 @@ oper ablative : Case ; allative : Case ; + PPosition : Type ; + PPrep : Case -> Str -> PPosition ; + PPostp : Case -> Str -> PPosition ; + --2 Nouns -- Worst case: give ten forms and the semantic gender. @@ -65,8 +69,9 @@ oper regN : (talo : Str) -> N ; --- The almost-regular heuristic analyses three forms. +-- The almost-regular heuristics analyse two or three forms. + reg2N : (savi,savia : Str) -> N ; reg3N : (vesi,veden,vesiä : Str) -> N ; -- Nouns with partitive "a"/"ä" are a large group. @@ -195,13 +200,13 @@ oper --2 Verbs -- -- The fragment only has present tense so far, but in all persons. --- The worst case needs five forms, as shown in the following. +-- The worst case needs twelve forms, as shown in the following. mkV : (tulla,tulee,tulen,tulevat,tulkaa,tullaan, tuli,tulin,tulisi,tullut,tultu,tullun : Str) -> V ; regV : (soutaa : Str) -> V ; - reg3V : (soutaa,soudan,soudin : Str) -> V ; - + reg2V : (soutaa,souti : Str) -> V ; + reg3V : (soutaa,soudan,souti : Str) -> V ; -- A simple special case is the one with just one stem and no grade alternation. -- It covers e.g. "sanoa", "valua", "kysyä". @@ -235,7 +240,7 @@ oper -- Two-place verbs need a case, and can have a pre- or postposition. -- At least one of the latter is empty, $[]$. - mkV2 : V -> Case -> (prep,postp : Str) -> V2 ; + mkV2 : V -> PPostp -> V2 ; -- If both are empty, the following special function can be used. @@ -246,6 +251,36 @@ oper dirV2 : V -> V2 ; +--3 Three-place verbs +-- +-- Three-place (ditransitive) verbs need two prepositions, of which +-- the first one or both can be absent. + + mkV3 : V -> PPosition -> PPosition -> V3 ; -- speak, with, about + dirV3 : V -> PPosition -> V3 ; -- give,_,to + dirdirV3 : V -> V3 ; -- acc, allat + +--3 Other complement patterns +-- +-- Verbs and adjectives can take complements such as sentences, +-- questions, verb phrases, and adjectives. + + mkV0 : V -> V0 ; + mkVS : V -> VS ; + mkV2S : V2 -> V2S ; + mkVV : V -> VV ; + mkV2V : V2 -> V2V ; + mkVA : V -> Case -> VA ; + mkV2A : V2 -> Case -> V2A ; + mkVQ : V -> VQ ; + mkV2Q : V2 -> V2Q ; + + mkAS : A -> AS ; + mkA2S : A -> Str -> A2S ; + mkAV : A -> AV ; + mkA2V : A -> Str -> A2V ; + + -- The definitions should not bother the user of the API. So they are -- hidden from the document. --. @@ -269,6 +304,12 @@ oper ablative = Ablat ; allative = Allat ; + PPosition : Type = {c : Case ; s1,s2 : Str} ; + PPrep : Case -> Str -> PPosition = + \c,p -> {c = c ; s1 = p ; s2 = []} ; + PPostp : Case -> Str -> PPosition = + \c,p -> {c = c ; s1 = [] ; s2 = p} ; + mkN = \a,b,c,d,e,f,g,h,i,j,k -> mkNoun a b c d e f g h i j ** {g = k ; lock_N = <>} ; @@ -314,12 +355,17 @@ reg2N : (savi,savia : Str) -> N = \savi,savia -> savit = regN savi ; ia = Predef.dp 2 savia ; i = init ia ; - a = last ia + a = last ia ; + o = last savi ; + savin = weakGrade savi + "n" ; in - case ia of { - "ia" => sArpi savi ; - "iä" => sSylki savi ; - "ta" | "tä" => sPeruna savi ; + case of { + <"i","ia"> => sArpi savi ; + <"i","iä"> => sSylki savi ; + <"i","ta"> | <"i","tä"> => sTohtori (savi + a) ; + <"o","ta"> | <"ö","tä"> => sRadio savi ; + <"a","ta"> | <"ä","tä"> => sPeruna savi ; + <"a","ia"> | <"a","ja"> => sKukko savi savin savia ; _ => savit } ** {g = NonHuman ; lock_N = <>} ; @@ -336,6 +382,7 @@ reg3N = \vesi,veden,vesi ifTok CommonNoun (Predef.dp 3 veden) "den" (sRakkaus vesi) (sTilaus vesi (veden + a)) ; + "li" | "ni" | "ri" => sSusi vesi veden (Predef.tk 1 vesi + ("en" + a)) ; "si" => sSusi vesi veden (Predef.tk 2 vesi + ("ten" + a)) ; _ => case i of { "a" | "o" | "u" | "y" | "ä" | "ö" => sKukko vesi veden vesiä ; @@ -419,14 +466,17 @@ reg2V : (soutaa,souti : Str) -> V = \soutaa,souti -> juo = Predef.tk 2 soutaa ; o = Predef.dp 1 juo ; u = ifTok Str (last soutaa) "a" "u" "y" ; - taa = Predef.dp 3 soutaa + aa = Predef.dp 2 soutaa ; + taa = Predef.dp 3 soutaa ; + ta = Predef.tk 1 taa ; in - case taa of { - "taa" | "tää" => vHuoltaa soutaa soudan souti soudin ; - "ata" | "ätä" => vPalkata soutaa souti ; - "sta" | "stä" => vJuosta soutaa souden (juo + o+u+"t") (juo + "t"+u) ; + case aa of { + "aa" | "ää" => vHuoltaa soutaa soudan souti soudin ; + _ => case ta of { + "at" | "ät" => vPalkata soutaa souti ; + "st" => vJuosta soutaa souden (juo + o+u+"t") (juo + "t"+u) ; _ => soudat - } ** {lock_V = <>} ; + }} ** {lock_V = <>} ; reg3V soutaa soudan souti = let @@ -458,10 +508,41 @@ reg3V soutaa soudan souti = vHuoltaa : (_,_,_,_ : Str) -> Verb = \ottaa,otan,otti,otin -> SyntaxFin.vHuoltaa ottaa otan otti otin ** {lock_V = <>} ; - mkV2 = \v,c,p,o -> v ** {s3 = p ; s4 = o ; c = CCase c ; lock_V2 = <>} ; - caseV2 = \v,c -> mkV2 v c [] [] ; +-- mkV2 = \v,c,p,o -> v ** {s3 = p ; s4 = o ; c = CCase c ; lock_V2 = <>} ; +-- caseV2 = \v,c -> mkV2 v c [] [] ; dirV2 v = mkTransVerbDir v ** {lock_V2 = <>} ; mkAdv : Str -> Adv = \s -> {s = s ; lock_Adv = <>} ; + + +-- mkV3 : V -> PPosition -> PPosition -> V3 ; -- speak, with, about +-- dirV3 : V -> PPosition -> V3 ; -- give,_,to +-- dirdirV3 : V -> -> V3 ; -- acc, allat + + mkV0 v = v ** {lock_V0 = <>} ; + mkVS v = v ** {lock_VS = <>} ; + mkV2S v = v ** {lock_V2S = <>} ; +-- mkVV v = v ** {lock_VV = <>} ; + mkV2V v = v ** {lock_V2V = <>} ; +-- mkVA v c = v ** {c = c ; lock_V0 = <>} ; +-- mkV2A v c = v ** {c2 = c ; lock_V0 = <>} ; + mkVQ v = v ** {lock_VQ = <>} ; + mkV2Q v = v ** {lock_V2Q = <>} ; + + mkAS v = v ** {lock_AS = <>} ; +-- mkA2S v c = v ** {c = c ; lock_AS = <>} ; + mkAV v = v ** {lock_AV = <>} ; +-- mkA2V v c = v ** {c = c ; lock_AS = <>} ; + +-- inf_illative +-- infinitive + + +-- V3 = TransVerb ** {s5, s6 : Str ; c2 : ComplCase} ; +-- Verb ** {s3, s4 : Str ; c : ComplCase} ; +-- mkN3 n c1 c2 +-- {c : NPForm} ; +-- N3 = Function ** {c2 : NPForm} ; + } ; diff --git a/lib/resource/finnish/RulesFin.gf b/lib/resource/finnish/RulesFin.gf index ad6dc650e..4051aa972 100644 --- a/lib/resource/finnish/RulesFin.gf +++ b/lib/resource/finnish/RulesFin.gf @@ -42,7 +42,7 @@ lin DefNumNP = nounPhraseNum True ; DetNP = detNounPhrase ; ----- NDetNP = numDetNounPhrase ; + NDetNP = numDetNounPhrase ; ---- NDetNum = justNumDetNounPhrase ; MassNP = partNounPhrase singular ; diff --git a/lib/resource/finnish/SwadeshLexFin.gf b/lib/resource/finnish/SwadeshLexFin.gf index 1e7250ad4..293563a85 100644 --- a/lib/resource/finnish/SwadeshLexFin.gf +++ b/lib/resource/finnish/SwadeshLexFin.gf @@ -23,7 +23,7 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin this_Det = this_Det ; that_Det = that_Det ; - all_NDet = all_NDet ; + all_NDet = ResourceFin.all_NDet ; many_Det = many_Det ; some_Det = some_Det ; few_Det = mkDeterminer Pl (\\c => (sTalo "muutama").s ! NCase Pl c) ; @@ -99,7 +99,7 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin -- Nouns - animal_N = regN "eläin" ; + animal_N = regN "eläin" ; ---- *eläkimet ashes_N = regN "tuhka" ; back_N = regN "selkä" ; bark_N = regN "kaarna" ; @@ -118,8 +118,8 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin egg_N = regN "muna" ; eye_N = regN "silmä" ; fat_N = regN "rasva" ; - father_N = UseN2 father_N2 ; - feather_N = reg3N "höyhen" "höyhenen" "höyheniä" ; ----- + father_N = regN "isä" ; + feather_N = regN "höyhen" ; ---- *höyhemen fingernail_N = reg3N "kynsi" "kynnen" "kynsiä" ; fire_N = reg2N "tuli" "tulia" ; fish_N = fish_N ; @@ -146,7 +146,7 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin man_N = man_N ; meat_N = meat_N ; moon_N = moon_N ; - mother_N = UseN2 mother_N2 ; + mother_N = regN "äiti" ; mountain_N = mountain_N ; mouth_N = regN "suu" ; name_N = reg2N "nimi" "nimiä" ; @@ -162,9 +162,9 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin salt_N = regN "suola" ; sand_N = regN "hiekka" ; sea_N = sea_N ; - seed_N = regN "seed" ; - skin_N = regN "skin" ; - sky_N = regN "sky" ; --- taivaan *taipaan + seed_N = regN "siemen" ; + skin_N = regN "nahka" ; + sky_N = regN "taivas" ; --- taivaan *taipaan smoke_N = regN "savu" ; snake_N = snake_N ; snow_N = reg3N "lumi" "lumen" "lumia" ; --- lunta *lumea @@ -173,7 +173,7 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin stone_N = stone_N ; sun_N = sun_N ; tail_N = regN "häntä" ; - tongue_N = regN "kieli" ; + tongue_N = reg2N "kieli" "kieliä" ; tooth_N = regN "hammas" ; tree_N = tree_N ; water_N = water_N ; @@ -182,7 +182,7 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin wing_N = reg2N "siipi" "siipiä" ; woman_N = woman_N ; worm_N = regN "mato" ; - year_N = reg2N "vuosi" "vuosia" ; + year_N = reg3N "vuosi" "vuoden" "vuosia" ; -- Verbs @@ -192,16 +192,16 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin burn_V = regV "palaa" ; come_V = BasicFin.come_V ; count_V = regV "laskea" ; - cut_V = regV "leikata" ; + cut_V = reg3V "leikata" "leikkaan" "leikkasi" ; die_V = regV "kuolla"; - dig_V = regV "kaivata" ; + dig_V = regV "kaivaa" ; drink_V = UseV2 drink_V2 ; eat_V = UseV2 eat_V2 ; - fall_V = regV "pudota" ; - fear_V = regV "fear" ; + fall_V = reg3V "pudota" "putoan" "putosi" ; ---- *pudoa + fear_V = reg3V "pelätä" "pelkään" "pelkäsi" ; fight_V = regV "taistella" ; float_V = regV "kellua" ; - flow_V = regV "virrata" ; + flow_V = reg3V "virrata" "virtaan" "virtasi" ; fly_V = regV "lentää" ; freeze_V = regV "jäätyä" ; give_V = regV "antaa" ; @@ -212,7 +212,7 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin kill_V = regV "tappaa" ; know_V =reg2V "tietää" "tiesin" ; laugh_V = reg3V "nauraa" "nauran" "nauroi" ; - lie_V = regV "maata" ; + lie_V = reg3V "maata" "makaan" "makasi" ; live_V = live_V ; play_V = UseV2 play_V2 ; pull_V = regV "vetää" ; @@ -225,7 +225,7 @@ concrete SwadeshLexFin of SwadeshLex = CategoriesFin sing_V = regV "laulaa" ; sit_V = regV "istua" ; sleep_V = sleep_V ; - smell_V = regV "haista" ; + smell_V = reg2V "haistaa" "haistoi" ; spit_V = regV "sylkeä" ; split_V = reg2V "halkaista" "halkaisi" ; squeeze_V = regV "puristaa" ; diff --git a/lib/resource/finnish/SyntaxFin.gf b/lib/resource/finnish/SyntaxFin.gf index f3e658cae..9a2138051 100644 --- a/lib/resource/finnish/SyntaxFin.gf +++ b/lib/resource/finnish/SyntaxFin.gf @@ -221,10 +221,17 @@ oper \isDef,n,mies -> case n.isNum of { True => { - s = table { - NPCase Nom => n.s ! NPCase Nom ++ mies.s ! False ! Sg ! Part ; - c => n.s ! c ++ mies.s ! False ! Sg ! npForm2Case Sg c + s = case n.n of { + Sg => table { + NPCase Nom => n.s ! NPCase Nom ++ mies.s ! False ! Sg ! Nom ; + c => n.s ! c ++ mies.s ! False ! Sg ! npForm2Case Sg c } ; + _ => table { + NPAccGen => n.s ! NPCase Nom ++ mies.s ! False ! Sg ! Part ; + NPCase Nom => n.s ! NPCase Nom ++ mies.s ! False ! Sg ! Part ; + c => n.s ! c ++ mies.s ! False ! Sg ! npForm2Case Sg c + } + } ; n = if_then_else Number isDef Pl Sg ; p = NP3 } ;