diff --git a/src/api/TryGer.gf b/src/api/TryGer.gf index 9e99c3bea..b387bfd84 100644 --- a/src/api/TryGer.gf +++ b/src/api/TryGer.gf @@ -1,3 +1,3 @@ --# -path=.:../german:../common:../abstract:../prelude -resource TryGer = SyntaxGer, ExtraGer, LexiconGer, ParadigmsGer - [mkAdv], MakeStructuralGer ; +resource TryGer = SyntaxGer, ExtraGer, LexiconGer, ParadigmsGer - [mkAdv,mkIAdv], MakeStructuralGer ; diff --git a/src/german/CatGer.gf b/src/german/CatGer.gf index 4374a62ba..48db2d007 100644 --- a/src/german/CatGer.gf +++ b/src/german/CatGer.gf @@ -26,10 +26,11 @@ concrete CatGer of Cat = -- Question QCl = {s : Mood => ResGer.Tense => Anteriority => Polarity => QForm => Str} ; - IP = {s : Case => Str ; n : Number} ; + + IP = {s : Case => Str ; a : GenNum ; isPron : Bool} ; IComp = {s : Agr => Str ; ext : Str} ; - IDet = {s : Gender => Case => Str ; n : Number} ; - IQuant = {s : GenNum => Case => Str} ; + IDet = {s : Gender => Case => Str ; n : Number ; a : Adjf} ; + IQuant = {s : GenNum => Case => Str ; a : Adjf} ; -- Relative @@ -114,7 +115,7 @@ concrete CatGer of Cat = GN = {s : Case => Str; g : Sex} ; SN = {s : Sex => Case => Str} ; PN = {s : Case => Str; g : Gender; n : Number} ; - LN = {s : Adjf => Case => Str; hasArt : Bool; g : Gender; n : Number} ; + LN = {s : Adjf => Case => Str; hasDefArt : Bool; g : Gender; n : Number} ; -- tense with possibility to choose conjunctive forms diff --git a/src/german/ExtendGer.gf b/src/german/ExtendGer.gf index e6108ac17..23f53bd18 100644 --- a/src/german/ExtendGer.gf +++ b/src/german/ExtendGer.gf @@ -3,14 +3,14 @@ concrete ExtendGer of Extend = CatGer ** ExtendFunctor - [ -- remove the default implementations of: - GenNP, GenRP, EmptyRelSlash, + GenNP, GenRP, EmptyRelSlash, GenIP, GenModIP, VPS, ListVPS, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, VPI, ListVPI, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, ICompAP, IAdvAdv, CompIQuant, PrepCN, PastPartAP, PastPartAgentAP, PassVPSlash, PassAgentVPSlash, AdvIsNP, - RNP, RNPList, Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, Conj_RNP, + RNP, RNPList, Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP, ConjRNP, ReflRNP, ReflPron, ReflPoss, PredetRNP, AdvRNP, ReflA2RNP, PossPronRNP, CompoundN, DetNPMasc, DetNPFem, UseDAP, UseDAPMasc, UseDAPFem, CardCNCard, @@ -37,11 +37,12 @@ concrete ExtendGer of Extend = } ; GenRP nu cn = { - s = \\gn,c => relPron ! gn ! Gen ++ cn.s ! Weak ! nu.n ! c ; + s = \\gn,c => relPron ! gn ! Gen ++ cn.s ! Strong ! nu.n ! c ; a = RAg nu.n P3 } ; - + GenIP ip = {s = \\gn,c => ip.s!Gen ; a = Strong} ; + GenModIP num ip cn = IdetCN (IdetQuant (GenIP ip) num) cn ; EmptyRelSlash slash = { s = \\m,t,a,p,gn => diff --git a/src/german/ExtraGer.gf b/src/german/ExtraGer.gf index e7586f5ed..3aa143542 100644 --- a/src/german/ExtraGer.gf +++ b/src/german/ExtraGer.gf @@ -385,6 +385,4 @@ concrete ExtraGer of ExtraGerAbs = CatGer ** -- this function is not entirely satisfactory as largely -- though not entirely duplicating mkClause in ResGer - - } diff --git a/src/german/IrregGer.gf b/src/german/IrregGer.gf index 74c4c5bd1..0ed3f2e26 100644 --- a/src/german/IrregGer.gf +++ b/src/german/IrregGer.gf @@ -96,13 +96,13 @@ in { lin laden_V = irregV "laden" "lädt" "lud" "lüde" "geladen" ; lin lassen_V = irregV "lassen" "lässt" "ließ" "ließe" "gelassen" ; lin laufen_V = irregV "laufen" "läuft" "lief" "liefe" "gelaufen" ; - lin leiden_V = irregV "leiden" "leidt" "litt" "litte" "gelitten" ; + lin leiden_V = irregV "leiden" "leidet" "litt" "litte" "gelitten" ; lin leihen_V = irregV "leihen" "leiht" "lieh" "liehe" "geliehen" ; lin lesen_V = irregV "lesen" "liest" "las" "läse" "gelesen" ; lin liegen_V = irregV "liegen" "liegt" "lag" "läge" "gelegen" ; lin lügen_V = irregV "lügen" "lügt" "log" "löge" "gelogen" ; lin mahlen_V = irregV "mahlen" "mahlt" "mahlte" "mahlte" "gemahlen" ; - lin meiden_V = irregV "meiden" "meidt" "mied" "miede" "gemieden" ; + lin meiden_V = irregV "meiden" "meidet" "mied" "miede" "gemieden" ; lin melken_V = irregV "melken" "milkt" "molk" "mölke" "gemolken" ; lin messen_V = irregV "messen" "misst" "maß" "mäße" "gemessen" ; lin mißlingen_V = irregV "misslingen" "misslingt" "misslang" "misslungen" "misslänge" ; -- old spelling @@ -131,14 +131,14 @@ in { lin saufen_V = irregV "saufen" "säuft" "soff" "söffe" "gesoffen" ; lin saugen_V = irregV "saugen" "saugt" "sog" "soge" "gesogen" ; lin schaffen_V = irregV "schaffen" "schafft" "schuf" "schüfe" "geschaffen" ; - lin scheiden_V = irregV "scheiden" "scheidt" "schied" "schiede" "geschieden" ; + lin scheiden_V = irregV "scheiden" "scheidet" "schied" "schiede" "geschieden" ; lin scheinen_V = irregV "scheinen" "scheint" "schien" "schiene" "geschienen" ; lin scheißen_V = irregV "scheißen" "scheißt" "schiss" "schisse" "geschissen" ; lin schelten_V = irregV "schelten" "schilt" "schalt" "schölte" "gescholten" ; lin scheren_V = irregV "scheren" "schert" "schor" "schöre" "geschoren" ; lin schieben_V = irregV "schieben" "schiebt" "schob" "schöbe" "geschoben" ; lin schießen_V = irregV "schießen" "schießt" "schoss" "schösse" "geschossen" ; - lin schinden_V = irregV "schinden" "schindt" "schund" "schunde" "geschunden" ; + lin schinden_V = irregV "schinden" "schindet" "schund" "schunde" "geschunden" ; lin schlafen_V = irregV "schlafen" "schläft" "schlief" "schliefe" "geschlafen" ; lin schlagen_V = irregV "schlagen" "schlägt" "schlug" "schlüge" "geschlagen" ; lin schleichen_V = irregV "schleichen" "schleicht" "schlich" "schliche" "geschlichen" ; @@ -156,7 +156,7 @@ in { lin schwellen_V = irregV "schwellen" "schwillt" "schwoll" "schwölle" "geschwollen" ; lin schwimmen_V = irregV "schwimmen" "schwimmt" "schwamm" "schwämme" "geschwommen" ; lin schwimmen_o_V = irregV "schwimmen" "schwimmt" "schwamm" "schwömme" "geschwommen" ; - lin schwinden_V = irregV "schwinden" "schwindt" "schwand" "schwände" "geschwunden" ; + lin schwinden_V = irregV "schwinden" "schwindet" "schwand" "schwände" "geschwunden" ; lin schwingen_V = irregV "schwingen" "schwingt" "schwang" "schwänge" "geschwungen" ; lin schwören_V = irregV "schwören" "schwört" "schwor" "schwüre" "geschworen" ; lin sehen_V = irregV "sehen" "sieht" "sah" "sähe" "gesehen" ; @@ -200,7 +200,7 @@ in { "tun" "tue" "tust" "tut" "tut" "tue" "tat" "tatest" "taten" "tatet" "täte" "getan" [] M.VHaben) ; - lin verderben_V = irregV "verderben" "verdirbt" "verdarb" "verdarbe" "verdorben" ; + lin verderben_V = irregV "verderben" "verdirbt" "verdarb" "verdürbe" "verdorben" ; lin vergessen_V = irregV "vergessen" "vergisst" "vergaß" "vergäße" "vergessen" ; lin verlieren_V = irregV "verlieren" "verliert" "verlor" "verlöre" "verloren" ; lin wachsen_V = irregV "wachsen" "wächst" "wuchs" "wüchse" "gewachsen" ; @@ -209,14 +209,14 @@ in { lin weben_V = irregV "weben" "webt" "wob" "wöbe" "gewoben" ; lin weichen_V = irregV "weichen" "weicht" "wich" "wiche" "gewichen" ; lin weisen_V = irregV "weisen" "weist" "wies" "wiese" "gewiesen" ; - lin wenden_V = irregV "wenden" "wendt" "wandte" "wandte" "gewandt" ; + lin wenden_V = irregV "wenden" "wendet" "wandte" "wandte" "gewandt" ; lin werben_V = irregV "werben" "wirbt" "warb" "würbe" "geworben" ; lin werden_V = lin V (M.mkV "werden" "werde" "wirst" "wird" "werdet" "werd" "wurde" "wurdest" "wurden" "wurdet" "würde" "geworden" [] M.VSein) ; lin werfen_V = irregV "werfen" "wirft" "warf" "würfe" "geworfen" ; lin wiegen_V = irregV "wiegen" "wiegt" "wog" "wöge" "gewogen" ; - lin winden_V = irregV "winden" "windt" "wand" "wände" "gewunden" ; + lin winden_V = irregV "winden" "windet" "wand" "wände" "gewunden" ; lin wissen_V = lin V (M.mkV "wissen" "weiß" "weißt" "weiß" "wisst" "wisse" "wusste" "wusstest" "wussten" "wusstet" "wüsste" "gewusst" [] M.VHaben) ; diff --git a/src/german/LexiconGer.gf b/src/german/LexiconGer.gf index 8c2714a78..2e2e717be 100644 --- a/src/german/LexiconGer.gf +++ b/src/german/LexiconGer.gf @@ -2,25 +2,26 @@ -- work by Aarne Ranta, Andreas Priesnitz, and Henning Thielemann. -- a few corrections by Hans Leiß, and using the better IrregGer +-- sg/pl t = singulare/plurale tantum concrete LexiconGer of Lexicon = CatGer ** open Prelude, ParadigmsGer, (Mo = MorphoGer), (Irreg = IrregGer) in { flags - coding=utf8 ; + coding=utf8 ; optimize=all_subs ; lin add_V3 = dirV3 (prefixV "hinzu" (regV "fügen")) zu_Prep ; airplane_N = mkN "Flugzeug" "Flugzeuge" neuter ; - alas_Interj = {s = "ach"} ; + alas_Interj = ss "leider" ; -- {s = "ach"} ; already_Adv = mkAdv "schon" ; answer_V2S = mkV2S (regV "antworten") datPrep ; apartment_N = mkN "Wohnung" ; apple_N = reg2N "Apfel" "Äpfel" masculine ; art_N = reg2N "Kunst" "Künste" feminine ; ask_V2Q = mkV2Q (regV "fragen") accPrep ; - baby_N = reg2N "Baby" "Babies" neuter ; ---- + baby_N = reg2N "Baby" "Babies" neuter ; ---- "Kleinkind" bad_A = regA "schlecht" ; bank_N = reg2N "Bank" "Banken" feminine ; beautiful_A = regA "schön" ; @@ -35,21 +36,21 @@ lin boat_N = reg2N "Boot" "Boote" neuter ; book_N = reg2N "Buch" "Bücher" neuter ; boot_N = reg2N "Stiefel" "Stiefel" masculine ; - boss_N = reg2N "Chef" "Chefs" masculine ; ---- + boss_N = reg2N "Chef" "Chefs" masculine ; ---- "Vorgesetzte" boy_N = reg2N "Junge" "Jungen" masculine ; bread_N = reg2N "Brot" "Brote" neuter ; break_V2 = dirV2 (fixprefixV "zer" Irreg.schlagen_V) ; broad_A = regA "breit" ; brother_N2 = mkN2 (reg2N "Bruder" "Brüder" masculine) von_Prep ; brown_A = regA "braun" ; - butter_N = reg2N "Butter" "Butter" feminine ; ---- infl + butter_N = reg2N "Butter" "Butter" feminine ; ---- sg t buy_V2 = dirV2 (regV "kaufen") ; camera_N = reg2N "Kamera" "Kameras" feminine ; cap_N = mkN "Mütze" ; car_N = mkN "Auto" "Autos" neuter | mkN "Wagen" "Wagen" masculine ; carpet_N = mkN "Teppich" ; cat_N = mkN "Katze" ; - ceiling_N = reg2N "Dach" "Dächer" neuter ; + ceiling_N = mkN "Zimmerdecke" ; chair_N = reg2N "Stuhl" "Stühle" masculine ; cheese_N = mkN "Käse" "Käse" masculine ; child_N = reg2N "Kind" "Kinder" neuter ; @@ -58,12 +59,12 @@ lin clean_A = regA "rein" ; clever_A = mk3A "klug" "klüger" "klügste" ; close_V2 = dirV2 Irreg.schließen_V ; - coat_N = mkN "Jacke" | mkN "Mantel" "Mantel" masculine; + coat_N = mkN "Jacke" | mkN "Mantel" "Mäntel" masculine; cold_A = mk3A "kalt" "kälter" "kälteste" ; come_V = seinV (mk6V "kommen" "kommt" "komm" "kam" "käme" "gekommen") ; computer_N = reg2N "Rechner" "Rechner" masculine ; country_N = reg2N "Land" "Länder" neuter ; - cousin_N = reg2N "Vetter" "Vetter" masculine ; --- Kusine + cousin_N = reg2N "Vetter" "Vettern" masculine ; --- "Kusine" feminine cow_N = reg2N "Kuh" "Kühe" feminine ; die_V = seinV Irreg.sterben_V | seinV (prefixV "um" Irreg.kommen_V); distance_N3 = mkN3 (mkN "Entfernung") von_Prep zu_Prep ; @@ -91,7 +92,7 @@ lin garden_N = reg2N "Garten" "Gärten" masculine ; girl_N = reg2N "Mädchen" "Mädchen" neuter ; glove_N = mkN "Handschuh" ; - gold_N = reg2N "Gold" "Golde" neuter ; ---- infl + gold_N = reg2N "Gold" "Golde" neuter ; ---- sg t good_A = mk3A "gut" "besser" "beste" ; go_V = seinV Irreg.gehen_V ; green_A = regA "grün" ; @@ -112,7 +113,7 @@ lin know_V2 = dirV2 Irreg.kennen_V ; know_VQ = mkVQ Irreg.wissen_V ; know_VS = mkVS Irreg.wissen_V ; - lake_N = reg2N "See" "Seen" masculine ; --- infl + lake_N = mkN "See" "See" "See" "Sees" "Seen" "Seen" masculine ; lamp_N = mkN "Lampe"; learn_V2 = dirV2 (regV "lernen") ; leather_N = reg2N "Leder" "Leder" neuter ; @@ -126,8 +127,8 @@ lin love_V2 = dirV2 (regV "lieben") ; man_N = reg2N "Mann" "Männer" masculine ; married_A2 = mkA2 (regA "verheiratet") (mkPrep "mit" dative) ; - meat_N = reg2N "Fleisch" "Fleische" neuter ; ---- infl - milk_N = reg2N "Milch" "Milche" feminine ; ---- infl + meat_N = reg2N "Fleisch" "Fleische" neuter ; ---- sg t + milk_N = reg2N "Milch" "Milche" feminine ; ---- sg t moon_N = mkN "Mond" ; mother_N2 = mkN2 (reg2N "Mutter" "Mütter" feminine) von_Prep ; mountain_N = mkN "Berg" ; @@ -144,9 +145,10 @@ lin paper_N = reg2N "Papier" "Papiere" neuter ; paris_PN = mkPN "Paris" neuter ; peace_N = mk6N "Friede" "Frieden" "Frieden" "Friedens" "Frieden" "Frieden" masculine ; - pen_N = mkN "Bleistift" ; ---- + pen_N = mkN "Bleistift" ; planet_N = reg2N "Planet" "Planeten" masculine ; - plastic_N = reg2N "Plastik" "Plastiken" feminine ; ---- + -- plastic_N = reg2N "Plastik" "Plastiken" feminine ; ---- + plastic_N = regN "Kunststoff" ; play_V2 = dirV2 (regV "spielen") ; policeman_N = reg2N "Polizist" "Polizisten" masculine ; priest_N = mkN "Priester" ; @@ -160,7 +162,8 @@ lin religion_N = mkN "Religion" ; restaurant_N = reg2N "Restaurant" "Restaurants" neuter ; river_N = reg2N "Fluß" "Flüsse" masculine ; - rock_N = mkN "Stein" ; + -- rock_N = mkN "Stein" ; -- cf. stone_N = mkN "Stein" ; + rock_N = mkN "Felsen" ; -- "Felsbrocken"; infl "Fels" ; HL 6/17 roof_N = reg2N "Dach" "Dächer" neuter ; rubber_N = reg2N "Gummi" "Gummis" neuter ; run_V = seinV Irreg.laufen_V ; @@ -174,11 +177,11 @@ lin send_V3 = mkV3 (regV "schicken") ; -- Ger mkV3 v = Ger: mkV3 v accPrep datPrep sheep_N = reg2N "Schaf" "Schafe" neuter ; ship_N = reg2N "Schiff" "Schiffe" neuter ; - shirt_N = reg2N "Hemd" "Hemden" neuter ; ---- infl + shirt_N = mkN "Hemd" "Hemd" "Hemd" "Hemds" "Hemden" "Hemden" neuter ; shoe_N = mkN "Schuh" ; shop_N = reg2N "Laden" "Läden" masculine ; short_A = mk3A "kurz" "kürzer" "kürzeste" ; - silver_N = reg2N "Silber" "Silber" neuter ; ---- infl + silver_N = reg2N "Silber" "Silber" neuter ; ---- sg t sister_N = reg2N "Schwester" "Schwestern" feminine ; sleep_V = Irreg.schlafen_V ; small_A = regA "klein" ; @@ -200,7 +203,7 @@ lin talk_V3 = mkV3 (regV "reden") (mkPrep "mit" dative) (mkPrep "über" accusative) ; -- 6/2019 teacher_N = reg2N "Lehrer" "Lehrer" masculine ; teach_V2 = dirV2 (no_geV (regV "unterrichten")) ; - television_N = reg2N "Fernsehen" "Fernsehen" neuter; + television_N = reg2N "Fernsehen" "Fernsehen" neuter; ---- sg t thick_A = regA "dick" ; thin_A = regA "dünn" ; train_N = reg2N "Zug" "Züge" masculine ; @@ -251,7 +254,7 @@ lin back_N = reg2N "Rücken" "Rücken" masculine ; bark_N = mkN "Rinde" ; belly_N = reg2N "Bauch" "Bäuche" masculine ; - blood_N = mkN "Blut" "Blute" neuter ; + blood_N = mkN "Blut" "Blute" neuter ; ---- sg t bone_N = reg2N "Knochen" "Knochen" masculine ; breast_N = reg2N "Brust" "Brüste" feminine ; cloud_N = mkN "Wolke" ; @@ -261,7 +264,7 @@ lin earth_N = mkN "Erde" ; egg_N = mkN "Ei" "Eier" neuter ; eye_N = mkN "Auge" "Augen" neuter; - fat_N = mkN "Fett" "Fetter" neuter ; + fat_N = mkN "Fett" "Fette" neuter ; feather_N = mkN "Feder" "Federn" feminine ; fingernail_N = reg2N "Fingernagel" "Fingernägel" masculine ; fire_N = mkN "Feuer" "Feuer" neuter ; @@ -270,7 +273,7 @@ lin foot_N = reg2N "Fuß" "Füße" masculine ; forest_N = reg2N "Wald" "Wälder" masculine ; grass_N = mkN "Gras" "Gräser" neuter ; - guts_N = mkN "Eingeweide" ; + guts_N = mkN "Eingeweide" "Eingeweide" neuter ; ---- pl t ? hair_N = mkN "Haar" "Haare" neuter ; hand_N = mkN "Hand" "Hände" feminine ; head_N = mkN "Kopf" "Köpfe" masculine ; @@ -295,11 +298,11 @@ lin rope_N = mkN "Seil" "Seile" neuter ; salt_N = mkN "Salz" "Salze" neuter ; sand_N = mkN "Sand" ; - seed_N = mkN "Same" ; + seed_N = mkN "Same" "Samen" masculine ; skin_N = mkN "Haut" "Häute" feminine ; sky_N = mkN "Himmel" ; smoke_N = mkN "Rauch" ; - snow_N = mkN "Schnee" "Schneen" masculine ; ---- pl + snow_N = mkN "Schnee" "Schneen" masculine ; ---- sg t stick_N = mkN "Stock" "Stöcke" masculine ; tail_N = mkN "Schwanz" "Schwänze" masculine ; tongue_N = mkN "Zunge" ; diff --git a/src/german/MakeStructuralGer.gf b/src/german/MakeStructuralGer.gf index 07a13afbf..1b306da51 100644 --- a/src/german/MakeStructuralGer.gf +++ b/src/german/MakeStructuralGer.gf @@ -8,7 +8,7 @@ oper mkSubj : Str -> Subj = \x -> {s = x ; lock_Subj = <>} ; mkIQuant : Str -> IQuant = \s -> - {s = \\_,_ => s ; lock_IQuant = <>} ; + {s = \\_,_ => s ; a = Strong ; lock_IQuant = <>} ; mkPredet = overload { mkPredet : A -> Predet = \a -> diff --git a/src/german/MorphoGer.gf b/src/german/MorphoGer.gf index 4b4fa6673..1dd5ab3a9 100644 --- a/src/german/MorphoGer.gf +++ b/src/german/MorphoGer.gf @@ -77,6 +77,18 @@ oper _ => Predef.tk 2 v } ; + stemVerbImpSg : Str -> Str -> Str = \inf,pres3Sg -> + let stem = stemVerb inf ; -- vergeb.en, piss.en + stemI = init pres3Sg -- vergib.t , piß.t + in case of { + <_ + ("e"|"i") + #nonvowels, + _ + ("i"|"ie") + #nonvowels> => stemI ; -- vergib , piß + _ => stem } ; -- HL 7/17 (always the final vowel?) + + nonvowels : pattern Str = + #(("p"|"b"|"f"|"t"|"d"|"v"|"k"|"g"|"c"|"h"|"j" + |"l"|"r"|"m"|"n"|"s"|"x"|"q"|"z"|"s"|"ß")*) ; + -- For $Numeral$. LinDigit = {s : DForm => CardOrd => Str} ; diff --git a/src/german/NamesGer.gf b/src/german/NamesGer.gf index 43c17cda9..6ad21c842 100644 --- a/src/german/NamesGer.gf +++ b/src/german/NamesGer.gf @@ -37,7 +37,7 @@ lin FullName gn sn = { -- UseLN : LN -> NP ; lin UseLN ln = { - s = \\b,c => case ln.hasArt of { + s = \\b,c => case ln.hasDefArt of { True => case b of { True => [] ; -- defart dropped False => artDef ! (gennum ln.g ln.n) ! c @@ -61,7 +61,7 @@ lin PlainLN ln = { -- InLN : LN -> Adv ; lin InLN ln = { s = appPrepNP P.inDat_Prep { - s = \\b,c => case ln.hasArt of { + s = \\b,c => case ln.hasDefArt of { True => case b of { True => [] ; -- defart dropped False => artDef ! (gennum ln.g ln.n) ! c diff --git a/src/german/ParadigmsGer.gf b/src/german/ParadigmsGer.gf index 7493d326d..5e50ad187 100644 --- a/src/german/ParadigmsGer.gf +++ b/src/german/ParadigmsGer.gf @@ -1,4 +1,4 @@ ---# -path=.:../common:../abstract:../../prelude +--# -path=.:../common:../abstract:../prelude: --1 German Lexical Paradigms -- @@ -174,15 +174,15 @@ mkN : overload { mkLN : (nom,acc,dat,gen : Str) -> Gender -> LN = \nom,acc,dat,gen,g -> lin LN {s = \\a => table {Nom => nom ; Acc => acc ; Dat => dat ; Gen => gen} ; g = g ; n = Sg ; - hasArt = False} + hasDefArt = False} } ; - defLN : LN -> LN = \n -> n ** {hasArt = True} ; + defLN : LN -> LN = \n -> n ** {hasDefArt = True} ; mk2LN : (karolus, karoli : Str) -> Gender -> LN = \karolus, karoli, g -> lin LN {s = \\a => table {Gen => karoli ; _ => karolus} ; g = g ; n = Sg ; - hasArt = False} ; + hasDefArt = False} ; regLN : (horst : Str) -> Gender -> LN = \horst, g -> mk2LN horst (ifTok Tok (Predef.dp 1 horst) "s" horst (horst + "s")) g ; @@ -224,7 +224,7 @@ mkN : overload { -- Adverbs are formed from strings. mkAdv : Str -> Adv ; -- adverbs have just one form anyway - + mkIAdv : Str -> IAdv ; --2 Prepositions @@ -576,6 +576,7 @@ mkV2 : overload { mkA2 = \a,p -> a ** {c2 = p ; lock_A2 = <>} ; mkAdv s = {s = s ; lock_Adv = <>} ; + mkIAdv s = {s = s ; lock_IAdv = <>} ; mkPrep = overload { mkPrep : Str -> Case -> Prep = \s,c -> @@ -633,7 +634,7 @@ mkV2 : overload { irregV singen singt sang saenge gesungen = let - sing = stemVerb singen ; + sing = stemVerbImpSg singen singt -- geben gibt => gib, HL 7/17 in mk6V singen singt sing sang saenge gesungen ; diff --git a/src/german/QuestionGer.gf b/src/german/QuestionGer.gf index 942a59ec4..f5533e473 100644 --- a/src/german/QuestionGer.gf +++ b/src/german/QuestionGer.gf @@ -1,4 +1,4 @@ -concrete QuestionGer of Question = CatGer ** open ResGer in { +concrete QuestionGer of Question = CatGer ** open ResGer, Prelude in { flags optimize=all_subs ; @@ -17,7 +17,7 @@ concrete QuestionGer of Question = CatGer ** open ResGer in { s = \\m,t,a,p => let who = appPrep vp.c1 ip.s ; - cl = (mkClause who (agrP3 ip.n) vp).s ! m ! t ! a ! p + cl = (mkClause who (agrGenNum ip.a) vp).s ! m ! t ! a ! p in table { QDir => cl ! Main ; QIndir => cl ! Sub @@ -36,8 +36,8 @@ concrete QuestionGer of Question = CatGer ** open ResGer in { } ; QuestIAdv iadv cl = { - s = \\m,t,a,p => - let + s = \\m,t,a,p => + let cls = cl.s ! m ! t ! a ! p ; why = iadv.s in table { @@ -47,8 +47,8 @@ concrete QuestionGer of Question = CatGer ** open ResGer in { } ; QuestIComp icomp np = { - s = \\m,t,a,p => - let + s = \\m,t,a,p => + let vp = predV sein_V ** {ext = icomp.ext}; subj = mkSubject np vp.c1 ; cls = (mkClause subj.s subj.a vp).s ! m ! t ! a ! p ; @@ -60,12 +60,13 @@ concrete QuestionGer of Question = CatGer ** open ResGer in { } ; PrepIP p ip = { - s = appPrep p ip.s ; + s = appPrep p ip.s -- todo: mit was => womit ; an was => woran etc. } ; AdvIP ip adv = { s = \\c => ip.s ! c ++ adv.s ; - n = ip.n + a = ip.a ; + isPron = False } ; IdetCN idet cn = @@ -73,8 +74,9 @@ concrete QuestionGer of Question = CatGer ** open ResGer in { g = cn.g ; n = idet.n in { - s = \\c => idet.s ! g ! c ++ cn.s ! Weak ! n ! c ; - n = n + s = \\c => idet.s ! g ! c ++ cn.s ! idet.a ! n ! c ++ cn.adv ++ cn.rc ! n ++ cn.ext ; + a = case n of {Sg => GSg g ; _ => GPl} ; + isPron = False } ; IdetIP idet = @@ -82,16 +84,19 @@ concrete QuestionGer of Question = CatGer ** open ResGer in { g = Neutr ; ---- n = idet.n in { - s = idet.s ! g ; - n = n + s = idet.s ! g ; + a = case n of {Sg => GSg g ; _ => GPl} ; + isPron = False ; } ; - IdetQuant idet num = + IdetQuant iquant num = let - n = num.n + n = num.n ; + a = iquant.a in { - s = \\g,c => idet.s ! (gennum g n) ! c ++ num.s ! AMod (gennum g n) c ; - n = n + s = \\g,c => let gn = gennum g n in iquant.s ! gn ! c ++ num.s ! agrAdj a gn c ; + n = n ; + a = a } ; AdvIAdv i a = {s = i.s ++ a.s} ; @@ -100,5 +105,36 @@ concrete QuestionGer of Question = CatGer ** open ResGer in { CompIP ip = {s = \\_ => ip.s ! Nom ; ext = "" } ; + -- QVP (added 9/2025, HL) + lincat + QVP = ResGer.VP ; + + linref + QVP = \vp -> useInfVP False vp ; + + lin + ComplSlashIP vps ip = -- just as ComplSlash : VPSlash -> NP -> VP + let np = lin NP {s = table Bool {_ => ip.s} ; + a = agrGenNum ip.a ; + w = WLight ; -- guessed + rc,ext = []} ; + vp = case vps.objCtrl of { True => objAgr np vps ; _ => vps } + ** { c2 = vps.c2 ; objCtrl = vps.objCtrl } ; + in insertObjNP np vps.c2 vp ; + + AdvQVP vp iadv = insertAdv iadv.s vp ; + AddAdvQVP qvp iadv = insertAdv iadv.s qvp ; + + QuestQVP ip qvp = { -- just as QuestVP, with qvp as vp + s = \\m,t,a,p => + let + who = appPrep qvp.c1 ip.s ; + cl = (mkClause who (agrGenNum ip.a) qvp).s ! m ! t ! a ! p + in table { + QDir => cl ! Main ; + QIndir => cl ! Sub + } + } ; + } diff --git a/src/german/RelativeGer.gf b/src/german/RelativeGer.gf index 76f03f3c7..34edfe006 100644 --- a/src/german/RelativeGer.gf +++ b/src/german/RelativeGer.gf @@ -18,9 +18,10 @@ concrete RelativeGer of Relative = CatGer ** open ResGer, Prelude in { } ; agr = case rp.a of { RNoAg => agrP3 (numGenNum gn) ; - RAg n p => case n of {Sg => AgSgP3 Neutr ; Pl => AgPl p} - } ; - cl = mkClause (rp.s ! rgn ! Nom) agr vp + RAg Sg p => AgSgP3 Neutr ; + RAg Pl p => AgPl p + } ; -- subject may be non-nom, e.g. an dem gezweifelt wird + cl = mkClause (appPrep vp.c1 (rp.s ! rgn)) agr vp in cl.s ! m ! t ! ant ! b ! Sub ; c = Nom diff --git a/src/german/ResGer.gf b/src/german/ResGer.gf index 8336d0c6f..22f5c1439 100644 --- a/src/german/ResGer.gf +++ b/src/german/ResGer.gf @@ -181,6 +181,9 @@ resource ResGer = ParamX ** open Prelude in { genGenNum : GenNum -> Gender = \gn -> case gn of {GSg g => g ; GPl => Masc} ; + agrGenNum : GenNum -> Agr = \gn -> + case gn of {GSg g => AgSgP3 g ; _ => AgPl P3} ; + -- Used in $NounGer$. agrAdj : Adjf -> GenNum -> Case -> AForm = \a,gn,c -> diff --git a/src/german/StructuralGer.gf b/src/german/StructuralGer.gf index e54a65dd3..75ac69ebb 100644 --- a/src/german/StructuralGer.gf +++ b/src/german/StructuralGer.gf @@ -50,7 +50,7 @@ concrete StructuralGer of Structural = CatGer ** here_Adv = ss "hier" ; how_IAdv = ss "wie" ; how8much_IAdv = ss "wieviel" ; - how8many_IDet = {s = \\g,c => "wie viel" + detEnding ! (gennum g Pl) ! c ; n = Pl} ; + how8many_IDet = {s = \\g,c => "wie viel" + detEnding ! (gennum g Pl) ! c ; n = Pl ; a = Strong} ; if_Subj = ss "wenn" ; --- no variants in the RGL! | ss "falls" ; in8front_Prep = mkPrep "vor" P.dative ; i_Pron = mkPronPers "ich" "mich" "mir" "meiner" "mein" Masc Sg P1 ; @@ -74,8 +74,8 @@ concrete StructuralGer of Structural = CatGer ** sp = \\_,g,c => "viel" + detEnding ! (gennum g Sg) ! c ; ---- (GSg _ Sg) ! Gen ? n = Sg ; a = Strong ; isDef = False ; hasDefArt = False} ; must_VV = auxVV - (mkV - "müssen" "muss" "musst" "muss" "müsst" "müss" + (mkV -- modal verb, has no imperative forms "müsse,müsst" HL 12/2024 + "müssen" "muss" "musst" "muss" "müsst" "müsse" "musste" "musstest" "mussten" "musstet" "müsste" "gemusst" [] VHaben) ; @@ -123,22 +123,26 @@ concrete StructuralGer of Structural = CatGer ** under_Prep = mkPrep "unter" P.dative ; very_AdA = ss "sehr" ; want_VV = auxVV - (mkV - "wollen" "will" "willst" "will" "wollt" "woll" + (mkV -- modal verb, has no imperative forms "wolle,woll(e)t" HL 12/2024 + "wollen" "will" "willst" "will" "wollt" "wolle" "wollte" "wolltest" "wollten" "wolltet" "wollte" "gewollt" [] VHaben) ; we_Pron = mkPronPers "wir" "uns" "uns" "unser" "unser" Fem Pl P1 ; - whatSg_IP = {s = caselist "was" "was" "was" "wessen" ; n = Sg} ; ---- - whatPl_IP = {s = caselist "was" "was" "was" "wessen" ; n = Pl} ; -- HL 6/2016 + whatSg_IP = {s = caselist "was" "was" "was" "wessen" ; + a = GSg Neutr ; isPron = True} ; -- todo: mit was => womit + whatPl_IP = {s = caselist "was alles" "was alles" "was allem" "wessen allem" ; + a = GSg Neutr ; isPron = True} ; -- Duden 563 when_IAdv = ss "wann" ; when_Subj = ss "wenn" ; where_IAdv = ss "wo" ; - which_IQuant = {s = \\gn,c => "welch" + detEnding ! gn ! c} ; - whoSg_IP = {s = caselist "wer" "wen" "wem" "wessen" ; n = Sg} ; - whoPl_IP = {s = caselist "wer" "wen" "wem" "wessen" ; n = Sg} ; -- HL 6/2016 + which_IQuant = {s = \\gn,c => "welch" + detEnding ! gn ! c ; a = Weak} ; + whoSg_IP = {s = caselist "wer" "wen" "wem" "wessen" ; + a = GSg Masc ; isPron = True} ; -- Duden 563 + whoPl_IP = {s = caselist "wer alles" "wen alles" "wem alles" "wessen alles" ; + a = GSg Masc ; isPron = True} ; -- Duden 563 why_IAdv = ss "warum" ; without_Prep = mkPrep "ohne" P.accusative ; with_Prep = mkPrep "mit" P.dative ; @@ -153,7 +157,7 @@ concrete StructuralGer of Structural = CatGer ** GPl => \\c => "kein" + detEnding ! GPl ! c} ; sp = \\gn,c => "kein" + detEnding ! gn ! c ; a = Mixed ; isDefArt = False ; delCardOne = True} ; -- HL kein+ein(er) => kein(er) - if_then_Conj = {s1 = "wenn" ; s2 = "dann" ; n = Sg ; lock_Conj = <>} ; + if_then_Conj = {s1 = "wenn" ; s2 = bindComma ++ "dann" ; n = Sg} ; nobody_NP = nameNounPhrase Masc {s = caselist "niemand" "niemanden" "niemandem" "niemands"} ; nothing_NP = @@ -166,7 +170,7 @@ concrete StructuralGer of Structural = CatGer ** have_V2 = P.dirV2 IrregGer.haben_V ; that_Subj = ss "dass" ; - lin language_title_Utt = ss "Deutsch" ; + language_title_Utt = ss "Deutsch" ; oper asNum : (Gender => Case => Str) -> (Gender => Case => {quant,num:Str}) =