From 0c2471ad681b6a5caf17a817ca7dcd084c1ab848 Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 15 Oct 2026 08:08:11 +0200 Subject: [PATCH] extensions by Codex --- src/mongolian/AdverbMon.gf | 7 +- src/mongolian/CatMon.gf | 11 +- src/mongolian/ConjunctionMon.gf | 3 +- src/mongolian/ConstructionMon.gf | 45 +++++ src/mongolian/DictMon.gf | 72 ++++---- src/mongolian/DocumentationMon.gf | 265 ++++++++++++++++++++++++++++-- src/mongolian/ExtendMon.gf | 121 +++++++++++++- src/mongolian/ExtraMon.gf | 110 ++++++------- src/mongolian/GrammarMon.gf | 2 +- src/mongolian/IdiomMon.gf | 3 - src/mongolian/LangMon.gf | 1 + src/mongolian/NamesMon.gf | 15 ++ src/mongolian/NounMon.gf | 91 ++++++---- src/mongolian/NumeralMon.gf | 20 ++- src/mongolian/ParadigmsMon.gf | 20 ++- src/mongolian/ParadigmsMonO.gf | 4 +- src/mongolian/ResMon.gf | 2 +- src/mongolian/SentenceMon.gf | 6 +- src/mongolian/StructuralMon.gf | 35 ++-- src/mongolian/VerbMon.gf | 2 + 20 files changed, 658 insertions(+), 177 deletions(-) create mode 100644 src/mongolian/ConstructionMon.gf create mode 100644 src/mongolian/NamesMon.gf diff --git a/src/mongolian/AdverbMon.gf b/src/mongolian/AdverbMon.gf index 787f12f4d..af0a8afa6 100644 --- a/src/mongolian/AdverbMon.gf +++ b/src/mongolian/AdverbMon.gf @@ -21,7 +21,12 @@ lin PositAdAAdj a = a ; - SubjS subj s = {s = subj.s ++ s.s ! Sub Condl} ; + SubjS subj s = { + s = case subj.isPre of { + True => subj.s ++ s.s ! Sub Condl ; + False => s.s ! Sub Condl ++ subj.s + } + } ; AdnCAdv cadv = { s = cadv.s ++ cadv.c2.s diff --git a/src/mongolian/CatMon.gf b/src/mongolian/CatMon.gf index 9fe4a6e4a..f2239157c 100644 --- a/src/mongolian/CatMon.gf +++ b/src/mongolian/CatMon.gf @@ -61,8 +61,7 @@ lincat Det = { s : Str ; sp : RCase => Str ; -- substantival form - isNum : Bool ; -- true, if a numeral is present - isPoss : Bool ; -- true, if a possessive is present + n : Number ; isDef : Bool ; -- when definite, is true isPre : Bool } ; @@ -75,17 +74,17 @@ lincat Quant = { s : Number => Str ; sp : Number => NCase => Str ; - isPoss : Bool ; isDef : Bool } ; -- Numeral - Num = {s : Str ; sp : RCase => Str ; n : Number ; isNum : Bool} ; - Card = {s : Str ; sp : RCase => Str ; n : Number} ; + Num, Card = {s : Str ; sp : RCase => Str ; n : Number} ; Numeral = {s : CardOrd => Str; n : Number} ; Digits = {s : CardOrd => Str ; n : Number} ; Decimal = {s : CardOrd => Str ; n : Number; hasDot : Bool} ; + ACard = {s : Str} ; + DAP = {s : RCase => Str ; n : Number} ; -- Structural @@ -107,7 +106,7 @@ lincat N2 = Noun ** {c2 : Complement} ; N3 = Noun ** {c2,c3 : Complement} ; PN = {s : RCase => Str} ; - LN,GN,SN = {s : Str} ; + LN,GN,SN = {s : RCase => Str} ; Temp = {s : Str ; t : ClTense ; a : Anteriority} ; Tense = {s : Str ; t : ClTense} ; diff --git a/src/mongolian/ConjunctionMon.gf b/src/mongolian/ConjunctionMon.gf index 241ac5d2b..de244f96d 100644 --- a/src/mongolian/ConjunctionMon.gf +++ b/src/mongolian/ConjunctionMon.gf @@ -37,7 +37,6 @@ lin n = conjNumber x.n y.n ; p = conjPerson x.p y.p ; isPron = andB x.isPron y.isPron ; - isDef = andB x.isDef y.isDef } ; BaseAP = twoSS ; ConsAP = consrSS comma ; @@ -56,7 +55,7 @@ lincat [Adv],[AP],[IAdv] = {s1,s2 : Str} ; [S] = {s1,s2 : SType => Str} ; [RS] = {s1,s2 : ComplType => Str ; existSubject : Bool} ; - [NP] = {s1,s2 : RCase => Str ; n : Number ; p : Person ; isPron : Bool ; isDef : Bool} ; + [NP] = {s1,s2 : RCase => Str ; n : Number ; p : Person ; isPron : Bool} ; [CN] = {s1,s2 : Number => NCase => Str} ; } diff --git a/src/mongolian/ConstructionMon.gf b/src/mongolian/ConstructionMon.gf new file mode 100644 index 000000000..9f338b5d1 --- /dev/null +++ b/src/mongolian/ConstructionMon.gf @@ -0,0 +1,45 @@ +concrete ConstructionMon of Construction = CatMon ** + open Prelude, ResMon, ParadigmsMon in { + + lincat Timeunit, Hour, Weekday, Month, Monthday, Year = {s : Str} ; + + oper + fixedN : Str -> N = \s -> lin N {s = \\_ => s} ; + + lin + ready_VP = insertObj (\\_ => "бэлэн") (predV (auxToVerb auxBe)) ; + has_age_VP card = insertObj (\\_ => card.s ++ "настай") (predV (auxToVerb auxBe)) ; + n_units_AP card cn ap = {s = card.s ++ cn.s ! Sg ! NNom ++ ap.s} ; + n_units_of_NP card cn np = np ** { + s = \\rc => card.s ++ cn.s ! Sg ! NNom ++ np.s ! rc + } ; + cup_of_CN np = {s = \\_,nc => "нэг аяга" ++ np.s ! toRCase nc Definite} ; + + monday_Weekday = {s = "даваа"} ; + tuesday_Weekday = {s = "мягмар"} ; + wednesday_Weekday = {s = "лхагва"} ; + thursday_Weekday = {s = "пүрэв"} ; + friday_Weekday = {s = "баасан"} ; + saturday_Weekday = {s = "бямба"} ; + sunday_Weekday = {s = "ням"} ; + + january_Month = {s = "нэгдүгээр сар"} ; + february_Month = {s = "хоёрдугаар сар"} ; + march_Month = {s = "гуравдугаар сар"} ; + april_Month = {s = "дөрөвдүгээр сар"} ; + may_Month = {s = "тавдугаар сар"} ; + june_Month = {s = "зургаадугаар сар"} ; + july_Month = {s = "долдугаар сар"} ; + august_Month = {s = "наймдугаар сар"} ; + september_Month = {s = "есдүгээр сар"} ; + october_Month = {s = "аравдугаар сар"} ; + november_Month = {s = "арван нэгдүгээр сар"} ; + december_Month = {s = "арван хоёрдугаар сар"} ; + + weekdayPunctualAdv weekday = {s = weekday.s ++ "гарагт"} ; + weekdayHabitualAdv weekday = {s = "долоо бүрийн" ++ weekday.s ++ "гарагт"} ; + weekdayN weekday = fixedN (weekday.s ++ "гараг") ; + monthN month = fixedN month.s ; + intYear i = {s = i.s} ; + yearAdv year = {s = year.s ++ "онд"} ; +} diff --git a/src/mongolian/DictMon.gf b/src/mongolian/DictMon.gf index fb62bbe36..67041dbf8 100644 --- a/src/mongolian/DictMon.gf +++ b/src/mongolian/DictMon.gf @@ -963,7 +963,7 @@ lin -- arangalah_V = mkV "арангалах" ; -- arangatah_V = mkV "арангатах" ; -- aranshin_N = mkN "араншин" ; --- arav_Num = {s = "арван" ; sp = \\rc => (regN "арав") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- arav_Num = {s = "арван" ; sp = \\rc => (regN "арав") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; n = Pl} ; -- aravganah_V = mkV "аравганах" ; -- aravgar_A = mkA "аравгар" ; -- aravnailah_V2 = mkV2 (mkV "аравнайлах") ; @@ -3389,7 +3389,7 @@ lin -- bulzaarah_V2 = mkV2 (mkV "булзаарах") ; -- bulzah_V = mkV "булзах" ; -- bulzamhai_A = mkA "булзамхай" ; --- bum_Num = {s = "буман" ; sp = \\rc => (regN "бум") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- bum_Num = {s = "буман" ; sp = \\rc => (regN "бум") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; n = Pl} ; -- bumba_N = mkN "бумба" ; -- bumbadah_V2 = mkV2 (mkV "бумбадах") ; -- bumbaganah_V = mkV "бумбаганах" ; @@ -3679,7 +3679,7 @@ lin -- cadaarah_V = mkV "цадаарах" ; -- cadaarhah_V = mkV "цадаархах" ; -- cadah_V = mkV "цадах" ; --- cadchin_Num = {s = "цадчин" ; sp = \\rc => (regN "цадчин") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- cadchin_Num = {s = "цадчин" ; sp = \\rc => (regN "цадчин") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- cadig_N = mkN "цадиг" ; -- cadigguei_A = mkA "цадиггүй" ; -- cadiggueirheh_V = mkV "цадиггүйрхэх" ; @@ -3721,7 +3721,7 @@ lin -- cagch_N = mkN "цагч" ; -- cagchai_N = mkN "цагцхай" ; -- cagchait_A = mkA "цагцхайт" ; --- cagchig_Num = {s = "цагчиган" ; sp = \\rc => (regN "цагчиг") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- cagchig_Num = {s = "цагчиган" ; sp = \\rc => (regN "цагчиг") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- cagchin_N = mkN "цагчин" ; -- cagdaa_N = mkN "цагдаа" ; -- cagdaagiin_gazar_N = mk2N "цагдаагийн" (mkN "газар") ; @@ -5935,7 +5935,7 @@ lin -- dodiih_V = mkV "додийх" ; -- dodomdlogo_N = mkN "додомдлого" ; -- dodomdoh_V = mkV "додомдох" ; --- doech_Num = {s = "дөчин" ; sp = \\rc => (regN "дөч") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- doech_Num = {s = "дөчин" ; sp = \\rc => (regN "дөч") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- doehoeh_V2 = mkV2 (mkV "дөхөх") ; -- doehoem_A = mkA "дөхөм" ; -- doehoemguei_A = mkA "дөхөмгүй" ; @@ -6000,9 +6000,9 @@ lin -- doeroeoeloeh_V = mkV "дөрөөлөх" ; -- doeroeoevch_N = mkN "дөрөөвч" ; -- doeroeoevchloeh_V = mkV "дөрөөвчлөх" ; --- doeroev_Num = {s = "дөрвөн" ; sp = \\rc => (regN "дөрөв") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- doeroev_Num = {s = "дөрвөн" ; sp = \\rc => (regN "дөрөв") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- doeroevch_N = mkN "дөрөвч" ; --- doeroevloeoes_Num = {s = "дөрөвлөөсөн" ; sp = \\rc => (regN "дөрөвлөөс") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- doeroevloeoes_Num = {s = "дөрөвлөөсөн" ; sp = \\rc => (regN "дөрөвлөөс") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- doersgoenoeh_V = mkV "дөрсгөнөх" ; -- doersgoer_A = mkA "дөрсгөр" ; -- doersiih_V = mkV "дөрсийх" ; @@ -6117,7 +6117,7 @@ lin -- dollogo_N = mkN "доллого" ; -- dololgoh_V = mkV "дололгох" ; -- dolono_N = mkN "долоно" ; --- doloo_Num = {s = "долоон" ; sp = \\rc => (regN "долоо") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- doloo_Num = {s = "долоон" ; sp = \\rc => (regN "долоо") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- doloo_honog_N = mk2N "хан" (mkN "боргоцой") ; -- doloodos_N = mkN "долоодос" ; -- doloogono_N = mkN "долоогоно" ; @@ -6351,7 +6351,7 @@ lin -- duen_N = mkN "дүн" ; -- duenbe_N = mkN "дүнбэ" ; -- duenbeteh_V = mkV "дүнбэтэх" ; --- duenchueuer_Num = {s = "дүнчүүрэн" ; sp = \\rc => (regN "дүнчүүр") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- duenchueuer_Num = {s = "дүнчүүрэн" ; sp = \\rc => (regN "дүнчүүр") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- duengeneh_V = mkV "дүнгэнэх" ; -- duenger_N = mkN "дүнгэр" ; -- duenguei_A = mkA "дүнгүй" ; @@ -6360,7 +6360,7 @@ lin -- duensger_A = mkA "дүнсгэр" ; -- duensgerdueue_A = mkA "дүнсгэрдүү" ; -- duensgerhen_A = mkA "дүнсгэрхэн" ; --- duenshueuer_Num = {s = "дүншүүрэн" ; sp = \\rc => (regN "дүншүүр") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- duenshueuer_Num = {s = "дүншүүрэн" ; sp = \\rc => (regN "дүншүүр") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- duensiih_V = mkV "дүнсийх" ; -- duentei_A = mkA "дүнтэй" ; -- duenz_N = mkN "дүнз" ; @@ -8099,7 +8099,7 @@ lin -- gol_N = mkN "гол" ; -- golch_A = mkA "голч" ; -- golchloh_V = mkV "голчлох" ; --- gold'_Num = {s = "голдин" ; sp = \\rc => (regN "голдь") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- gold'_Num = {s = "голдин" ; sp = \\rc => (regN "голдь") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- goldoh_V = mkV "голдох" ; -- gol'f_N = mkLN "гольф" ; -- goligonoh_V = mkV "голигонох" ; @@ -8262,7 +8262,7 @@ lin -- guash_N = mkLN "гуаш" ; -- gucah_V = mkV "гуцах" ; -- guch_N = mkN "гуч" ; --- guch_Num = {s = "гучин" ; sp = \\rc => (regN "гуч") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- guch_Num = {s = "гучин" ; sp = \\rc => (regN "гуч") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- guchincar_N = mkN "гучинцар" ; -- gucuu_A = mkA "гуцуу" ; -- gudaih_V2 = mkV2 (mkV "гудайх") ; @@ -8528,7 +8528,7 @@ lin -- guranhtah_V = mkV "гуранхтах" ; -- guranz_N = mkN "гуранз" ; -- guranzdah_V = mkV "гуранздах" ; --- gurav_Num = {s = "гурван" ; sp = \\rc => (regN "гурав") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- gurav_Num = {s = "гурван" ; sp = \\rc => (regN "гурав") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- guravch_N = mkN "гуравч" ; -- gurgaldai_N = mkN "гургалдай" ; -- gurgar_A = mkA "гургар" ; @@ -10913,7 +10913,7 @@ lin -- hoovolzoh_V = mkV "хооволзох" ; -- hoovon_N = mkN "хоовон" ; -- hor_N = mkN "хор" ; --- hor'_Num = {s = "хорин" ; sp = \\rc => (regN "хорь") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- hor'_Num = {s = "хорин" ; sp = \\rc => (regN "хорь") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- horchgir_A = mkA "хорчгир" ; -- horchgonoh_V = mkV "хорчгонох" ; -- horchgor_A = mkA "хорчгор" ; @@ -11112,7 +11112,7 @@ lin -- hovsorgon_A = mkA "ховсоргон" ; -- hovsroh_V = mkV "ховсрох" ; -- hovsrooch_N = mkN "ховсрооч" ; --- hoyor_Num = {s = "хоёр" ; sp = \\rc => (regN "хоёр") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- hoyor_Num = {s = "хоёр" ; sp = \\rc => (regN "хоёр") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- hoyordmol_A = mkA "хоёрдмол" ; -- hoyorloh_V = mkV "хоёрлох" ; -- hoyorlohguei_A = mkA "хоёрлохгүй" ; @@ -12246,7 +12246,7 @@ lin -- ingeehen_A = mkA "ингээхэн" ; -- ingeen_A = mkA "ингээн" ; -- ingeh_V = mkV "ингэх" ; --- ingemel_Num = {s = "ингэмэлэн" ; sp = \\rc => (regN "ингэмэл") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- ingemel_Num = {s = "ингэмэлэн" ; sp = \\rc => (regN "ингэмэл") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- ingueuehen_N = mkN "ингүүхэн" ; -- ingueuemel_N = mkN "ингүүмэл" ; -- inj_N = mkN "инж" ; @@ -12299,7 +12299,7 @@ lin -- irmegleh_V = mkV "ирмэглэх" ; -- irmegueuen_A = mkA "ирмэгүүн" ; -- irmeh_V = mkV "ирмэх" ; --- irmel_Num = {s = "ирмэлэн" ; sp = \\rc => (regN "ирмэл") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- irmel_Num = {s = "ирмэлэн" ; sp = \\rc => (regN "ирмэл") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- irmelhiileh_V = mkV "ирмэлхийлэх" ; -- irmueuedeh_V = mkV "ирмүүдэх" ; -- irmueueleh_V = mkV "ирмүүлэх" ; @@ -12445,7 +12445,7 @@ lin -- Janraisig_PN = mkPN "Жанрайсиг" ; -- janz_N = mkN "жанз" ; -- janzii_N = mkN "жанзий" ; --- jar_Num = {s = "жаран" ; sp = \\rc => (regN "жар") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- jar_Num = {s = "жаран" ; sp = \\rc => (regN "жар") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- jaraahai_N = mkN "жараахай" ; -- jaran_N = mkN "жаран" ; -- jaravganah_V = mkV "жаравганах" ; @@ -13000,7 +13000,7 @@ lin -- laglagar_A = mkA "лаглагар" ; -- laglaih_V = mkV "лаглайх" ; -- lags_A = mkA "лагс" ; --- lagshaa_Num = {s = "лагшаан" ; sp = \\rc => (regN "лагшаа") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- lagshaa_Num = {s = "лагшаан" ; sp = \\rc => (regN "лагшаа") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- lagshih_V = mkV "лагших" ; -- lagshim_A = mkA "лагшим" ; -- lagshin_N = mkN "лагшин" ; @@ -14023,7 +14023,7 @@ lin -- movgo_N = mkN "мовго" ; -- movor_N = mkN "мовор" ; -- mueglen_N = mkN "мүглэн" ; --- mueue_Num = {s = "мүүн" ; sp = \\rc => (regN "мүү") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- mueue_Num = {s = "мүүн" ; sp = \\rc => (regN "мүү") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- mugjgar_A = mkA "мугжгар" ; -- mugjiih_V = mkV "мугжийх" ; -- muguid_A = mkA "мугуйд" ; @@ -14162,7 +14162,7 @@ lin -- myandag_N = mkN "мяндаг" ; -- myandas_N = mkN "мяндас" ; -- myandsan_A = mkA "мяндсан" ; --- myanga_Num = {s = "мянган" ; sp = \\rc => (regN "мянга") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- myanga_Num = {s = "мянган" ; sp = \\rc => (regN "мянга") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- myangad_N = mkN "мянгад" ; -- myangat_A = mkA "мянгат" ; -- M'yanmar_PN = mkPN "Мьянмар" ; @@ -14295,7 +14295,7 @@ lin -- nailanhaitah_V = mkV "найланхайтах" ; -- nailzuur_N = mkN "найлзуур" ; -- nailzuurhai_N = mkN "найлзуурхай" ; --- naim_Num = {s = "найман" ; sp = \\rc => (regN "найм") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- naim_Num = {s = "найман" ; sp = \\rc => (regN "найм") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- naimaa_N = mkN "наймаа" ; -- naimaachin_N = mkN "наймаачин" ; -- naimaalah_V3 = mkV3 (mkV "наймаалах") ; @@ -14561,7 +14561,7 @@ lin -- navtgardah_V = mkV "навтгардах" ; -- navtrag_N = mkN "навтраг" ; -- navtrah_V = mkV "навтрах" ; --- naya_Num = {s = "наян" ; sp = \\rc => (regN "ная") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- naya_Num = {s = "наян" ; sp = \\rc => (regN "ная") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- nayad_N = mkN "наяд" ; -- nazgai_A = mkA "назгай" ; -- nazgaidah_V = mkV "назгайдах" ; @@ -14573,7 +14573,7 @@ lin -- neelgii_N = mkN "нээлгий" ; -- neelhii_N = mkN "нээлхий" ; -- neelt_N = mkN "нээлт" ; --- neg_Num = {s = "ганц" ; sp = \\rc => (regN "нэг") .s ! SF Sg (toNCase rc Definite) ; n = Sg ; isNum = True} ; +-- neg_Num = {s = "ганц" ; sp = \\rc => (regN "нэг") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- negdeh_V = mkV "нэгдэх" ; -- negdel_N = mkN "нэгдэл" ; -- negdeljih_V = mkV "нэгдэлжих" ; @@ -16153,7 +16153,7 @@ lin -- onol_N = mkN "онол" ; -- onolch_N = mkN "онолч" ; -- onoldoh_V = mkV "онолдох" ; --- onon_Num = {s = "оннон" ; sp = \\rc => (regN "онон") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- onon_Num = {s = "оннон" ; sp = \\rc => (regN "онон") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- onondoi_N = mkN "онондой" ; -- onoo_N = mkN "оноо" ; -- onooch_N = mkN "онооч" ; @@ -16653,7 +16653,7 @@ lin -- rashaan_N = mkN "рашаан" ; -- Rashaant_PN = mkPN "Рашаант" ; -- rashaantah_V = mkV "рашаантах" ; --- ravjim_Num = {s = "равжиман" ; sp = \\rc => (regN "равжим") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- ravjim_Num = {s = "равжиман" ; sp = \\rc => (regN "равжим") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- rialgan_A = mkA "риалган" ; -- rid_N = mkN "рид" ; -- Rivaadi_PN = mkPN "Риваади" ; @@ -17175,7 +17175,7 @@ lin -- savslagalah_V = mkV "савслагалах" ; -- savslah_V = mkV "савслах" ; -- savtarhai_A = mkA "савтархай" ; --- saya_Num = {s = "сая" ; sp = \\rc => (regN "сая") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- saya_Num = {s = "сая" ; sp = \\rc => (regN "сая") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- sayatan_N = mkN "саятан" ; -- saz_N = mkN "саз" ; -- sazdah_V = mkV "саздах" ; @@ -19696,8 +19696,8 @@ lin -- tatvalzuur_A = mkA "татвалзуур" ; -- tatvar_N = mkN "татвар" ; -- tatvarlah_V2 = mkV2 (mkV "татварлах") ; --- tav_Num = {s = "таван" ; sp = \\rc => (regN "тав") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; --- tav'_Num = {s = "тавин" ; sp = \\rc => (regN "тавь") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- tav_Num = {s = "таван" ; sp = \\rc => (regN "тав") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; +-- tav'_Num = {s = "тавин" ; sp = \\rc => (regN "тавь") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- tavaar_N = mkN "таваар" ; -- tavag_N = mkN "таваг" ; -- tavaglah_V = mkV "таваглах" ; @@ -19780,7 +19780,7 @@ lin -- teeverlegch_N = mkN "тээвэрлэгч" ; -- teeverleh_V2 = mkV2 (mkV "тээвэрлэх") ; -- teeverlelt_N = mkN "тээвэрлэлт" ; --- teg_Num = {s = "тэг" ; sp = \\rc => (regN "тэг") .s ! SF Sg (toNCase rc Definite) ; n = Sg ; isNum = True} ; +-- teg_Num = {s = "тэг" ; sp = \\rc => (regN "тэг") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- tegdegneh_V = mkV "тэгдэгнэх" ; -- tegdelzeh_V = mkV "тэгдэлзэх" ; -- tegdger_A = mkA "тэгдгэр" ; @@ -19928,7 +19928,7 @@ lin -- tenueuelchin_N = mkN "тэнүүлчин" ; -- tenueuen_A = mkA "тэнүүн" ; -- ter_Pron = mkPron "тэр" "түүний" "түүнд" "түүнийг" "түүнээс" "түүгээр" "түүнтэй" "түүн рүү" Sg P3 ; --- terbum_Num = {s = "тэрбуман" ; sp = \\rc => (regN "тэрбум") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +-- terbum_Num = {s = "тэрбуман" ; sp = \\rc => (regN "тэрбум") .s ! SF Sg (toNCase rc Definite) ; n = Pl} ; -- terbumtan_N = mkN "тэрбумтан" ; -- tereg_N = mkN "тэрэг" ; -- teregch_N = mkN "тэрэгч" ; @@ -20735,7 +20735,7 @@ tuelhleh_V = mkV "түлхлэх" ; tuelhueue_A = mkA "түлхүү" ; tuelhueuer_N = mkN "түлхүүр" ; tuelsh_N = mkN "түлш" ; -tuem_Num = {s = "түмэн" ; sp = \\rc => (regN "түм") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +tuem_Num = {s = "түмэн" ; sp = \\rc => (regN "түм") .s ! SF Sg (toNCase rc Definite) ; n = Sg} ; tuembeger_A = mkA "түмбэгэр" ; tuembegneh_V = mkV "түмбэгнэх" ; tuembelzeh_V = mkV "түмбэлзэх" ; @@ -22776,7 +22776,7 @@ yenhiih_V = mkV "енхийх" ; yenhoegnoeh_V = mkV "енхөгнөх" ; yenhoelzoeh_V = mkV "енхөлзөх" ; yenhoer_A = mkA "енхөр" ; -yer_Num = {s = "ерэн" ; sp = \\rc => (regN "ер") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +yer_Num = {s = "ерэн" ; sp = \\rc => (regN "ер") .s ! SF Sg (toNCase rc Definite) ; n = Sg} ; yer_busyn_A = mkA "ер бусын" ; yerdiin_A = mkA "ердийн" ; yergoeh_V = mkV "ергөх" ; @@ -22795,7 +22795,7 @@ yeroeoelch_N = mkN "ерөөлч" ; yeroeoelt_A = mkA "ерөөлт" ; yeroeoer_N = mkN "ерөөр" ; yertoenc_N = mkN "ертөнц" ; -yes_Num = {s = "есөн" ; sp = \\rc => (regN "ес") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +yes_Num = {s = "есөн" ; sp = \\rc => (regN "ес") .s ! SF Sg (toNCase rc Definite) ; n = Sg} ; yesloeh_V = mkV "еслөх" ; yesoegchin_N = mkN "есөгчин" ; yest_A = mkA "ест" ; @@ -24071,7 +24071,7 @@ zutah_V = mkV "зутах" ; zutan_N = mkN "зутан" ; zutrah_V = mkV "зутрах" ; zutruu_A = mkA "зутруу" ; -zuu_Num = {s = "зуун" ; sp = \\rc => (regN "зуу") .s ! SF Sg (toNCase rc Definite) ; n = Pl ; isNum = True} ; +zuu_Num = {s = "зуун" ; sp = \\rc => (regN "зуу") .s ! SF Sg (toNCase rc Definite) ; n = Sg} ; zuuch_N = mkN "зууч" ; zuuchlagch_N = mkN "зуучлагч" ; zuuchlah_V3 = mkV3 (mkV "зуучлах") ; @@ -24136,4 +24136,4 @@ zuzaatgah_V = mkV "зузаатгах" ; zuzaih_V = mkV "зузайх" ; zuzgar_A = mkA "зузгар" ; zyenit_N = mkLN "зенит" ; -} ; \ No newline at end of file +} ; diff --git a/src/mongolian/DocumentationMon.gf b/src/mongolian/DocumentationMon.gf index 7301d5036..f777f6a8a 100644 --- a/src/mongolian/DocumentationMon.gf +++ b/src/mongolian/DocumentationMon.gf @@ -4,6 +4,8 @@ concrete DocumentationMon of Documentation = CatMon ** open Prelude, HTML in { +flags optimize=noexpand ; coding=utf8 ; + lincat Inflection = {t : Str; s1,s2,s3 : Str} ; Definition = {s : Str} ; @@ -30,18 +32,14 @@ lin InflectionN, InflectionN2, InflectionN3 = \x -> { lin InflectionPN = \pn -> { t="pn" ; s1=heading1 "Proper Name" ; - s2=frameTable ( - tr (th "Nom" ++ td (pn.s ! Nom)) ++ - tr (th "Acc" ++ td (pn.s ! Acc)) ++ - tr (th "Dat" ++ td (pn.s ! Dat)) ++ - tr (th "Gen" ++ td (pn.s ! Gen)) ++ - tr (th "Abl" ++ td (pn.s ! Abl)) ++ - tr (th "Inst" ++td (pn.s ! Inst)) ++ - tr (th "Com" ++ td (pn.s ! Com)) ++ - tr (th "Dir" ++ td (pn.s ! Dir))) ; + s2=nameTable pn.s ; s3=[] } ; +lin InflectionLN = \name -> nameInflection "ln" "Location Name" name ; +lin InflectionGN = \name -> nameInflection "gn" "Given Name" name ; +lin InflectionSN = \name -> nameInflection "sn" "Family Name" name ; + lin InflectionA, InflectionA2 = \adj -> { t="a" ; s1=heading1 "Adjective" ; @@ -58,7 +56,7 @@ lin InflectionAdv, InflectionAdV, InflectionAdA, InflectionAdN = \adv -> { lin InflectionPrep = \prep -> { t = "prep" ; - s1= heading1 "Preposition" ; + s1= heading1 "Postposition" ; s2= paragraph (prep.s ++ case prep.rc of { Nom => "nominative" ; @@ -67,12 +65,51 @@ lin InflectionPrep = \prep -> { Gen => "genitive" ; Abl => "ablative" ; Inst=> "instrumental" ; - Com => "commitative" ; + Com => "comitative" ; Dir => "directional" }) ; s3= "" } ; +lin InflectionV = \verb -> { + t="v" ; s1=heading1 "Verb" ; + s2=verbTable verb.s ; s3=[] + } ; +lin InflectionV2 = \verb -> verbInflection verb.s ; +lin InflectionV3 = \verb -> verbInflection verb.s ; +lin InflectionV2V = \verb -> verbInflection verb.s ; +lin InflectionV2S = \verb -> verbInflection verb.s ; +lin InflectionV2Q = \verb -> verbInflection verb.s ; +lin InflectionV2A = \verb -> verbInflection verb.s ; +lin InflectionVS = \verb -> verbInflection verb.s ; +lin InflectionVQ = \verb -> verbInflection verb.s ; +lin InflectionVA = \verb -> verbInflection verb.s ; + +lin InflectionVV = \verb -> { + t="v" ; + s1=heading1 "Verb" ; + s2=auxTable verb.s ; + s3=[] + } ; + +lin InflectionCl = \cl -> { + t="cl" ; + s1=heading1 "Clause" ; + s2=frameTable ( + tr (th "Tense" ++ th "Anteriority" ++ th "Positive" ++ th "Negative") ++ + clauseRow "Present" ClPres Simul cl ++ + clauseRow "Present" ClPres Anter cl ++ + clauseRow "Past perfect" (ClPast Perf) Simul cl ++ + clauseRow "Past perfect" (ClPast Perf) Anter cl ++ + clauseRow "Present perfect" (ClPast PresPerf) Simul cl ++ + clauseRow "Present perfect" (ClPast PresPerf) Anter cl ++ + clauseRow "Indefinite past" (ClPast IndefPast) Simul cl ++ + clauseRow "Indefinite past" (ClPast IndefPast) Anter cl ++ + clauseRow "Future" ClFut Simul cl ++ + clauseRow "Future" ClFut Anter cl) ; + s3=[] + } ; + lin NoDefinition t = {s=t.s}; MkDefinition t d = {s="

Definition:"++t.s++d.s++"

"}; @@ -82,4 +119,210 @@ lin MkDocument d i e = {s = i.s1 ++ d.s ++ i.s2 ++ paragraph e.s} ; MkTag i = {s = i.t} ; +oper + nameInflection : Str -> Str -> {s : RCase => Str} -> + {t : Str; s1,s2,s3 : Str} = \tag,title,name -> { + t=tag ; + s1=heading1 title ; + s2=nameTable name.s ; + s3=[] + } ; + + nameTable : (RCase => Str) -> Str = \forms -> + frameTable ( + tr (th "Case" ++ th "Form") ++ + caseRow "Nominative" Nom forms ++ + caseRow "Accusative" Acc forms ++ + caseRow "Dative-locative" Dat forms ++ + caseRow "Genitive" Gen forms ++ + caseRow "Ablative" Abl forms ++ + caseRow "Instrumental" Inst forms ++ + caseRow "Comitative" Com forms ++ + caseRow "Directional" Dir forms) ; + + caseRow : Str -> RCase -> (RCase => Str) -> Str = \label,c,forms -> + tr (th label ++ td (forms ! c)) ; + + clauseRow : Str -> ClTense -> Anteriority -> + {s : ClTense => Anteriority => Polarity => SType => Str} -> Str = + \label,t,a,cl -> + tr (th label ++ th (anteriorityName a) ++ + td (cl.s ! t ! a ! Pos ! Main) ++ + td (cl.s ! t ! a ! Neg ! Main)) ; + + anteriorityName : Anteriority -> Str = \a -> case a of { + Simul => "simultaneous" ; + Anter => "anterior" + } ; + + verbInflection : (VerbForm => Str) -> {t : Str; s1,s2,s3 : Str} = \forms -> { + t="v" ; + s1=heading1 "Verb" ; + s2=verbTable forms ; + s3=[] + } ; + + verbTable : (VerbForm => Str) -> Str = \forms -> + heading2 "Indicative" ++ + frameTable ( + tr (th "Voice" ++ th "Aspect" ++ th "Present perfect" ++ + th "Completed past" ++ th "Indefinite past" ++ th "Future") ++ + finiteRows "Active" Act forms ++ + finiteRows "Causative" Caus forms ++ + finiteRows "Passive" Pass forms ++ + finiteRows "Cooperative" Comm forms ++ + finiteRows "Adversative" Advs forms) ++ + verbImperativeTable forms ++ + heading2 "Subordinate forms" ++ + frameTable ( + tr (th "Function" ++ th "Active" ++ th "Causative" ++ th "Passive") ++ + subordinateRow "Conditional" Condl forms ++ + subordinateRow "Concessive" Conc forms ++ + subordinateRow "Immediate succession" ISucc forms ++ + subordinateRow "Logical succession" LSucc forms ++ + subordinateRow "Intention" Intend forms ++ + subordinateRow "Limit" Limit forms ++ + subordinateRow "Progressive" Progr forms ++ + subordinateRow "Succession" Succ forms) ++ + verbCoordinationTable forms ++ + verbParticipleTables forms ; + + finiteRows : Str -> Voice -> (VerbForm => Str) -> Str = \voice,v,forms -> + finiteRow voice "Simple" v Simpl forms ++ + finiteRow "" "Quick" v Quick forms ++ + finiteRow "" "Collective" v Coll forms ++ + finiteRow "" "Complete" v Compl forms ; + + finiteRow : Str -> Str -> Voice -> Aspect -> (VerbForm => Str) -> Str = + \voice,aspect,v,a,forms -> + tr (th voice ++ th aspect ++ + td (forms ! VFORM v a VPresPerf) ++ + td (forms ! VFORM v a VPastComp) ++ + td (forms ! VFORM v a VPastIndef) ++ + td (forms ! VFORM v a VFut)) ; + + subordinateRow : Str -> Subordination -> (VerbForm => Str) -> Str = \label,sub,forms -> + tr (th label ++ + td (forms ! SVDS ActSub sub) ++ + td (forms ! SVDS CausSub sub) ++ + td (forms ! SVDS PassSub sub)) ; + + auxTable : (VVVerbForm => Str) -> Str = \forms -> + heading2 "Indicative" ++ + frameTable ( + tr (th "Present perfect" ++ td (forms ! VVTense VPresPerf)) ++ + tr (th "Completed past" ++ td (forms ! VVTense VPastComp)) ++ + tr (th "Indefinite past" ++ td (forms ! VVTense VPastIndef)) ++ + tr (th "Future" ++ td (forms ! VVTense VFut))) ++ + auxImperativeTable forms ++ + heading2 "Subordinate forms" ++ + frameTable ( + auxSubordinateRow "Conditional" Condl forms ++ + auxSubordinateRow "Concessive" Conc forms ++ + auxSubordinateRow "Immediate succession" ISucc forms ++ + auxSubordinateRow "Logical succession" LSucc forms ++ + auxSubordinateRow "Intention" Intend forms ++ + auxSubordinateRow "Limit" Limit forms ++ + auxSubordinateRow "Progressive" Progr forms ++ + auxSubordinateRow "Succession" Succ forms) ++ + auxCoordinationTable forms ++ + auxParticipleTables forms ; + + auxSubordinateRow : Str -> Subordination -> (VVVerbForm => Str) -> Str = \label,sub,forms -> + tr (th label ++ td (forms ! VVSubordination sub)) ; + + verbImperativeTable : (VerbForm => Str) -> Str = \forms -> + heading2 "Imperative" ++ + frameTable ( + tr (th "Function" ++ th "Direct" ++ th "Indirect") ++ + verbImperativeRow "Decision" Dec forms ++ + verbImperativeRow "Command" Command forms ++ + verbImperativeRow "Request" Req forms ++ + verbImperativeRow "Demand" Demand forms ++ + verbImperativeRow "Admonition" Admon forms ++ + verbImperativeRow "Appeal" Appeal forms ++ + verbImperativeRow "Permission" Perm forms ++ + verbImperativeRow "Hope" Hope forms ++ + verbImperativeRow "Blessing" Bless forms) ; + + verbImperativeRow : Str -> Imperative -> (VerbForm => Str) -> Str = \label,i,forms -> + tr (th label ++ td (forms ! VIMP Direct i) ++ + td (forms ! VIMP Indirect i)) ; + + auxImperativeTable : (VVVerbForm => Str) -> Str = \forms -> + heading2 "Imperative" ++ + frameTable ( + tr (th "Function" ++ th "Direct" ++ th "Indirect") ++ + auxImperativeRow "Decision" Dec forms ++ + auxImperativeRow "Command" Command forms ++ + auxImperativeRow "Request" Req forms ++ + auxImperativeRow "Demand" Demand forms ++ + auxImperativeRow "Admonition" Admon forms ++ + auxImperativeRow "Appeal" Appeal forms ++ + auxImperativeRow "Permission" Perm forms ++ + auxImperativeRow "Hope" Hope forms ++ + auxImperativeRow "Blessing" Bless forms) ; + + auxImperativeRow : Str -> Imperative -> (VVVerbForm => Str) -> Str = \label,i,forms -> + tr (th label ++ td (forms ! VVImp Direct i) ++ + td (forms ! VVImp Indirect i)) ; + + verbCoordinationTable : (VerbForm => Str) -> Str = \forms -> + heading2 "Coordinating forms" ++ + frameTable ( + tr (th "Simultaneous" ++ td (forms ! CVDS Simul)) ++ + tr (th "Anterior" ++ td (forms ! CVDS Anter))) ; + + auxCoordinationTable : (VVVerbForm => Str) -> Str = \forms -> + heading2 "Coordinating forms" ++ + frameTable ( + tr (th "Simultaneous" ++ td (forms ! VVCoordination Simul)) ++ + tr (th "Anterior" ++ td (forms ! VVCoordination Anter))) ; + + verbParticipleTables : (VerbForm => Str) -> Str = \forms -> + verbParticipleTable "Indefinite present" PPresIndef forms ++ + verbParticipleTable "Progressive present" PPresProgr forms ++ + verbParticipleTable "Past" PPast forms ++ + verbParticipleTable "Future" PFut forms ++ + verbParticipleTable "Agent" PDoer forms ; + + verbParticipleTable : Str -> Participle -> (VerbForm => Str) -> Str = \title,p,forms -> + heading2 (title ++ " participle") ++ + frameTable ( + tr (th "Case" ++ th "Form") ++ + verbParticipleRow "Nominative" Nom p forms ++ + verbParticipleRow "Accusative" Acc p forms ++ + verbParticipleRow "Dative-locative" Dat p forms ++ + verbParticipleRow "Genitive" Gen p forms ++ + verbParticipleRow "Ablative" Abl p forms ++ + verbParticipleRow "Instrumental" Inst p forms ++ + verbParticipleRow "Comitative" Com p forms ++ + verbParticipleRow "Directional" Dir p forms) ; + + verbParticipleRow : Str -> RCase -> Participle -> (VerbForm => Str) -> Str = + \label,c,p,forms -> tr (th label ++ td (forms ! VPART p c)) ; + + auxParticipleTables : (VVVerbForm => Str) -> Str = \forms -> + auxParticipleTable "Indefinite present" PPresIndef forms ++ + auxParticipleTable "Progressive present" PPresProgr forms ++ + auxParticipleTable "Past" PPast forms ++ + auxParticipleTable "Future" PFut forms ++ + auxParticipleTable "Agent" PDoer forms ; + + auxParticipleTable : Str -> Participle -> (VVVerbForm => Str) -> Str = \title,p,forms -> + heading2 (title ++ " participle") ++ + frameTable ( + tr (th "Case" ++ th "Form") ++ + auxParticipleRow "Nominative" Nom p forms ++ + auxParticipleRow "Accusative" Acc p forms ++ + auxParticipleRow "Dative-locative" Dat p forms ++ + auxParticipleRow "Genitive" Gen p forms ++ + auxParticipleRow "Ablative" Abl p forms ++ + auxParticipleRow "Instrumental" Inst p forms ++ + auxParticipleRow "Comitative" Com p forms ++ + auxParticipleRow "Directional" Dir p forms) ; + + auxParticipleRow : Str -> RCase -> Participle -> (VVVerbForm => Str) -> Str = + \label,c,p,forms -> tr (th label ++ td (forms ! VVParticiple p c)) ; + } diff --git a/src/mongolian/ExtendMon.gf b/src/mongolian/ExtendMon.gf index 2932081ca..70ea8eb3d 100644 --- a/src/mongolian/ExtendMon.gf +++ b/src/mongolian/ExtendMon.gf @@ -1,8 +1,125 @@ --# -path=.:../common:../abstract concrete ExtendMon of Extend = - CatMon ** ExtendFunctor + CatMon ** ExtendFunctor - [ + VPS, ListVPS, VPI, ListVPI, + ListComp, ListImp, + CompoundN, CompoundAP, + PresPartAP, PastPartAP, PastPartAgentAP, + PassVPSlash, PassAgentVPSlash, ProgrVPSlash, + GerundCN, GerundNP, GerundAdv, WithoutVP, ByVP, InOrderToVP, + ApposNP, PositAdVAdj, + MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, + MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, + BaseComp, ConsComp, ConjComp, + BaseImp, ConsImp, ConjImp, + ReflPron, ReflPoss, AdvRNP, AdvRVP, AdvRAP, ReflRNP, ReflA2RNP, PossPronRNP, + UseDAP, UseDAPMasc, UseDAPFem + ] with - (Grammar = GrammarMon) ** { + (Grammar = GrammarMon) ** + open Prelude, ResMon, ParadigmsMon in { + +lincat + VPS, VPI = {s : Str} ; + [VPS], [VPI] = {s1, s2 : Str} ; + [Comp] = {s1, s2 : RCase => Str} ; + [Imp] = {s1, s2 : Polarity => ImpForm => Str} ; + +lin + CompoundN n1 n2 = { + s = \\sf => n1.s ! SF Sg NNom ++ n2.s ! sf + } ; + + CompoundAP n a = {s = n.s ! SF Sg NNom ++ a.s} ; + + PresPartAP vp = { + s = vp.compl ! Nom ++ vp.embedCompl ! Nom ++ vp.adv ++ + (vp.s ! VPPart ClPres Pos Nom).fin + } ; + + PastPartAP vp = { + s = vp.compl ! Nom ++ vp.embedCompl ! Nom ++ vp.adv ++ + (vp.s ! VPPass Passive (ClPast Perf)).fin + } ; + + PastPartAgentAP vp np = { + s = np.s ! Inst ++ vp.compl ! Nom ++ vp.embedCompl ! Nom ++ vp.adv ++ + (vp.s ! VPPass Passive (ClPast Perf)).fin + } ; + + PassVPSlash vp = { + s = \\_ => vp.s ! VPPass Passive ClPres ; + compl = vp.compl ; adv = vp.adv ; embedCompl = vp.embedCompl ; vt = vp.vt + } ; + + PassAgentVPSlash vp np = insertObj (\\_ => np.s ! Inst) (PassVPSlash vp) ; + ProgrVPSlash vp = vp ; + + GerundCN vp = {s = \\_,_ => infVP vp Nom} ; + GerundNP vp = { + s = \\rc => infVP vp rc ; n = Sg ; p = P3 ; isPron = False ; isDef = True + } ; + GerundAdv vp = {s = infVP vp Inst} ; + WithoutVP vp = {s = infVP vp Nom ++ BIND ++ "гүйгээр"} ; + ByVP vp = {s = infVP vp Inst} ; + InOrderToVP vp = {s = infVP vp Dat ++ "тулд"} ; + + ApposNP np app = np ** {s = \\rc => np.s ! rc ++ "," ++ app.s ! Nom} ; + PositAdVAdj a = a ; + + MkVPS temp pol vp = { + s = vp.compl ! Nom ++ vp.embedCompl ! Nom ++ vp.adv ++ + (vp.s ! VPFin temp.t temp.a pol.p).fin ++ + (vp.s ! VPFin temp.t temp.a pol.p).aux + } ; + BaseVPS x y = {s1 = x.s ; s2 = y.s} ; + ConsVPS x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ; + ConjVPS conj xs = {s = xs.s1 ++ conj.s2 ++ xs.s2} ; + PredVPS np vps = {s = \\_ => np.s ! Nom ++ vps.s} ; + + MkVPI vp = {s = infVP vp Nom} ; + BaseVPI x y = {s1 = x.s ; s2 = y.s} ; + ConsVPI x xs = {s1 = x.s ++ "," ++ xs.s1 ; s2 = xs.s2} ; + ConjVPI conj xs = {s = xs.s1 ++ conj.s2 ++ xs.s2} ; + ComplVPIVV vv vpi = insertObj (\\_ => vpi.s) (predV (auxToVerb vv)) ; + + BaseComp x y = {s1 = x.s ; s2 = y.s} ; + ConsComp x xs = { + s1 = \\rc => x.s ! rc ++ "," ++ xs.s1 ! rc ; s2 = xs.s2 + } ; + ConjComp conj xs = {s = \\rc => xs.s1 ! rc ++ conj.s2 ++ xs.s2 ! rc} ; + + BaseImp x y = {s1 = x.s ; s2 = y.s} ; + ConsImp x xs = { + s1 = \\p,f => x.s ! p ! f ++ "," ++ xs.s1 ! p ! f ; s2 = xs.s2 + } ; + ConjImp conj xs = {s = \\p,f => xs.s1 ! p ! f ++ conj.s2 ++ xs.s2 ! p ! f} ; + + ReflPron = lin RNP { + s = reflPron ! Sg ; n = Sg ; p = P3 ; isPron = True ; isDef = True ; lock_NP = <> + } ; + ReflPoss num cn = lin RNP { + s = \\rc => reflPron ! Sg ! Gen ++ cn.s ! num.n ! toNCase rc Definite ; + n = num.n ; p = P3 ; isPron = False ; isDef = True ; lock_NP = <> + } ; + AdvRNP np prep rnp = lin RNP { + s = \\rc => np.s ! rc ++ rnp.s ! prep.rc ++ prep.s ; + n = np.n ; p = np.p ; isPron = False ; isDef = np.isDef ; lock_NP = <> + } ; + AdvRVP vp prep rnp = insertAdv (rnp.s ! prep.rc ++ prep.s) vp ; + AdvRAP ap prep rnp = {s = rnp.s ! prep.rc ++ prep.s ++ ap.s} ; + ReflRNP slash rnp = insertObj (\\_ => rnp.s ! slash.c2.rc ++ slash.c2.s) slash ; + ReflA2RNP ap rnp = {s = rnp.s ! ap.c2.rc ++ ap.c2.s ++ ap.s} ; + PossPronRNP pron num cn rnp = lin NP { + s = \\rc => pron.s ! PronCase Gen ++ cn.s ! num.n ! NNom ++ rnp.s ! rc ; + n = num.n ; p = P3 ; isPron = False ; isDef = True + } ; + + UseDAP dap = { + s = dap.s ; n = dap.n ; p = P3 ; isPron = False ; isDef = dap.isDef + } ; + UseDAPMasc = UseDAP ; + UseDAPFem = UseDAP ; } diff --git a/src/mongolian/ExtraMon.gf b/src/mongolian/ExtraMon.gf index ab5177346..61871f59e 100644 --- a/src/mongolian/ExtraMon.gf +++ b/src/mongolian/ExtraMon.gf @@ -736,12 +736,12 @@ ugz_AdV = ss "угз" ; yalz_AdV = ss "ялз" ; yaz_AdV = ss "яз" ; zad_AdV = ss "зад" ; -garui_CAdv = lin CAdv {s = " гаруй" ; c2 = noPrep Nom} ; -lugaa_CAdv = lin CAdv {s = " лугаа" ; c2 = noPrep Nom} ; -met_CAdv = lin CAdv {s = " мэт" ; c2 = noPrep Nom} ; -meterhueue_CAdv = lin CAdv {s = " мэтэрхүү" ; c2 = noPrep Nom} ; -net_CAdv = lin CAdv {s = " нэт" ; c2 = noPrep Nom} ; -shig_CAdv = lin CAdv {s = " шиг" ; c2 = noPrep Nom} ; +garui_CAdv = {s = " гаруй" ; c2 = noPrep Nom} ; +lugaa_CAdv = {s = " лугаа" ; c2 = noPrep Nom} ; +met_CAdv = {s = " мэт" ; c2 = noPrep Nom} ; +meterhueue_CAdv = {s = " мэтэрхүү" ; c2 = noPrep Nom} ; +net_CAdv = {s = " нэт" ; c2 = noPrep Nom} ; +shig_CAdv = {s = " шиг" ; c2 = noPrep Nom} ; atlaa_Conj = mkConj "атлаа" ; ba_Conj = mkConj "ба" ; bas_Conj = mkConj "бас" ; @@ -755,48 +755,48 @@ esvel_Conj = mkConj "эсвэл" ; moertloeoe_Conj = mkConj "мөртлөө" ; selt_Conj = mkConj "сэлт" ; moertoeoe_Conj = mkConj "мөртөө" ; -ahu_Det = {s = "аху" ; sp = \\rc => (regN "аху").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPre,isPoss = False ; isDef = True} ; -alivaa_Det = {s = "аливаа" ; sp = \\rc => (regN "аливаа").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -anu_Det = {s = "ану" ; sp = \\rc => (regN "ану").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPre,isPoss = False ; isDef = True} ; -bishid_Det = {s = "бишид" ; sp = \\rc => (regN "бишид").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -bolgon_Det = {s = "болгон" ; sp = \\rc => (regN "болгон").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPre,isPoss = False ; isDef = True} ; -buehen_Det = {s = "бүхэн" ; sp = \\rc => (regN "бүхэн").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPre,isPoss = False ; isDef = True} ; -buehii_Det = {s = "бүхий" ; sp = \\rc => (regN "бүхий").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPre,isPoss = False ; isDef = True} ; -busad_Det = {s = "бусад" ; sp = \\rc => (regN "бусад").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -caad_Det = {s = "цаад" ; sp = \\rc => (regN "цаад").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -caadah'_Det = {s = "цаадахь" ; sp = \\rc => (regN "цаадахь").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -coem_Det = {s = "цөм" ; sp = \\rc => (regN "цөм").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -coryn_ganc_Det = {s = "цорын ганц" ; sp = \\rc => (regN "цорын ганц").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -diilenh_Det = {s = "дийлэнх" ; sp = \\rc => (regN "дийлэнх").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -enehueue_Det = {s = "энэхүү" ; sp = \\rc => (regN "энэхүү").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -ganc_Det = {s = "ганц" ; sp = \\rc => (regN "ганц").s ! (SF Sg (toNCase rc Definite)) ; isPoss = False ; isNum,isPre,isDef = True} ; -ganchan_Det = {s = "ганцхан" ; sp = \\rc => (regN "ганцхан").s ! (SF Sg (toNCase rc Definite)) ; isPoss = False ; isNum,isPre,isDef = True} ; -heseghen_Det = {s = "хэсэгхэн" ; sp = \\rc => (regN "хэсэгхэн").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -ihenh_Det = {s = "ихэнх" ; sp = \\rc => (regN "ихэнх").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -iim_Det = {s = "ийм" ; sp = \\rc => (regN "ийм").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -iimhen_Det = {s = "иймхэн" ; sp = \\rc => (regN "иймхэн").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -moenoeoehoen_Det = {s = "мөнөөхөн" ; sp = \\rc => (regN "мөнөөхөн").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -nejeed_Det = {s = "нэжээд" ; sp = \\rc => (regN "нэжээд").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss,isDef = False ; isPre = True} ; -nejgeed_Det = {s = "нэжгээд" ; sp = \\rc => (regN "нэжгээд").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss,isDef = False ; isPre = True} ; -nijeed_Det = {s = "нижээд" ; sp = \\rc => (regN "нижээд").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss,isDef = False ; isPre = True} ; -nijgeed_Det = {s = "нижгээд" ; sp = \\rc => (regN "нижгээд").s ! (SF Sg (toNCase rc Definite)) ; isNum, isPoss,isDef = False ; isPre = True} ; -noegoeoe_Det = {s = "нөгөө" ; sp = \\rc => (regN "нөгөө").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -olhon_Det = {s = "олхон" ; sp = \\rc => (regN "олхон").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -olon_Det = {s = "олон" ; sp = \\rc => (regN "олон").s ! (SF Sg (toNCase rc Definite)) ; isNum, isPoss,isDef = False ; isPre = True} ; -shaham_Det = {s = "шахам" ; sp = \\rc => (regN "шахам").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPre,isPoss = False ; isDef = True} ; -shahuu_Det = {s = "шахуу" ; sp = \\rc => (regN "шахуу").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss,isDef = False ; isPre = True} ; -tereehen_Det = {s = "тэрээхэн" ; sp = \\rc => (regN "тэрээхэн").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -terhen_Det = {s = "тэрхэн" ; sp = \\rc => (regN "тэрхэн").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -terhueue_Det = {s = "тэрхүү" ; sp = \\rc => (regN "тэрхүү").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -tiimerhueue_Det = {s = "тиймэрхүү" ; sp = \\rc => (regN "тиймэрхүү").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -tiimshig_Det = {s = "тиймшиг" ; sp = \\rc => (regN "тиймшиг").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -toechnoeoen_Det = {s = "төчнөөн" ; sp = \\rc => (regN "төчнөөн").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -tutam_Det = {s = "тутам" ; sp = \\rc => (regN "тутам").s ! (SF Sg (toNCase rc Definite)) ; isNum, isPoss,isPre = False ; isDef = True} ; -yamarvaa_Det = {s = "ямарваа" ; sp = \\rc => (regN "ямарваа").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -zarim_Det = {s = "зарим" ; sp = \\rc => (regN "зарим").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss,isDef = False ; isPre = True} ; -bueh_Det = {s = "бүх" ; sp = \\rc => (regN "бүх").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss = False ; isPre,isDef = True} ; -buer_Det = {s = "бүр" ; sp = \\rc => (regN "бүр").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss,isDef = False ; isPre = True} ; -zarim_neg_Det = {s = "зарим нэг" ; sp = \\rc => (regN "зарим нэг").s ! (SF Sg (toNCase rc Definite)) ; isNum,isPoss,isDef = False ; isPre = True} ; +ahu_Det = {s = "аху" ; sp = \\rc => (regN "аху").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre = False ; isDef = True} ; +alivaa_Det = {s = "аливаа" ; sp = \\rc => (regN "аливаа").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +anu_Det = {s = "ану" ; sp = \\rc => (regN "ану").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre = False ; isDef = True} ; +bishid_Det = {s = "бишид" ; sp = \\rc => (regN "бишид").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +bolgon_Det = {s = "болгон" ; sp = \\rc => (regN "болгон").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre = False ; isDef = True} ; +buehen_Det = {s = "бүхэн" ; sp = \\rc => (regN "бүхэн").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre = False ; isDef = True} ; +buehii_Det = {s = "бүхий" ; sp = \\rc => (regN "бүхий").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre = False ; isDef = True} ; +busad_Det = {s = "бусад" ; sp = \\rc => (regN "бусад").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +caad_Det = {s = "цаад" ; sp = \\rc => (regN "цаад").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +caadah'_Det = {s = "цаадахь" ; sp = \\rc => (regN "цаадахь").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +coem_Det = {s = "цөм" ; sp = \\rc => (regN "цөм").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +coryn_ganc_Det = {s = "цорын ганц" ; sp = \\rc => (regN "цорын ганц").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +diilenh_Det = {s = "дийлэнх" ; sp = \\rc => (regN "дийлэнх").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +enehueue_Det = {s = "энэхүү" ; sp = \\rc => (regN "энэхүү").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +ganc_Det = {s = "ганц" ; sp = \\rc => (regN "ганц").s ! (SF Sg (toNCase rc Definite)) ; n = Pl ; isPre,isDef = True} ; +ganchan_Det = {s = "ганцхан" ; sp = \\rc => (regN "ганцхан").s ! (SF Sg (toNCase rc Definite)) ; n = Pl ; isPre,isDef = True} ; +heseghen_Det = {s = "хэсэгхэн" ; sp = \\rc => (regN "хэсэгхэн").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +ihenh_Det = {s = "ихэнх" ; sp = \\rc => (regN "ихэнх").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +iim_Det = {s = "ийм" ; sp = \\rc => (regN "ийм").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +iimhen_Det = {s = "иймхэн" ; sp = \\rc => (regN "иймхэн").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +moenoeoehoen_Det = {s = "мөнөөхөн" ; sp = \\rc => (regN "мөнөөхөн").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +nejeed_Det = {s = "нэжээд" ; sp = \\rc => (regN "нэжээд").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isDef = False ; isPre = True} ; +nejgeed_Det = {s = "нэжгээд" ; sp = \\rc => (regN "нэжгээд").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isDef = False ; isPre = True} ; +nijeed_Det = {s = "нижээд" ; sp = \\rc => (regN "нижээд").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isDef = False ; isPre = True} ; +nijgeed_Det = {s = "нижгээд" ; sp = \\rc => (regN "нижгээд").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isDef = False ; isPre = True} ; +noegoeoe_Det = {s = "нөгөө" ; sp = \\rc => (regN "нөгөө").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +olhon_Det = {s = "олхон" ; sp = \\rc => (regN "олхон").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +olon_Det = {s = "олон" ; sp = \\rc => (regN "олон").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isDef = False ; isPre = True} ; +shaham_Det = {s = "шахам" ; sp = \\rc => (regN "шахам").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre = False ; isDef = True} ; +shahuu_Det = {s = "шахуу" ; sp = \\rc => (regN "шахуу").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isDef = False ; isPre = True} ; +tereehen_Det = {s = "тэрээхэн" ; sp = \\rc => (regN "тэрээхэн").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +terhen_Det = {s = "тэрхэн" ; sp = \\rc => (regN "тэрхэн").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +terhueue_Det = {s = "тэрхүү" ; sp = \\rc => (regN "тэрхүү").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +tiimerhueue_Det = {s = "тиймэрхүү" ; sp = \\rc => (regN "тиймэрхүү").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +tiimshig_Det = {s = "тиймшиг" ; sp = \\rc => (regN "тиймшиг").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +toechnoeoen_Det = {s = "төчнөөн" ; sp = \\rc => (regN "төчнөөн").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +tutam_Det = {s = "тутам" ; sp = \\rc => (regN "тутам").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre = False ; isDef = True} ; +yamarvaa_Det = {s = "ямарваа" ; sp = \\rc => (regN "ямарваа").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +zarim_Det = {s = "зарим" ; sp = \\rc => (regN "зарим").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isDef = False ; isPre = True} ; +bueh_Det = {s = "бүх" ; sp = \\rc => (regN "бүх").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isPre,isDef = True} ; +buer_Det = {s = "бүр" ; sp = \\rc => (regN "бүр").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isDef = False ; isPre = True} ; +zarim_neg_Det = {s = "зарим нэг" ; sp = \\rc => (regN "зарим нэг").s ! (SF Sg (toNCase rc Definite)) ; n = Sg ; isDef = False ; isPre = True} ; haa_IAdv = ss "хаа" ; haana_IAdv = ss "хаана" ; haanaas_IAdv = ss "хаанаас" ; @@ -1031,13 +1031,13 @@ zuurd_Prep = mkPrep Gen "зуурд" ; deerh_Prep = mkPrep Gen "дээрх" ; huertel_Prep = mkPrep Nom "хүртэл" ; tusam_Prep = mkPrep Nom "тусам" ; -edgeer_Quant = {s = \\_ => "эдгээр" ; sp = \\_,nc => (regN "эдгээр").s ! SF Sg nc ; isPoss =False ; isDef = True} ; -el_Quant = {s = \\_ => "эл" ; sp = \\_,nc => (regN "эл").s ! SF Sg nc ; isPoss =False ; isDef = True} ; -ene_Quant = {s = \\_ => "энэ" ; sp = \\_,nc => (regN "энэ").s ! SF Sg nc ; isPoss =False ; isDef = True} ; -eneehen_Quant = {s = \\_ => "энээхэн" ; sp = \\_,nc => (regN "энээхэн").s ! SF Sg nc ; isPoss =False ; isDef = True} ; -enehen_Quant = {s = \\_ => "энэхэн" ; sp = \\_,nc => (regN "энэхэн").s ! SF Sg nc ; isPoss =False ; isDef = True} ; -naadah'_Quant = {s = \\_ => "наадахь" ; sp = \\_,nc => (regN "наадахь").s ! SF Sg nc ; isPoss =False ; isDef = True} ; -tedgeer_Quant = {s = \\_ => "тэдгээр" ; sp = \\_,nc => (regN "тэдгээр").s ! SF Sg nc ; isPoss =False ; isDef = True} ; +edgeer_Quant = {s = \\_ => "эдгээр" ; sp = \\_,nc => (regN "эдгээр").s ! SF Sg nc ; isDef = True} ; +el_Quant = {s = \\_ => "эл" ; sp = \\_,nc => (regN "эл").s ! SF Sg nc ; isDef = True} ; +ene_Quant = {s = \\_ => "энэ" ; sp = \\_,nc => (regN "энэ").s ! SF Sg nc ; isDef = True} ; +eneehen_Quant = {s = \\_ => "энээхэн" ; sp = \\_,nc => (regN "энээхэн").s ! SF Sg nc ; isDef = True} ; +enehen_Quant = {s = \\_ => "энэхэн" ; sp = \\_,nc => (regN "энэхэн").s ! SF Sg nc ; isDef = True} ; +naadah'_Quant = {s = \\_ => "наадахь" ; sp = \\_,nc => (regN "наадахь").s ! SF Sg nc ; isDef = True} ; +tedgeer_Quant = {s = \\_ => "тэдгээр" ; sp = \\_,nc => (regN "тэдгээр").s ! SF Sg nc ; isDef = True} ; getel_PConj = ss "гэтэл" ; gevch_PConj = ss "гэвч" ; hedii_Subj = {s = "хэдий" ; isPre = True} ; diff --git a/src/mongolian/GrammarMon.gf b/src/mongolian/GrammarMon.gf index 239fd73cc..c9f49769d 100644 --- a/src/mongolian/GrammarMon.gf +++ b/src/mongolian/GrammarMon.gf @@ -15,5 +15,5 @@ concrete GrammarMon of Grammar = StructuralMon, IdiomMon, TenseMon, - NumeralTransferMon + NamesMon ** { flags startcat = Phr ; unlexer = text ; lexer = text ; coding=utf8 ; } ; diff --git a/src/mongolian/IdiomMon.gf b/src/mongolian/IdiomMon.gf index 70476015f..293cec537 100644 --- a/src/mongolian/IdiomMon.gf +++ b/src/mongolian/IdiomMon.gf @@ -35,9 +35,6 @@ lin vps = vp.s ! VPImper Pos False in { s = vps.fin ; - compl = vp.compl ; - adv = vp.adv ; - ext = vp.ext } ; ImpP3 np vp = diff --git a/src/mongolian/LangMon.gf b/src/mongolian/LangMon.gf index 29e818573..cebfba89d 100644 --- a/src/mongolian/LangMon.gf +++ b/src/mongolian/LangMon.gf @@ -3,6 +3,7 @@ concrete LangMon of Lang = GrammarMon, LexiconMon -- to compile faster, use TestLexiconMon (see LangExtraMon.gf) + ,ConstructionMon ,DocumentationMon --# notpresent ** { diff --git a/src/mongolian/NamesMon.gf b/src/mongolian/NamesMon.gf new file mode 100644 index 000000000..848a4d084 --- /dev/null +++ b/src/mongolian/NamesMon.gf @@ -0,0 +1,15 @@ +concrete NamesMon of Names = CatMon ** open Prelude, ResMon in { + + oper + nameNP : (RCase => Str) -> NP = \s -> lin NP { + s = s ; + n = Sg ; p = P3 ; isPron = False ; isDef = True + } ; + + lin + UseLN ln = nameNP ln.s ; + InLN ln = {s = ln.s ! Dat} ; + AdjLN ap ln = {s = \\rc => ap.s ++ ln.s ! rc} ; + GivenName gn = nameNP gn.s ; + MaleSurname sn = nameNP sn.s ; +} diff --git a/src/mongolian/NounMon.gf b/src/mongolian/NounMon.gf index 6bedac074..b91ddabb7 100644 --- a/src/mongolian/NounMon.gf +++ b/src/mongolian/NounMon.gf @@ -6,14 +6,14 @@ lin DetCN det cn = { s = \\rc => case of { => case rc of { - Acc => det.s ++ cn.s ! Sg ! NAcc Definite ; - _ => det.s ++ cn.s ! Sg ! toNCase rc Definite } ; + Acc => det.s ++ cn.s ! det.n ! NAcc Definite ; + _ => det.s ++ cn.s ! det.n ! toNCase rc Definite } ; => case rc of { - Acc => det.s ++ cn.s ! Sg ! NAcc Indefinite ; - _ => det.s ++ cn.s ! Sg ! toNCase rc Indefinite } ; - _ => cn.s ! Sg ! NNom ++ det.sp ! rc + Acc => det.s ++ cn.s ! det.n ! NAcc Indefinite ; + _ => det.s ++ cn.s ! det.n ! toNCase rc Indefinite } ; + _ => cn.s ! det.n ! NNom ++ det.sp ! rc } ; - n = Sg ; + n = det.n ; p = P3 ; isPron = False ; isDef = det.isDef @@ -51,12 +51,8 @@ lin isDef = np.isDef } ; - RelNP np rs = { - s = \\rc => rs.s ! Attributive ++ np.s ! rc ; - n = np.n ; - p = np.p ; - isPron = False ; - isDef = np.isDef + RelNP np rs = np ** { + s = \\rc => np.s ! rc ++ "," ++ rs.s ! ComplSubj } ; AdvNP np adv = { @@ -66,33 +62,50 @@ lin isPron = False ; isDef = np.isDef } ; + + ExtAdvNP np adv = np ** { + s = \\rc => np.s ! rc ++ "," ++ adv.s + } ; DetQuant quant num = { - s = quant.s ! Sg ++ num.s ; + s = quant.s ! num.n ++ num.s ; sp = \\rc => quant.sp ! num.n ! NNom ++ num.sp ! rc ; - isNum = num.isNum ; - isPoss = quant.isPoss ; - isDef = True ; + n = num.n ; + isDef = quant.isDef ; isPre = True } ; DetQuantOrd quant num ord = { - s = quant.s ! Sg ++ num.s ++ ord.s ; + s = quant.s ! num.n ++ num.s ++ ord.s ; sp = \\_ => quant.sp ! num.n ! NNom ++ num.s ++ ord.s ; - isNum = num.isNum ; - isPoss = quant.isPoss ; - isDef = True ; + n = num.n ; + isDef = quant.isDef ; isPre = True } ; DetNP det = { s = \\rc => det.sp ! rc ; - n = Sg ; + n = det.n ; p = P3 ; isPron = False ; - isDef = True + isDef = det.isDef } ; + DetDAP det = { + s = det.sp ; + n = det.n ; + isDef = det.isDef + } ; + + AdjDAP dap ap = dap ** { + s = \\rc => ap.s ++ dap.s ! rc + } ; + + CountNP det np = { + s = \\rc => det.s ++ np.s ! Abl ; + n = np.n ; p = np.p ; isPron = False ; isDef = det.isDef + } ; + UseN,UseN2 = \noun -> { s = \\n,nc => noun.s ! SF n nc } ; @@ -100,15 +113,14 @@ lin PossPron p = { s = \\_ => p.s ! PronCase Gen ; sp = \\_,nc => p.s ! PronPoss (toRCase nc Definite) ; - isPoss = True ; isDef = True } ; - NumSg = {s = [] ; sp = \\_ => [] ; n = Sg ; isNum = False} ; - NumPl = {s = [] ; sp = \\_ => [] ; n = Pl ; isNum = False} ; - - NumCard n = n ** {isNum = True} ; - + NumSg = {s = [] ; sp = \\_ => [] ; n = Sg} ; + NumPl = {s = [] ; sp = \\_ => [] ; n = Pl} ; + + NumCard n = n ** {n = Sg} ; + NumDigits,NumNumeral,NumDecimal = \numeral -> { s = numeral.s ! NCard ; sp = \\_ => numeral.s ! NCard ; @@ -143,20 +155,15 @@ lin } ; Pl => (regN "эдгээр").s ! SF Sg nc } ; - isPoss = False ; isDef = True } ; -- the numeral neg for ‘one’ in the function as an indefinite article (Givon 1981) IndefArt = { - s = \\n => case n of { - Sg => "нэг" ; - Pl => "нэжгээд" - } ; + s = \\_ => [] ; sp = \\n,nc => case n of { Sg => (regN "аль нэг").s ! SF Sg nc ; Pl => (regN "нэжгээд").s ! SF Sg nc } ; - isPoss = False ; isDef = False } ; @@ -168,6 +175,22 @@ lin isDef = True } ; + PossNP cn np = { + s = \\n,nc => np.s ! Gen ++ cn.s ! n ! nc + } ; + + PartNP cn np = { + s = \\n,nc => np.s ! Gen ++ cn.s ! n ! nc + } ; + + QuantityNP dec mu = { + s = \\rc => case mu.isPre of { + True => mu.s ++ dec.s ! NCard ; + False => dec.s ! NCard ++ mu.s + } ; + n = dec.n ; p = P3 ; isPron = False ; isDef = False + } ; + Use2N3 n3 = { s = n3.s ; c2 = n3.c2 diff --git a/src/mongolian/NumeralMon.gf b/src/mongolian/NumeralMon.gf index 060ad7314..86cfaafe7 100644 --- a/src/mongolian/NumeralMon.gf +++ b/src/mongolian/NumeralMon.gf @@ -8,7 +8,7 @@ lincat Digit = {s : Place => DForm => CardOrd => Str} ; Sub10 = {s : Place => DForm => CardOrd => Str ; n : Number} ; Sub100, Sub1000 = {s : Place => CardOrd => Str ; n : Number} ; - Sub1000000 = {s : CardOrd => Str; n : Number} ; + Sub1000000, Sub1000000000, Sub1000000000000 = {s : CardOrd => Str; n : Number} ; oper mkCardOrd : Str -> CardOrd => Str = \unit -> @@ -116,6 +116,7 @@ lin } ; pot1as2 n = n ; + pot21 = {s = \\_,co => mkCardOrd "нэг зуу" ! co ; n = Pl} ; pot2 d = { s = \\p => d.s ! p ! Hundred ; n = Pl } ; @@ -136,6 +137,23 @@ lin s = \\co => n.s ! Attr ! NCard ++ "мянга" ++ m.s ! Indep ! co ; n = Pl } ; + pot31 = {s = mkCardOrd "нэг мянга" ; n = Pl} ; + pot3as4 n = n ; + pot3decimal d = {s = \\co => d.s ! NCard ++ mkCardOrd "мянга" ! co ; n = Pl} ; + pot41 = {s = mkCardOrd "нэг сая" ; n = Pl} ; + pot4 n = {s = \\co => n.s ! Attr ! NCard ++ mkCardOrd "сая" ! co ; n = Pl} ; + pot4plus n m = { + s = \\co => n.s ! Attr ! NCard ++ "сая" ++ m.s ! NCard ; n = Pl + } ; + pot4as5 n = n ; + pot4decimal d = {s = \\co => d.s ! NCard ++ mkCardOrd "сая" ! co ; n = Pl} ; + pot51 = {s = mkCardOrd "нэг тэрбум" ; n = Pl} ; + pot5 n = {s = \\co => n.s ! Attr ! NCard ++ mkCardOrd "тэрбум" ! co ; n = Pl} ; + pot5plus n m = { + s = \\co => n.s ! Attr ! NCard ++ "тэрбум" ++ m.s ! NCard ; n = Pl + } ; + pot5decimal d = {s = \\co => d.s ! NCard ++ mkCardOrd "тэрбум" ! co ; n = Pl} ; + lincat Dig = TDigit ; diff --git a/src/mongolian/ParadigmsMon.gf b/src/mongolian/ParadigmsMon.gf index 1f22b3d55..bbf65958a 100644 --- a/src/mongolian/ParadigmsMon.gf +++ b/src/mongolian/ParadigmsMon.gf @@ -35,9 +35,23 @@ oper s = \\rc => (loanN pn).s ! (SF Sg (toNCase rc Definite)) } ; - mkLN : Str -> LN = \s -> lin LN {s=s} ; - mkSN : Str -> SN = \s -> lin SN {s=s} ; - mkGN : Str -> GN = \s -> lin GN {s=s} ; + nameForms : Str -> RCase => Str = \s -> case s of { + ["АЯУЮ"] + _ | (_ + ["аяую"] + _) | + ["ЁО"] + _ | (_ + ["ёо"] + _) | + "Ө" + _ | (_ + "ө" + _) | + ["ЭҮЕИ"] + _ | (_ + ["эүеи"] + _) => + \\rc => (loanN s).s ! SF Sg (toNCase rc Definite) ; + _ => table { + Nom => s ; Gen => s ++ BIND ++ "ийн" ; Dat => s ++ BIND ++ "д" ; + Acc => s ++ BIND ++ "ийг" ; Abl => s ++ BIND ++ "ээс" ; + Inst => s ++ BIND ++ "ээр" ; Com => s ++ BIND ++ "тэй" ; + Dir => s ++ "рүү" + } + } ; + + mkLN : Str -> LN = \s -> lin LN {s = nameForms s} ; + mkSN : Str -> SN = \s -> lin SN {s = nameForms s} ; + mkGN : Str -> GN = \s -> lin GN {s = nameForms s} ; modDecl : (Dcl -> Dcl) -> Str -> Noun = \mod,nomSg -> mkDeclDrop (mod (chooseDcl nomSg)) nomSg ; diff --git a/src/mongolian/ParadigmsMonO.gf b/src/mongolian/ParadigmsMonO.gf index 9542acb54..42042eb92 100644 --- a/src/mongolian/ParadigmsMonO.gf +++ b/src/mongolian/ParadigmsMonO.gf @@ -339,7 +339,7 @@ oper -- Implementation of Adjectives - mkA : (positive : Str) -> Adjective = \a -> lin A (ss a) ; + mkA : (positive : Str) -> A = \a -> lin A (ss a) ; mkA2 : Adjective -> Prep -> A2 = \a,p -> lin A2 a ** {c2 = p} ; @@ -374,7 +374,7 @@ oper -- Other verbs - mkV0 : Verb -> V0 = \v -> lin V0 v ; + mkV0 : Verb -> V0 = \v -> v ; mkVA : Verb -> VA = \v -> lin VA v ; mkVS : Verb -> VS = \v -> lin VS v ; mkVV : Aux -> VV = \v -> lin VV v ; diff --git a/src/mongolian/ResMon.gf b/src/mongolian/ResMon.gf index 435713a0e..ae2e4a4b8 100644 --- a/src/mongolian/ResMon.gf +++ b/src/mongolian/ResMon.gf @@ -126,7 +126,7 @@ param oper Noun : Type = {s : SubstForm => Str} ; - NounPhrase : Type = {s : RCase => Str; n : Number ; p : Person ; isPron : Bool ; isDef : Bool} ; + NounPhrase : Type = {s : RCase => Str; n : Number ; p : Person ; isPron : Bool} ; param PronForm = PronCase RCase | PronPoss RCase ; diff --git a/src/mongolian/SentenceMon.gf b/src/mongolian/SentenceMon.gf index befd3c1d7..c521e0a4c 100644 --- a/src/mongolian/SentenceMon.gf +++ b/src/mongolian/SentenceMon.gf @@ -28,6 +28,10 @@ lin ImpF _ True => "та" ++ neg ++ (vp.s ! VPImper pol True).fin } } ; + + AdvImp adv imp = { + s = \\pol,f => adv.s ++ imp.s ! pol ! f + } ; -- Clauses missing object noun phrases @@ -62,7 +66,7 @@ lin } ; UseCl t p cl = { - s = \\_ => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! Part Subject + s = \\_ => t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! Main } ; UseQCl t p cl = { diff --git a/src/mongolian/StructuralMon.gf b/src/mongolian/StructuralMon.gf index 9ade63919..802ef4e7b 100644 --- a/src/mongolian/StructuralMon.gf +++ b/src/mongolian/StructuralMon.gf @@ -32,7 +32,8 @@ lin every_Det = { s = "бүр" ; sp = \\rc => (regN "бүр").s ! (SF Sg (toNCase rc Definite)) ; - isNum, isPoss, isPre = False ; + n = Sg ; + isPre = False ; isDef = True } ; everybody_NP = mkNP "хүн бүр" Definite ; @@ -41,7 +42,8 @@ lin few_Det = { s = "багагүй" ; sp = \\rc => (regN "багагүй").s ! (SF Sg (toNCase rc Indefinite)) ; - isNum, isPoss, isDef = False ; + n = Pl ; + isDef = False ; isPre = True } ; for_Prep = noPrep Dat ; @@ -61,14 +63,15 @@ lin in8front_Prep = mkPrep Gen "урд" ; in_Prep = noPrep Dat ; it_Pron = mkPron "тэр" "түүний" "түүнд" "түүнийг" "түүнээс" "түүнээр" "түүнтэй" "түүн рүү" Sg P3 ; - less_CAdv = lin CAdv {s = "бага" ; c2 = noPrep Abl} ; + less_CAdv = {s = "бага" ; c2 = noPrep Abl} ; many_Det = { s = "олон" ; sp = \\rc => (regN "олон").s ! (SF Sg (toNCase rc Indefinite)) ; - isNum, isPoss, isDef = False ; + n = Pl ; + isDef = False ; isPre = True } ; - more_CAdv = lin CAdv {s = "илүү" ; c2 = noPrep Abl}; + more_CAdv = {s = "илүү" ; c2 = noPrep Abl}; most_Predet = { s = "ихэнх" ; isPre = True ; @@ -77,7 +80,8 @@ lin much_Det = { s = "нилээд" ; sp = \\rc => (regN "нилээд").s ! (SF Sg (toNCase rc Indefinite)) ; - isNum, isPoss, isDef = False ; + n = Sg ; + isDef = False ; isPre = True } ; must_VV = verbToAux (regV ("хэрэгтэй байх")) ; @@ -100,13 +104,15 @@ lin someSg_Det = { s = "зарим нэг" ; sp = \\rc => (regN "зарим нэг").s ! (SF Sg (toNCase rc Indefinite)) ; - isNum, isPoss, isDef = False ; + n = Sg ; + isDef = False ; isPre = True } ; somePl_Det = { s = "зарим" ; sp = \\rc => (regN "зарим").s ! (SF Sg (toNCase rc Indefinite)) ; - isNum, isPoss, isDef = False ; + n = Pl ; + isDef = False ; isPre = True } ; something_NP = mkNP "ямар нэгэн юм" Indefinite ; @@ -124,7 +130,6 @@ lin } ; Pl => (regN "тэдгээр").s ! SF Sg nc }; - isPoss = False ; isDef = True } ; that_Subj = {s = [] ; isPre = True} ; @@ -146,7 +151,6 @@ lin } ; Pl => (regN "эдгээр").s ! SF Sg nc } ; - isPoss = False ; isDef = True } ; through_Prep = noPrep Inst ; @@ -158,11 +162,9 @@ lin we_Pron = mkPron "бид" "бидний" "бидэнд" "биднийг" "биднээс" "биднээр" "бидэнтэй" "бидэн рүү" Pl P1 ; whatPl_IP = { s = \\rc => (regN "юу").s ! SF Sg (toNCase rc Definite) ; - n = Pl } ; whatSg_IP = { s = \\rc => (regN "юу").s ! SF Sg (toNCase rc Definite) ; - n = Sg } ; when_IAdv = ss "хэзээ" ; when_Subj = {s = "хэрэв" ; isPre = True} ; @@ -171,12 +173,10 @@ lin s = \\rc => (regN "ямар").s ! SF Sg (toNCase rc Definite) } ; whoPl_IP = { - s = \\rc => (regN "хэн").s ! SF Sg (toNCase rc Definite) ; - n = Pl + s = \\rc => (regN "хэн").s ! SF Sg (toNCase rc Definite) } ; whoSg_IP = { - s = \\rc => (regN "хэн").s ! SF Sg (toNCase rc Definite) ; - n = Sg + s = \\rc => (regN "хэн").s ! SF Sg (toNCase rc Definite) } ; why_IAdv = ss "яагаад" ; with_Prep = noPrep Com ; @@ -188,7 +188,6 @@ lin no_Quant = { s = \\_ => "ямар ч" ; sp = \\_,nc => (regN "ямар ч").s ! SF Sg nc ; - isPoss = False ; isDef = False } ; not_Predet = { @@ -202,7 +201,7 @@ lin nobody_NP = mkNP "хэн ч" Definite ; nothing_NP = mkNP "юу ч" Definite ; except_Prep = mkPrep Abl "гадна" ; - as_CAdv = lin CAdv {s = "шиг" ; c2 = noPrep Nom} ; + as_CAdv = {s = "шиг" ; c2 = noPrep Nom} ; have_V2 = mkV2 (mkV "байх") ; lin language_title_Utt = ss "Монгол" ; diff --git a/src/mongolian/VerbMon.gf b/src/mongolian/VerbMon.gf index 359c6d755..687c13aa3 100644 --- a/src/mongolian/VerbMon.gf +++ b/src/mongolian/VerbMon.gf @@ -9,6 +9,8 @@ lin ComplVV v vp = insertObj (\\_ => infVP vp Nom) (predV (auxToVerb v)) ; + ExtAdvVP vp adv = insertAdv ("," ++ adv.s) vp ; + ComplVS v s = insertEmbedCompl (s.s ! Main ++ "гэж") (predV v) ; ComplVQ v qs = insertEmbedCompl (qs.s ! QIndir) (predV v) ;