From bbfb4e981c994166a37a7f7f6d7b75b7b54b70b1 Mon Sep 17 00:00:00 2001 From: krasimir Date: Sat, 23 Feb 2008 11:57:05 +0000 Subject: [PATCH] added dative case --- lib/resource/bulgarian/AdverbBul.gf | 2 +- lib/resource/bulgarian/CatBul.gf | 8 +-- lib/resource/bulgarian/ExtraBul.gf | 12 ++--- lib/resource/bulgarian/LexiconBul.gf | 6 +-- lib/resource/bulgarian/NounBul.gf | 13 ++++- lib/resource/bulgarian/ParadigmsBul.gf | 12 ++--- lib/resource/bulgarian/QuestionBul.gf | 2 +- lib/resource/bulgarian/ResBul.gf | 12 +++-- lib/resource/bulgarian/SentenceBul.gf | 2 +- lib/resource/bulgarian/StructuralBul.gf | 68 ++++++++++++------------- lib/resource/bulgarian/VerbBul.gf | 10 ++-- 11 files changed, 79 insertions(+), 68 deletions(-) diff --git a/lib/resource/bulgarian/AdverbBul.gf b/lib/resource/bulgarian/AdverbBul.gf index 932bc9efd..2897dcfa8 100644 --- a/lib/resource/bulgarian/AdverbBul.gf +++ b/lib/resource/bulgarian/AdverbBul.gf @@ -8,7 +8,7 @@ concrete AdverbBul of Adverb = CatBul ** open ResBul, Prelude in { s = cadv.s ++ "по" ++ "-" ++ a.s ! ASg Neut Indef ++ "от" ++ s.s } ; - PrepNP prep np = {s = prep.s ++ np.s ! Acc} ; + PrepNP prep np = {s = prep.s ++ np.s ! prep.c} ; AdAdv = cc2 ; diff --git a/lib/resource/bulgarian/CatBul.gf b/lib/resource/bulgarian/CatBul.gf index 9291779b1..d492a74b8 100644 --- a/lib/resource/bulgarian/CatBul.gf +++ b/lib/resource/bulgarian/CatBul.gf @@ -30,7 +30,7 @@ concrete CatBul of Cat = open ResBul, Prelude, (R = ParamX) in { Cl = {s : ResBul.Tense => Anteriority => Polarity => Order => Str} ; Slash = { s : ResBul.Tense => Anteriority => Polarity => Order => Str ; - c2 : Str + c2 : Prep } ; Imp = {s : Polarity => GenNum => Str} ; @@ -83,13 +83,13 @@ concrete CatBul of Cat = open ResBul, Prelude, (R = ParamX) in { -- Structural Subj = {s : Str} ; - Prep = {s : Str} ; + Prep = {s : Str; c : Case} ; -- Open lexical classes, e.g. Lexicon V, VS, VQ, VA = Verb ; - V2, V2A = Verb ** {c2 : Str} ; - V3 = Verb ** {c2, c3 : Str} ; + V2, V2A = Verb ** {c2 : Prep} ; + V3 = Verb ** {c2, c3 : Prep} ; A = {s : AForm => Str} ; A2 = {s : AForm => Str ; c2 : Str} ; diff --git a/lib/resource/bulgarian/ExtraBul.gf b/lib/resource/bulgarian/ExtraBul.gf index 8071cef10..833caeb94 100644 --- a/lib/resource/bulgarian/ExtraBul.gf +++ b/lib/resource/bulgarian/ExtraBul.gf @@ -6,8 +6,8 @@ concrete ExtraBul of ExtraBulAbs = CatBul ** GenNPIndef np = {s = \\gn => np.s ! Gen (aform gn Indef Nom); spec=Indef} ; - i8fem_Pron = mkNP "аз" "мен" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Fem) P1 ; - i8neut_Pron = mkNP "аз" "мен" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Neut) P1 ; + i8fem_Pron = mkPron "аз" "мен" "ми" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Fem) P1 ; + i8neut_Pron = mkPron "аз" "мен" "ми" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Neut) P1 ; whatSg8fem_IP = mkIP "каква" "каква" (GSg Fem) ; whatSg8neut_IP = mkIP "какво" "какво" (GSg Neut) ; @@ -15,11 +15,11 @@ concrete ExtraBul of ExtraBulAbs = CatBul ** whoSg8fem_IP = mkIP "коя" "кого" (GSg Fem) ; whoSg8neut_IP = mkIP "кое" "кого" (GSg Neut) ; - youSg8fem_Pron = mkNP "ти" "теб" "твой" "твоя" "твоят" "твоя" "твоята" "твое" "твоето" "твои" "твоите" (GSg Fem) P2 ; - youSg8neut_Pron = mkNP "ти" "теб" "твой" "твоя" "твоят" "твоя" "твоята" "твое" "твоето" "твои" "твоите" (GSg Neut) P2 ; + youSg8fem_Pron = mkPron "ти" "теб" "ти" "твой" "твоя" "твоят" "твоя" "твоята" "твое" "твоето" "твои" "твоите" (GSg Fem) P2 ; + youSg8neut_Pron = mkPron "ти" "теб" "ти" "твой" "твоя" "твоят" "твоя" "твоята" "твое" "твоето" "твои" "твоите" (GSg Neut) P2 ; - youPol8fem_Pron = mkNP "вие" "вас" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" (GSg Fem) P2 ; - youPol8neut_Pron = mkNP "вие" "вас" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" (GSg Neut) P2 ; + youPol8fem_Pron = mkPron "вие" "вас" "ви" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" (GSg Fem) P2 ; + youPol8neut_Pron = mkPron "вие" "вас" "ви" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" (GSg Neut) P2 ; onePl_Num = {s = table { DMascIndef | DMascPersonalIndef | DFemIndef | DNeutIndef => "едни" ; diff --git a/lib/resource/bulgarian/LexiconBul.gf b/lib/resource/bulgarian/LexiconBul.gf index 867b17716..1ce3a834c 100644 --- a/lib/resource/bulgarian/LexiconBul.gf +++ b/lib/resource/bulgarian/LexiconBul.gf @@ -156,7 +156,7 @@ lin uncertain_A = mkA79 "неясен" ; oper - zaP = mkPrep "за" ; - naP = mkPrep "на" ; - doP = mkPrep "до" ; + zaP = mkPrep "за" Acc ; + naP = mkPrep "на" Dat ; + doP = mkPrep "до" Acc ; } ; diff --git a/lib/resource/bulgarian/NounBul.gf b/lib/resource/bulgarian/NounBul.gf index b289a1f72..0b4322a76 100644 --- a/lib/resource/bulgarian/NounBul.gf +++ b/lib/resource/bulgarian/NounBul.gf @@ -15,10 +15,19 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in { } ; _ => NF det.n det.spec } ; - in det.s ! cn.g ! c ++ cn.s ! nf ; + s = det.s ! cn.g ! c ++ cn.s ! nf + in case c of { + Dat => "на" ++ s; + _ => s + } ; a = {gn = gennum cn.g det.n; p = P3} ; } ; - UsePN pn = {s = \\_ => pn.s; a = {gn = GSg pn.g; p = P3}} ; + UsePN pn = { s = \\c => case c of { + Dat => "на" ++ pn.s; + _ => pn.s + } ; + a = {gn = GSg pn.g; p = P3} + } ; UsePron p = {s = p.s; a=p.a} ; PredetNP pred np = { diff --git a/lib/resource/bulgarian/ParadigmsBul.gf b/lib/resource/bulgarian/ParadigmsBul.gf index 4ff567754..beed1f53a 100644 --- a/lib/resource/bulgarian/ParadigmsBul.gf +++ b/lib/resource/bulgarian/ParadigmsBul.gf @@ -52,7 +52,7 @@ oper -- A preposition as used for rection in the lexicon, as well as to -- build $PP$s in the resource API, just requires a string. - mkPrep : Str -> Prep ; + mkPrep : Str -> Case -> Prep ; noPrep : Prep ; mkA2 a p = a ** {c2 = p.s ; lock_A2 = <>} ; @@ -88,13 +88,13 @@ oper mkAdv x = ss x ** {lock_Adv = <>} ; - mkPrep p = ss p ** {lock_Prep = <>} ; - noPrep = mkPrep [] ; + mkPrep p c = {s = p; c = c; lock_Prep = <>} ; + noPrep = mkPrep [] Acc ; - prepV2 v p = v ** {s = v.s ; c2 = p.s ; lock_V2 = <>} ; - dirV2 v = prepV2 v noPrep; + prepV2 v p = {s = v.s ; c2 = p ; lock_V2 = <>} ; + dirV2 v = prepV2 v noPrep ; - mkV3 v p q = v ** {s = v.s ; s1 = v.s1 ; c2 = p.s ; c3 = q.s ; lock_V3 = <>} ; + mkV3 v p q = v ** {s = v.s ; s1 = v.s1 ; c2 = p ; c3 = q ; lock_V3 = <>} ; dirV3 v p = mkV3 v noPrep p ; dirdirV3 v = dirV3 v noPrep ; diff --git a/lib/resource/bulgarian/QuestionBul.gf b/lib/resource/bulgarian/QuestionBul.gf index 323e6d6a9..96c807126 100644 --- a/lib/resource/bulgarian/QuestionBul.gf +++ b/lib/resource/bulgarian/QuestionBul.gf @@ -18,7 +18,7 @@ concrete QuestionBul of Question = CatBul ** open ResBul, Prelude in { in {s = \\t,a,b,_ => cl.s ! t ! a ! b ! Main} ; QuestSlash ip slash = - mkQuestion (ss (slash.c2 ++ ip.s ! Acc)) slash ; + mkQuestion (ss (slash.c2.s ++ ip.s ! slash.c2.c)) slash ; QuestIAdv iadv cl = mkQuestion iadv cl ; diff --git a/lib/resource/bulgarian/ResBul.gf b/lib/resource/bulgarian/ResBul.gf index 5cedf7dbe..8a378b7dd 100644 --- a/lib/resource/bulgarian/ResBul.gf +++ b/lib/resource/bulgarian/ResBul.gf @@ -18,7 +18,7 @@ resource ResBul = ParamX ** open Prelude in { -- This is the worst-case $Case$ needed for pronouns. param - Case = Nom | Acc ; + Case = Nom | Acc | Dat; NForm = NF Number Species @@ -425,16 +425,18 @@ resource ResBul = ParamX ** open Prelude in { \koi,kogo,gn -> { s = table { Nom => koi ; - Acc => kogo + Acc => kogo ; + Dat => "на" ++ kogo } ; gn = gn } ; - mkNP : (az,men,moj,moia,moiat,moia_,moiata,moe,moeto,moi,moite : Str) -> GenNum -> Person -> {s : Case => Str; gen : AForm => Str; a : Agr} = - \az,men,moj,moia,moiat,moia_,moiata,moe,moeto,moi,moite,gn,p -> { + mkPron : (az,men,mi,moj,moia,moiat,moia_,moiata,moe,moeto,moi,moite : Str) -> GenNum -> Person -> {s : Case => Str; gen : AForm => Str; a : Agr} = + \az,men,mi,moj,moia,moiat,moia_,moiata,moe,moeto,moi,moite,gn,p -> { s = table { Nom => az ; - Acc => men + Acc => men ; + Dat => mi } ; gen = (mkAdjective moj moia moiat moia_ moiata moe moeto moi moite).s ; a = { diff --git a/lib/resource/bulgarian/SentenceBul.gf b/lib/resource/bulgarian/SentenceBul.gf index d1a2626f6..669151115 100644 --- a/lib/resource/bulgarian/SentenceBul.gf +++ b/lib/resource/bulgarian/SentenceBul.gf @@ -22,7 +22,7 @@ concrete SentenceBul of Sentence = CatBul ** open Prelude, ResBul in { c2 = slash.c2 } ; - SlashPrep cl prep = cl ** {c2 = prep.s} ; + SlashPrep cl prep = cl ** {c2 = prep} ; EmbedS s = {s = "," ++ "че" ++ s.s} ; EmbedQS qs = {s = qs.s ! QIndir} ; diff --git a/lib/resource/bulgarian/StructuralBul.gf b/lib/resource/bulgarian/StructuralBul.gf index 9cc56dc72..37716097e 100644 --- a/lib/resource/bulgarian/StructuralBul.gf +++ b/lib/resource/bulgarian/StructuralBul.gf @@ -1,11 +1,11 @@ concrete StructuralBul of Structural = CatBul ** - open MorphoBul, (P = ParadigmsBul), Prelude in { + open MorphoBul, ParadigmsBul, Prelude in { flags optimize=all ; lin - above_Prep = ss "над" ; - after_Prep = ss "след" ; + above_Prep = mkPrep "над" Acc ; + after_Prep = mkPrep "след" Acc ; all_Predet = {s = table GenNum ["всичкия";"всичката";"всичкото";"всичките"]} ; almost_AdA, almost_AdN = ss "почти" ; {- although_Subj = ss "although" ; @@ -13,15 +13,15 @@ concrete StructuralBul of Structural = CatBul ** and_Conj = ss "and" ** {n = Pl} ; -} because_Subj = ss "защото" ; - before_Prep = ss "преди" ; - behind_Prep = ss "зад" ; - between_Prep = ss "между" ; + before_Prep = mkPrep "преди" Acc ; + behind_Prep = mkPrep "зад" Acc ; + between_Prep = mkPrep "между" Acc ; {- both7and_DConj = sd2 "both" "and" ** {n = Pl} ; but_PConj = ss "but" ; -} - by8agent_Prep = ss "чрез" ; - by8means_Prep = ss "чрез" ; + by8agent_Prep = mkPrep "чрез" Acc ; + by8means_Prep = mkPrep "чрез" Acc ; {- can8know_VV, can_VV = { s = table { @@ -36,7 +36,7 @@ concrete StructuralBul of Structural = CatBul ** isAux = True } ; -} - during_Prep = ss ["по време на"] ; + during_Prep = mkPrep ["по време на"] Acc ; {- either7or_DConj = sd2 "either" "or" ** {n = Sg} ; everybody_NP = regNP "everybody" Sg ; @@ -48,21 +48,21 @@ concrete StructuralBul of Structural = CatBul ** everywhere_Adv = ss "навсякъде" ; few_Det = {s = \\_,_ => "няколко"; n = Pl; countable = True; spec = Indef} ; --- first_Ord = ss "first" ; DEPRECATED - for_Prep = ss "за" ; - from_Prep = ss "от" ; - he_Pron = mkNP "той" "него" "свой" "своя" "своят" "своя" "своята" "свое" "своето" "свои" "своите" (GSg Masc) P3 ; + for_Prep = mkPrep "за" Acc ; + from_Prep = mkPrep "от" Acc ; + he_Pron = mkPron "той" "него" "му" "свой" "своя" "своят" "своя" "своята" "свое" "своето" "свои" "своите" (GSg Masc) P3 ; here_Adv = ss "тук" ; here7to_Adv = ss ["до тук"] ; here7from_Adv = ss ["от тук"] ; how_IAdv = ss "как" ; how8many_IDet = {s = \\_ => "колко"; n = Pl} ; if_Subj = ss "ако" ; - in8front_Prep = ss "пред" ; - i_Pron = mkNP "аз" "мен" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Masc) P1 ; - in_Prep = ss (pre { "в" ; - "във" / strs {"в" ; "ф" ; "В" ; "Ф"} - }) ; - it_Pron = mkNP "то" "него" "негов" "неговия" "неговият" "негова" "неговата" "негово" "неговото" "негови" "неговите" (GSg Neut) P3 ; + in8front_Prep = mkPrep "пред" Acc ; + i_Pron = mkPron "аз" "мен" "ми" "мой" "моя" "моят" "моя" "моята" "мое" "моето" "мои" "моите" (GSg Masc) P1 ; + in_Prep = mkPrep (pre { "в" ; + "във" / strs {"в" ; "ф" ; "В" ; "Ф"} + }) Acc ; + it_Pron = mkPron "то" "него" "му" "негов" "неговия" "неговият" "негова" "неговата" "негово" "неговото" "негови" "неговите" (GSg Neut) P3 ; less_CAdv = {s="не"; sn="по-малко"} ; many_Det = mkDeterminerPl "много" ; more_CAdv = {s=[]; sn="повече"} ; @@ -83,20 +83,20 @@ concrete StructuralBul of Structural = CatBul ** } ; -} no_Phr = ss "не" ; - on_Prep = ss "на" ; + on_Prep = mkPrep "на" Acc ; ---- one_Quant = mkDeterminer Sg "one" ; -- DEPRECATED only_Predet = {s = \\_ => "само"} ; {- or_Conj = ss "or" ** {n = Sg} ; otherwise_PConj = ss "otherwise" ; -} - part_Prep = ss "от" ; + part_Prep = mkPrep "от" Acc ; {- please_Voc = ss "please" ; -} - possess_Prep = ss "на" ; + possess_Prep = mkPrep [] Dat ; quite_Adv = ss "доста" ; - she_Pron = mkNP "тя" "нея" "неин" "нейния" "нейният" "нейна" "нейната" "нейно" "нейното" "нейни" "нейните" (GSg Fem) P3 ; + she_Pron = mkPron "тя" "нея" "и" "неин" "нейния" "нейният" "нейна" "нейната" "нейно" "нейното" "нейни" "нейните" (GSg Fem) P3 ; so_AdA = ss "толкова" ; {- somebody_NP = regNP "somebody" Sg ; @@ -116,21 +116,21 @@ concrete StructuralBul of Structural = CatBul ** therefore_PConj = ss "therefore" ; these_NP = regNP "these" Pl ; -} - they_Pron = mkNP "те" "тях" "техен" "техния" "техният" "тяхна" "тяхната" "тяхно" "тяхното" "техни" "техните" GPl P3 ; + they_Pron = mkPron "те" "тях" "им" "техен" "техния" "техният" "тяхна" "тяхната" "тяхно" "тяхното" "техни" "техните" GPl P3 ; this_Quant = mkQuant "този" "тaзи" "това" "тези" ; {- this_NP = regNP "this" Sg ; those_NP = regNP "those" Pl ; -} - through_Prep = ss "през" ; + through_Prep = mkPrep "през" Acc ; too_AdA = ss "прекалено" ; - to_Prep = ss "до" ; - under_Prep = ss "под" ; + to_Prep = mkPrep "до" Acc ; + under_Prep = mkPrep "под" Acc ; very_AdA = ss "много" ; {- want_VV = P.mkVV (P.regV "want") ; -} - we_Pron = mkNP "ние" "нас" "наш" "нашия" "нашият" "наша" "нашата" "наше" "нашето" "наши" "нашите" GPl P1 ; + we_Pron = mkPron "ние" "нас" "ни" "наш" "нашия" "нашият" "наша" "нашата" "наше" "нашето" "наши" "нашите" GPl P1 ; whatPl_IP = mkIP "какви" "какви" GPl ; whatSg_IP = mkIP "какъв" "какъв" (GSg Masc) ; when_IAdv = ss "кога" ; @@ -143,13 +143,13 @@ concrete StructuralBul of Structural = CatBul ** whoSg_IP = mkIP "кой" "кого" (GSg Masc) ; whoPl_IP = mkIP "кои" "кого" GPl ; why_IAdv = ss "защо" ; - without_Prep = ss "без" ; - with_Prep = ss (pre { "с" ; - "със" / strs {"с" ; "з" ; "С" ; "З"} - }) ; + without_Prep = mkPrep "без" Acc ; + with_Prep = mkPrep (pre { "с" ; + "със" / strs {"с" ; "з" ; "С" ; "З"} + }) Acc ; yes_Phr = ss "да" ; - youSg_Pron = mkNP "ти" "теб" "твой" "твоя" "твоят" "твоя" "твоята" "твое" "твоето" "твои" "твоите" (GSg Masc) P2 ; - youPl_Pron = mkNP "вие" "вас" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" GPl P2 ; - youPol_Pron = mkNP "вие" "вас" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" (GSg Masc) P2 ; + youSg_Pron = mkPron "ти" "теб" "ти" "твой" "твоя" "твоят" "твоя" "твоята" "твое" "твоето" "твои" "твоите" (GSg Masc) P2 ; + youPl_Pron = mkPron "вие" "вас" "ви" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" GPl P2 ; + youPol_Pron = mkPron "вие" "вас" "ви" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" (GSg Masc) P2 ; } diff --git a/lib/resource/bulgarian/VerbBul.gf b/lib/resource/bulgarian/VerbBul.gf index 0c740f415..9bc363a80 100644 --- a/lib/resource/bulgarian/VerbBul.gf +++ b/lib/resource/bulgarian/VerbBul.gf @@ -1,12 +1,12 @@ -concrete VerbBul of Verb = CatBul ** open ResBul in { +concrete VerbBul of Verb = CatBul ** open ResBul, ParadigmsBul in { flags optimize=all_subs ; lin UseV = predV ; - ComplV2 v np = insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v) ; + ComplV2 v np = insertObj (\\_ => v.c2.s ++ np.s ! v.c2.c) (predV v) ; ComplV3 v np np2 = - insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ; + insertObj (\\_ => v.c2.s ++ np.s ! v.c2.c ++ v.c3.s ++ np2.s ! v.c3.c) (predV v) ; ComplVS v s = insertObj (\\_ => "," ++ "че" ++ s.s) (predV v) ; @@ -14,11 +14,11 @@ concrete VerbBul of Verb = CatBul ** open ResBul in { AdvVP vp adv = insertObj (\\_ => adv.s) vp ; - ReflV2 v = insertObj (\\_ => v.c2 ++ ["себе си"]) (predV v) ; + ReflV2 v = insertObj (\\_ => v.c2.s ++ case v.c2.c of {Dat => "си"; _ => "се"}) (predV v) ; PassV2 v = insertObj (\\a => v.s ! VPassive (aform a.gn Indef Acc)) (predV auxBe) ; - UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to" + UseVS, UseVQ = \vv -> {s = vv.s ; c2 = noPrep ; isRefl = vv.isRefl} ; -- no "to" CompNP np = {s = \\_ => np.s ! Acc} ; CompAdv a = {s = \\_ => a.s} ;