From 2869eaf6e93dd7a40d3c7fa127cbe80b73e1b1df Mon Sep 17 00:00:00 2001 From: Krasimir Angelov Date: Thu, 7 Jun 2018 14:58:03 +0200 Subject: [PATCH] automatic negation of with_Prep --- src/bulgarian/NounBul.gf | 8 ++- src/bulgarian/RelativeBul.gf | 2 +- src/bulgarian/ResBul.gf | 121 ++++++++++++++++++++------------- src/bulgarian/StructuralBul.gf | 4 +- 4 files changed, 81 insertions(+), 54 deletions(-) diff --git a/src/bulgarian/NounBul.gf b/src/bulgarian/NounBul.gf index 659f3748f..ae1daf0c0 100644 --- a/src/bulgarian/NounBul.gf +++ b/src/bulgarian/NounBul.gf @@ -24,8 +24,12 @@ concrete NounBul of Noun = CatBul ** open ResBul, Prelude in { } ; s = det.s ! True ! cn.g ! role ++ cn.s ! nf in case role of { - RObj Dat => "на" ++ s; - _ => s + RObj Dat => "на" ++ s; + RObj WithPrep => case det.p of { + Pos => with_Word ++ s ; + Neg => "без" ++ s + } ; + _ => s } ; a = {gn = gennum cn.g (numnnum det.nn); p = P3} ; p = det.p diff --git a/src/bulgarian/RelativeBul.gf b/src/bulgarian/RelativeBul.gf index 45489ce98..ce7a2133e 100644 --- a/src/bulgarian/RelativeBul.gf +++ b/src/bulgarian/RelativeBul.gf @@ -26,7 +26,7 @@ concrete RelativeBul of Relative = CatBul ** open ResBul in { } ; FunRP p np rp = { - s = \\gn => np.s ! RObj Acc ++ p.s ++ (case p.c of {Acc => []; Dat => "на"}) ++ rp.s ! gn ; + s = \\gn => np.s ! RObj Acc ++ p.s ++ (case p.c of {Acc => []; Dat => "на"; WithPrep => with_Word}) ++ rp.s ! gn ; } ; IdRP = { diff --git a/src/bulgarian/ResBul.gf b/src/bulgarian/ResBul.gf index c12e7eb12..bd5fd4152 100644 --- a/src/bulgarian/ResBul.gf +++ b/src/bulgarian/ResBul.gf @@ -22,7 +22,7 @@ resource ResBul = ParamX ** open Prelude, Predef in { param Role = RSubj | RObj Case | RVoc ; - Case = Acc | Dat; + Case = Acc | Dat | WithPrep ; NForm = NF Number Species @@ -361,42 +361,58 @@ resource ResBul = ParamX ** open Prelude, Predef in { verbBe : Verb = {s=\\_=>auxBe ; vtype=VNormal} ; verbWould : Verb = {s=\\_=>auxWould ; vtype=VNormal} ; - reflClitics : Case => Str = table {Acc => "се"; Dat => "си"} ; + reflClitics : Case => Str = table {Acc => "се"; Dat => "си"; WithPrep => with_Word ++ "себе си"} ; personalClitics : Case => GenNum => Person => Str = table { - Acc => table { - GSg g => table { - P1 => "ме" ; - P2 => "те" ; - P3 => case g of { - Masc => "го" ; - Fem => "я" ; - Neut => "го" - } - } ; - GPl => table { - P1 => "ни" ; - P2 => "ви" ; - P3 => "ги" - } - } ; - Dat => table { - GSg g => table { - P1 => "ми" ; - P2 => "ти" ; - P3 => case g of { - Masc => "му" ; - Fem => "й" ; - Neut => "му" - } - } ; - GPl => table { - P1 => "ни" ; - P2 => "ви" ; - P3 => "им" - } - } + Acc => table { + GSg g => table { + P1 => "ме" ; + P2 => "те" ; + P3 => case g of { + Masc => "го" ; + Fem => "я" ; + Neut => "го" + } + } ; + GPl => table { + P1 => "ни" ; + P2 => "ви" ; + P3 => "ги" + } + } ; + Dat => table { + GSg g => table { + P1 => "ми" ; + P2 => "ти" ; + P3 => case g of { + Masc => "му" ; + Fem => "й" ; + Neut => "му" + } + } ; + GPl => table { + P1 => "ни" ; + P2 => "ви" ; + P3 => "им" + } + } ; + WithPrep => table { + GSg g => table { + P1 => with_Word ++ "мен" ; + P2 => with_Word ++ "теб" ; + P3 => case g of { + Masc => with_Word ++ "него" ; + Fem => with_Word ++ "нея" ; + Neut => with_Word ++ "него" + } + } ; + GPl => table { + P1 => with_Word ++ "нас" ; + P2 => with_Word ++ "вас" ; + P3 => with_Word ++ "тях" + } + } } ; ia2e : Str -> Str = -- to be used when the next syllable has vowel different from "а","ъ","о" or "у" @@ -647,14 +663,20 @@ resource ResBul = ParamX ** open Prelude, Predef in { mkIP : Str -> Str -> GenNum -> {s : Role => QForm => Str ; gn : GenNum} = \koi,kogo,gn -> { s = table { - RSubj => table QForm [koi; koi+"то"] ; - RObj Acc => table QForm [kogo; kogo+"то"] ; - RObj Dat => table QForm ["на" ++ kogo; kogo+"то"] ; - RVoc => table QForm [koi; koi+"то"] + RSubj => table QForm [koi; koi+"то"] ; + RObj Acc => table QForm [kogo; kogo+"то"] ; + RObj Dat => table QForm ["на" ++ kogo; "на" ++ kogo+"то"] ; + RObj WithPrep => table QForm [with_Word ++ kogo; with_Word ++ kogo+"то"] ; + RVoc => table QForm [koi; koi+"то"] } ; gn = gn } ; + with_Word : Str + = pre { "с" ; + "със" / strs {"с" ; "з" ; "С" ; "З"} + } ; + mkPron : (az,men,me,mi,moj,moia,moiat,moia_,moiata,moe,moeto,moi,moite : Str) -> GenNum -> Person -> {s : Role => Str; clit : Case => Str; @@ -663,14 +685,16 @@ resource ResBul = ParamX ** open Prelude, Predef in { } = \az,men,me,mi,moj,moia,moiat,moia_,moiata,moe,moeto,moi,moite,gn,p -> { s = table { - RSubj => az ; - RObj Acc => men ; - RObj Dat => "на" ++ men ; - RVoc => az + RSubj => az ; + RObj Acc => men ; + RObj Dat => "на" ++ men ; + RObj WithPrep => with_Word ++ men ; + RVoc => az } ; clit = table { - Acc => me; - Dat => mi + Acc => me; + Dat => mi; + WithPrep => with_Word ++ men } ; gen = table { ASg Masc Indef => moj ; @@ -692,10 +716,11 @@ resource ResBul = ParamX ** open Prelude, Predef in { mkNP : Str -> GenNum -> Person -> Polarity -> {s : Role => Str; a : Agr; p : Polarity} = \s,gn,p,pol -> { s = table { - RSubj => s ; - RObj Acc => s ; - RObj Dat => "на" ++ s ; - RVoc => s + RSubj => s ; + RObj Acc => s ; + RObj Dat => "на" ++ s ; + RObj WithPrep => with_Word ++ s ; + RVoc => s } ; a = { gn = gn ; diff --git a/src/bulgarian/StructuralBul.gf b/src/bulgarian/StructuralBul.gf index 9c30163f4..3b41f182f 100644 --- a/src/bulgarian/StructuralBul.gf +++ b/src/bulgarian/StructuralBul.gf @@ -116,9 +116,7 @@ concrete StructuralBul of Structural = CatBul ** whoPl_IP = mkIP "кои" "кои" GPl ; why_IAdv = mkIAdv "защо" ; without_Prep = mkPrep "без" Acc ; - with_Prep = mkPrep (pre { "с" ; - "със" / strs {"с" ; "з" ; "С" ; "З"} - }) Acc ; + with_Prep = mkPrep "" WithPrep ; yes_Utt = ss "да" ; youSg_Pron = mkPron "ти" "теб" "те" "ти" "твой" "твоя" "твоят" "твоя" "твоята" "твое" "твоето" "твои" "твоите" (GSg Masc) P2 ; youPl_Pron = mkPron "вие" "вас" "ви" "ви" "ваш" "вашия" "вашият" "ваша" "вашата" "ваше" "вашето" "ваши" "вашите" GPl P2 ;