1
0
forked from GitHub/gf-rgl

Merge branch 'master' of github.com:GrammaticalFramework/gf-rgl

This commit is contained in:
Krasimir Angelov
2025-11-06 11:48:06 +01:00
14 changed files with 142 additions and 82 deletions

View File

@@ -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 ;

View File

@@ -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

View File

@@ -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 =>

View File

@@ -385,6 +385,4 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
-- this function is not entirely satisfactory as largely
-- though not entirely duplicating mkClause in ResGer
}

View File

@@ -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) ;

View File

@@ -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" ;

View File

@@ -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 ->

View File

@@ -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 <stem,stemI> 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} ;

View File

@@ -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

View File

@@ -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 ;

View File

@@ -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
}
} ;
}

View File

@@ -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

View File

@@ -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 ->

View File

@@ -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}) =