From e9a941875316048dfeaeda6cbc92b46f728c9c65 Mon Sep 17 00:00:00 2001 From: inari Date: Thu, 10 Apr 2014 18:12:36 +0000 Subject: [PATCH] Fixes in Catalan which_IQuant; added 2- and 3-arg smart paradigms for verbs + made 1-arg smart paradigm better --- lib/src/catalan/BeschCat.gf | 90 ++++++++++++++++++++++++++++- lib/src/catalan/LexiconCat.gf | 98 ++++++++++++++++---------------- lib/src/catalan/ParadigmsCat.gf | 74 ++++++++++++++++++------ lib/src/catalan/StructuralCat.gf | 9 ++- 4 files changed, 196 insertions(+), 75 deletions(-) diff --git a/lib/src/catalan/BeschCat.gf b/lib/src/catalan/BeschCat.gf index e39e001d9..f71a4393b 100644 --- a/lib/src/catalan/BeschCat.gf +++ b/lib/src/catalan/BeschCat.gf @@ -5354,7 +5354,7 @@ let t_ = Predef.tk 5 t VI Part => t_ + "ort" ; -- VI Part => t_ + "orçut" ; -- AR why duplicate? VP (Pres Ind Pl P1) => t_ + "orcem" ; - VP (Pres Ind Sg P1) => t_ + "orcem" ; + VP (Pres Ind Sg P1) => t_ + "orço" ; VP (Pres Ind Pl P2) => t_ + "orceu" ; VP (Pres Ind Sg P2) => t_ + "orces" ; VP (Pres Ind Pl P3) => t_ + "orcen" ; @@ -6044,8 +6044,92 @@ VP (Imp Sg P1) => variants {} VGer => amar.s ! VI Ger } } ; --- --- + + +--Meta paradigms for verbs that end in -er. +--Handles accents in infinitive and changes for j/g, ç/c. +oper verbEr : Str -> Verbum = \vèncer -> +let vènc = Predef.tk 2 vèncer ; + venc = deaccent vènc ; + venç = soften venc ; +in {s = table { + VI Ger => venc + "ent" ; + VI Part => venç + "ut" ; + VP (Pres Ind Pl P1) => venc + "em" ; + VP (Pres Ind Sg P1) => venç + "o" ; + VP (Pres Ind Pl P2) => venc + "eu" ; + VP (Pres Ind Sg P2) => venc + "es" ; + VP (Pres Ind Pl P3) => venc + "en" ; + VP (Pres Ind Sg P3) => venç ; + VP (Pres Sub Pl P1) => venc + "em" ; + VP (Pres Sub Sg P1) => venc + "i" ; + VP (Pres Sub Pl P2) => venc + "eu" ; + VP (Pres Sub Sg P2) => venc + "is" ; + VP (Pres Sub Pl P3) => venc + "in" ; + VP (Pres Sub Sg P3) => venc + "i" ; + VP (Impf Ind Pl P1) => venc + "íem" ;--# notpresent + VP (Impf Ind Sg P1) => venc + "ia" ;--# notpresent + VP (Impf Ind Pl P2) => venc + "íeu" ;--# notpresent + VP (Impf Ind Sg P2) => venc + "ies" ;--# notpresent + VP (Impf Ind Pl P3) => venc + "ien" ;--# notpresent + VP (Impf Ind Sg P3) => venc + "ia" ;--# notpresent + VP (Impf Sub Pl P1) => venc + "éssim" ;--# notpresent + VP (Impf Sub Sg P1) => venc + "és" ;--# notpresent + VP (Impf Sub Pl P2) => venc + "éssiu" ;--# notpresent + VP (Impf Sub Sg P2) => venc + "essis" ;--# notpresent + VP (Impf Sub Pl P3) => venc + "essin" ;--# notpresent + VP (Impf Sub Sg P3) => venc + "és" ;--# notpresent + VP (Fut Pl P1) => venc + "erem" ;--# notpresent + VP (Fut Sg P1) => venc + "eré" ;--# notpresent + VP (Fut Pl P2) => venc + "ereu" ;--# notpresent + VP (Fut Sg P2) => venc + "eràs" ;--# notpresent + VP (Fut Pl P3) => venc + "eran" ;--# notpresent + VP (Fut Sg P3) => venc + "erà" ;--# notpresent + VP (Pret Pl P1) => venc + "éssim" ;--# notpresent + VP (Pret Sg P1) => venc + "és" ;--# notpresent + VP (Pret Pl P2) => venc + "éssiu" ;--# notpresent + VP (Pret Sg P2) => venc + "essis" ;--# notpresent + VP (Pret Pl P3) => venc + "essin" ;--# notpresent + VP (Pret Sg P3) => venc + "és" ;--# notpresent + VP (Cond Pl P1) => venc + "eríem" ;--# notpresent + VP (Cond Sg P1) => venc + "eria" ;--# notpresent + VP (Cond Pl P2) => venc + "eríeu" ;--# notpresent + VP (Cond Sg P2) => venc + "eries" ;--# notpresent + VP (Cond Pl P3) => venc + "erien" ;--# notpresent + VP (Cond Sg P3) => venc + "eria" ;--# notpresent + VP (Imp Pl P1) => venc + "em" ; + VP (Imp Pl P2) => venc + "eu" ; + VP (Imp Sg P2) => venç ; + VP (Imp Pl P3) => venc + "in" ; + VP (Imp Sg P3) => venc + "i" ; + VP (Pass Pl Fem) => venç + "udes" ; + VP (Pass Sg Fem) => venç + "uda" ; + VP (Pass Pl Masc) => venç + "uts" ; + VP (Pass Sg Masc) => venç + "ut" ; + VI Infn => vèncer ; +VP (Imp Sg P1) => variants {} +} +} ; + + +oper deaccent : Str -> Str = \témer -> + case témer of { + t@_ + "à" + mer@_ => t + "a" + mer ; + t@_ + "é" + mer@_ => t + "e" + mer ; + t@_ + "è" + mer@_ => t + "e" + mer ; + t@_ + "í" + mer@_ => t + "i" + mer ; + t@_ + "ó" + mer@_ => t + "o" + mer ; + t@_ + "ò" + mer@_ => t + "o" + mer ; + t@_ + "ú" + mer@_ => t + "u" + mer ; + _ => témer + } ; + +oper soften : Str -> Str = \venc -> + case venc of { + ven + "c" => ven + "ç" ; + men + "g" => men + "j" ; + _ => venc + } ; ---- The full conjunction is a table on $VForm$: -- param diff --git a/lib/src/catalan/LexiconCat.gf b/lib/src/catalan/LexiconCat.gf index c8421cef6..47a5181e7 100644 --- a/lib/src/catalan/LexiconCat.gf +++ b/lib/src/catalan/LexiconCat.gf @@ -20,14 +20,14 @@ lin apartment_N = regMN "pis" ; apple_N = regFN "poma" ; art_N = regMN "art" ; - ask_V2Q = mkV2Q (regV "preguntar") dative ; + ask_V2Q = mkV2Q (mkV "preguntar") dative ; baby_N = regMN "nadó" ; bad_A = mkADeg (regA "dolent") (regA "pitjor") ; bank_N = regMN "banc" ; beautiful_A = prefA (regADeg "bell") ; - become_VA = reflV (regV "tornar") ; -- esdevenir + become_VA = reflV (mkV "tornar") ; -- esdevenir beer_N = regFN "cervesa" ; - beg_V2V = mkV2V (regV "demanar") accusative dative ; + beg_V2V = mkV2V (mkV "demanar") accusative dative ; big_A = regADeg "gros" ; bike_N = regFN "bicicleta" ; bird_N = regMN "ocell" ; @@ -44,7 +44,7 @@ lin brother_N2 = deN2 (regMN "germà") ; brown_A = compADeg (mkA "marró" "marrona" "marrons" "marrones" "marronament") ; butter_N = regFN "mantega" ; - buy_V2 = dirV2 (regV "comprar") ; + buy_V2 = dirV2 (mkV "comprar") ; camera_N = regFN "càmara" ; cap_N = regFN "gorra" ; car_N = regMN "cotxe" ; @@ -80,10 +80,10 @@ lin factory_N = regFN "fàbrica" ; father_N2 = deN2 (regMN "pare") ; fear_VS = mkVS (verbV (témer_107 "témer")) ; - find_V2 = dirV2 (regV "trobar") ; + find_V2 = dirV2 (mkV "trobar") ; fish_N = regMN "peix" ; floor_N = regMN "terra" ; -- sòl - forget_V2 = dirV2 (regV "oblidar") ; + forget_V2 = dirV2 (mkV "oblidar") ; fridge_N = regFN "nevera" ; friend_N = regMN "amic" ; -- amiga fruit_N = regFN "fruita" ; @@ -98,9 +98,9 @@ lin harbour_N = regMN "port" ; hate_V2 = dirV2 (verbV (canviar_16 "odiar")) ; hat_N = regMN "barret" ; - hear_V2 = mkV2 (regV "escoltar") dative ; -- Must be "oir". Add it to Besch + hear_V2 = mkV2 (mkV "escoltar") dative ; -- Must be "oir". Add it to Besch hill_N = regMN "turó" ; - hope_VS = mkVS (regV "esperar") ; + hope_VS = mkVS (mkV "esperar") ; horse_N = regMN "cavall" ; hot_A = regADeg "calent" ; house_N = regFN "casa" ; @@ -115,14 +115,14 @@ lin lamp_N = regFN "làmpada" ; learn_V2 = dirV2 (verbV (aprendre_6 "aprendre")) ; leather_N = regMN "cuiro" ; - leave_V2 = dirV2 (regV "partir") ; + leave_V2 = dirV2 (mkV "partir") ; like_V2 = dirV2 (verbV (canviar_16 "apreciar")) ; - listen_V2 = dirV2 (regV "escoltar") ; + listen_V2 = dirV2 (mkV "escoltar") ; live_V = verbV (viure_119 "viure") ; long_A = regADeg "llarg" ; lose_V2 = dirV2 (verbV (perdre_83 "perdre")) ; love_N = regMN "amor" ; - love_V2 = dirV2 (regV "estimar") ; + love_V2 = dirV2 (mkV "estimar") ; man_N = regMN "home" ; -- masc married_A2 = mkA2 (regA "casat") dative ; meat_N = regFN "carn" ; @@ -137,7 +137,7 @@ lin oil_N = regMN "oli" ; old_A = regADeg "vell" ; open_V2 = dirV2 (verbV (obrir_77 "obrir")) ; - paint_V2A = mkV2A (regV "pintar") accusative (mkPrep "en") ; + paint_V2A = mkV2A (mkV "pintar") accusative (mkPrep "en") ; paper_N = regMN "paper" ; paris_PN = mkPN "Paris" masculine ; peace_N = regFN "pau" ; @@ -180,7 +180,7 @@ lin small_A = prefA (mkA "petit" "petita" "petits" "petites" "petitament") ; snake_N = regFN "serp" ; -- fem sock_N = regMN "mitjó" ; - speak_V2 = dirV2 (regV "parlar") ; + speak_V2 = dirV2 (mkV "parlar") ; star_N = regFN "estrella" ; steel_N = regMN "acer" ; stone_N = regFN "pedra" ; @@ -191,9 +191,9 @@ lin switch8off_V2 = dirV2 (verbV (pregar_86 "apagar")) ; switch8on_V2 = dirV2 (verbV (atendre_8 "encendre")) ; table_N = regFN "taula" ; - talk_V3 = mkV3 (regV "parlar") dative genitive ; + talk_V3 = mkV3 (mkV "parlar") dative genitive ; teacher_N = regMN "mestre" ; -- mestra - teach_V2 = dirV2 (regV "ensenyar") ; + teach_V2 = dirV2 (mkV "ensenyar") ; television_N = mkN "televisió" "televisions" feminine ; -- televisor masc thick_A = compADeg (mkA "gruixut" "gruixuda" "gruixuts" "gruixudes" "gruixudament") ; thin_A = compADeg (mkA "fi" "fina" "fins" "fines" "finament") ; @@ -205,18 +205,18 @@ lin understand_V2 = dirV2 (verbV (atendre_8 "entendre")) ; university_N = regFN "universitat" ; village_N = regMN "poble" ; - wait_V2 = mkV2 (regV "esperar") dative ; - walk_V = regV "caminar" ; + wait_V2 = mkV2 (mkV "esperar") dative ; + walk_V = mkV "caminar" ; warm_A = compADeg (mkA "tebi" "tèbia" "tebis" "tèbies" "tèbiament") ; war_N = regFN "guerra" ; - watch_V2 = dirV2 (regV "mirar") ; + watch_V2 = dirV2 (mkV "mirar") ; water_N = regFN "aigua" ; white_A = compADeg (mkA "blanc" "blanca" "blancs" "blanques" "blancament") ; window_N = regFN "finestra" ; wine_N = regMN "vi" ; - win_V2 = dirV2 (regV "guanyar") ; + win_V2 = dirV2 (mkV "guanyar") ; woman_N = regFN "dona" ; - wonder_VQ = mkVQ (reflV (regV "preguntar")) ; + wonder_VQ = mkVQ (reflV (mkV "preguntar")) ; wood_N = regFN "fusta" ; write_V2 = dirV2 (verbV (escriure_50 "escriure")) ; yellow_A = compADeg (mkA "groc" "groga" "grocs" "grogues" "grogament") ; @@ -225,11 +225,11 @@ lin now_Adv = mkAdv "ara" ; already_Adv = mkAdv "ja" ; song_N = mkN "cançó" "cançons" feminine ; - add_V3 = dirV3 (regV "afegir") dative ; -- also: (regV "sumar") + add_V3 = dirV3 (mkV "afegir") dative ; -- also: (mkV "sumar") number_N = regMN "número" ; - put_V2 = dirV2 (regV "posar") ; - stop_V = regV "aturar" ; - jump_V = regV "saltar" ; + put_V2 = dirV2 (mkV "posar") ; + stop_V = mkV "aturar" ; + jump_V = mkV "saltar" ; left_Ord = M.mkOrd (regA "esquerra") ; right_Ord = M.mkOrd (regA "dreta") ; far_Adv = mkAdv "lluny" ; @@ -310,50 +310,50 @@ lin worm_N = regMN "cuc" ; year_N = regMN "any" ; bite_V2 = dirV2 (verbV (pregar_86 "mossegar")) ; - blow_V = regV "bufar" ; - burn_V = regV "cremar" ; - count_V2 = dirV2 (regV "comptar") ; - cut_V2 = dirV2 (regV "tallar") ; - dig_V = regV "cavar" ; + blow_V = mkV "bufar" ; + burn_V = mkV "cremar" ; + count_V2 = dirV2 (mkV "comptar") ; + cut_V2 = dirV2 (mkV "tallar") ; + dig_V = mkV "cavar" ; fall_V = verbV (caure_18 "caure") ; fear_V2 = dirV2 (verbV (témer_107 "témer")) ; - fight_V2 = dirV2 (regV "lluitar") ; - float_V = regV "surar" ; - flow_V = verbV (reduir_94 "fluir") ; -- also: regV "circular" - fly_V = regV "volar" ; - freeze_V = regV "congelar" ; + fight_V2 = dirV2 (mkV "lluitar") ; + float_V = mkV "surar" ; + flow_V = verbV (reduir_94 "fluir") ; -- also: mkV "circular" + fly_V = mkV "volar" ; + freeze_V = mkV "congelar" ; give_V3 = dirdirV3 (verbV (donar_43 "donar")) ; hit_V2 = dirV2 (verbV (trencar_112 "picar")) ; hold_V2 = dirV2 (verbV (obtenir_78 "sostenir")) ; hunt_V2 = dirV2 (verbV (començar_22 "caçar")) ; - kill_V2 = dirV2 (regV "matar") ; + kill_V2 = dirV2 (mkV "matar") ; laugh_V = verbV (riure_96 "riure") ; lie_V = reflV (verbV (jeure_62 "jeure")) ; play_V = verbV (pregar_86 "jugar") ; - pull_V2 = dirV2 (regV "tibar") ; + pull_V2 = dirV2 (mkV "tibar") ; push_V2 = dirV2 (verbV (atènyer_59 "empènyer")) ; rub_V2 = dirV2 (verbV (pregar_86 "refregar")) ; - scratch_V2 = dirV2 (regV "gratar") ; + scratch_V2 = dirV2 (mkV "gratar") ; sew_V = verbV (cosir_31 "cosir") ; - sing_V = regV "cantar" ; + sing_V = mkV "cantar" ; sit_V = reflV (verbV (seure_102 "seure")) ; - smell_V = regV "ensumar" ; + smell_V = mkV "ensumar" ; spit_V = verbV (escopir_49 "escopir") ; - split_V2 = dirV2 (regV "separar") ; -- dividir,) ; + split_V2 = dirV2 (mkV "separar") ; -- dividir,) ; squeeze_V2 = dirV2 (verbV (servir_101 "exprimir")) ; - stab_V2 = dirV2 (regV "apunyalar") ; + stab_V2 = dirV2 (mkV "apunyalar") ; stand_V = verbV (estar_54 "estar") ; ---- "estar dret" - suck_V2 = dirV2 (regV "xuclar") ; - swell_V = regV "inflar" ; - swim_V = regV "nedar" ; - think_V = regV "pensar" ; + suck_V2 = dirV2 (mkV "xuclar") ; + swell_V = mkV "inflar" ; + swim_V = mkV "nedar" ; + think_V = mkV "pensar" ; throw_V2 = dirV2 (verbV (començar_22 "llençar")) ; tie_V2 = dirV2 (verbV (pregar_86 "lligar")) ; - turn_V = regV "girar" ; - vomit_V = regV "vomitar" ; - wash_V2 = dirV2 (regV "rentar") ; + turn_V = mkV "girar" ; + vomit_V = mkV "vomitar" ; + wash_V2 = dirV2 (mkV "rentar") ; wipe_V2 = dirV2 (verbV (pregar_86 "eixugar")) ; - breathe_V = regV "respirar" ; + breathe_V = mkV "respirar" ; john_PN = mkPN "Joan" masculine ; today_Adv = mkAdv "avui" ; diff --git a/lib/src/catalan/ParadigmsCat.gf b/lib/src/catalan/ParadigmsCat.gf index 019df51ae..404e61e87 100644 --- a/lib/src/catalan/ParadigmsCat.gf +++ b/lib/src/catalan/ParadigmsCat.gf @@ -200,10 +200,11 @@ oper mkV : (cantar : Str) -> V ; -- regular in models I, IIa, IIb --- Verbs with vowel alternatition in the stem - easiest to give with --- two forms, e.g. "mostrar"/"muestro". TODO +-- Verbs with predictable alternation: +-- a) inchoative verbs, servir serveixo +-- b) re verbs with c/g in root, vendre venc ; subj. vengui ---JS: Needed? mkV : (mostrar,muestro : Str) -> V ; + mkV : (servir,serveixo : Str) -> V ; --inchoative verbs and "re" verbs whose 1st person ends in c -- Most irregular verbs are found in $IrregCat$. If this is not enough, -- the module $BeschCat$ gives all the patterns of the "Bescherelle" @@ -340,15 +341,50 @@ oper mkAdV x = ss x ** {lock_AdV = <>} ; mkAdA x = ss x ** {lock_AdA = <>} ; - regV x = -- cantar, perdre, tÈmer, dormir, (servir) - let - verb = case (Predef.dp 2 x) of { - "re" => perdre_83 x ; - "er" => témer_107 x ; - "ir" => dormir_44 x ; -- JS TODO: Consider "servir" - _ => cantar_15 x - } - in verbBesch verb ** {vtyp = VHabere ; lock_V = <>} ; + regV x = -- cantar, perdre, témer, dormir, (servir) + case (Predef.dp 3 x) of { + "jar" => envejar_48 x ; + "çar" => començar_22 x ; + "gir" => fugir_58 x ; + "ure" => beure_11 x ; + _ + "re" => perdre_83 x ; + _ + "er" => verbEr x ; -- handles accents in infinitives & c/ç, g/j + _ + "ir" => dormir_44 x ; -- inchoative verbs with regAltV + _ + "ur" => dur_45 x ; + _ => cantar_15 x } ; + + regAltV x y = + let ure = Predef.dp 3 x ; + venc = Predef.dp 4 y ; + in case of { + <"ure",_> => regV x ; --caure,viure etc. with non-smart paradigms + + <_+"ir",_+"ixo"> => servir_101 x ; + <_+"ir","tinc"> => tenir_108 x ; --tenir,obtenir, ... + <_+"ir","vinc"> => venir_117 x ; --venir,prevenir, ... + <_+"ir","tenc"> => tenir_108 x ; --recognises balear, returns central + <_+"ir","venc"> => venir_117 x ; + + <_+"er",_+"ig"> => fer_56 x ; + <_+"re",_+"ig"> => veure_118 x ; + <_+"ar",_+"ig"> => anar_4 x ; + <_+"er",_+ "c"> => valer_114 x ; + <_+"re",_+ "c"> => absoldre_1 x ; --participes of type "absolt" + --for other types, mk3V + <_ ,_> => regV x } ; + + mk3V x y z = + let ure = Predef.dp 3 x ; + venc = Predef.dp 4 y ; + ut = Predef.dp 2 z + in case of { + <"ure",_,_> => regAltV x y ; + <_,_,"st"> => veure_118 x ; --TODO check + <_,_,"it"> => coure_32 x ; --TODO check + <"dre",_,"ut"> => vendre_116 x ; + <_+"re",_,"ès"> => atendre_8 x ; + <_+"re",_,"às"> => romandre_97 x ; + <_,_,_> => regAltV x y } ; reflV v = {s = v.s ; vtyp = VRefl ; lock_V = <>} ; @@ -365,7 +401,7 @@ oper vtyp = VHabere } ; --- regAltV x y = verbV (regAlternV x y) ; + mk2V2 v p = {s = v.s ; vtyp = v.vtyp ; c2 = p ; lock_V2 = <>} ; dirV2 v = mk2V2 v accusative ; @@ -439,16 +475,18 @@ oper prefixA = prefA ; mkV = overload { - mkV : (cantar : Str) -> V = regV ; ---JS mkV : (mostrar,muestro : Str) -> V = regAltV ; + mkV : (cantar : Str) -> V = \x -> verbV (regV x) ; + mkV : (servir,serveixo : Str) -> V = \x,y -> verbV (regAltV x y) ; + mkV : (vendre,venc,venut : Str) -> V = \x,y,z -> verbV (mk3V x y z) ; mkV : Verbum -> V = verbV } ; - regV : Str -> V ; ---JS regAltV : (mostrar,muestro : Str) -> V ; + regV : Str -> Verbum ; + regAltV : (servir,serveixo : Str) -> Verbum ; + mk3V : (vendre,venc,venut : Str) -> Verbum ; verbV : Verbum -> V ; mkV2 = overload { - mkV2 : Str -> V2 = \s -> dirV2 (regV s) ; + mkV2 : Str -> V2 = \s -> dirV2 (mkV s) ; mkV2 : V -> V2 = dirV2 ; mkV2 : V -> Prep -> V2 = mk2V2 } ; diff --git a/lib/src/catalan/StructuralCat.gf b/lib/src/catalan/StructuralCat.gf index 43ef3dbc9..9990b4650 100644 --- a/lib/src/catalan/StructuralCat.gf +++ b/lib/src/catalan/StructuralCat.gf @@ -140,11 +140,10 @@ lin when_IAdv = ss "quan" ; when_Subj = ss "quan" ** {m = Indic} ; where_IAdv = ss "on" ; - which_IQuant = {s = table { - Sg => \\g,c => prepCase c ++ "quin" ; --per fer: femenÃŒ quina - Pl => \\g,c => prepCase c ++ "quins" - } - } ; --per fer: femenÃŒ quines + which_IQuant = { + s = \\n,g,c => + prepCase c ++ aagrForms "quin" "quina" "quins" "quines" ! aagr g n + } ; whoPl_IP = {s = \\c => prepCase c ++ "qui" ; a = aagr Fem Pl} ; whoSg_IP = {s = \\c => prepCase c ++ "qui" ; a = aagr Fem Sg} ; why_IAdv = ss ["per quË"] ;