diff --git a/lib/resource-1.0/german/BasicGer.gf b/lib/resource-1.0/german/BasicGer.gf index b4149afa7..7624e4c9f 100644 --- a/lib/resource-1.0/german/BasicGer.gf +++ b/lib/resource-1.0/german/BasicGer.gf @@ -3,9 +3,10 @@ concrete BasicGer of Basic = CatGer ** open Prelude, ParadigmsGer in { flags - optimize=values ; + optimize=all_subs ; lin + add_V3 = dirV3 (prefixV "hinzu" (regV "fügen")) zu_Prep ; airplane_N = regN "Flugzeug" ; already_Adv = mkAdv "schon" ; answer_V2S = mkV2S (regV "antworten") datPrep ; @@ -15,42 +16,42 @@ lin ask_V2Q = mkV2Q (regV "fragen") accPrep ; baby_N = reg2N "Baby" "babies" neuter ; ---- bad_A = regA "schlecht" ; - bank_N = reg2N "Bank" "Banken" feminine ; ---- + bank_N = reg2N "Bank" "Banken" feminine ; beautiful_A = regA "schön" ; - become_VA = mkVA (mkV "werden" "wird" "werd" "wurde" "würde" "geworden") ; + become_VA = mkVA (mkV "werde" "wird" "werd" "wurde" "würde" "geworden") ; beer_N = reg2N "Bier" "Biere" neuter ; ----- beg_V2V = mkV2V (mkV "be" "ber""be" "blad" "bett" "bedd") [] "att" ; - big_A = mkA "groß" "groß" "größer""größt" ; + beg_V2V = mkV2V (mkV "bitten" "bittet" "bitte" "bat" "bäte" "gebeten") accPrep ; + big_A = mkA "groß" "größer""größte" ; bike_N = reg2N "Fahrrad" "Fahrräder" neuter ; ----- bird_N = reg2N "fågel" "fåglar" ; + bird_N = reg2N "Vogel" "Vögel" masculine ; black_A = regA "schwarz" ; blue_A = regA "blau"; boat_N = reg2N "Boot" "Boote" neuter ; book_N = reg2N "Buch" "Bücher" neuter ; --- boot_N = reg2N "stövel" "stövlar" ; + boot_N = reg2N "Stiefel" "Stiefel" masculine ; boss_N = reg2N "Chef" "Chefe" masculine ; ---- boy_N = reg2N "Junge" "Jungen" masculine ; - bread_N = reg2N "Brot" "Brote" neuter ; ---- + bread_N = reg2N "Brot" "Brote" neuter ; break_V2 = dirV2 (irregV "zerschlagen" "zerschlägt" "zerschlug" "zerschlüge" "zerschlagen") ; broad_A = regA "breit" ; - brother_N2 = mkN2 (reg2N "Bruder" "Brüder" masculine) zu_Prep ; ---- + brother_N2 = mkN2 (reg2N "Bruder" "Brüder" masculine) von_Prep ; brown_A = regA "braun" ; ----- butter_N = regN "smör" ; + butter_N = reg2N "Butter" "Butter" feminine ; ---- infl buy_V2 = dirV2 (regV "kaufen") ; ----- camera_N = regN "kamera" ; + camera_N = reg2N "Kamera" "Kameras" feminine ; cap_N = regN "Mütze" ; car_N = reg2N "Wagen" "Wagen" masculine ; carpet_N = regN "Teppich" ; cat_N = regN "Katze" ; ----- ceiling_N = regN "tak" ; + ceiling_N = reg2N "Dach" "Dächer" neuter ; chair_N = reg2N "Stuhl" "Stühle" masculine ; cheese_N = regN "Käse" ; child_N = reg2N "Kind" "Kinder" neuter ; church_N = regN "Kirche" ; city_N = reg2N "Stadt" "Städte" feminine ; clean_A = regA "rein" ; - clever_A = regA "klug" ; ---- + clever_A = mkA "klug" "klüger" "klügste" ; close_V2 = dirV2 (irregV "schliessen" "schließt" "schloß" "schlöße" "geschlossen") ; coat_N = regN "Jacke" ; cold_A = regA "Kalt" ; @@ -62,6 +63,7 @@ lin die_V = seinV (irregV "sterben" "stirbt" "starb" "stärbe" "gestorben") ; distance_N3 = mkN3 (regN "Entfernung") von_Prep zu_Prep ; dirty_A = regA "schmutzig" ; + do_V2 = dirV2 (irregV "tun" "tut" "tat" "täte" "getan") ; doctor_N = reg2N "Arzt" "Ärzte" masculine ; dog_N = regN "Hund" ; door_N = reg2N "Tür" "Türe" feminine ; @@ -69,7 +71,7 @@ lin easy_A2V = mkA2V (regA "leicht") (mkPrep "für" accusative) ; eat_V2 = dirV2 (irregV "essen" "ißt" "aß" "äße" "gegessen") ; empty_A = regA "leer" ; ---- check infl - enemy_N = regN "Feind" ; ---- + enemy_N = regN "Feind" ; factory_N = regN "Fabrike" ; father_N2 = mkN2 (reg2N "Vater" "Väter" masculine) von_Prep ; fear_VS = mkVS (regV "fürchten") ; @@ -84,16 +86,16 @@ lin garden_N = reg2N "Garten" "Gärten" masculine ; girl_N = reg2N "Mädchen" "Mädchen" neuter ; glove_N = regN "Handschuh" ; - gold_N = regN "Gold" ; ---- - good_A = mkA "gut" "gut" "besser" "best" ; + gold_N = reg2N "Gold" "Golde" neuter ; ---- infl + good_A = mkA "gut" "besser" "beste" ; go_V = seinV (irregV "gehen" "geht" "ging" "ginge" "gegangen") ; green_A = regA "grün" ; harbour_N = reg2N "Hafen" "Häfen" masculine ; hate_V2 = dirV2 (regV "Hassen") ; hat_N = reg2N "Hut" "Hüte" masculine ; ----- have_V2 = dirV2 (mkV "ha" "har" "ha" "hade" "haft" "haft") ; ---- pp + have_V2 = dirV2 haben_V ; hear_V2 = dirV2 (regV "hören") ; ----- hill_N = regN "kulle" ; + hill_N = regN "Hügel" ; hope_VS = mkVS (regV "hoffen") ; horse_N = reg2N "Pferd" "Pferde" neuter ; hot_A = regA "heiß" ; @@ -101,46 +103,48 @@ lin important_A = regA "wichtig" ; industry_N = regN "Industrie" ; iron_N = reg2N "Eisen" "Eisen" neuter ; + jump_V = seinV (irregV "springen" "springt" "sprang" "spränge" "gesprungen") ; king_N = regN "König" ; know_V2 = dirV2 (irregV "wissen" "weiß" "wußte" "wüßte" "gewußt") ; ---- infl ----- lake_N = mkN "sjö" "sjön" "sjöar" "sjöarna" ; + lake_N = reg2N "See" "Seen" masculine ; --- infl lamp_N = regN "Lampe"; learn_V2 = dirV2 (regV "lernen") ; ----- leather_N = regN "Leder" ; - leave_V2 = - dirV2 (irregV "verlassen" "verläßt" "verließ" "verliesse" "verlassen") ; + leather_N = reg2N "Leder" "Leder" neuter ; + leave_V2 = dirV2 (irregV "verlassen" "verläßt" "verließ" "verliesse" "verlassen") ; like_V2 = dirV2 (irregV "magen" "mag" "mochte" "möchte" "gemocht") ; listen_V2 = mkV2 (prefixV "zu" (regV "hören")) datPrep ; ---- dat live_V = regV "leben" ; - long_A = mkA "lang" "lang" "länger" "längst" ; + long_A = mkA "lang" "länger" "längste" ; lose_V2 = dirV2 (irregV "verlieren" "verliert" "verlor" "verlöre" "verloren") ; love_N = regN "Liebe" ; 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 ; ---- Pl - milk_N = reg2N "Milch" "Milchen" feminine ; ---- Pl - moon_N = regN "Mond" ; ---- Pl + meat_N = reg2N "Fleisch" "Fleische" neuter ; ---- infl + milk_N = reg2N "Milch" "Milchen" feminine ; ---- infl + moon_N = regN "Mond" ; mother_N2 = mkN2 (reg2N "Mutter" "Mütter" feminine) von_Prep ; mountain_N = regN "Berg" ; music_N = reg2N "Musik" "Musiken" feminine ; narrow_A = regA "schmal" ; new_A = regA "neu" ; newspaper_N = regN "Zeitung" ; - oil_N = regN "Öl" ; ---- - old_A = mkA "alt" "alt" "älter" "ältest" ; + now_Adv = mkAdv "jetzt" ; + number_N = reg2N "Zahl" "Zahlen" feminine ; + oil_N = reg2N "Öl" "Öle" neuter ; + old_A = mkA "alt" "älter" "älteste" ; open_V2 = dirV2 (regV "öffnen") ; - paint_V2A = - mkV2A (irregV "streichen" "streicht" "strich" "striche" "gestrichen") accPrep ; ---- + paint_V2A = mkV2A (regV "malen") accPrep ; paper_N = reg2N "Papier" "Papiere" neuter ; - peace_N = regN "Frieden" ; ---- + peace_N = mkN "Friede" "Frieden" "Frieden" "Friedens" "Frieden" "Frieden" masculine ; pen_N = regN "Bleistift" ; ---- - planet_N = regN "Planete" ; ---- + planet_N = reg2N "Planet" "Planeten" masculine ; plastic_N = reg2N "Plastik" "Plastiken" feminine ; ---- play_V2 = dirV2 (regV "spielen") ; policeman_N = reg2N "Polizist" "Polizisten" masculine ; - priest_N = regN "Priest" ; ---- + priest_N = regN "Priester" ; probable_AS = mkAS (regA "wahrscheinlich") ; + put_V2 = dirV2 (regV "setzen") ; queen_N = reg2N "Königin" "königinnen" feminine ; radio_N = reg2N "Radio" "Radios" neuter ; ---- rain_V0 = mkV0 (regV "regnen") ; @@ -150,8 +154,8 @@ lin restaurant_N = reg2N "Restaurant" "Restaurants" neuter ; river_N = reg2N "Fluß" "Flüße" masculine ; rock_N = regN "Stein" ; ----- roof_N = regN "tak" ; ----- rubber_N = mkN "gummi" "gummit" "gummin" "gummina" ; + roof_N = reg2N "Dach" "Dächer" neuter ; + rubber_N = reg2N "Gummi" "Gummis" neuter ; run_V = seinV (irregV "laufen" "läuft" "lief" "liefe" "gelaufen") ; say_VS = mkVS (regV "sagen") ; school_N = regN "Schule"; @@ -161,25 +165,27 @@ lin see_V2 = dirV2 (irregV "sehen" "sieht" "sah" "sähe" "gesehen") ; sell_V3 = accdatV3 (regV "verkaufen") ; send_V3 = accdatV3 (regV "schicken") ; - sheep_N = reg2N "Schaf" "Schäfe" feminine ; ---- - ship_N = regN "Schiff" ; ---- - shirt_N = reg2N "Hemd" "Hemde" neuter ; ---- + sheep_N = reg2N "Schaf" "Schafe" neuter ; + ship_N = reg2N "Schiff" "Schiffe" neuter ; + shirt_N = reg2N "Hemd" "Hemden" neuter ; ---- infl shoe_N = regN "Schuh" ; shop_N = reg2N "Laden" "Läden" masculine ; short_A = regA "kurz" ; - silver_N = reg2N "Silber" "Silber" neuter ; ---- + silver_N = reg2N "Silber" "Silber" neuter ; ---- infl sister_N = reg2N "Schwester" "Schwester" feminine ; sleep_V = irregV "schlafen" "schläft" "schlief" "schliefe" "geschlafen" ; small_A = regA "Klein" ; snake_N = regN "Schlange" ; - sock_N = reg2N "Strumpf" "Strümpfe" masculine ; ---- + sock_N = reg2N "Strumpf" "Strümpfe" masculine ; + song_N = reg2N "Lied" "Lieder" neuter ; speak_V2 = dirV2 (irregV "sprechen" "spricht" "sprach" "spräche" "gesprochen") ; star_N = regN "Sterne" ; - steel_N = regN "Stahl" ; ---- - stone_N = regN "Stein" ; ---- ----- stove_N = regN "spis" ; + steel_N = regN "Stahl" ; + stone_N = regN "Stein" ; + stop_V = seinV (irregV "halten" "hält" "hielt" "hielte" "gehalten") ; + stove_N = regN "Herd" ; student_N = reg2N "Student" "Studenten" masculine ; - stupid_A = mkA "dumm" "dumm" "dümmer" "dümmst" ; ---- + stupid_A = mkA "dumm" "dümmer" "dümmste" ; ---- sun_N = regN "Sonne" ; switch8off_V2 = dirV2 (prefixV "aus" (regV "schalten")) ; switch8on_V2 = dirV2 (prefixV "ein" (regV "schalten")) ; @@ -192,7 +198,7 @@ lin thin_A = regA "dünn" ; train_N = reg2N "Zug" "Züge" masculine ; travel_V = regV "reisen" ; - tree_N = reg2N "Baum" "Bäume" masculine ; ---- + tree_N = reg2N "Baum" "Bäume" masculine ; ---- trousers_N = regN "trousers" ; ---- pl t ! ugly_A = regA "häßlich" ; understand_V2 = dirV2 (irregV "verstehen" "versteht" "verstand" "verstände" "verstanden") ; @@ -200,28 +206,19 @@ lin village_N = reg2N "Dorf" "Dörfer" neuter ; wait_V2 = mkV2 (regV "warten") (mkPrep "auf" accusative) ; walk_V = seinV (irregV "gehen" "geht" "ging" "ginge" "gegangen") ; - warm_A = mkA "warm" "warm" "wärmer" "wärmst" ; - war_N = regN "Krieg" ; ---- + warm_A = mkA "warm" "wärmer" "wärmste" ; + war_N = regN "Krieg" ; watch_V2 = mkV2 (regV "schauen") (mkPrep "an" accusative) ; water_N = reg2N "Wasser" "Wasser" neuter ; white_A = regA "weiß" ; - window_N = reg2N "Fenster" "Fenster" neuter ; ---- + window_N = reg2N "Fenster" "Fenster" neuter ; wine_N = regN "Wein" ; - win_V2 = dirV2 (irregV "gewinnen" "gewinnt" "gewann" "gewänne" "gewonnen") ; ---- + win_V2 = dirV2 (irregV "gewinnen" "gewinnt" "gewann" "gewänne" "gewonnen") ; woman_N = reg2N "Frau" "Frauen" feminine ; - wonder_VQ = mkVQ (reflV (regV "wundern") accusative) ; ---- - wood_N = reg2N "Holz" "Hölzer" neuter ; ---- + wonder_VQ = mkVQ (reflV (regV "wundern") accusative) ; + wood_N = reg2N "Holz" "Hölzer" neuter ; write_V2 = dirV2 (irregV "schreiben" "schreibt" "schrieb" "schriebe" "geschrieben") ; yellow_A = regA "gelb" ; - young_A = mkA "jung" "jung" "jünger" "jüngst" ; - - do_V2 = dirV2 (irregV "tun" "tut" "tat" "täte" "getan") ; - now_Adv = mkAdv "jetzt" ; - song_N = reg2N "Lied" "Lieder" neuter ; --- add_V3 = mkV3 (partV (irregV "lägga" "lade" "lagt") "till") [] "till" ; - number_N = reg2N "Zahl" "Zahlen" feminine ; - put_V2 = dirV2 (regV "setzen") ; - stop_V = seinV (irregV "halten" "hält" "hielt" "hielte" "gehalten") ; --- jump_V = regV "hoppa" ; + young_A = mkA "jung" "jünger" "jüngste" ; } ; diff --git a/lib/resource-1.0/german/NumeralGer.gf b/lib/resource-1.0/german/NumeralGer.gf index cb641e3a2..eff5da8b8 100644 --- a/lib/resource-1.0/german/NumeralGer.gf +++ b/lib/resource-1.0/german/NumeralGer.gf @@ -1,5 +1,7 @@ concrete NumeralGer of Numeral = CatGer ** open MorphoGer in { +flags optimize = all_subs ; + lincat Digit = {s : DForm => CardOrd => Str} ; Sub10 = {s : DForm => CardOrd => Str} ; diff --git a/lib/resource-1.0/german/ParadigmsGer.gf b/lib/resource-1.0/german/ParadigmsGer.gf index 89aaf1aee..e27750af3 100644 --- a/lib/resource-1.0/german/ParadigmsGer.gf +++ b/lib/resource-1.0/german/ParadigmsGer.gf @@ -105,9 +105,9 @@ oper --2 Adjectives --- Adjectives need four forms: two for the positive and one for the other degrees. +-- Adjectives need three forms, one for each degree. - mkA : (x1,_,_,x4 : Str) -> A ; -- gut,gut,besser,best + mkA : (x1,_,x3 : Str) -> A ; -- gut,besser,beste -- The regular adjective formation works for most cases, and includes -- variations such as "teuer - teurer", "böse - böser". @@ -215,7 +215,7 @@ oper mkVS : V -> VS ; mkV2S : V -> Prep -> V2S ; mkVV : V -> VV ; - mkV2V : V -> Prep -> Prep -> V2V ; + mkV2V : V -> Prep -> V2V ; mkVA : V -> VA ; mkV2A : V -> Prep -> V2A ; mkVQ : V -> VQ ; @@ -260,7 +260,8 @@ oper regN : Str -> N = \hund -> case hund of { _ + "e" => mkN hund hund hund hund (hund + "n") (hund + "n") Fem ; _ + ("ion" | "ung") => mkN hund hund hund hund (hund + "en") (hund + "en") Fem ; - _ => mkN hund hund hund (genitS hund) (hund + "e") (hund + "en") Masc + _ + ("er" | "en" | "el") => mkN hund hund hund (genitS hund) hund (hund + "n") Masc ; + _ => mkN hund hund hund (genitS hund) (hund + "e") (hund + "en") Masc } ; reg2N : (x1,x2 : Str) -> Gender -> N = \hund,hunde,g -> @@ -295,13 +296,18 @@ oper regPN = \horst -> mkPN horst (ifTok Tok (Predef.dp 1 horst) "s" horst (horst + "s")) ; - mkA : (x1,_,_,x4 : Str) -> A = \a,b,c,d -> - MorphoGer.mkA a b c d ** {lock_A = <>} ; + mkA : (x1,_,x3 : Str) -> A = \a,b,c -> + let aa : Str = case a of { + teu + "er" => teu + "r" ; + mud + "e" => mud ; + _ => a + } in + MorphoGer.mkA a aa b (init c) ** {lock_A = <>} ; regA : Str -> A = \a -> case a of { - teu + "er" => mkA a (teu + "re") (teu + "rer") (teu + "rest") ; - _ + "e" => mkA a a (a + "r") (a + "st") ; - _ => mkA a a (a + "er") (a + "est") + teu + "er" => mkA a (teu + "rer") (teu + "rest") ; + _ + "e" => mkA a (a + "r") (a + "st") ; + _ => mkA a (a + "er") (a + "est") } ; invarA = \s -> {s = \\_,_ => s ; lock_A = <>} ; ---- comparison @@ -363,6 +369,10 @@ oper prefix = v.prefix ; lock_V = v.lock_V ; aux = v.aux ; vtype = v.vtype } ; + haben_V = MorphoGer.haben_V ** {lock_V = <>} ; + sein_V = MorphoGer.sein_V ** {lock_V = <>} ; + werden_V = MorphoGer.werden_V ** {lock_V = <>} ; + mkV2 v c = v ** {c2 = c ; lock_V2 = <>} ; dirV2 v = mkV2 v (mkPrep [] accusative) ; datV2 v = mkV2 v (mkPrep [] dative) ; @@ -382,7 +392,7 @@ oper mkV0 v = v ** {lock_V = <>} ; mkV2S v p = mkV2 v p ** {lock_V2 = <>} ; - mkV2V v p t = mkV2 v p ** {s4 = t ; lock_V2 = <>} ; + mkV2V v p = mkV2 v p ** {lock_V2 = <>} ; mkVA v = v ** {lock_VA = <>} ; mkV2A v p = mkV2 v p ** {lock_V2A = <>} ; mkV2Q v p = mkV2 v p ** {lock_V2 = <>} ; diff --git a/lib/resource-1.0/german/StructuralGer.gf b/lib/resource-1.0/german/StructuralGer.gf index c3176f390..f77402541 100644 --- a/lib/resource-1.0/german/StructuralGer.gf +++ b/lib/resource-1.0/german/StructuralGer.gf @@ -57,6 +57,11 @@ concrete StructuralGer of Structural = CatGer ** "mußte" "mußtest" "mußten" "mußtet" "mußte" "gemüßt" [] VHaben) ; + one_Quant = { + s = \\g,c => "ein" + pronEnding ! GSg g ! c ; + n = Sg ; + a = Strong + } ; only_Predet = {s = \\_,_,_ => "nur"} ; no_Phr = ss ["Nein ."] ; on_Prep = mkPrep "auf" Dat ; @@ -70,7 +75,11 @@ concrete StructuralGer of Structural = CatGer ** so_AdA = ss "so" ; somebody_NP = nameNounPhrase {s = caselist "jemand" "jemanden" "jemandem" "jemands"} ; somePl_Det = detLikeAdj Pl "einig" ; - -- someSg_Det = + someSg_Det = { + s = \\g,c => "ein" + pronEnding ! GSg g ! c ; + n = Sg ; + a = Strong + } ; something_NP = nameNounPhrase {s = \\_ => "etwas"} ; somewhere_Adv = ss "irgendwo" ; that_Quant = detLikeAdj Sg "jen" ; @@ -79,11 +88,13 @@ concrete StructuralGer of Structural = CatGer ** there7to_Adv = ss "dahin" ; there7from_Adv = ss ["daher"] ; therefore_PConj = ss "deshalb" ; + these_NP = {s = caselist "diese" "diese" "diesen" "dieser" ; a = agrP3 Pl} ; these_Quant = detLikeAdj Pl "dies" ; they_Pron = mkPronPers "sie" "sie" "ihnen" "ihrer" "ihr" Pl P3 ; this_Quant = detLikeAdj Sg "dies" ; this_NP = nameNounPhrase {s = caselist "dies" "dies" "diesem" "dieses"} ; ---- -- those_NP + those_NP = {s = caselist "jene" "jene" "jenen" "jener" ; a = agrP3 Pl} ; those_Quant = detLikeAdj Pl "jen" ; thou_Pron = mkPronPers "du" "dich" "dir" "deiner" "dein" Sg P2 ; through_Prep = mkPrep "durch" Acc ; diff --git a/lib/resource-1.0/german/log.txt b/lib/resource-1.0/german/log.txt index 207d43d4f..758bd1b1f 100644 --- a/lib/resource-1.0/german/log.txt +++ b/lib/resource-1.0/german/log.txt @@ -197,7 +197,7 @@ StructuralGer: almost complete with some determiner forms to revisit ParadigmsGer: almost complete with verb form variations to revisit MorphoGer: very few functions in this module -16/1 +16/1 (4h) ParamGer: removed Strong/Weak from AForm to save lexicon storage. Done in agrAdj instead. Only affects NounGer and QuestionGer. Notice that making case analysis on is @@ -208,5 +208,22 @@ ParadigmsGer: completed ParamGer: VType ResGer, ParadigmsGer: the consequences of this -BasicGer; started +BasicGer; started. Strategy: fill all you know without consulting dictionary; +mark ---- before what you dont know, and after what you are uncertain about. +Insight: to write a *resource* grammar you need not be a fluent speaker, but +just to understand what grammar books say. It is when writing application +grammars that you need to make stylistic judgements to do the right choices +from the resource. + +17/1 + +MorphoGer: for numerals +NumeralGer: all +> make stat + 66123 german/NumeralGer.gfc +added flags optimize=all_subs ; + 17046 german/NumeralGer.gfc + +BasicGer: completed. Idea: work in pairs, one consulting the dictionary (or +giving native speaker advice)