From 31c31b3e69107301a1f5f4394fd8eebb328e952a Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Wed, 13 Apr 2022 10:42:34 +0800 Subject: [PATCH] (Est) Automatic whitespace removal in its own commit,rather than have whitespace changes in content commits --- src/estonian/AdjectiveEst.gf | 10 +- src/estonian/AllEst.gf | 2 +- src/estonian/AllEstAbs.gf | 2 +- src/estonian/CatEst.gf | 13 +- src/estonian/ConstructionEst.gf | 26 +-- src/estonian/DocumentationEst.gf | 2 +- src/estonian/DocumentationEstEng.gf | 2 +- src/estonian/DocumentationEstFunctor.gf | 84 ++++----- src/estonian/ExtraEst.gf | 120 ++++++------ src/estonian/ExtraEstAbs.gf | 2 +- src/estonian/GrammarEst.gf | 6 +- src/estonian/IdiomEst.gf | 20 +- src/estonian/LexiconEst.gf | 4 +- src/estonian/MakeStructuralEst.gf | 6 +- src/estonian/MorphoEst.gf | 118 ++++++------ src/estonian/NounEst.gf | 60 +++--- src/estonian/ParadigmsEst.gf | 220 +++++++++++----------- src/estonian/QuestionEst.gf | 42 ++--- src/estonian/RelativeEst.gf | 12 +- src/estonian/ResEst.gf | 236 ++++++++++++------------ src/estonian/SentenceEst.gf | 16 +- src/estonian/SymbolEst.gf | 2 +- src/estonian/TerminologyEst.gf | 10 +- src/estonian/VerbEst.gf | 62 +++---- 24 files changed, 539 insertions(+), 538 deletions(-) diff --git a/src/estonian/AdjectiveEst.gf b/src/estonian/AdjectiveEst.gf index 85f38ae32..5cf65d4e2 100644 --- a/src/estonian/AdjectiveEst.gf +++ b/src/estonian/AdjectiveEst.gf @@ -16,10 +16,10 @@ concrete AdjectiveEst of Adjective = CatEst ** open ResEst, Prelude in { } ; infl = Regular ; --a.infl } ; - + CAdvAP ad ap np = { s = \\m,af => ad.s ++ ap.s ! m ! af ++ ad.p ++ np.s ! NPCase Nom ; - infl = ap.infl + infl = ap.infl } ; UseComparA a = { s = \\_,nf => a.s ! Compar ! AN nf ; @@ -34,14 +34,14 @@ concrete AdjectiveEst of Adjective = CatEst ** open ResEst, Prelude in { ComplA2 adj np = { - s = \\isMod,af => + s = \\isMod,af => preOrPost isMod (appCompl True Pos adj.c2 np) (adj.s ! Posit ! AN af) ; infl = adj.infl } ; ReflA2 adj = { - s = \\isMod,af => - preOrPost isMod + s = \\isMod,af => + preOrPost isMod (appCompl True Pos adj.c2 (reflPron (agrP3 Sg))) (adj.s ! Posit ! AN af) ; infl = adj.infl } ; diff --git a/src/estonian/AllEst.gf b/src/estonian/AllEst.gf index 90c718107..5be738ace 100644 --- a/src/estonian/AllEst.gf +++ b/src/estonian/AllEst.gf @@ -1,6 +1,6 @@ --# -path=.:../abstract:../common:../prelude:../api -concrete AllEst of AllEstAbs = +concrete AllEst of AllEstAbs = LangEst, -- - [SlashV2VNP,SlashVV, TFut], ---- to speed up linking; to remove spurious parses ExtendEst -- - [ProDrop, ProDropPoss, S_OSV, S_VSO, S_ASV] -- to exclude spurious parses ** diff --git a/src/estonian/AllEstAbs.gf b/src/estonian/AllEstAbs.gf index e66279150..b49593b2a 100644 --- a/src/estonian/AllEstAbs.gf +++ b/src/estonian/AllEstAbs.gf @@ -1,4 +1,4 @@ -abstract AllEstAbs = +abstract AllEstAbs = Lang, ExtraEstAbs ** {} ; diff --git a/src/estonian/CatEst.gf b/src/estonian/CatEst.gf index 57b891d04..6207874fa 100644 --- a/src/estonian/CatEst.gf +++ b/src/estonian/CatEst.gf @@ -21,7 +21,7 @@ concrete CatEst of Cat = CommonX ** open HjkEst, ResEst, Prelude in { QCl = {s : ResEst.Tense => Anteriority => Polarity => Str} ; IP = {s : NPForm => Str ; n : Number} ; - IComp = {s : Agr => Str} ; + IComp = {s : Agr => Str} ; IDet = {s : Case => Str ; n : Number ; isNum : Bool} ; IQuant = {s : Number => Case => Str} ; @@ -33,17 +33,17 @@ concrete CatEst of Cat = CommonX ** open HjkEst, ResEst, Prelude in { -- Verb VP = ResEst.VP ; - VPSlash = ResEst.VP ** {c2 : Compl} ; - Comp = {s : Agr => Str} ; + VPSlash = ResEst.VP ** {c2 : Compl} ; + Comp = {s : Agr => Str} ; -- Adjective -- The $Bool$ in s tells whether usage is modifying (as opposed to -- predicative), e.g. "x on suurem kui y" vs. "y:st suurem arv". --- The $Infl$ in infl tells whether the adjective inflects as a +-- The $Infl$ in infl tells whether the adjective inflects as a -- modifier: e.g. "väsinud mehele" vs. "mees muutus väsinuks". - AP = {s : Bool => NForm => Str ; infl : Infl} ; + AP = {s : Bool => NForm => Str ; infl : Infl} ; -- Noun @@ -55,8 +55,9 @@ concrete CatEst of Cat = CommonX ** open HjkEst, ResEst, Prelude in { sp : Case => Str ; -- se (substantival form) n : Number ; -- Pl (agreement feature for verb) isNum : Bool ; -- True (a numeral is present) - isDef : Bool -- True (verb agrees in Pl, Nom is not Part) --I: actually, can we get rid of this? + isDef : Bool -- True (verb agrees in Pl, Nom is not Part) --I: actually, can we get rid of this? } ; + ---- QuantSg, QuantPl = {s : Case => Str ; isDef : Bool} ; Ord = {s : NForm => Str} ; Predet = {s : Number => NPForm => Str} ; diff --git a/src/estonian/ConstructionEst.gf b/src/estonian/ConstructionEst.gf index ff11e900f..748407435 100644 --- a/src/estonian/ConstructionEst.gf +++ b/src/estonian/ConstructionEst.gf @@ -1,6 +1,6 @@ --# -path=alltenses:.:../abstract:../api:../common -concrete ConstructionEst of Construction = CatEst ** +concrete ConstructionEst of Construction = CatEst ** open SyntaxEst, SymbolicEst, ParadigmsEst, (L = LexiconEst), (E = ExtraEst), (R = ResEst), Prelude in { flags coding=utf8 ; @@ -12,7 +12,7 @@ lin ill_VP = mkVP (mkA "haige") ; ready_VP = mkVP (ParadigmsEst.mkA "valmis") ; - has_age_VP card = + has_age_VP card = let n_years_AdA : AdA = lin AdA (mkUtt (lin NP (mkNP L.year_N))) in mkVP (mkAP n_years_AdA L.old_A) ; @@ -25,7 +25,7 @@ lin -- some more things weather_adjCl ap = mkCl (mkVP (lin AP ap)) ; - + is_right_VP = mkVP have_V2 (lin NP (mkNP (ParadigmsEst.mkN "õigus"))) ; is_wrong_VP = mkVP (ParadigmsEst.mkV "eksima") ; @@ -37,7 +37,7 @@ lin where_go_QCl np = mkQCl (lin IAdv (ss "kuhu")) (mkCl np (mkVP L.go_V)) ; where_come_from_QCl np = mkQCl (lin IAdv (ss "kust")) (mkCl np (mkVP L.come_V)) ; - + go_here_VP = mkVP (mkVP L.go_V) (mkAdv "siia") ; come_here_VP = mkVP (mkVP L.come_V) (mkAdv "siia") ; come_from_here_VP = mkVP (mkVP L.come_V) (mkAdv "sealt") ; @@ -61,16 +61,16 @@ lin monthAdv m = SyntaxEst.mkAdv in_Prep (mkNP m) ; yearAdv y = SyntaxEst.mkAdv (prePrep nominative "aastal") y ; ----- dayMonthAdv d m = ParadigmsEst.mkAdv (d.s ! R.NPCase R.Nom ++ BIND ++ "." ++ m.s ! R.NCase R.Sg R.Part) ; +---- dayMonthAdv d m = ParadigmsEst.mkAdv (d.s ! R.NPCase R.Nom ++ BIND ++ "." ++ m.s ! R.NCase R.Sg R.Part) ; ---- monthYearAdv m y = SyntaxEst.mkAdv in_Prep (mkNP (mkNP m) (SyntaxEst.mkAdv (casePrep nominative) y)) ; ----- dayMonthYearAdv d m y = ----- lin Adv {s = d.s ! R.NPCase R.Nom ++ BIND ++ "." ++ m.s ! R.NCase R.Sg R.Part ++ y.s ! R.NPCase R.Nom} ; +---- dayMonthYearAdv d m y = +---- lin Adv {s = d.s ! R.NPCase R.Nom ++ BIND ++ "." ++ m.s ! R.NCase R.Sg R.Part ++ y.s ! R.NPCase R.Nom} ; intYear = symb ; intMonthday = symb ; oper - pointWeekday : Weekday -> Str = \w -> (SyntaxEst.mkAdv (casePrep essive) (mkNP w.noun)).s ; + pointWeekday : Weekday -> Str = \w -> (SyntaxEst.mkAdv (casePrep essive) (mkNP w.noun)).s ; lincat Language = N ; @@ -86,11 +86,11 @@ lin oper mkLanguage : Str -> N = \s -> mkN (s ++ "keel") ; -oper mkWeekday : Str -> Weekday = \d -> +oper mkWeekday : Str -> Weekday = \d -> lin Weekday { - noun = mkN d ; + noun = mkN d ; habitual = ParadigmsEst.mkAdv (d + "iti") ; --kolmapäeviti - } ; + } ; lin monday_Weekday = mkWeekday "esmaspäev" ; @@ -101,9 +101,9 @@ lin friday_Weekday = mkWeekday "reede" ; lin saturday_Weekday = mkWeekday "laupäev" ; lin sunday_Weekday = mkWeekday "pühapäev" ; -lin january_Month = mkN "jaanuar" ; +lin january_Month = mkN "jaanuar" ; lin february_Month = mkN "veebruar" ; -lin march_Month = mkN "märts" ; +lin march_Month = mkN "märts" ; lin april_Month = mkN "aprill" ; lin may_Month = mkN "mai" ; lin june_Month = mkN "juuni" ; diff --git a/src/estonian/DocumentationEst.gf b/src/estonian/DocumentationEst.gf index 6e6ae9090..c796ee94d 100644 --- a/src/estonian/DocumentationEst.gf +++ b/src/estonian/DocumentationEst.gf @@ -2,5 +2,5 @@ -- documentation of Estonian in Estonian: the default introduced in LangEst -concrete DocumentationEst of Documentation = CatEst ** +concrete DocumentationEst of Documentation = CatEst ** DocumentationEstFunctor with (Terminology = TerminologyEst) ; diff --git a/src/estonian/DocumentationEstEng.gf b/src/estonian/DocumentationEstEng.gf index e487fa1e5..07efbd0e6 100644 --- a/src/estonian/DocumentationEstEng.gf +++ b/src/estonian/DocumentationEstEng.gf @@ -2,5 +2,5 @@ -- documentation of Estonian in English -concrete DocumentationEstEng of Documentation = CatEst ** +concrete DocumentationEstEng of Documentation = CatEst ** DocumentationEstFunctor with (Terminology = TerminologyEng) ; diff --git a/src/estonian/DocumentationEstFunctor.gf b/src/estonian/DocumentationEstFunctor.gf index 4011c2c1f..a8e683430 100644 --- a/src/estonian/DocumentationEstFunctor.gf +++ b/src/estonian/DocumentationEstFunctor.gf @@ -1,6 +1,6 @@ --# -path=.:../abstract:../common -incomplete concrete DocumentationEstFunctor of Documentation = CatEst ** open +incomplete concrete DocumentationEstFunctor of Documentation = CatEst ** open Terminology, -- the interface ResEst, ParadigmsEst, @@ -30,17 +30,17 @@ lin s2 = inflNoun (\nf -> noun.s ! nf) } ; - InflectionA, InflectionA2 = \adj -> + InflectionA, InflectionA2 = \adj -> let posit : (AForm => Str) = adj.s ! Posit ; compar : (AForm => Str) = adj.s ! Compar ; superl : (AForm => Str) = adj.s ! Superl ; - in + in { t = "a" ; s1 = heading1 (heading adjective_Category) ; - s2 = inflNoun (\nf -> posit ! AN nf) ++ - heading2 (heading comparative_Parameter) ++ - inflNoun (\nf -> compar ! AN nf) ++ - heading2 (heading superlative_Parameter) ++ + s2 = inflNoun (\nf -> posit ! AN nf) ++ + heading2 (heading comparative_Parameter) ++ + inflNoun (\nf -> compar ! AN nf) ++ + heading2 (heading superlative_Parameter) ++ inflNoun (\nf -> superl ! AN nf) } ; @@ -58,91 +58,91 @@ lin InflectionV v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v)) ; s2 = inflVerb v } ; InflectionV2 v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v S.something_NP)) ; s2 = inflVerb v } ; InflectionV3 v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v S.something_NP S.something_NP)) ; s2 = inflVerb v } ; InflectionV2V v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v S.we_NP (S.mkVP (L.sleep_V)))) ; s2 = inflVerb v } ; InflectionV2S v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v S.we_NP (lin S (ss "...")))) ; s2 = inflVerb v } ; InflectionV2Q v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v S.we_NP (lin QS (ss "...")))) ; s2 = inflVerb v } ; InflectionV2A v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v S.we_NP L.beautiful_A)) ; s2 = inflVerb v } ; InflectionVV v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v (S.mkVP (L.sleep_V)))) ; s2 = inflVerb v } ; InflectionVS v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v (lin S (ss "...")))) ; s2 = inflVerb v } ; InflectionVQ v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v (lin QS (ss "...")))) ; s2 = inflVerb v } ; InflectionVA v = { t = "v" ; - s1 = heading1 (heading verb_Category) ++ + s1 = heading1 (heading verb_Category) ++ paragraph (verbExample (S.mkCl S.she_NP v L.beautiful_A)) ; s2 = inflVerb v } ; -oper +oper verbExample : CatEst.Cl -> Str = \cl -> (S.mkUtt cl).s ; {- -} --# notpresent inflVerb : CatEst.V -> Str = \verb -> - let + let --verb = sverb2verbSep verb0 ; vfin : ResEst.VForm -> Str = \f -> verb.s ! f ; - + nounNounHeading : Parameter -> Parameter -> Str = \n1,n2 -> (S.mkUtt (G.PossNP (S.mkCN n1) (S.mkNP n2))).s ; in @@ -152,7 +152,7 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ + ) ++ tr (th "1.p" ++ td (vfin (Presn Sg P1)) ++ td (vfin (Presn Pl P1)) ++ intagAttr "td" "rowspan=3" (vfin (PassPresn True)) --# notpresent ) ++ @@ -167,13 +167,13 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ + ) ++ tr (th "1.p" ++ td (vfin (Impf Sg P1)) ++ td (vfin (Impf Pl P1)) ++ intagAttr "td" "rowspan=3" (vfin (PassImpf True))) ++ tr (th "2.p" ++ td (vfin (Impf Sg P2)) ++ td (vfin (Impf Pl P2))) ++ tr (th "3.p" ++ td (vfin (Impf Sg P3)) ++ td (vfin (Impf Pl P3))) ++ tr (th (heading negative_Parameter) ++ - td (vfin (PastPart Act)) ++ + td (vfin (PastPart Act)) ++ td (vfin (PastPart Pass)) ++ td (vfin (PassImpf False))) ) ++ @@ -183,12 +183,12 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ + ) ++ tr (th "1.p" ++ td (vfin (Condit Sg P1)) ++ td (vfin (Condit Pl P1)) ++ intagAttr "td" "rowspan=3" "TODO pass condit (nt loetaks)" --# notpresent ) ++ tr (th "2.p" ++ td (vfin (Condit Sg P2)) ++ td (vfin (Condit Pl P2))) ++ - tr (th "3.p" ++ td (vfin (Condit Sg P3)) ++ td (vfin (Condit Pl P3))) + tr (th "3.p" ++ td (vfin (Condit Sg P3)) ++ td (vfin (Condit Pl P3))) ) ++ heading3 (nounNounHeading present_Parameter quotative_Parameter) ++ frameTable ( @@ -196,8 +196,8 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ - tr (th "isik." ++ td (vfin (Quotative Act)) + ) ++ + tr (th "isik." ++ td (vfin (Quotative Act)) ++ intagAttr "td" "rowspan=3" (vfin (Quotative Act)) --# notpresent ) ++ tr (th "umbis." ++ td (vfin (Quotative Pass)) ++ td (vfin (Quotative Pass)) @@ -208,11 +208,11 @@ oper th (heading singular_Parameter) ++ th (heading plural_Parameter) ++ th (heading passive_Parameter) --# notpresent - ) ++ + ) ++ tr (th "1.p" ++ td "" ++ td (vfin ImperP1Pl) ++ intagAttr "td" "rowspan=3" (vfin ImperPass)) ++ tr (th "2.p" ++ td (vfin (Imper Sg)) ++ td (vfin (Imper Pl))) ++ - tr (th "3.p" ++ td (vfin (ImperP3)) ++ td (vfin ImperP3)) + tr (th "3.p" ++ td (vfin (ImperP3)) ++ td (vfin ImperP3)) ) ++ heading2 (nounPluralHeading nominal_form_ParameterType).s ++ heading3 (heading infinitive_Parameter) ++ @@ -221,32 +221,32 @@ oper th (heading nominative_Parameter) ++ td (vfin (Inf InfDa))) ++ tr (th (heading inessive_Parameter) ++ td (vfin (Inf InfDes))) ++ - tr (intagAttr "th" "rowspan=5" "ma" ++ + tr (intagAttr "th" "rowspan=5" "ma" ++ th (heading illative_Parameter) ++ td (vfin (Inf InfMa))) ++ tr (th (heading inessive_Parameter) ++ td (vfin (Inf InfMas))) ++ tr (th (heading elative_Parameter) ++ td (vfin (Inf InfMast))) ++ - tr (th (heading abessive_Parameter) ++ td (vfin (Inf InfMata))) ++ + tr (th (heading abessive_Parameter) ++ td (vfin (Inf InfMata))) ++ tr (th (heading translative_Parameter) ++ td (vfin (Inf InfMaks))) - ) ++ + ) ++ heading3 (heading participle_Parameter) ++ frameTable ( - tr (intagAttr "th" "rowspan=2" (heading present_Parameter) ++ - th (heading active_Parameter) ++ + tr (intagAttr "th" "rowspan=2" (heading present_Parameter) ++ + th (heading active_Parameter) ++ td (vfin (PresPart Act))) ++ - tr (th (heading passive_Parameter) ++ + tr (th (heading passive_Parameter) ++ td (vfin (PresPart Pass))) ++ - tr (intagAttr "th" "rowspan=2" (heading perfect_Parameter) ++ - th (heading active_Parameter) ++ + tr (intagAttr "th" "rowspan=2" (heading perfect_Parameter) ++ + th (heading active_Parameter) ++ td (vfin (PastPart Act ))) ++ - tr (th (heading passive_Parameter) ++ + tr (th (heading passive_Parameter) ++ td (vfin (PastPart Pass ))) ) ; --} - inflNoun : (NForm -> Str) -> Str = \nouns -> - frameTable ( + inflNoun : (NForm -> Str) -> Str = \nouns -> + frameTable ( tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter) ) ++ tr (th (heading nominative_Parameter) ++ td (nouns (NCase Sg Nom)) ++ td (nouns (NCase Pl Nom))) ++ tr (th (heading genitive_Parameter) ++ td (nouns (NCase Sg Gen)) ++ td (nouns (NCase Pl Gen))) ++ @@ -274,6 +274,6 @@ lin MkTag i = ss (i.t) ; {- --# notpresent --} +-} } diff --git a/src/estonian/ExtraEst.gf b/src/estonian/ExtraEst.gf index b9be4010a..16ba9ea76 100644 --- a/src/estonian/ExtraEst.gf +++ b/src/estonian/ExtraEst.gf @@ -1,4 +1,4 @@ -concrete ExtraEst of ExtraEstAbs = CatEst ** +concrete ExtraEst of ExtraEstAbs = CatEst ** open ResEst, MorphoEst, Coordination, Prelude, NounEst, StructuralEst, (R = ParamX) in { flags coding=utf8; lin @@ -6,7 +6,7 @@ concrete ExtraEst of ExtraEstAbs = CatEst ** s,sp = \\_,_ => np.s ! NPCase Gen ; isNum = False ; isDef = True ; --- "Jussin kolme autoa ovat" ; thus "...on" is missing - isNeg = False + isNeg = False } ; GenCN = caseCN Gen ; -- soome mees @@ -18,11 +18,11 @@ concrete ExtraEst of ExtraEstAbs = CatEst ** GenIP ip = {s = \\_,_ => ip.s ! NPCase Gen} ; GenRP num cn = { - s = \\n,c => let k = npform2case num.n c in relPron ! NCase n Gen ++ cn.s ! NCase num.n k ; - a = RNoAg + s = \\n,c => let k = npform2case num.n c in relPron ! NCase n Gen ++ cn.s ! NCase num.n k ; + a = RNoAg --- a = RAg (agrP3 num.n) } ; - oper + oper caseCN : Case -> NP -> CN -> CN = \c,np,cn -> lin CN { s = \\nf => np.s ! NPCase c ++ cn.s ! nf } ; @@ -37,17 +37,17 @@ concrete ExtraEst of ExtraEstAbs = CatEst ** MkVPI vp = {s = \\i => infVP (NPCase Nom) Pos (agrP3 Sg) vp i} ; ConjVPI = conjunctDistrTable InfForm ; - ComplVPIVV vv vpi = + ComplVPIVV vv vpi = insertObj (\\_,_,_ => vpi.s ! vv.vi) (predV vv) ; lincat VPS = { - s : Agr => Str ; + s : Agr => Str ; sc : NPForm ; --- can be different for diff parts } ; [VPS] = { - s1,s2 : Agr => Str ; + s1,s2 : Agr => Str ; sc : NPForm ; --- take the first: minä osaan kutoa ja täytyy virkata } ; @@ -79,45 +79,45 @@ concrete ExtraEst of ExtraEstAbs = CatEst ** PassAgentVPSlash vp np = vp ; {- - s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = npform2subjcase vp.c2.c} ; + s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = npform2subjcase vp.c2.c} ; s2 = \\b,p,a => np.s ! NPCase Nom ++ vp.s2 ! b ! p ! a ; adv = vp.adv ; ext = vp.ext ; vptyp = vp.vptyp ; } ; -} - AdvExistNP adv np = - mkClause (\_ -> adv.s) np.a (insertObj + AdvExistNP adv np = + mkClause (\_ -> adv.s) np.a (insertObj (\\_,b,_ => np.s ! NPCase Nom) (predV (verbOlema ** {sc = NPCase Nom}))) ; RelExistNP prep rp np = { - s = \\t,ant,bo,ag => - let + s = \\t,ant,bo,ag => + let n = complNumAgr ag ; - cl = mkClause + cl = mkClause (\_ -> appCompl True Pos prep (rp2np n rp)) - np.a - (insertObj - (\\_,b,_ => np.s ! NPCase Nom) + np.a + (insertObj + (\\_,b,_ => np.s ! NPCase Nom) (predV (verbOlema ** {sc = NPCase Nom}))) ; - in + in cl.s ! t ! ant ! bo ! SDecl ; c = NPCase Nom } ; AdvPredNP adv v np = - mkClause (\_ -> adv.s) np.a (insertObj + mkClause (\_ -> adv.s) np.a (insertObj (\\_,b,_ => np.s ! NPCase Nom) (predV v)) ; - ICompExistNP adv np = - let cl = mkClause (\_ -> adv.s ! np.a) np.a (insertObj + ICompExistNP adv np = + let cl = mkClause (\_ -> adv.s ! np.a) np.a (insertObj (\\_,b,_ => np.s ! NPCase Nom) (predV (verbOlema ** {sc = NPCase Nom}))) ; in { s = \\t,a,p => cl.s ! t ! a ! p ! SDecl } ; IAdvPredNP iadv v np = - let cl = mkClause (\_ -> iadv.s) np.a (insertObj + let cl = mkClause (\_ -> iadv.s) np.a (insertObj (\\_,b,_ => np.s ! v.sc) (predV v)) ; in { s = \\t,a,p => cl.s ! t ! a ! p ! SDecl @@ -132,14 +132,14 @@ concrete ExtraEst of ExtraEstAbs = CatEst ** n = Sg } ; - PartCN cn = - let + PartCN cn = + let acn = DetCN (DetQuant IndefArt NumSg) cn in { s = table { NPCase Nom | NPAcc => acn.s ! NPCase ResEst.Part ; c => acn.s ! c - } ; + } ; a = acn.a ; isPron = False ; isNeg = False } ; @@ -147,34 +147,34 @@ concrete ExtraEst of ExtraEstAbs = CatEst ** --The reflexive possessive "oma" --for "ta näeb oma koera" instead of *"tema koera" OmaPoss = {s,sp = \\_,_ => "oma" ; isDef,isNeg,isNum = False} ; - + ma_Pron = shortPronoun "ma" "mu" "mind" "minu" Sg P1 ; sa_Pron = shortPronoun "sa" "su" "sind" "sinu" Sg P2; ta_Pron = shortPronoun "ta" "ta" "teda" "tema" Sg P3 ; - me_Pron = + me_Pron = {s = table { NPCase Nom => "me" ; - n => (we_Pron.s) ! n + n => (we_Pron.s) ! n } ; - a = Ag Pl P1 } ; + a = Ag Pl P1 } ; - te_Pron = + te_Pron = {s = table { NPCase Nom => "te" ; - n => (youPl_Pron.s) ! n + n => (youPl_Pron.s) ! n } ; - a = Ag Pl P2 } ; + a = Ag Pl P2 } ; nad_Pron = {s = table { NPCase Nom => "nad" ; - n => (they_Pron.s) ! n + n => (they_Pron.s) ! n } ; - a = Ag Pl P3 } ; + a = Ag Pl P3 } ; ---- copied from VerbEst.CompAP, should be shared ICompAP ap = { - s = \\agr => + s = \\agr => let n = complNumAgr agr ; c = case n of { @@ -187,68 +187,68 @@ concrete ExtraEst of ExtraEstAbs = CatEst ** IAdvAdv adv = {s = "kui" ++ adv.s} ; ProDrop p = { - s = table {NPCase (Nom | Gen) => [] ; c => p.s ! c} ; + s = table {NPCase (Nom | Gen) => [] ; c => p.s ! c} ; ---- drop Gen only works in adjectival position a = p.a } ; - -- : Pron -> Quant ; + -- : Pron -> Quant ; ProDropPoss p = { s = \\_,_ => "oma" ; sp = \\_,_ => p.s ! NPCase Gen ; isNum = False ; - isDef = True ; + isDef = True ; isNeg = False } ; - lincat + lincat ClPlus, ClPlusObj, ClPlusAdv = ClausePlus ; Part = {s : Str} ; - lin - S_SVO part t p clp = - let + lin + S_SVO part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s ---- in - {s = t.s ++ p.s ++ cl.subj ++ pa ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; + {s = t.s ++ p.s ++ cl.subj ++ pa ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; - S_OSV part t p clp = - let + S_OSV part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s ---- in - {s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.adv ++ cl.ext} ; - S_VSO part t p clp = - let + {s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.adv ++ cl.ext} ; + S_VSO part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s in - {s = t.s ++ p.s ++ cl.fin ++ pa ++ cl.subj ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; - S_ASV part t p clp = - let + {s = t.s ++ p.s ++ cl.fin ++ pa ++ cl.subj ++ cl.inf ++ cl.compl ++ cl.adv ++ cl.ext} ; + S_ASV part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s in - {s = t.s ++ p.s ++ cl.adv ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.ext} ; + {s = t.s ++ p.s ++ cl.adv ++ pa ++ cl.subj ++ cl.fin ++ cl.inf ++ cl.compl ++ cl.ext} ; - S_OVS part t p clp = - let + S_OVS part t p clp = + let cl = clp.s ! t.t ! t.a ! p.p ; pa = part.s ---- in - {s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.fin ++ cl.inf ++ cl.subj ++ cl.adv ++ cl.ext} ; + {s = t.s ++ p.s ++ cl.compl ++ pa ++ cl.fin ++ cl.inf ++ cl.subj ++ cl.adv ++ cl.ext} ; PredClPlus np vp = mkClausePlus (subjForm np vp.sc) np.a vp ; PredClPlusFocSubj np vp = insertKinClausePlus 0 (mkClausePlus (subjForm np vp.sc) np.a vp) ; PredClPlusFocVerb np vp = insertKinClausePlus 1 (mkClausePlus (subjForm np vp.sc) np.a vp) ; - PredClPlusObj np vps obj = + PredClPlusObj np vps obj = insertObjClausePlus 0 False (\\b => appCompl True b vps.c2 obj) (mkClausePlus (subjForm np vps.sc) np.a vps) ; - PredClPlusFocObj np vps obj = + PredClPlusFocObj np vps obj = insertObjClausePlus 0 True (\\b => appCompl True b vps.c2 obj) (mkClausePlus (subjForm np vps.sc) np.a vps) ; - PredClPlusAdv np vp adv = + PredClPlusAdv np vp adv = insertObjClausePlus 1 False (\\_ => adv.s) (mkClausePlus (subjForm np vp.sc) np.a vp) ; - PredClPlusFocAdv np vp adv = + PredClPlusFocAdv np vp adv = insertObjClausePlus 1 True (\\_ => adv.s) (mkClausePlus (subjForm np vp.sc) np.a vp) ; ClPlusWithObj c = c ; @@ -256,4 +256,4 @@ concrete ExtraEst of ExtraEstAbs = CatEst ** gi_Part = ss "gi" | ss "ki" ; -} +} diff --git a/src/estonian/ExtraEstAbs.gf b/src/estonian/ExtraEstAbs.gf index 0e09f3d4a..326a960f4 100644 --- a/src/estonian/ExtraEstAbs.gf +++ b/src/estonian/ExtraEstAbs.gf @@ -33,7 +33,7 @@ abstract ExtraEstAbs = Extra [ me_Pron : Pron ; te_Pron : Pron ; nad_Pron : Pron ; - + OmaPoss : Quant ; -- Reflexive possessive "oma" ProDropPoss : Pron -> Quant ; -- vaimoni --TODO Is this relevant in Estonian? Is the agreement of pronoun ever needed, or is it the same as oma? diff --git a/src/estonian/GrammarEst.gf b/src/estonian/GrammarEst.gf index 93d2120c8..1daf4bd42 100644 --- a/src/estonian/GrammarEst.gf +++ b/src/estonian/GrammarEst.gf @@ -1,6 +1,6 @@ -concrete GrammarEst of Grammar = - NounEst, - VerbEst, +concrete GrammarEst of Grammar = + NounEst, + VerbEst, AdjectiveEst, AdverbEst, NumeralEst, diff --git a/src/estonian/IdiomEst.gf b/src/estonian/IdiomEst.gf index b7e50c81c..c4e3657a5 100644 --- a/src/estonian/IdiomEst.gf +++ b/src/estonian/IdiomEst.gf @@ -1,11 +1,11 @@ -concrete IdiomEst of Idiom = CatEst ** +concrete IdiomEst of Idiom = CatEst ** open MorphoEst, ParadigmsEst, Prelude in { flags optimize=all_subs ; coding=utf8; lin - ExistNP np = - let + ExistNP np = + let cas : Polarity -> NPForm = \p -> case p of { Pos => NPCase Nom ; -- on olemas lammas Neg => NPCase Part -- ei ole olemas lammast @@ -14,7 +14,7 @@ concrete IdiomEst of Idiom = CatEst ** in existClause noSubj (agrP3 Sg) vp ; - ExistIP ip = + ExistIP ip = let cas : NPForm = NPCase Nom ; ---- also partitive in Extra vp = insertObj (\\_,b,_ => "olemas") (predV olla) ; @@ -45,11 +45,11 @@ concrete IdiomEst of Idiom = CatEst ** adv = vp.adv ; p = vp.p ; ext = vp.ext ; - sc = vp.sc ; + sc = vp.sc ; } ; - ProgrVP vp = - let + ProgrVP vp = + let inf = (vp.s ! VIInf InfMas ! Simul ! Pos ! agrP3 Sg).fin ; on = predV olla in { @@ -58,16 +58,16 @@ concrete IdiomEst of Idiom = CatEst ** adv = vp.adv ; p = vp.p ; ext = vp.ext ; - sc = vp.sc ; + sc = vp.sc ; } ; -- This gives "otetaan oluet" instead of "ottakaamme oluet". -- The imperative is not available in a $VP$. - ImpPl1 vp = + ImpPl1 vp = let vps = vp.s ! VIPass Pres ! Simul ! Pos ! Ag Pl P1 in - {s = vps.fin ++ vps.inf ++ + {s = vps.fin ++ vps.inf ++ vp.s2 ! True ! Pos ! Ag Pl P1 ++ vp.p ++ vp.ext } ; diff --git a/src/estonian/LexiconEst.gf b/src/estonian/LexiconEst.gf index fb7634579..ca2e1cb90 100644 --- a/src/estonian/LexiconEst.gf +++ b/src/estonian/LexiconEst.gf @@ -1,6 +1,6 @@ concrete LexiconEst of Lexicon = CatEst ** open MorphoEst, ParadigmsEst, Prelude in { -flags +flags optimize=values ; coding=utf8; @@ -216,7 +216,7 @@ lin yellow_A = mkA (mkN "kollane" "kollase" "kollast" "kollasesse" "kollaste" "kollaseid") ; young_A = mkA (mkN "noor" "noore" "noort") ; - do_V2 = mkV2 (mkV "tegema" "teha") ; + do_V2 = mkV2 (mkV "tegema" "teha") ; now_Adv = mkAdv "nüüd" ; already_Adv = mkAdv "juba" ; diff --git a/src/estonian/MakeStructuralEst.gf b/src/estonian/MakeStructuralEst.gf index 97614ef7b..0b17be122 100644 --- a/src/estonian/MakeStructuralEst.gf +++ b/src/estonian/MakeStructuralEst.gf @@ -1,9 +1,9 @@ resource MakeStructuralEst = open CatEst, ParadigmsEst, MorphoEst, Prelude in { -oper - mkConj : Str -> Str -> ParadigmsEst.Number -> Conj = \x,y,n -> +oper + mkConj : Str -> Str -> ParadigmsEst.Number -> Conj = \x,y,n -> {s1 = x ; s2 = y ; n = n ; lock_Conj = <>} ; - mkSubj : Str -> Subj = \x -> + mkSubj : Str -> Subj = \x -> {s = x ; lock_Subj = <>} ; mkIQuant : Str -> IQuant = \s -> {s = \\n,c => s ; lock_IQuant = <>} ; ---- diff --git a/src/estonian/MorphoEst.gf b/src/estonian/MorphoEst.gf index dfd3af921..e7cc6e532 100644 --- a/src/estonian/MorphoEst.gf +++ b/src/estonian/MorphoEst.gf @@ -11,7 +11,7 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { flags optimize=all ; coding=utf8; oper - + ---------------------- -- morph. paradigms -- ---------------------- @@ -19,7 +19,7 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { --Noun paradigms in HjkEst --Comparative adjectives - --(could just use hjk_type_IVb_audit "suurem" "a") + --(could just use hjk_type_IVb_audit "suurem" "a") -- Comparative adjectives inflect in the same way -- TODO: confirm this dSuurempi : Str -> NForms = \suurem -> @@ -47,17 +47,17 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { saama (saa + "da") (saa + "b") - (saa + "dakse") + (saa + "dakse") (saa + "ge") -- Imper Pl sai - (saa + "nud") + (saa + "nud") (saa + "dud") ; -- TS 49 -- no d/t in da, takse ; imperfect 3sg ends in s cKaima : (_ : Str) -> VForms = \kaima -> let - kai = Predef.tk 2 kaima ; + kai = Predef.tk 2 kaima ; in vForms8 kaima (kai + "a") @@ -65,10 +65,10 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (kai + "akse") (kai + "ge") (kai + "s") - (kai + "nud") + (kai + "nud") (kai + "dud") ; - -- TS 49 + -- TS 49 -- vowel changes in da, takse, no d/t ; imperfect 3sg ends in i cJooma : (_ : Str) -> VForms = \jooma -> let @@ -78,7 +78,7 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { u = case o of { "o" => "u" ; "ö" => "ü" ; - _ => o + _ => o } ; q = case o of { ("o"|"ö") => "õ" ; @@ -91,9 +91,9 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { juua (joo + "b") (juua + "kse") - (joo + "ge") + (joo + "ge") j6i - (joo + "nud") + (joo + "nud") (joo + "dud") ; -- TS 50-52 (elama, muutuma, kirjutama), 53 (tegelema) alt forms @@ -105,10 +105,10 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { elama (ela + "da") (ela + "b") - (ela + "takse") + (ela + "takse") (ela + "ge") -- Imperative P1 Pl - (ela + "s") -- Imperfect P3 Sg - (ela + "nud") + (ela + "s") -- Imperfect P3 Sg + (ela + "nud") (ela + "tud") ; -- TS 53 (tegelema) @@ -121,12 +121,12 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { tegelema (tegel + "da") (tegele + "b") - (tegel + "dakse") + (tegel + "dakse") (tegel + "ge") -- Imperative P1 Pl - (tegele + "s") -- Imperfect P3 Sg - (tegel + "nud") - (tegel + "dud") ; - + (tegele + "s") -- Imperfect P3 Sg + (tegel + "nud") + (tegel + "dud") ; + -- TS 54 (tulema) -- consonant assimilation (l,r,n) in da, takse -- d in tud, g in ge @@ -146,7 +146,7 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (tul + "i") (tul + "nud") (tul + "dud") ; - + -- TS 55-56 (õppima, sündima) -- t in takse, tud ; consonant gradation on stem cLeppima : (_ : Str) -> VForms = \leppima -> @@ -154,7 +154,7 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { leppi = Predef.tk 2 leppima ; i = last leppi ; lepp = init leppi ; - lepi = (weaker lepp) + i + lepi = (weaker lepp) + i in vForms8 leppima (leppi + "da") @@ -164,7 +164,7 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (leppi + "s") -- Imperfect P3 Sg (leppi + "nud") (lepi + "tud") ; - + -- TS 57 (lugema) -- Like 55-56 but irregular gradation patterns, that shouldn't be in HjkEst.weaker --including also marssima,valssima @@ -184,7 +184,7 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { _ + ("uge"|"ude") => l + "oe" ; _ + #c + "ssi" => (init lug) + e; - _ => (weaker lug) + e + _ => (weaker lug) + e } ; in vForms8 lugema @@ -195,8 +195,8 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (luge + "s") -- Imperfect P3 Sg (luge + "nud") (loe + "tud") ; - - + + -- TS 58 muutma, saatma, -- like laskma (TS 62, 64), but no reduplication of stem consonant (muutma~muuta, not *muutta) -- like andma (TS 63) but different takse (muudetakse vs. antakse) @@ -213,8 +213,8 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (muut + "is") (muut + "nud") (muud + "etud") ; -- always e? - - -- TS 59-60 (petma~petetakse, jätma~jäetakse) + + -- TS 59-60 (petma~petetakse, jätma~jäetakse) -- takse given as second argument cPetma : (_,_ : Str) -> VForms = \petma,jaetakse -> let @@ -251,8 +251,8 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (jatt + "is") (jat + "nud") (ko + "etud") ; --} - +-} + -- TS 61 (laulma) --vowel (a/e) given with the second argument --veenma,naerma @@ -268,7 +268,7 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (kuul + "is") (kuul + "nud") (kuul + "dud") ; - + -- TS 62 (tõusma), 64 (mõksma) -- vowel (a/e) given with the second argument -- doesn't give alt. forms joosta, joostes @@ -283,9 +283,9 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (las + "takse") (las + "ke") (lask + "is") - (lask + "nud") + (lask + "nud") (las + "tud") ; - + -- TS 62 alt forms cJooksma : (_ : Str) -> VForms = \jooksma -> let @@ -298,10 +298,10 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (joos + "takse") (joos + "ke") (jooks + "is") - (jooks + "nud") + (jooks + "nud") (joos + "tud") ; - -- TS 63 (andma, murdma, hoidma) + -- TS 63 (andma, murdma, hoidma) -- vowel given in second arg (andma~annab; tundma~tunneb) cAndma : (_,_ : Str) -> VForms = \andma,annab -> let @@ -310,18 +310,18 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { ann = weaker and ; --murr, hoi te = case (last ann) of { --to prevent teadma~teaab "a" => init ann ; - _ => ann + _ => ann } ; in vForms8 andma (and + "a") - annab + annab (an + "takse") (and + "ke") (and + "is") (and + "nud") (an + "tud") ; - + -- TS 65 (pesema) -- a consonant stem verb in disguise cPesema : (_ : Str) -> VForms = \pesema -> @@ -356,9 +356,9 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { (nag + "i") (nai + "nud") (nah + "tud") ; - - - -- TS 67-68 (hüppama, tõmbama) + + + -- TS 67-68 (hüppama, tõmbama) -- strong stem in ma, b, s -- weak stem in da, takse, ge, nud, tud -- t in da, takse; k in ge @@ -387,7 +387,7 @@ resource MorphoEst = ResEst ** open Prelude, Predef, HjkEst in { omb = Predef.tk 2 omble ; omm = case omb of { "mõt" => "mõe" ; --some "double weak" patterns; however weaker (weaker omb) makes the coverage worse - _ => weaker omb + _ => weaker omb } ; ommel = omm + e + l ; in vForms8 @@ -445,22 +445,22 @@ These used to be here: aForms2A : AForms -> Adjective = \afs -> { s = table { Posit => table { - AN n => (nForms2N afs.posit).s ! n ; + AN n => (nForms2N afs.posit).s ! n ; AAdv => afs.adv_posit } ; Compar => table { - AN n => (nForms2N afs.compar).s ! n ; + AN n => (nForms2N afs.compar).s ! n ; AAdv => afs.adv_compar } ; Superl => table { - AN n => (nForms2N afs.superl).s ! n ; + AN n => (nForms2N afs.superl).s ! n ; AAdv => afs.adv_superl } } ; lock_A = <> } ; - nforms2aforms : NForms -> AForms = \nforms -> + nforms2aforms : NForms -> AForms = \nforms -> let suure = init (nforms ! 1) ; suur = Predef.tk 4 (nforms ! 8) ; @@ -477,7 +477,7 @@ These used to be here: These used to be here: VForms : Type = Predef.Ints 7 => Str ; - vForms8 : (x1,_,_,_,_,_,_,x8 : Str) -> VForms ; + vForms8 : (x1,_,_,_,_,_,_,x8 : Str) -> VForms ; regVForms : (x1,_,_,x4 : Str) -> VForms ; vforms2V : VForms -> Verb ; -} @@ -487,7 +487,7 @@ These used to be here: -- for Structural ----------------------- -caseTable : Number -> Noun -> Case => Str = \n,cn -> +caseTable : Number -> Noun -> Case => Str = \n,cn -> \\c => cn.s ! NCase n c ; mkDet : Number -> Noun -> { @@ -510,11 +510,11 @@ caseTable : Number -> Noun -> Case => Str = \n,cn -> -- TODO: remove NPAcc? -- I: keep NPAcc; see appCompl in ResEst, it takes care of finding a right case for various types of complements; incl. when pronouns get different treatment than nouns (PassVP). mkPronoun : (_,_,_ : Str) -> Number -> Person -> - {s : NPForm => Str ; a : Agr} = + {s : NPForm => Str ; a : Agr} = \mina, minu, mind, n, p -> let { minu_short = ie_to_i minu - } in + } in {s = table { NPCase Nom => mina ; NPCase Gen => minu ; @@ -533,7 +533,7 @@ caseTable : Number -> Noun -> Case => Str = \n,cn -> NPAcc => mind } ; a = Ag n p - } ; + } ; -- meiesse/teiesse -> meisse/teisse ie_to_i : Str -> Str ; @@ -543,14 +543,14 @@ caseTable : Number -> Noun -> Case => Str = \n,cn -> _ => x } ; - shortPronoun : (_,_,_,_ : Str) -> Number -> Person -> - {s : NPForm => Str ; a : Agr} = + shortPronoun : (_,_,_,_ : Str) -> Number -> Person -> + {s : NPForm => Str ; a : Agr} = \ma, mu, mind, minu, n, p -> let shortMa = mkPronoun ma mu mind n p ; mulle : Str = case mu of { - "mu" => "mulle" ; + "mu" => "mulle" ; "su" => "sulle" ; - _ => shortMa.s ! NPCase Allat + _ => shortMa.s ! NPCase Allat } ; in shortMa ** { s = table { @@ -561,18 +561,18 @@ caseTable : Number -> Noun -> Case => Str = \n,cn -> NPCase Comit => minu + "ga" ; NPCase Termin => minu + "ni" ; x => shortMa.s ! x } } ; - + oper - relPron : NForm => Str = - let mis = nForms2N (nForms6 "mis" "mille" "mida" "millesse" "mille" "mida") - in fixPlNom "mis" mis.s ; + relPron : NForm => Str = + let mis = nForms2N (nForms6 "mis" "mille" "mida" "millesse" "mille" "mida") + in fixPlNom "mis" mis.s ; kesPron : NForm => Str = - let kes = nForms2N (nForms6 "kes" "kelle" "keda" "kellesse" "kelle" "keda") + let kes = nForms2N (nForms6 "kes" "kelle" "keda" "kellesse" "kelle" "keda") in fixPlNom "kes" kes.s ; ProperName = {s : Case => Str} ; @@ -613,7 +613,7 @@ oper Allat => "nendele" ; Abess => "nendeta" ; Comit => "nendega" ; - Termin => "nendeni" + Termin => "nendeni" } ; } ; diff --git a/src/estonian/NounEst.gf b/src/estonian/NounEst.gf index 2d873ab65..3b65059c1 100644 --- a/src/estonian/NounEst.gf +++ b/src/estonian/NounEst.gf @@ -7,15 +7,15 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in -- The $Number$ is subtle: "nuo autot", "nuo kolme autoa" are both plural -- for verb agreement, but the noun form is singular in the latter. - DetCN det cn = + DetCN det cn = let n : Number = case det.isNum of { True => Sg ; _ => det.n } ; ncase : NPForm -> Case * NForm = \c -> - let k = npform2case n c - in + let k = npform2case n c + in case of { <_, NPAcc, True,_> => ; -- kolm kassi (as object) <_, NPCase Nom, True,_> => ; -- kolm kassi (as subject) @@ -25,12 +25,12 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in <_, NPCase Abess, _, _> => ; -- kolme kassita <_, NPCase Ess, _, _> => ; -- kolme kassina <_, NPCase Termin,_, _> => ; -- kolme kassini - + <_, _, True,_> => ; -- kolmeks kassiks (all other cases) _ => -- kass, kassi, ... (det is not a number) } in { - s = \\c => let + s = \\c => let k = ncase c ; in det.s ! k.p1 ++ cn.s ! k.p2 ; @@ -42,7 +42,7 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in isPron = False } ; - DetNP det = + DetNP det = let n : Number = case det.isNum of { True => Sg ; @@ -50,7 +50,7 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in } ; in { s = \\c => let k = npform2case n c in - det.sp ! k ; + det.sp ! k ; a = agrP3 (case det.isDef of { False => Sg ; -- autoja menee; kolme autoa menee _ => det.n @@ -59,7 +59,7 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in } ; UsePN pn = { - s = \\c => pn.s ! npform2case Sg c ; + s = \\c => pn.s ! npform2case Sg c ; a = agrP3 Sg ; isPron = False } ; @@ -72,10 +72,10 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in } ; PPartNP np v2 = - let + let num : Number = complNumAgr np.a ; part : Str = v2.s ! (PastPart Pass) ; - adj : NForms = hjk_type_IVb_maakas part ; + adj : NForms = hjk_type_IVb_maakas part ; partGen : Str = adj ! 1 ; partEss : Str = partGen + "na" in { @@ -91,8 +91,8 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in } ; DetQuantOrd quant num ord = { - s = \\c => quant.s ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! NCase num.n c ; - sp = \\c => quant.sp ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! NCase num.n c ; + s = \\c => quant.s ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! NCase num.n c ; + sp = \\c => quant.sp ! num.n ! c ++ num.s ! Sg ! c ++ ord.s ! NCase num.n c ; n = num.n ; isNum = num.isNum ; isDef = quant.isDef @@ -135,19 +135,19 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in NumCard n = n ** {isNum = case n.n of {Sg => False ; _ => True}} ; -- üks raamat/kaks raamatut NumDigits numeral = { - s = \\n,c => numeral.s ! NCard (NCase n c) ; - n = numeral.n + s = \\n,c => numeral.s ! NCard (NCase n c) ; + n = numeral.n } ; OrdDigits numeral = {s = \\nc => numeral.s ! NOrd nc} ; NumNumeral numeral = { - s = \\n,c => numeral.s ! NCard (NCase n c) ; + s = \\n,c => numeral.s ! NCard (NCase n c) ; n = numeral.n } ; OrdNumeral numeral = {s = \\nc => numeral.s ! NOrd nc} ; AdNum adn num = { - s = \\n,c => adn.s ++ num.s ! n ! c ; + s = \\n,c => adn.s ++ num.s ! n ! c ; n = num.n } ; @@ -156,17 +156,17 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in OrdSuperl a = {s = \\nc => "kõige" ++ a.s ! Compar ! AN nc} ; DefArt = { - s = \\_,_ => [] ; - sp = table {Sg => pronSe.s ; Pl => pronNe.s} ; + s = \\_,_ => [] ; + sp = table {Sg => pronSe.s ; Pl => pronNe.s} ; isNum = False ; isDef = True -- autot ovat } ; IndefArt = { s = \\_,_ => [] ; --use isDef in DetCN - sp = \\n,c => - (nForms2N (nForms6 "üks" "ühe" "üht" "ühesse" "ühtede" - "ühtesid")).s ! NCase n c ; + sp = \\n,c => + (nForms2N (nForms6 "üks" "ühe" "üht" "ühesse" "ühtede" + "ühtesid")).s ! NCase n c ; isNum,isDef = False -- autoja on } ; @@ -176,7 +176,7 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in ncase : Case -> NForm = \c -> NCase n c ; in { s = \\c => let k = npform2case n c in - cn.s ! ncase k ; + cn.s ! ncase k ; a = agrP3 Sg ; isPron = False } ; @@ -209,21 +209,21 @@ concrete NounEst of Noun = CatEst ** open ResEst, HjkEst, MorphoEst, Prelude in AdjCN ap cn = { - s = \\nf => + s = \\nf => case ap.infl of { - (Invariable|Participle) => ap.s ! True ! (NCase Sg Nom) ++ cn.s ! nf ; --valmis kassile; väsinud kassile - Regular => case nf of { - NCase num (Ess|Abess|Comit|Termin) => ap.s ! True ! (NCase num Gen) ++ cn.s ! nf ; --suure kassiga, not *suurega kassiga + Invariable|Participle => ap.s ! True ! NCase Sg Nom ++ cn.s ! nf ; --valmis kassile; väsinud kassile + Regular => case nf of { + NCase num (Ess|Abess|Comit|Termin) => ap.s ! True ! NCase num Gen ++ cn.s ! nf ; --suure kassiga, not *suurega kassiga _ => ap.s ! True ! nf ++ cn.s ! nf - } - } + } + } } ; RelCN cn rs = {s = \\nf => cn.s ! nf ++ rs.s ! agrP3 (numN nf)} ; RelNP np rs = { - s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ; - a = np.a ; + s = \\c => np.s ! c ++ "," ++ rs.s ! np.a ; + a = np.a ; isPron = np.isPron ---- correct ? } ; diff --git a/src/estonian/ParadigmsEst.gf b/src/estonian/ParadigmsEst.gf index 033dc3acf..5f74e4725 100644 --- a/src/estonian/ParadigmsEst.gf +++ b/src/estonian/ParadigmsEst.gf @@ -2,12 +2,12 @@ -- -- Based on the Finnish Lexical Paradigms by 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 -- expressions of open categories: nouns, adjectives, verbs. --- +-- -- 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 $MorphoEst.gf$ is that the types -- referred to are compiled resource grammar types. We have moreover @@ -23,9 +23,9 @@ -- @author Kaarel Kaljurand -- @version 2013-10-21 -resource ParadigmsEst = open - (Predef=Predef), - Prelude, +resource ParadigmsEst = open + (Predef=Predef), + Prelude, MorphoEst, HjkEst, CatEst @@ -33,9 +33,9 @@ resource ParadigmsEst = open flags optimize=noexpand ; 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 -- should always use these constants instead of the constructors -- defined in $ResEst$. @@ -83,15 +83,15 @@ oper --2 Conjunctions, adverbs - mkAdv : Str -> Adv ; - mkAdV : Str -> AdV ; - mkAdN : Str -> AdN ; - mkAdA : Str -> AdA ; + mkAdv : Str -> Adv ; + mkAdV : Str -> AdV ; + mkAdN : Str -> AdN ; + mkAdA : Str -> AdA ; mkConj : overload { mkConj : Str -> Conj ; -- just one word, default number Sg: e.g. "ja" mkConj : Str -> Number -> Conj ; --just one word + number: e.g. "ja" Pl - mkConj : Str -> Str -> Conj ; --two words, default number: e.g. "nii" "kui" + mkConj : Str -> Str -> Conj ; --two words, default number: e.g. "nii" "kui" mkConj : Str -> Str -> Number -> Conj ; --two words + number: e.g. "nii" "kui" Pl } ; @@ -139,7 +139,7 @@ oper -- Non-comparison one-place adjectives are just like nouns. -- 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 -- are always inflected in the same way, so the nominative of them is actually -- enough (TODO: confirm). @@ -156,7 +156,7 @@ oper mkA2 : A -> Prep -> A2 -- e.g. "vihane" (postGenPrep "peale") = \a,p -> a ** {c2 = p ; lock_A2 = <>}; - invA : Str -> A ; -- invariable adjectives, such as genitive attributes ; no agreement to head, no comparison forms. + invA : Str -> A ; -- invariable adjectives, such as genitive attributes ; no agreement to head, no comparison forms. --2 Verbs -- @@ -237,8 +237,8 @@ oper mkV2V : V -> Prep -> V2V ; -- e.g. "käskima" adessive mkV2V : Str -> V2V ; -- e.g. "käskima" adessive } ; - mkV2Vf : V -> Prep -> InfForm -> V2V ; -- e.g. "keelama" partitive infMast - + mkV2Vf : V -> Prep -> InfForm -> V2V ; -- e.g. "keelama" partitive infMast + mkVA : overload { mkVA : V -> Prep -> VA ; -- e.g. "muutuma" translative mkVA : Str -> VA ; -- string, default case translative @@ -248,21 +248,21 @@ oper mkV2A : V -> Prep -> Prep -> V2A ; -- e.g. "värvima" genitive translative mkV2A : Str -> V2A ; -- string, default cases genitive and translative } ; - + mkVQ : overload { - mkVQ : V -> VQ ; - mkVQ : Str -> VQ ; + mkVQ : V -> VQ ; + mkVQ : Str -> VQ ; } ; - mkV2Q : V -> Prep -> V2Q ; -- e.g. "küsima" ablative + mkV2Q : V -> Prep -> V2Q ; -- e.g. "küsima" ablative mkAS : A -> AS ; --% mkA2S : A -> Prep -> A2S ; --% mkAV : A -> AV ; --% 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 --- as an adverb. Likewise +-- as an adverb. Likewise -- $V0$ is just $V$. V0 : Type ; --% @@ -290,13 +290,13 @@ oper translative = Transl ; terminative = Termin ; essive = Ess ; - abessive = Abess ; + abessive = Abess ; comitative = Comit ; - + infDa = InfDa ; infMa = InfMa ; infMast = InfMast ; infDes = InfDes ; infMas = InfMas ; infMaks = InfMaks ; infMata = InfMata ; - prePrep : Case -> Str -> Prep = + prePrep : Case -> Str -> Prep = \c,p -> {c = NPCase c ; s = p ; isPre = True ; lock_Prep = <>} ; postPrep : Case -> Str -> Prep = \c,p -> {c = NPCase c ; s = p ; isPre = False ; lock_Prep = <>} ; @@ -313,7 +313,7 @@ oper mkAdA : Str -> AdA = \str -> {s = str ; lock_AdA = <>} ; - + mkConj = overload { mkConj : Str -> Conj = \ja -> lin Conj ((sd2 "" ja) ** {n = Sg}) ; mkConj : Str -> Number -> Conj = \ja,num -> lin Conj ((sd2 "" ja) ** {n = num}) ; @@ -335,12 +335,12 @@ oper } ; -- Adjective forms (incl. comp and sup) are derived from noun forms - mk1A : Str -> A = \suur -> - let aforms = aForms2A (nforms2aforms (hjk_type suur)) + mk1A : Str -> A = \suur -> + let aforms = aForms2A (nforms2aforms (hjk_type suur)) in aforms ** {infl = Regular } ; - - mkNA : N -> A = \suur -> - let aforms = aForms2A (nforms2aforms (n2nforms suur)) ; + + mkNA : N -> A = \suur -> + let aforms = aForms2A (nforms2aforms (n2nforms suur)) ; in aforms ** {infl = Regular } ; @@ -348,28 +348,28 @@ oper -- mk2N, mk3N, mk4N make sure that the user specified forms end up in the paradigm, -- even though the rest is wrong - mk2N : (link,lingi : Str) -> N = \link,lingi -> - let nfs : NForms = (nForms2 link lingi) ; + mk2N : (link,lingi : Str) -> N = \link,lingi -> + let nfs : NForms = (nForms2 link lingi) ; nfs_fixed : NForms = table { 0 => link ; 1 => lingi ; 2 => nfs ! 2 ; 3 => nfs ! 3 ; 4 => nfs ! 4 ; - 5 => nfs ! 5 + 5 => nfs ! 5 } ; in nForms2N nfs_fixed ** {lock_N = <> } ; - mk3N : (tukk,tuku,tukku : Str) -> N = \tukk,tuku,tukku -> - let nfs : NForms = (nForms3 tukk tuku tukku) ; + mk3N : (tukk,tuku,tukku : Str) -> N = \tukk,tuku,tukku -> + let nfs : NForms = (nForms3 tukk tuku tukku) ; nfs_fixed : NForms = table { 0 => tukk ; 1 => tuku ; 2 => tukku ; 3 => nfs ! 3 ; 4 => nfs ! 4 ; - 5 => nfs ! 5 + 5 => nfs ! 5 } ; in nForms2N nfs_fixed ** {lock_N = <> } ; @@ -381,7 +381,7 @@ oper 1 => paadi ; 2 => paati ; 3 => nfs ! 3 ; - 4 => nfs ! 4 ; + 4 => nfs ! 4 ; 5 => paate } ; in nForms2N nfs_fixed ** {lock_N = <> } ; @@ -510,7 +510,7 @@ oper -- voolik/vooliku/voolikut <_ + #c, _ + #v, _ + #v + "t"> => hjk_type_IVb_audit tukk u ; - _ => nForms2 tukk tuku + _ => nForms2 tukk tuku } ; nForms4 : (_,_,_,_ : Str) -> NForms = \paat,paadi,paati,paate -> @@ -518,33 +518,33 @@ oper -- distinguish between joonis and segadus <_ +("ne"|"s"), _+"se", _+"st", _+"seid"> => hjk_type_Va_otsene paat ; <_ +("ne"|"s"), _+"se", _+"st", _+"si"> => hjk_type_Vb_oluline paat ; - + <_ +"ne", _+"se", _+"set", _+"seid"> => nForms3 paat paadi paati ; -- -ne adjectives ('algne') are not like 'tõuge' --distinguish between kõne and aine - <_ +"e", _+"e", _+"et", _+"sid"> => hjk_type_III_ratsu paat ; + <_ +"e", _+"e", _+"et", _+"sid"> => hjk_type_III_ratsu paat ; <_ +"e", _+"e", _+"et", _+"eid"> => hjk_type_VII_touge2 paat paadi ; - _ => nForms3 paat paadi paati + _ => nForms3 paat paadi paati } ; {- --Version that uses pl gen instead of pl part - nForms4 : (_,_,_,_ : Str) -> NForms = \paat,paadi,paati,paatide -> + nForms4 : (_,_,_,_ : Str) -> NForms = \paat,paadi,paati,paatide -> case of { -- pl gen can't distinguish between joonis and segadus -- <_ +("ne"|"s"), _+"se", _+"st", _+"seid"> => hjk_type_Va_otsene paat ; -- <_ +("ne"|"s"), _+"se", _+"st", _+"si"> => hjk_type_Vb_oluline paat ; - + --pl gen can distinguish between kõne and aine --plus side that any noun that is formed with 4-arg, - --the user given forms are inserted to the paradigm, + --the user given forms are inserted to the paradigm, --and more forms are created from pl gen, none from pl part - <_ +"e", _+"e", _+"et", _+"de"> => hjk_type_III_ratsu paat ; + <_ +"e", _+"e", _+"et", _+"de"> => hjk_type_III_ratsu paat ; <_ +"e", _+"e", _+"et", _+"te"> => hjk_type_VII_touge2 paat paadi ; - _ => nForms3 paat paadi paati - } ; + _ => nForms3 paat paadi paati + } ; -} mkN2 = overload { @@ -553,12 +553,12 @@ oper } ; 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 Londonist Pariisi isPre2 = mkIsPre e ; -- Suomen voitto Ruotsista lock_N3 = <> } ; - + mkIsPre : Prep -> Bool = \p -> case p.c of { NPCase Gen => notB p.isPre ; -- Jussin veli (prep is , isPre becomes False) _ => True -- syyte Jussia vastaan, puhe Jussin puolesta @@ -588,7 +588,7 @@ oper mkA_1 : Str -> A = \x -> noun2adjDeg (mk1N x) ** {infl = Regular ; lock_A = <>} ; -- auxiliaries - mkAdjective : (_,_,_ : Adj) -> A = \hea,parem,parim -> + mkAdjective : (_,_,_ : Adj) -> A = \hea,parem,parim -> {s = table { Posit => hea.s ; Compar => parem.s ; @@ -601,8 +601,8 @@ oper -- Adjectives whose comparison forms are explicitly given. -- The inflection of these forms with the audit-rule always works. regAdjective : Noun -> Str -> Str -> A = \posit,compar,superl -> - mkAdjective - (noun2adj posit) + mkAdjective + (noun2adj posit) (noun2adjComp False (nForms2N (hjk_type_IVb_audit compar "a"))) (noun2adjComp False (nForms2N (hjk_type_IVb_audit superl "a"))) ; @@ -637,31 +637,31 @@ oper mkV : (aru : Str) -> (saama : V) -> V = mkPV ; -- particle verbs } ; - mk1V : Str -> V = \s -> - let vfs = vforms2V (vForms1 s) in + mk1V : Str -> V = \s -> + let vfs = vforms2V (vForms1 s) in vfs ** {sc = NPCase Nom ; lock_V = <>} ; - mk2V : (_,_ : Str) -> V = \x,y -> - let - vfs = vforms2V (vForms2 x y) + mk2V : (_,_ : Str) -> V = \x,y -> + let + vfs = vforms2V (vForms2 x y) in vfs ** {sc = NPCase Nom ; lock_V = <>} ; - mk3V : (_,_,_ : Str) -> V = \x,y,z -> - let - vfs = vforms2V (vForms3 x y z) + mk3V : (_,_,_ : Str) -> V = \x,y,z -> + let + vfs = vforms2V (vForms3 x y z) in vfs ** {sc = NPCase Nom ; lock_V = <>} ; - mk4V : (x1,_,_,x4 : Str) -> V = \a,b,c,d -> - let + mk4V : (x1,_,_,x4 : Str) -> V = \a,b,c,d -> + let vfs = vforms2V (vForms4 a b c d) in vfs ** {sc = NPCase Nom ; lock_V = <>} ; - mk8V : (x1,_,_,_,_,_,_,x8 : Str) -> V = \a,b,c,d,e,f,g,h -> + mk8V : (x1,_,_,_,_,_,_,x8 : Str) -> V = \a,b,c,d,e,f,g,h -> let vfs = vforms2V (vForms8 a b c d e f g h) in vfs ** {sc = NPCase Nom ; lock_V = <>} ; mkPV : (aru : Str) -> (saama : V) -> V = \aru,saama -> {s = saama.s ; p = aru ; sc = saama.sc ; lock_V = <> } ; - - - -- This used to be the last case: _ => Predef.error (["expected infinitive, found"] ++ ottaa) - -- regexp example: ("" | ?) + ("a" | "e" | "i") + _ + "aa" => + + + -- This used to be the last case: _ => Predef.error (["expected infinitive, found"] ++ ottaa) + -- regexp example: ("" | ?) + ("a" | "e" | "i") + _ + "aa" => vForms1 : Str -> VForms = \lugema -> let luge = Predef.tk 2 lugema ; @@ -672,7 +672,7 @@ oper -- Small class of CVVma ? + ("ä"|"õ"|"i") + "ima" => cKaima lugema ; --käima,viima,võima - ? + ("aa"|"ee"|"ää") + "ma" => + ? + ("aa"|"ee"|"ää") + "ma" => cSaama lugema ; -- saama,jääma,keema ? + ("oo"|"öö"|"üü") + "ma" => cJooma lugema ; --jooma,looma,lööma,müüma,pooma,sööma,tooma @@ -680,30 +680,30 @@ oper -- TS 53 _ + #c + #v + "elema" => cTegelema lugema ; --not aelema - + -- TS 54 -- Small class, just list all members ("tule"|"sure"|"pane") + "ma" => cTulema lugema ; - + -- TS 55-57 -- Consonant gradation -- Regular (55-56)'leppima' and irregular (57) 'lugema' -- For reliable results regarding consonant gradation, use mk3V _ + "ndima" => cLeppima lugema ; - _ + #lmnr + ("k"|"p"|"t"|"b") + ("ima"|"uma") => + _ + #lmnr + ("k"|"p"|"t"|"b") + ("ima"|"uma") => cLeppima lugema ; - _ + ("sk"|"ps"|"ks"|"ts"|"pl") + ("ima") => --|"uma") => + _ + ("sk"|"ps"|"ks"|"ts"|"pl") + ("ima") => --|"uma") => cLeppima lugema ; - _ + ("hk"|"hm"|"hn"|"hr"|"ht") + ("ima") => --most *hCuma are TS 51 (muutuma) + _ + ("hk"|"hm"|"hn"|"hr"|"ht") + ("ima") => --most *hCuma are TS 51 (muutuma) cLeppima lugema ; _ + #c + "ssima" => --weaker *ss = *ss; should be weaker Css = Cs cLugema lugema ; - _ + ("pp"|"kk"|"tt"|"ss"|"ff"|"nn"|"mm"|"ll"|"rr") + ("ima"|"uma") => + _ + ("pp"|"kk"|"tt"|"ss"|"ff"|"nn"|"mm"|"ll"|"rr") + ("ima"|"uma") => cLeppima lugema ; - - -- TS 59 (petma, tapma) + + -- TS 59 (petma, tapma) -- Use mk4V for TS 60 (jätma, võtma) ? + #v + ("tma"|"pma") => cPetma lugema (luge + "etakse") ; @@ -714,31 +714,31 @@ oper -- TS 61 (laulma,kuulma,naerma,möönma) -- Default vowel e for lma, a for (r|n)ma. -- Other vowel with mk3V. - _ + "lma" => - cKuulma lugema (loe + "eb") ; + _ + "lma" => + cKuulma lugema (loe + "eb") ; _ + ("r"|"n") + "ma" => cKuulma lugema (loe + "ab") ; - + -- TS 63 (andma,hoidma) -- Other vowel than a (tundma~tunneb) with mk3V _ + "dma" => cAndma lugema (loe + "ab") ; - + -- TS 62, 64 (tõusma,mõskma), default vowel e -- 62 alt form (jooksma,joosta) with mk2V -- Other vowel than e with mk3V - _ + #c + "ma" => + _ + #c + "ma" => cLaskma lugema (loe + "eb") ; - + -- TS 65 (pesema) #c + #v + "sema" => cPesema lugema ; - + -- TS 66 (nägema) -- Small class, just list all members ("nägema"|"tegema") => cNagema lugema ; - + -- TS 67-68 with mk2V -- no 100% way to distinguish from 50-52 that end in ama @@ -754,7 +754,7 @@ oper -- Default case _ => cElama lugema - } ; + } ; vForms2 : (_,_ : Str) -> VForms = \petma,petta -> -- Arguments: ma infinitive, da infinitive @@ -781,22 +781,22 @@ oper -- * Non-detectable gradation (sattuma~satub ; pettuma~pettub) -- * Non-default vowel in b for TS 58-64 (laulma~laulab) case of { - + --to be sure about vowel in b <_ + "dma", _ + "da", _> => cAndma taguma taob ; <_, _ + #vv + #lmnr + "da", _> => cKuulma taguma taob ; - <_, _ + #c + "ta", _> => cLaskma taguma taob ; + <_, _ + #c + "ta", _> => cLaskma taguma taob ; --irregular gradation <_, _, (""|#c) + #c + #v + #v + "b"> => cLugema taguma ; --57 --to be sure about consonant gradation <_ + #c + "lema", _, _> => vForms2 taguma taguda ; --catch "-Clema" first - <_ + #v + "ma", _+"da", _> => cSattumaPettuma taguma taob ; + <_ + #v + "ma", _+"da", _> => cSattumaPettuma taguma taob ; - <_,_,_> => vForms2 taguma taguda + <_,_,_> => vForms2 taguma taguda } ; - + vForms4 : (x1,_,_,x4 : Str) -> VForms = \jatma,jatta,jatab,jaetakse -> -- 4 forms needed to get full paradigm for regular verbs -- (source: http://www.eki.ee/books/ekk09/index.php?p=3&p1=5&id=227) @@ -804,7 +804,7 @@ oper -- Filter out known irregularities and give rest to regVForms. -- Not trying to match TS 49 ; can't separate käima (49) from täima (50), or detect compounds like taaslooma. case of { - <_, _+("kka"|"ppa"|"tta"), + <_, _+("kka"|"ppa"|"tta"), _, _+"takse"> => cPetma jatma jaetakse ; <_ + "dma", _, _, _+"takse"> => cAndma jatma jatab ; @@ -813,15 +813,15 @@ oper <_, _ + "ha", _, _> => cNagema jatma ; <_ + #v + "sema", _ + "sta", _, _> => cPesema jatma ; <_,_,_,_> => regVForms jatma jatta jatab jaetakse - } ; - + } ; + caseV c v = {s = v.s ; p = v.p; sc = NPCase c ; lock_V = <>} ; vOlema = verbOlema ** {sc = NPCase Nom ; lock_V = <>} ; vMinema = verbMinema ** {sc = NPCase Nom ; lock_V = <>} ; 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 ; @@ -837,13 +837,13 @@ oper dirV2 : V -> V2 ; mkV3 = overload { - mkV3 : V -> Prep -> Prep -> V3 = \v,p,q -> v ** {c2 = p ; c3 = q ; lock_V3 = <>} ; - mkV2 : V -> V3 = \v -> v ** {c2 = accPrep ; - c3 = (casePrep allative) ; - lock_V3 = <>} ; - mkV2 : Str -> V3 = \str -> (mkV str) ** {c2 = accPrep ; - c3 = (casePrep allative) ; - lock_V3 = <>} ; + mkV3 : V -> Prep -> Prep -> V3 = \v,p,q -> v ** {c2 = p ; c3 = q ; lock_V3 = <>} ; + mkV2 : V -> V3 = \v -> v ** {c2 = accPrep ; + c3 = (casePrep allative) ; + lock_V3 = <>} ; + mkV2 : Str -> V3 = \str -> (mkV str) ** {c2 = accPrep ; + c3 = (casePrep allative) ; + lock_V3 = <>} ; } ; dirV3 v p = mkV3 v accPrep (casePrep p) ; dirdirV3 v = dirV3 v allative ; @@ -855,7 +855,7 @@ oper mkVV = overload { mkVV : V -> VV = \v -> mkVVf v infDa ; mkVV : Str -> VV = \str -> mkVVf (mkV str) infDa ; - } ; + } ; mkVVf v f = v ** {vi = f ; lock_VV = <>} ; mkVQ = overload { mkVQ : V -> VQ = \v -> v ** {lock_VQ = <>} ; @@ -876,7 +876,7 @@ oper mkV2V : V -> Prep -> V2V = \v,p -> mkV2Vf v p infMa ; mkV2V : V -> V2V = \v -> mkV2Vf v (casePrep genitive) infMa ; mkV2V : Str -> V2V = \str -> mkV2Vf (mkV str) (casePrep genitive) infMa ; - } ; + } ; mkV2Vf v p f = mk2V2 v p ** {vi = f ; lock_V2V = <>} ; mkVA = overload { @@ -885,13 +885,13 @@ oper mkVA : Str -> VA = \str -> (mkV str) ** {c2 = casePrep translative ; lock_VA = <>} ; } ; - mkV2A = overload { + mkV2A = overload { mkV2A : V -> Prep -> Prep -> V2A = \v,p,q -> v ** {c2 = p ; c3 = q ; lock_V2A = <>} ; - mkV2A : V -> V2A = \v -> v ** {c2 = casePrep genitive ; - c3 = casePrep translative ; + mkV2A : V -> V2A = \v -> v ** {c2 = casePrep genitive ; + c3 = casePrep translative ; lock_V2A = <>} ; - mkV2A : Str -> V2A = \str -> (mkV str) ** {c2 = casePrep genitive ; - c3 = casePrep translative ; + mkV2A : Str -> V2A = \str -> (mkV str) ** {c2 = casePrep genitive ; + c3 = casePrep translative ; lock_V2A = <>} ; } ; diff --git a/src/estonian/QuestionEst.gf b/src/estonian/QuestionEst.gf index 2d0ecdbfd..58a69f6b7 100644 --- a/src/estonian/QuestionEst.gf +++ b/src/estonian/QuestionEst.gf @@ -8,16 +8,16 @@ concrete QuestionEst of Question = CatEst ** open ResEst, Prelude in { s = \\t,a,p => cl.s ! t ! a ! p ! SQuest } ; - QuestVP ip vp = - let + QuestVP ip vp = + let cl = mkClause (subjForm (ip ** {isPron = False ; a = agrP3 ip.n}) vp.sc) (agrP3 ip.n) vp in { s = \\t,a,p => cl.s ! t ! a ! p ! SDecl } ; QuestSlash ip slash = { - s = \\t,a,p => - let + s = \\t,a,p => + let cls = slash.s ! t ! a ! p ; who = appCompl True p slash.c2 (ip ** {a = agrP3 ip.n ; isPron = False}) in @@ -29,15 +29,15 @@ concrete QuestionEst of Question = CatEst ** open ResEst, Prelude in { } ; QuestIComp icomp np = { - s = \\t,a,p => - let + s = \\t,a,p => + let vp = predV (verbOlema ** {sc = NPCase Nom}) ; cl = mkClause (subjForm np vp.sc) np.a vp ; in 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})} ; AdvIP ip adv = { @@ -46,15 +46,15 @@ concrete QuestionEst of Question = CatEst ** open ResEst, Prelude in { } ; -- The computation of $ncase$ is a special case of that in $NounEst.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... IdetCN idet cn = let n = idet.n in { - s = \\c => - let + s = \\c => + let k : Case = npform2case n c ; icase : Case = Nom ; --case k of { --mis kassiga - -- (Ess|Abess|Comit|Termin) => Gen ; + -- (Ess|Abess|Comit|Termin) => Gen ; -- _ => k -- } ; ncase : NForm = case of { @@ -63,33 +63,33 @@ concrete QuestionEst of Question = CatEst ** open ResEst, Prelude in { _ => NCase n k -- mitkä kytkimet } in - idet.s ! icase ++ cn.s ! ncase ; + idet.s ! icase ++ cn.s ! ncase ; n = n } ; IdetIP idet = let n = idet.n in { - s = \\c => - let + s = \\c => + let k = npform2case n c ; in - idet.s ! k ; + idet.s ! k ; n = n } ; - IdetQuant idet num = - let + IdetQuant idet num = + let n = num.n ; - isn = num.isNum + isn = num.isNum in { - s = \\k => - let + s = \\k => + let ncase = case of { => NCase Sg Part ; -- mitkä kolme kytkintä <_, True> => NCase Sg k ; -- miksi kolmeksi kytkimeksi _ => NCase n k -- mitkä kytkimet } in - idet.s ! n ! k ++ num.s ! Sg ! k ; + idet.s ! n ! k ++ num.s ! Sg ! k ; n = n ; isNum = isn } ; diff --git a/src/estonian/RelativeEst.gf b/src/estonian/RelativeEst.gf index 705d77a86..4f90bb254 100644 --- a/src/estonian/RelativeEst.gf +++ b/src/estonian/RelativeEst.gf @@ -11,14 +11,14 @@ concrete RelativeEst of Relative = CatEst ** open Prelude, ResEst, MorphoEst in } ; RelVP rp vp = { - s = \\t,ant,b,ag => - let + s = \\t,ant,b,ag => + let agr = case rp.a of { RNoAg => ag ; RAg a => a } ; - cl = mkClause - (subjForm {s = rp.s ! (complNumAgr agr) ; + cl = mkClause + (subjForm {s = rp.s ! (complNumAgr agr) ; a = agr ; isPron = False} vp.sc) agr vp in cl.s ! t ! ant ! b ! SDecl ; @@ -26,8 +26,8 @@ concrete RelativeEst of Relative = CatEst ** open Prelude, ResEst, MorphoEst in } ; RelSlash rp slash = { - s = \\t,a,p,ag => - let + s = \\t,a,p,ag => + let cls = slash.s ! t ! a ! p ; who = appCompl True p slash.c2 (rp2np (complNumAgr ag) rp) in diff --git a/src/estonian/ResEst.gf b/src/estonian/ResEst.gf index 0b72ab543..1e123dd48 100644 --- a/src/estonian/ResEst.gf +++ b/src/estonian/ResEst.gf @@ -15,11 +15,11 @@ resource ResEst = ParamX ** open Prelude in { -- This is the $Case$ as needed for both nouns and $NP$s. param - Case = Nom | Gen | Part - | Illat | Iness | Elat | Allat | Adess | Ablat + Case = Nom | Gen | Part + | Illat | Iness | Elat | Allat | Adess | Ablat | Transl | Ess | Termin | Abess | Comit; - NForm = NCase Number Case ; + NForm = NCase Number Case ; -- Agreement of $NP$ has number*person and the polite second ("te olette valmis"). @@ -56,13 +56,13 @@ oper --2 Noun phrases -- --- Two forms of *virtual accusative* are needed for nouns in singular, --- the nominative and the genitive one ("loen raamatu"/"loe raamat"). --- For nouns in plural, only a nominative accusative exists in positive clauses. +-- Two forms of *virtual accusative* are needed for nouns in singular, +-- the nominative and the genitive one ("loen raamatu"/"loe raamat"). +-- For nouns in plural, only a nominative accusative exists in positive clauses. -- Pronouns use the partitive as their accusative form ("mind", "sind"), in both -- positive and negative, indicative and imperative clauses. -param +param NPForm = NPCase Case | NPAcc ; oper @@ -80,14 +80,14 @@ oper -- A special form is needed for the negated plural imperative. param - VForm = + VForm = Inf InfForm | Presn Number Person | Impf Number Person | Condit Number Person | ConditPass --loetagu | Imper Number - | ImperP3 + | ImperP3 | ImperP1Pl | ImperPass | PassPresn Bool @@ -98,11 +98,11 @@ param ; Voice = Act | Pass ; - + InfForm = InfDa -- lugeda - | InfDes -- lugedes - | InfMa -- lugema + | InfDes -- lugedes + | InfMa -- lugema | InfMas -- lugemas | InfMast -- lugemast | InfMata -- lugemata @@ -112,7 +112,7 @@ param SType = SDecl | SQuest | SInv ; --2 For $Relative$ - + RAgr = RNoAg | RAg Agr ; --2 For $Numeral$ @@ -122,14 +122,14 @@ param --2 Transformations between parameter types oper - agrP3 : Number -> Agr = \n -> + agrP3 : Number -> Agr = \n -> Ag n P3 ; conjAgr : Agr -> Agr -> Agr = \a,b -> case of { => Ag (conjNumber n m) (conjPerson p q) ; => Ag Pl (conjPerson p P2) ; => Ag Pl (conjPerson p P2) ; - _ => b + _ => b } ; --- @@ -178,33 +178,33 @@ param param VIForm = - VIFin Tense + VIFin Tense | VIInf InfForm | VIPass Tense - | VIPresPart - | VIImper - ; + | VIPresPart + | VIImper + ; oper VP : Type = { - s : VIForm => Anteriority => Polarity => Agr => {fin, inf : Str} ; + s : VIForm => Anteriority => Polarity => Agr => {fin, inf : Str} ; s2 : Bool => Polarity => Agr => Str ; -- raamat/raamatu/raamatut adv : Str ; p : Str ; --uninflecting component in multi-word verbs ext : Str ; sc : NPForm ; } ; - + predV : (Verb ** {sc : NPForm}) -> VP = \verb -> { - s = \\vi,ant,b,agr0 => + s = \\vi,ant,b,agr0 => let agr = verbAgr agr0 ; verbs = verb.s ; part : Str = case vi of { - VIPass _ => verbs ! (PastPart Pass) ; + VIPass _ => verbs ! (PastPart Pass) ; _ => verbs ! (PastPart Act) - } ; - + } ; + einegole : Str * Str * Str = case of { => <"ei", verbs ! Imper Sg, "ole"> ; => <"ei", verbs ! Imper Sg, "ole"> ; @@ -217,23 +217,23 @@ oper => <"ei", verbs ! ConditPass, "oleks"> ; --# notpresent => <"ei", verbs ! PassImpf False, "olnud"> ; --# notpresent => <"ei", verbs ! PresPart Act, "olev"> ; --# notpresent - => <"ei", verbs ! Inf i, verbOlema.s ! Inf i> + => <"ei", verbs ! Inf i, verbOlema.s ! Inf i> } ; - + ei : Str = einegole.p1 ; neg : Str = einegole.p2 ; ole : Str = einegole.p3 ; - + olema : VForm => Str = verbOlema.s ; - + vf : Str -> Str -> {fin, inf : Str} = \x,y -> {fin = x ; inf = y} ; - + mkvf : VForm -> {fin, inf : Str} = \p -> case of { => vf (verbs ! p) [] ; - => vf (olema ! p) part ; + => vf (olema ! p) part ; => vf (ei ++ neg) [] ; - => vf (ei ++ ole) part + => vf (ei ++ ole) part } ; passPol = case b of {Pos => True ; Neg => False} ; @@ -256,19 +256,19 @@ oper adv = [] ; ext = [] ; --relative clause p = verb.p ; --particle verbs - sc = verb.sc + sc = verb.sc } ; - insertObj : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> + insertObj : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> vp ** { s2 = \\fin,b,a => vp.s2 ! fin ! b ! a ++ obj ! fin ! b ! a } ; - insertObjPre : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> + insertObjPre : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> vp ** { s2 = \\fin,b,a => obj ! fin ! b ! a ++ vp.s2 ! fin ! b ! a } ; - insertAdv : Str -> VP -> VP = \adv,vp -> + insertAdv : Str -> VP -> VP = \adv,vp -> vp ** { adv = vp.adv ++ adv } ; - insertExtrapos : Str -> VP -> VP = \obj,vp -> + insertExtrapos : Str -> VP -> VP = \obj,vp -> vp ** { ext = vp.ext ++ obj } ; -- For $Sentence$. @@ -286,12 +286,12 @@ oper -- declarative sentence with the yes/no-queryword "kas". -- SQuest: "kas" + SDecl -- It would be also correct to use the Finnish structure, just without the ko-particle. - -- Inari: added a third SType, SInv. + -- Inari: added a third SType, SInv. -- Not sure if SInv is needed, but keeping it for possible future use. -- There's need for an inverted word order with auxiliary verbs; infVP handles that. ComplVV calls infVP, which inverts the word order for the complement VP, and puts it into the resulting VP's `compl' field. -- SInv made by mkClause would be for cases where you just need to construct an inverted word order, and then call it from some other place; application grammar (TODO: api oper for SType) or ExtraEst. - mkClause : (Polarity -> Str) -> Agr -> VP -> Clause = \sub,agr,vp -> - { s = \\t,a,b => + mkClause : (Polarity -> Str) -> Agr -> VP -> Clause = \sub,agr,vp -> + { s = \\t,a,b => let c = (mkClausePlus sub agr vp).s ! t ! a ! b ; -- saan sinust aru 0 @@ -300,51 +300,51 @@ oper -- [sind näha] 0 tahtnud -- täna olen ma sinust aru saanud invCl = c.adv ++ c.fin ++ c.subj ++ c.compl ++ c.p ++ c.inf ++ c.ext - in + in table { SDecl => declCl ; SQuest => "kas" ++ declCl ; - SInv => invCl + SInv => invCl } } ; - existClause : (Polarity -> Str) -> Agr -> VP -> Clause = \sub,agr,vp -> - { s = \\t,a,b => + existClause : (Polarity -> Str) -> Agr -> VP -> Clause = \sub,agr,vp -> + { s = \\t,a,b => let c = (mkClausePlus sub agr vp).s ! t ! a ! b ; -- (mis) on olnud olemas (lammas) declCl = c.subj ++ c.fin ++ c.inf ++ c.compl ; - in + in table { SQuest => "kas" ++ declCl ; - _ => declCl + _ => declCl } } ; mkClausePlus : (Polarity -> Str) -> Agr -> VP -> ClausePlus = \sub,agr,vp -> { - s = \\t,a,b => - let + s = \\t,a,b => + let agrfin = case vp.sc of { NPCase Nom => ; _ => -- minule meeldib, minul on } ; verb = vp.s ! VIFin t ! a ! b ! agrfin.p1 ; - in {subj = sub b ; - fin = verb.fin ; - inf = verb.inf ; + in {subj = sub b ; + fin = verb.fin ; + inf = verb.inf ; compl = vp.s2 ! agrfin.p2 ! b ! agr ; p = vp.p ; - adv = vp.adv ; - ext = vp.ext ; + adv = vp.adv ; + ext = vp.ext ; } } ; - insertKinClausePlus : Predef.Ints 1 -> ClausePlus -> ClausePlus = \p,cl -> { + insertKinClausePlus : Predef.Ints 1 -> ClausePlus -> ClausePlus = \p,cl -> { s = \\t,a,b => - let - c = cl.s ! t ! a ! b + let + c = cl.s ! t ! a ! b in case p of { 0 => {subj = c.subj ++ gi ; fin = c.fin ; inf = c.inf ; -- Jussikin nukkuu @@ -354,37 +354,37 @@ oper } } ; - insertObjClausePlus : Predef.Ints 1 -> Bool -> (Polarity => Str) -> ClausePlus -> ClausePlus = - \p,ifKin,obj,cl -> { + insertObjClausePlus : Predef.Ints 1 -> Bool -> (Polarity => Str) -> ClausePlus -> ClausePlus = + \p,ifKin,obj,cl -> { s = \\t,a,b => - let + let c = cl.s ! t ! a ! b ; co = obj ! b ++ if_then_Str ifKin (kin b) [] ; 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 ; p = c.p ; 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 ; p = c.p ; adv = co ; ext = c.adv ++ c.ext ; h = c.h} -- Jussi nukkuu nytkin } } ; - kin : Polarity -> Str = + kin : Polarity -> Str = \p -> case p of {Pos => "gi" ; Neg => "gi"} ; - - --allomorph "ki", depends only on phonetic rules "üks+ki", "ühe+gi" + + --allomorph "ki", depends only on phonetic rules "üks+ki", "ühe+gi" --waiting for post construction in GF :P gi : Str = "gi" ; -- This is used for subjects of passives: therefore isFin in False. - subjForm : NP -> NPForm -> Polarity -> Str = \np,sc,b -> + subjForm : NP -> NPForm -> Polarity -> Str = \np,sc,b -> appCompl False b {s = [] ; c = sc ; isPre = True} np ; infVP : NPForm -> Polarity -> Agr -> VP -> InfForm -> Str = infVPAnt Simul ; infVPAnt : Anteriority -> NPForm -> Polarity -> Agr -> VP -> InfForm -> Str = \ant,sc,pol,agr,vp,vi -> - let + let fin = case sc of { -- subject case NPCase Nom => True ; -- mina tahan joosta _ => False -- minul peab auto olema @@ -399,12 +399,12 @@ oper --TODO adv placement? --TODO inf ++ fin or fin ++ inf? does it ever become a case here? --- The definitions below were moved here from $MorphoEst$ so that +-- The definitions below were moved here from $MorphoEst$ so that -- auxiliary of predication can be defined. - verbOlema : Verb = + verbOlema : Verb = let olema = mkVerb - "olema" "olla" "olen" "ollakse" + "olema" "olla" "olen" "ollakse" "olge" "oli" "olnud" "oldud" in {s = table { Presn _ P3 => "on" ; @@ -413,9 +413,9 @@ oper p = [] } ; - verbMinema : Verb = - let minema = mkVerb - "minema" "minna" "läheb" "minnakse" + verbMinema : Verb = + let minema = mkVerb + "minema" "minna" "läheb" "minnakse" "minge" "läks" "läinud" "mindud" in {s = table { Impf Sg P1 => "läksin" ; @@ -428,20 +428,20 @@ oper } ; p = [] } ; - + --3 Verbs --Auxiliary for internal use - mkVerb : (x1,_,_,_,_,_,_,x8 : Str) -> Verb = - \tulema,tulla,tuleb,tullakse,tulge,tuli,tulnud,tuldud -> - vforms2V (vForms8 + mkVerb : (x1,_,_,_,_,_,_,x8 : Str) -> Verb = + \tulema,tulla,tuleb,tullakse,tulge,tuli,tulnud,tuldud -> + vforms2V (vForms8 tulema tulla tuleb tullakse tulge tuli tulnud tuldud ) ; --below moved here from MorphoEst VForms : Type = Predef.Ints 7 => Str ; - + vForms8 : (x1,_,_,_,_,_,_,x8 : Str) -> VForms = \tulema,tulla,tuleb,tullakse,tulge,tuli,tulnud,tuldud -> table { @@ -455,34 +455,34 @@ oper 7 => tuldud } ; - vforms2V : VForms -> Verb = \vh -> + vforms2V : VForms -> Verb = \vh -> let - tulema = vh ! 0 ; - tulla = vh ! 1 ; - tuleb = vh ! 2 ; - tullakse = vh ! 3 ; --juuakse; loetakse - tulge = vh ! 4 ; --necessary for tulla, surra (otherwise *tulege, *surege) + tulema = vh ! 0 ; + tulla = vh ! 1 ; + tuleb = vh ! 2 ; + tullakse = vh ! 3 ; --juuakse; loetakse + tulge = vh ! 4 ; --necessary for tulla, surra (otherwise *tulege, *surege) tuli = vh ! 5 ; --necessary for jooma-juua-jõi tulnud = vh ! 6 ; tuldud = vh ! 7 ; --necessary for t/d in tuldi; loeti - + tull_ = init tulla ; --juu(a); saad(a); tull(a); tulles = tull_ + "es" ; --juues; saades; tulles; - + tule_ = init tuleb ; - + lask_ = Predef.tk 2 tulema ; laulev = case (last lask_) of { --sooma~soov ; laulma~laulev ("a"|"e"|"i"|"o"|"u"|"õ"|"ä"|"ö"|"ü") => lask_ + "v" ; _ => lask_ + "ev" } ; --consonant stem in -ma, add e - + --imperfect stem kaisi_ = case (Predef.dp 3 tuli) of { "sis" => lask_ + "i" ; --tõusin, tõusis _ + "i" => tuli ; --jõin, jõi _ => lask_ + "si" --käisin, käis; muutsin, muutis - }; - + }; + tuld_ = Predef.tk 2 tuldud ; --d/t choice for tuldi etc. tulgu = (init tulge) + "u" ; in @@ -510,13 +510,13 @@ oper ConditPass => tuld_ + "aks" ; --# notpresent Imper Sg => tule_ ; -- tule / ära tule Imper Pl => tulge ; -- tulge / ärge tulge - ImperP3 => tulgu ; -- tulgu (ta/nad) + ImperP3 => tulgu ; -- tulgu (ta/nad) ImperP1Pl => tulge + "m" ; -- tulgem ImperPass => tuld_ + "agu" ; --tuldagu PassPresn True => tullakse ; PassPresn False => tuld_ + "a" ; --da or ta PassImpf True => tuld_ + "i" ; --di or ti - PassImpf False => tuldud ; + PassImpf False => tuldud ; Quotative Act => lask_ + "vat" ; Quotative Pass => tuld_ + "avat" ; --d or t PresPart Act => laulev ; @@ -527,10 +527,10 @@ oper Inf InfMas => tulema + "s" ; Inf InfMast => tulema + "st" ; Inf InfMata => tulema + "ta" ; - Inf InfMaks => tulema + "ks" + Inf InfMaks => tulema + "ks" } ; sc = NPCase Nom ; - p = [] + p = [] } ; -- For regular verbs, paradigm from 4 base forms @@ -547,12 +547,12 @@ oper "t" => "k" ; _ => "g" } ; - toit_ = case (last vestle_) of { + toit_ = case (last vestle_) of { ("t"|"d") => vesteld_ ; --toit(ma) -> toitke; _ => vestel_ --vestle(ma) -> vestelge } ; - laski_ = case (last vestle_) of { - ("a"|"e"|"i"|"o"|"u"|"õ"|"ä"|"ö"|"ü") + laski_ = case (last vestle_) of { + ("a"|"e"|"i"|"o"|"u"|"õ"|"ä"|"ö"|"ü") => vestle_ ; --vestle(ma) -> vestles _ => vestle_ + "i" --lask(ma) -> laskis } ; @@ -566,7 +566,7 @@ oper (laski_ + "s") --ma: kindla kõneviisi lihtmineviku pöörded; (toit_ + "nud") --da: isikulise tegumoe mineviku kesksõna (jaet_ + "ud"); --takse: ülejäänud umbisikulise tgm vormid - + regVerb : (_,_,_,_ : Str) -> Verb = \kinkima,kinkida,kingib,kingitakse -> vforms2V (regVForms kinkima kinkida kingib kingitakse) ; @@ -580,8 +580,8 @@ oper -- parem -> paremini -- parim -> kõige paremini | parimalt? noun2adjComp : Bool -> Noun -> Adj = \isPos,tuore -> - let - tuoreesti = Predef.tk 1 (tuore.s ! NCase Sg Gen) + "sti" ; + let + tuoreesti = Predef.tk 1 (tuore.s ! NCase Sg Gen) + "sti" ; tuoreemmin = Predef.tk 2 (tuore.s ! NCase Sg Gen) + "in" in {s = table { AN f => tuore.s ! f ; @@ -602,21 +602,21 @@ oper compAP = icompAP [] ; icompAP : Str -> {s : Bool => NForm => Str} -> {s : Agr => Str} = \kui,ap -> - { s = \\agr => - let n = complNumAgr agr ; + { s = \\agr => + let n = complNumAgr agr ; in kui ++ ap.s ! False ! NCase n Nom } ; - - compCN : Noun -> {s : Agr => Str} = \cn -> - { s = \\agr => - let n = complNumAgr agr ; + + compCN : Noun -> {s : Agr => Str} = \cn -> + { s = \\agr => + let n = complNumAgr agr ; in cn.s ! NCase n Nom } ; --- Reflexive pronoun. +-- Reflexive pronoun. --- Possessive could be shared with the more general $NounFin.DetCN$. - reflPron : Agr -> NP = \agr -> - let + reflPron : Agr -> NP = \agr -> + let ise = nForms2N (nForms6 "ise" "enda" "ennast" "endasse" "endi" "endid") ; n = case agr of { AgPol => Sg ; @@ -638,7 +638,7 @@ oper NForms : Type = Predef.Ints 5 => Str ; - nForms6 : (x1,_,_,_,_,x6 : Str) -> NForms = + nForms6 : (x1,_,_,_,_,x6 : Str) -> NForms = \jogi,joe,joge,joesse, -- sg nom, gen, part, ill jogede,jogesid -> table { -- pl gen, part, 0 => jogi ; @@ -646,7 +646,7 @@ oper 2 => joge ; 3 => joesse ; 4 => jogede ; - 5 => jogesid + 5 => jogesid } ; n2nforms : Noun -> NForms = \ukko -> table { @@ -655,12 +655,12 @@ oper 2 => ukko.s ! NCase Sg Part ; 3 => ukko.s ! NCase Sg Illat ; 4 => ukko.s ! NCase Pl Gen ; - 5 => ukko.s ! NCase Pl Part + 5 => ukko.s ! NCase Pl Part } ; -- Converts 6 given strings (Nom, Gen, Part, Illat, Gen, Part) into Noun -- http://www.eki.ee/books/ekk09/index.php?p=3&p1=5&id=226 - nForms2N : NForms -> Noun = \f -> + nForms2N : NForms -> Noun = \f -> let jogi = f ! 0 ; joe = f ! 1 ; @@ -668,7 +668,7 @@ oper joesse = f ! 3 ; jogede = f ! 4 ; jogesid = f ! 5 ; - in + in {s = table { NCase Sg Nom => jogi ; NCase Sg Gen => joe ; @@ -698,7 +698,7 @@ oper NCase Pl Allat => jogede + "le" ; NCase Pl Abess => jogede + "ta" ; NCase Pl Comit => jogede + "ga" ; - NCase Pl Termin => jogede + "ni" + NCase Pl Termin => jogede + "ni" } --; -- lock_N = <> @@ -721,9 +721,9 @@ oper isDef : Bool } ; - heavyQuant : PQuant -> PQuant ** {sp : Number => Case => Str} = \d -> - d ** {sp = d.s} ; - PQuant : Type = - {s : Number => Case => Str ; isDef : Bool} ; + heavyQuant : PQuant -> PQuant ** {sp : Number => Case => Str} = \d -> + d ** {sp = d.s} ; + PQuant : Type = + {s : Number => Case => Str ; isDef : Bool} ; } diff --git a/src/estonian/SentenceEst.gf b/src/estonian/SentenceEst.gf index 4d5f6f3cb..f14b1e967 100644 --- a/src/estonian/SentenceEst.gf +++ b/src/estonian/SentenceEst.gf @@ -9,17 +9,17 @@ concrete SentenceEst of Sentence = CatEst ** open Prelude, ResEst in { PredSCVP sc vp = mkClause (\_ -> sc.s) (agrP3 Sg) vp ; ImpVP vp = { - s = \\pol,agr => - let + s = \\pol,agr => + let verb = vp.s ! VIImper ! Simul ! pol ! agr ; compl = vp.s2 ! False ! pol ! agr ++ vp.ext --- False = like inf (osta auto) in --(ära) loe raamat(ut) läbi - verb.fin ++ verb.inf ++ compl ++ vp.p ; + verb.fin ++ verb.inf ++ compl ++ vp.p ; } ; -- 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.sc) np.a vp).s ! t ! a ! p ! SDecl ; c2 = vp.c2 } ; @@ -30,13 +30,13 @@ concrete SentenceEst of Sentence = CatEst ** open Prelude, ResEst in { } ; 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 } ; - SlashVS np vs slash = { - s = \\t,a,p => - (mkClause (subjForm np vs.sc) np.a + SlashVS np vs slash = { + s = \\t,a,p => + (mkClause (subjForm np vs.sc) np.a (insertExtrapos (etta_Conj ++ slash.s) (predV vs)) ).s ! t ! a ! p ! SDecl ; diff --git a/src/estonian/SymbolEst.gf b/src/estonian/SymbolEst.gf index 3517d5114..0d1000a68 100644 --- a/src/estonian/SymbolEst.gf +++ b/src/estonian/SymbolEst.gf @@ -29,7 +29,7 @@ lin SymbNum n = {s = \\_,_ => n.s ; isNum = True ; n = Pl} ; SymbOrd n = {s = \\_ => glue n.s "."} ; -lincat +lincat Symb, [Symb] = SS ; diff --git a/src/estonian/TerminologyEst.gf b/src/estonian/TerminologyEst.gf index 75344a2c1..4eb04c7fd 100644 --- a/src/estonian/TerminologyEst.gf +++ b/src/estonian/TerminologyEst.gf @@ -1,6 +1,6 @@ --# -path=.:../abstract:../common -concrete TerminologyEst of Terminology = CatEst ** open +concrete TerminologyEst of Terminology = CatEst ** open ResEst, ParadigmsEst, (G = GrammarEst), @@ -17,9 +17,9 @@ lincat ParameterType = G.N ; Parameter = G.N ; Modifier = G.A ; - + Heading = {s : Str} ; - + lin noun_Category = mkN "käändsõna" ; @@ -59,7 +59,7 @@ lin active_Parameter = mkN "isikuline tegumood" ; passive_Parameter = mkN "umbsikuline tegumood" ; - + imperative_Parameter = mkN "käskiv kõneviis" "käskiva kõneviisi"; indicative_Parameter = mkN "kindel kõneviis" "kindla kõneviisi"; conjunctive_Parameter = mkN "konjunktiiv" ; @@ -67,7 +67,7 @@ lin present_Parameter = mkN "olevik" ; past_Parameter = mkN "lihtminevik" ; - future_Parameter = mkN "futuur" ; ---- ??? + future_Parameter = mkN "futuur" ; ---- ??? conditional_Parameter = mkN "tingiv kõneviis" "tingiva kõneviisi"; perfect_Parameter = mkN "täisminevik" ; quotative_Parameter = mkN "kaudne kõneviis" "kaudse kõneviisi"; diff --git a/src/estonian/VerbEst.gf b/src/estonian/VerbEst.gf index 7f54194ab..3c8344a36 100644 --- a/src/estonian/VerbEst.gf +++ b/src/estonian/VerbEst.gf @@ -9,17 +9,17 @@ concrete VerbEst of Verb = CatEst ** open Prelude, ResEst in { SlashV2a v = predV v ** {c2 = v.c2} ; - Slash2V3 v np = - insertObj + Slash2V3 v np = + insertObj (\\fin,b,_ => appCompl fin b v.c2 np) (predV v) ** {c2 = v.c3} ; - Slash3V3 v np = - insertObj + Slash3V3 v np = + insertObj (\\fin,b,_ => appCompl fin b v.c3 np) (predV v) ** {c2 = v.c2} ; - ComplVV v vp = - insertObj - (\\_,b,a => infVP v.sc b a vp v.vi) - (predV {s = v.s ; + ComplVV v vp = + insertObj + (\\_,b,a => infVP v.sc b a vp v.vi) + (predV {s = v.s ; p = v.p ; sc = case vp.sc of { NPCase Nom => v.sc ; -- minul tuleb kirjutada (VV 'tulema' determines the subject case) @@ -30,47 +30,47 @@ concrete VerbEst of Verb = CatEst ** open Prelude, ResEst in { ComplVS v s = insertExtrapos (etta_Conj ++ s.s) (predV v) ; ComplVQ v q = insertExtrapos ( q.s) (predV v) ; - ComplVA v ap = - insertObj - (\\_,b,agr => + ComplVA v ap = + insertObj + (\\_,b,agr => let n = (complNumAgr agr) in ap.s ! False ! (NCase n (npform2case n v.c2.c))) --- v.cs.s ignored (predV v) ; - SlashV2S v s = + SlashV2S v s = insertExtrapos (etta_Conj ++ s.s) (predV v) ** {c2 = v.c2} ; - SlashV2Q v q = + SlashV2Q v q = insertExtrapos (q.s) (predV v) ** {c2 = v.c2} ; - SlashV2V v vp = + SlashV2V v vp = insertObj (\\_,b,a => infVP v.sc b a vp v.vi) (predV v) ** {c2 = v.c2} ; ---- different infinitives - SlashV2A v ap = - insertObj - (\\fin,b,_ => + SlashV2A v ap = + insertObj + (\\fin,b,_ => ap.s ! False ! (NCase Sg (npform2case Sg v.c3.c))) ----agr to obj (predV v) ** {c2 = v.c2} ; ComplSlash vp np = insertObjPre (\\fin,b,_ => appCompl fin b vp.c2 np) vp ; - UseComp comp = + UseComp comp = insertObj (\\_,_ => comp.s) (predV (verbOlema ** {sc = NPCase Nom})) ; - SlashVV v vp = - insertObj - (\\_,b,a => infVP v.sc b a vp v.vi) - (predV {s = v.s ; + SlashVV v vp = + insertObj + (\\_,b,a => infVP v.sc b a vp v.vi) + (predV {s = v.s ; p = v.p ; sc = case vp.sc of { NPCase Nom => v.sc ; -- minun täytyy pestä auto c => c -- minulla täytyy olla auto - } + } } ) ** {c2 = vp.c2} ; ---- correct ?? - SlashV2VNP v np vp = - insertObjPre + SlashV2VNP v np vp = + insertObjPre (\\fin,b,a => appCompl True b v.c2 np ++ ---- fin -> stack overflow - infVP v.sc b a vp v.vi) + infVP v.sc b a vp v.vi) (predV v) ** {c2 = vp.c2} ; AdvVP vp adv = insertAdv adv.s vp ; @@ -91,7 +91,7 @@ concrete VerbEst of Verb = CatEst ** open Prelude, ResEst in { ----b UseVS, UseVQ = \v -> v ** {c2 = {s = [] ; c = NPAcc ; isPre = True}} ; - CompAP = compAP ; + CompAP = compAP ; CompCN = compCN ; CompNP np = {s = \\_ => np.s ! NPCase Nom} ; CompAdv a = {s = \\_ => a.s} ; @@ -102,17 +102,17 @@ concrete VerbEst of Verb = CatEst ** open Prelude, ResEst in { --2 The object case -- -- The rules involved are ComplV2 and ComplVV above. --- The work is done jointly in ResEst.infVP and appCompl. +-- The work is done jointly in ResEst.infVP and appCompl. -- Cases to test: l -table (to see negated forms) --``` -- 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)))) -- 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)))) -- 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)))) --``` -- Unfortunately, there is no nice way to say "I want to have a car".