German preposition contractions

This commit is contained in:
aarne
2010-05-26 09:37:17 +00:00
parent 4089242edb
commit c7ff8114b4
17 changed files with 166 additions and 104 deletions

View File

@@ -9,11 +9,11 @@ concrete AdjectiveGer of Adjective = CatGer ** open ResGer, Prelude in {
isPre = True
} ;
ComparA a np = {
s = \\af => a.s ! Compar ! af ++ conjThan ++ np.s ! Nom ;
s = \\af => a.s ! Compar ! af ++ conjThan ++ np.s ! NPC Nom ;
isPre = True
} ;
CAdvAP ad ap np = {
s = \\af => ad.s ++ ap.s ! af ++ ad.p ++ np.s ! Nom ;
s = \\af => ad.s ++ ap.s ! af ++ ad.p ++ np.s ! NPC Nom ;
isPre = False
} ;
UseComparA a = {
@@ -33,7 +33,8 @@ concrete AdjectiveGer of Adjective = CatGer ** open ResGer, Prelude in {
} ;
ReflA2 a = {
s = \\af => a.s ! Posit ! APred ++ appPrep a.c2 (reflPron ! agrP3 Sg) ; --- agr
s = \\af => a.s ! Posit ! APred ++
appPrep a.c2 (\\k => usePrepC k (\c -> reflPron ! agrP3 Sg ! c)) ; --- agr
isPre = True
} ;

View File

@@ -4,7 +4,7 @@ concrete AdverbGer of Adverb = CatGer ** open ResGer, Prelude in {
PositAdvAdj a = {s = a.s ! Posit ! APred} ;
ComparAdvAdj cadv a np = {
s = cadv.s ++ a.s ! Posit ! APred ++ cadv.p ++ np.s ! Nom
s = cadv.s ++ a.s ! Posit ! APred ++ cadv.p ++ np.s ! NPC Nom
} ;
ComparAdvAdjS cadv a s = {
s = cadv.s ++ a.s ! Posit ! APred ++ cadv.p ++ s.s ! Sub

View File

@@ -48,16 +48,16 @@ concrete CatGer of Cat =
-- Noun
CN = {s : Adjf => Number => Case => Str ; g : Gender} ;
NP = {s : Case => Str ; a : Agr} ;
NP = {s : PCase => Str ; a : Agr} ;
Pron = {s : NPForm => Str ; a : Agr} ;
Det = {s,sp : Gender => Case => Str ; n : Number ; a : Adjf} ;
Det = {s,sp : Gender => PCase => Str ; n : Number ; a : Adjf} ;
Quant = {
s : Bool => Number => Gender => Case => Str ;
sp : Number => Gender => Case => Str ;
s : Bool => Number => Gender => PCase => Str ;
sp : Number => Gender => PCase => Str ;
a : Adjf
} ;
Predet = {
s : Number => Gender => Case => Str ;
s : Number => Gender => PCase => Str ;
c : {p : Str ; k : PredetCase} ;
a : PredetAgr -- if an agr is forced, e.g. jeder von uns ist ...
} ;
@@ -74,7 +74,7 @@ concrete CatGer of Cat =
Conj = {s1,s2 : Str ; n : Number} ;
Subj = {s : Str} ;
Prep = {s : Str ; c : Case} ;
Prep = {s : Str ; c : PCase} ;
-- Open lexical classes, e.g. Lexicon

View File

@@ -9,7 +9,7 @@ concrete ConjunctionGer of Conjunction =
ConjAdv conj ss = conjunctDistrSS conj ss ;
ConjNP conj ss = conjunctDistrTable Case conj ss ** {
ConjNP conj ss = conjunctDistrTable PCase conj ss ** {
a = Ag Fem (conjNumber conj.n (numberAgr ss.a)) (personAgr ss.a)
} ;
@@ -28,8 +28,8 @@ concrete ConjunctionGer of Conjunction =
ConsS = consrTable Order comma ;
BaseAdv = twoSS ;
ConsAdv = consrSS comma ;
BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.a} ;
BaseNP x y = twoTable PCase x y ** {a = conjAgr x.a y.a} ;
ConsNP xs x = consrTable PCase comma xs x ** {a = conjAgr xs.a x.a} ;
BaseAP x y = twoTable AForm x y ** {isPre = andB x.isPre y.isPre} ;
ConsAP xs x = consrTable AForm comma xs x ** {isPre = andB xs.isPre x.isPre} ;
BaseRS x y = twoTable GenNum x y ** {c = y.c} ;
@@ -38,7 +38,7 @@ concrete ConjunctionGer of Conjunction =
lincat
[S] = {s1,s2 : Order => Str} ;
[Adv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : Case => Str ; a : Agr} ;
[NP] = {s1,s2 : PCase => Str ; a : Agr} ;
[AP] = {s1,s2 : AForm => Str ; isPre : Bool} ;
[RS] = {s1,s2 : GenNum => Str ; c : Case} ;

View File

@@ -9,7 +9,7 @@ concrete IdiomGer of Idiom = CatGer **
CleftNP np rs = mkClause "es" (agrP3 Sg)
(insertExtrapos (rs.s ! gennum (genderAgr np.a) (numberAgr np.a)) ----
(insertObj (\\_ => np.s ! rs.c) (predV MorphoGer.sein_V))) ;
(insertObj (\\_ => np.s ! NPC rs.c) (predV MorphoGer.sein_V))) ;
CleftAdv ad s = mkClause "es" (agrP3 Sg)
(insertExtrapos (conjThat ++ s.s ! Sub)
@@ -41,7 +41,7 @@ concrete IdiomGer of Idiom = CatGer **
} ;
ImpP3 np vp = {
s = (mkClause (np.s ! Nom) np.a vp).s !
s = (mkClause (np.s ! NPC Nom) np.a vp).s !
MConjunct ! Pres ! Simul ! Pos ! Inv
} ;

View File

@@ -17,7 +17,7 @@ oper
c = noCase ;
a = PAgNone
} ;
mkPredet : A -> Str -> Case -> Bool -> Number -> Predet = \a,p,c,b,n ->
mkPredet : A -> Str -> PCase -> Bool -> Number -> Predet = \a,p,c,b,n ->
lin Predet {
s = appAdj a ;
c = {p = p ; k = PredCase c} ;

View File

@@ -16,14 +16,16 @@ oper
-- For $StructuralGer$.
mkPrep : Str -> Case -> Preposition = \s,c ->
mkPrep : Str -> PCase -> Preposition = \s,c ->
{s = s ; c = c} ;
nameNounPhrase : {s : Case => Str} -> {s : Case => Str ; a : Agr} = \name ->
name ** {a = agrP3 Sg} ;
nameNounPhrase : {s : Case => Str} -> {s : PCase => Str ; a : Agr} = \name -> {
s = \\c => usePrepC c (\k -> name.s ! k) ;
a = agrP3 Sg
} ;
detLikeAdj : Number -> Str ->
{s,sp : Gender => Case => Str ; n : Number ; a : Adjf} = \n,dies ->
{s,sp : Gender => PCase => Str ; n : Number ; a : Adjf} = \n,dies ->
{s,sp = appAdj (regA dies) ! n ; n = n ; a = Weak} ;
mkOrd : {s : Degree => AForm => Str} -> {s : AForm => Str} = \a ->

View File

@@ -4,7 +4,8 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
lin
DetCN det cn = {
s = \\c => det.s ! cn.g ! c ++ cn.s ! adjfCase det.a c ! det.n ! c ;
s = \\c => det.s ! cn.g ! c ++
(let k = (prepC c).c in cn.s ! adjfCase det.a k ! det.n ! k) ;
a = agrgP3 cn.g det.n ;
isPron = False
} ;
@@ -15,10 +16,13 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
isPron = False
} ;
UsePN pn = pn ** {a = agrP3 Sg} ;
UsePN pn = {
s = \\c => usePrepC c (\k -> pn.s ! k) ;
a = agrP3 Sg
} ;
UsePron pron = {
s = \\c => pron.s ! NPCase c ;
s = \\c => usePrepC c (\k -> pron.s ! NPCase k) ;
a = pron.a
} ;
@@ -45,10 +49,10 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
n = num.n ;
a = quant.a
in {
s = \\g,c => quant.s ! num.isNum ! n ! g ! c ++
num.s!g!c ++ ord.s ! agrAdj g (adjfCase a c) n c ;
sp = \\g,c => quant.sp ! n ! g ! c ++
num.s!g!c ++ ord.s ! agrAdj g (adjfCase a c) n c ;
s = \\g,c => quant.s ! num.isNum ! n ! g ! c ++ (let k = (prepC c).c in
num.s!g!k ++ ord.s ! agrAdj g (adjfCase a k) n k) ;
sp = \\g,c => quant.sp ! n ! g ! c ++ (let k = (prepC c).c in
num.s!g!k ++ ord.s ! agrAdj g (adjfCase a k) n k) ;
n = n ;
a = a
} ;
@@ -58,16 +62,18 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
n = num.n ;
a = quant.a
in {
s = \\g,c => quant.s ! num.isNum ! n ! g ! c ++ num.s!g!c ;
sp = \\g,c => quant.sp ! n ! g ! c ++ num.s!g!c ;
s = \\g,c => quant.s ! num.isNum ! n ! g ! c ++ (let k = (prepC c).c in
num.s!g!k) ;
sp = \\g,c => quant.sp ! n ! g ! c ++ (let k = (prepC c).c in
num.s!g!k) ;
n = n ;
a = a
} ;
PossPron p = {
s = \\_,n,g,c => p.s ! NPPoss (gennum g n) c ;
sp = \\n,g,c => p.s ! NPPoss (gennum g n) c ;
s = \\_,n,g,c => usePrepC c (\k -> p.s ! NPPoss (gennum g n) k) ;
sp = \\n,g,c => usePrepC c (\k -> p.s ! NPPoss (gennum g n) k) ;
a = Strong --- need separately weak for Pl ?
} ;
@@ -87,28 +93,28 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
OrdSuperl a = {s = a.s ! Superl} ;
DefArt = {
s = \\_,n,g,c => artDef ! gennum g n ! c ;
sp = \\n,g,c => artDef ! gennum g n ! c ; ---- deren, denem...
s = \\_,n,g,c => artDefContr (gennum g n) c ;
sp = \\n,g,c => artDefContr (gennum g n) c ; ---- deren, denem...
a = Weak
} ;
IndefArt = {
s = table {
True => \\_,_,_ => [] ;
True => \\_,_,c => usePrepC c (\k -> []) ;
False => table {
Sg => \\g,c => "ein" + pronEnding ! GSg g ! c ;
Pl => \\_,_ => []
Sg => \\g,c => usePrepC c (\k -> "ein" + pronEnding ! GSg g ! k) ;
Pl => \\_,c => usePrepC c (\k -> [])
}
} ;
sp = table {
Sg => \\g,c => "ein" + pronEnding ! GSg g ! c ;
Pl => \\_ => caselist "einige" "einige" "einigen" "einiger"
Sg => \\g,c => usePrepC c (\k -> "ein" + pronEnding ! GSg g ! k) ;
Pl => \\_,c => usePrepC c (\k -> caselist "einige" "einige" "einigen" "einiger" ! k)
} ;
a = Strong
} ;
MassNP cn = {
s = \\c => cn.s ! adjfCase Strong c ! Sg ! c ;
s = \\c => usePrepC c (\k -> cn.s ! adjfCase Strong k ! Sg ! k) ;
a = agrP3 Sg ;
isPron = False
} ;
@@ -175,7 +181,7 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
} ;
ApposCN cn np = let g = cn.g in {
s = \\a,n,c => cn.s ! a ! n ! c ++ np.s ! c ;
s = \\a,n,c => cn.s ! a ! n ! c ++ np.s ! NPC c ;
g = g ;
isMod = cn.isMod
} ;

View File

@@ -47,6 +47,11 @@ oper
dative : Case ;
genitive : Case ;
anDat_Case : Case ;
inAcc_Case : Case ;
inDat_Case : Case ;
zuDat_Case : Case ;
-- To abstract over number names, we define the following.
Number : Type ;
@@ -156,7 +161,7 @@ mkN : overload {
-- A preposition is formed from a string and a case.
mkPrep : Str -> Case -> Prep ;
mkPrep : Str -> PCase -> Prep ;
-- Often just a case with the empty string is enough.
@@ -164,10 +169,13 @@ mkN : overload {
datPrep : Prep ;
genPrep : Prep ;
-- A couple of common prepositions (always with the dative).
-- A couple of common prepositions (the first two always with the dative).
von_Prep : Prep ;
zu_Prep : Prep ;
anDat_Prep : Prep ;
inDat_Prep : Prep ;
inAcc_Prep : Prep ;
--2 Verbs
@@ -287,15 +295,20 @@ mkV2 : overload {
Gender = MorphoGer.Gender ;
Case = MorphoGer.Case ;
Case = MorphoGer.PCase ;
Number = MorphoGer.Number ;
masculine = Masc ;
feminine = Fem ;
neuter = Neutr ;
nominative = Nom ;
accusative = Acc ;
dative = Dat ;
genitive = Gen ;
nominative = NPC Nom ;
accusative = NPC Acc ;
dative = NPC Dat ;
genitive = NPC Gen ;
anDat_Case = NPP CAnDat ;
inAcc_Case = NPP CInAcc ;
inDat_Case = NPP CInDat ;
zuDat_Case = NPP CZuDat ;
singular = Sg ;
plural = Pl ;
@@ -386,7 +399,11 @@ mkV2 : overload {
datPrep = mkPrep [] dative ;
genPrep = mkPrep [] genitive ;
von_Prep = mkPrep "von" dative ;
zu_Prep = mkPrep "zu" dative ;
zu_Prep = mkPrep [] zuDat_Case ;
anDat_Prep = mkPrep [] anDat_Case ;
inDat_Prep = mkPrep [] inDat_Case ;
inAcc_Prep = mkPrep [] inAcc_Case ;
mk6V geben gibt gib gab gaebe gegeben =
let
@@ -424,7 +441,7 @@ mkV2 : overload {
seinV v =
{s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VSein ; vtype = v.vtype} ;
reflV v c =
{s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VHaben ; vtype = VRefl c} ;
{s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VHaben ; vtype = VRefl (prepC c).c} ;
no_geV v = let vs = v.s in {
s = table {

View File

@@ -13,7 +13,7 @@ concrete PhraseGer of Phrase = CatGer ** open Prelude, ResGer in {
UttIP ip = {s = ip.s ! Nom} ; --- Acc also
UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! Nom} ;
UttNP np = {s = np.s ! NPC Nom} ;
UttVP vp = {s = useInfVP True vp} ; -- without zu
UttAdv adv = adv ;
UttCN n = {s = n.s ! Strong ! Sg ! Nom} ;
@@ -24,6 +24,6 @@ concrete PhraseGer of Phrase = CatGer ** open Prelude, ResGer in {
PConjConj conj = ss (conj.s2) ;
NoVoc = {s = []} ;
VocNP np = {s = "," ++ np.s ! Nom} ;
VocNP np = {s = "," ++ np.s ! NPC Nom} ;
}

View File

@@ -28,7 +28,7 @@ concrete QuestionGer of Question = CatGer ** open ResGer in {
s = \\m,t,a,p =>
let
cls = slash.s ! m ! t ! a ! p ;
who = appPrep slash.c2 ip.s
who = appPrep slash.c2 (\\k => usePrepC k (\c -> ip.s ! c)) ;
in table {
QDir => who ++ cls ! Inv ;
QIndir => who ++ cls ! Sub
@@ -50,7 +50,7 @@ concrete QuestionGer of Question = CatGer ** open ResGer in {
s = \\m,t,a,p =>
let
vp = predV sein_V ;
cls = (mkClause (np.s ! Nom) np.a vp).s ! m ! t ! a ! p ;
cls = (mkClause (np.s ! NPC Nom) np.a vp).s ! m ! t ! a ! p ;
why = icomp.s ! np.a
in table {
QDir => why ++ cls ! Inv ;
@@ -59,7 +59,7 @@ concrete QuestionGer of Question = CatGer ** open ResGer in {
} ;
PrepIP p ip = {
s = appPrep p ip.s
s = appPrep p (\\k => usePrepC k (\c -> ip.s ! c)) ;
} ;
AdvIP ip adv = {

View File

@@ -24,12 +24,13 @@ concrete RelativeGer of Relative = CatGer ** open ResGer in {
RelSlash rp slash = {
s = \\m,t,a,p,gn =>
appPrep slash.c2 (rp.s ! gn) ++ slash.s ! m ! t ! a ! p ! Sub ;
c = slash.c2.c
appPrep slash.c2 (\\k => usePrepC k (\c -> rp.s ! gn ! c)) ++
slash.s ! m ! t ! a ! p ! Sub ;
c = (prepC slash.c2.c).c
} ;
FunRP p np rp = {
s = \\gn,c => np.s ! c ++ appPrep p (rp.s ! gn) ;
s = \\gn,c => np.s ! NPC c ++ appPrep p (\\k => usePrepC k (\c -> rp.s ! gn ! c)) ;
a = RAg (numberAgr np.a) (personAgr np.a)
} ;

View File

@@ -33,6 +33,24 @@ resource ResGer = ParamX ** open Prelude in {
Agr = Ag Gender Number Person ;
-- Case of $NP$ extended to deal with contractions like "zur", "im".
PCase = NPC Case | NPP CPrep ;
CPrep = CAnDat | CInAcc | CInDat | CZuDat ;
oper
NPNom : PCase = NPC Nom ;
prepC : PCase -> {s : Str ; c : Case} = \cp -> case cp of {
NPC c => {s = [] ; c = c} ;
NPP CAnDat => {s = "an" ; c = Dat} ;
NPP CInAcc => {s = "an" ; c = Acc} ;
NPP CInDat => {s = "in" ; c = Dat} ;
NPP CZuDat => {s = "zu" ; c = Dat}
} ;
usePrepC : PCase -> (Case -> Str) -> Str = \c,fs ->
let sc = prepC c in sc.s ++ fs sc.c ;
oper
mkAgr : {g : Gender ; n : Number ; p : Person} -> Agr = \r ->
Ag r.g r.n r.p ;
@@ -50,7 +68,7 @@ resource ResGer = ParamX ** open Prelude in {
-- sometimes forced ("jeder von Mwnschen").
param
PredetCase = NoCase | PredCase Case ;
PredetCase = NoCase | PredCase PCase ;
PredetAgr = PAg Number | PAgNone ;
oper
noCase : {p : Str ; k : PredetCase} = {p = [] ; k = NoCase} ;
@@ -319,17 +337,17 @@ resource ResGer = ParamX ** open Prelude in {
-- Prepositions for complements indicate the complement case.
Preposition : Type = {s : Str ; c : Case} ;
Preposition : Type = {s : Str ; c : PCase} ;
-- To apply a preposition to a complement.
appPrep : Preposition -> (Case => Str) -> Str = \prep,arg ->
appPrep : Preposition -> (PCase => Str) -> Str = \prep,arg ->
prep.s ++ arg ! prep.c ;
-- To build a preposition from just a case.
noPreposition : Case -> Preposition = \c ->
{s = [] ; c = c} ;
{s = [] ; c = NPC c} ;
-- Pronouns and articles
-- Here we define personal and relative pronouns.
@@ -349,28 +367,42 @@ resource ResGer = ParamX ** open Prelude in {
pronEnding : GenNum => Case => Str = table {
GSg Masc => caselist "" "en" "em" "es" ;
GSg Fem => caselist "e" "e" "er" "er" ;
GSg Neut => caselist "" "" "em" "es" ;
GSg Neutr => caselist "" "" "em" "es" ;
GPl => caselist "e" "e" "en" "er"
} ;
artDef : GenNum => Case => Str = table {
GSg Masc => caselist "der" "den" "dem" "des" ;
GSg Fem => caselist "die" "die" "der" "der" ;
GSg Neut => caselist "das" "das" "dem" "des" ;
GSg Neutr => caselist "das" "das" "dem" "des" ;
GPl => caselist "die" "die" "den" "der"
} ;
artDefContr : GenNum -> PCase -> Str = \gn,np -> case np of {
NPC c => artDef ! gn ! c ;
NPP p => case <p,gn> of {
<CAnDat, GSg (Masc | Neutr)> => "am" ;
<CInAcc, GSg Neutr> => "ins" ;
<CInDat, GSg (Masc | Neutr)> => "im" ;
<CZuDat, GSg Masc> => "zum" ;
<CZuDat, GSg Neutr> => "zum" ;
<CZuDat, GSg Fem> => "zur" ;
_ => let sp = prepC np in sp.s ++ artDef ! gn ! sp.c
}
} ;
-- This is used when forming determiners that are like adjectives.
appAdj : Adjective -> Number => Gender => Case => Str = \adj ->
appAdj : Adjective -> Number => Gender => PCase => Str = \adj ->
let
ad : GenNum -> Case -> Str = \gn,c ->
adj.s ! Posit ! AMod gn c
in
\\n,g,c => case n of {
Sg => ad (GSg g) c ;
_ => ad GPl c
} ;
\\n,g,c => usePrepC c (\k -> case n of {
Sg => ad (GSg g) k ;
_ => ad GPl k
}) ;
-- This auxiliary gives the forms in each degree of adjectives.

View File

@@ -4,7 +4,7 @@ concrete SentenceGer of Sentence = CatGer ** open ResGer, Prelude in {
lin
PredVP np vp = mkClause (np.s ! Nom) np.a vp ;
PredVP np vp = mkClause (np.s ! NPC Nom) np.a vp ;
PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
@@ -25,7 +25,7 @@ concrete SentenceGer of Sentence = CatGer ** open ResGer, Prelude in {
SlashVP np vp =
mkClause
(np.s ! Nom) np.a
(np.s ! NPC Nom) np.a
vp **
{c2 = vp.c2} ;
@@ -37,7 +37,7 @@ concrete SentenceGer of Sentence = CatGer ** open ResGer, Prelude in {
SlashPrep cl prep = cl ** {c2 = prep} ;
SlashVS np vs slash =
mkClause (np.s ! Nom) np.a
mkClause (np.s ! NPC Nom) np.a
(insertExtrapos (conjThat ++ slash.s ! Sub) (predV vs)) **
{c2 = slash.c2} ;

View File

@@ -7,28 +7,28 @@ concrete StructuralGer of Structural = CatGer **
lin
above_Prep = mkPrep "über" Dat ;
after_Prep = mkPrep "nach" Dat ;
above_Prep = mkPrep "über" P.dative ;
after_Prep = mkPrep "nach" P.dative ;
all_Predet = {s = appAdj (regA "all") ; c = noCase ; a = PAgNone} ;
almost_AdA, almost_AdN = ss "fast" ;
although_Subj = ss "obwohl" ;
always_AdV = ss "immer" ;
and_Conj = {s1 = [] ; s2 = "und" ; n = Pl} ;
because_Subj = ss "weil" ;
before_Prep = mkPrep "vor" Dat ;
behind_Prep = mkPrep "hinter" Dat ;
between_Prep = mkPrep "zwischen" Dat ;
before_Prep = mkPrep "vor" P.dative ;
behind_Prep = mkPrep "hinter" P.dative ;
between_Prep = mkPrep "zwischen" P.dative ;
both7and_DConj = sd2 "sowohl" ["als auch"] ** {n = Pl} ;
but_PConj = ss "aber" ;
by8agent_Prep = mkPrep "durch" Acc ;
by8means_Prep = mkPrep "mit" Dat ;
by8agent_Prep = mkPrep "durch" P.accusative ;
by8means_Prep = mkPrep "mit" P.dative ;
can8know_VV, can_VV = auxVV
(mkV
"können" "kann" "kannst" "kann" "könnt" "könn"
"konnte" "konntest" "konnten" "konntet"
"könnte" "gekonnt" []
VHaben) ;
during_Prep = mkPrep "während" Gen ;
during_Prep = mkPrep "während" P.genitive ;
either7or_DConj = sd2 "entweder" "oder" ** {n = Sg} ;
everybody_NP = nameNounPhrase {s = caselist "jeder" "jeden" "jedem" "jedes"} ;
every_Det = detLikeAdj Sg "jed" ;
@@ -36,19 +36,19 @@ concrete StructuralGer of Structural = CatGer **
everywhere_Adv = ss "überall" ;
few_Det = detLikeAdj Pl "wenig" ;
---- first_Ord = {s = (regA "erst").s ! Posit} ;
for_Prep = mkPrep "für" Acc ;
from_Prep = mkPrep "aus" Dat ;
for_Prep = mkPrep "für" P.accusative ;
from_Prep = mkPrep "aus" P.dative ;
he_Pron = mkPronPers "er" "ihn" "ihm" "seiner" "sein" Masc Sg P3 ;
here7to_Adv = ss ["hierher"] ;
here7from_Adv = ss ["hieraus"] ;
here_Adv = ss "hier" ;
how_IAdv = ss "wie" ;
how8much_IAdv = ss "wieviel" ;
how8many_IDet = detLikeAdj Pl "wieviel" ;
how8many_IDet = {s = \\g,c => (detLikeAdj Pl "wieviel").s ! g ! NPC c ; n = Pl} ;
if_Subj = ss "wenn" ;
in8front_Prep = mkPrep "vor" Dat ;
in8front_Prep = mkPrep "vor" P.dative ;
i_Pron = mkPronPers "ich" "mich" "mir" "meiner" "mein" Masc Sg P1 ;
in_Prep = mkPrep "in" Dat ;
in_Prep = mkPrep [] (NPP CInDat) ;
it_Pron = mkPronPers "es" "es" "ihm" "seiner" "sein" Neutr Sg P3 ;
less_CAdv = X.mkCAdv "weniger" "als" ;
many_Det = detLikeAdj Pl "viel" ;
@@ -65,26 +65,27 @@ concrete StructuralGer of Structural = CatGer **
only_Predet = {s = \\_,_,_ => "nur" ; c = noCase ; a = PAgNone} ;
no_Utt = ss "nein" ;
---b no_Phr = ss "nein" ;
on_Prep = mkPrep "auf" Dat ;
on_Prep = mkPrep "auf" P.dative ;
or_Conj = {s1 = [] ; s2 = "oder" ; n = Sg} ;
otherwise_PConj = ss "sonst" ;
part_Prep = mkPrep "von" Dat ;
part_Prep = mkPrep "von" P.dative ;
please_Voc = ss "bitte" ;
possess_Prep = mkPrep "von" Dat ;
possess_Prep = mkPrep "von" P.dative ;
quite_Adv = ss "ziemlich" ;
she_Pron = mkPronPers "sie" "sie" "ihr" "ihrer" "ihr" Fem Sg P3 ;
so_AdA = ss "so" ;
somebody_NP = nameNounPhrase {s = caselist "jemand" "jemanden" "jemandem" "jemands"} ;
somePl_Det = detLikeAdj Pl "einig" ;
someSg_Det = {
s,sp = \\g,c => "ein" + pronEnding ! GSg g ! c ; ---- einer,eines
s,sp = \\g,c =>
usePrepC c (\k -> "ein" + pronEnding ! GSg g ! k) ; ---- einer,eines
n = Sg ;
a = Strong
} ;
something_NP = nameNounPhrase {s = \\_ => "etwas"} ;
somewhere_Adv = ss "irgendwo" ;
that_Quant = let
jener : Number => Gender => Case => Str = \\n => (detLikeAdj n "jen").s in
jener : Number => Gender => PCase => Str = \\n => (detLikeAdj n "jen").s in
{s = \\_ => jener ; sp = jener ; a = Weak} ;
---b that_NP = nameNounPhrase {s = caselist "das" "das" "denem" "dessen"} ; ----
there_Adv = ss "da" ;
@@ -94,14 +95,14 @@ concrete StructuralGer of Structural = CatGer **
---b these_NP = {s = caselist "diese" "diese" "diesen" "dieser" ; a = agrP3 Pl} ;
they_Pron = mkPronPers "sie" "sie" "ihnen" "ihrer" "ihr" Fem Pl P3 ;
this_Quant = let
dieser : Number => Gender => Case => Str = \\n => (detLikeAdj n "dies").s in
dieser : Number => Gender => PCase => Str = \\n => (detLikeAdj n "dies").s in
{s = \\_ => dieser ; sp = dieser ; a = Weak} ;
---b this_NP = nameNounPhrase {s = caselist "dies" "dies" "diesem" "dieses"} ; ----
---b those_NP = {s = caselist "jene" "jene" "jenen" "jener" ; a = agrP3 Pl} ;
through_Prep = mkPrep "durch" Acc ;
through_Prep = mkPrep "durch" P.accusative ;
too_AdA = ss "zu" ;
to_Prep = mkPrep "nach" Dat ;
under_Prep = mkPrep "unter" Dat ;
to_Prep = mkPrep "nach" P.dative ;
under_Prep = mkPrep "unter" P.dative ;
very_AdA = ss "sehr" ;
want_VV = auxVV
(mkV
@@ -117,13 +118,13 @@ concrete StructuralGer of Structural = CatGer **
when_IAdv = ss "wann" ;
when_Subj = ss "wenn" ;
where_IAdv = ss "wo" ;
which_IQuant = {s = \\n => (detLikeAdj n "welch").s} ;
which_IQuant = {s = \\n,g,c => (detLikeAdj n "welch").s ! g ! NPC c} ;
whoSg_IP = {s = caselist "wer" "wen" "wem" "wessen" ; n = Sg} ;
whoPl_IP = {s = caselist "wer" "wen" "wem" "wessen" ; n = Pl} ;
why_IAdv = ss "warum" ;
without_Prep = mkPrep "ohne" Acc ;
with_Prep = mkPrep "mit" Dat ;
without_Prep = mkPrep "ohne" P.accusative ;
with_Prep = mkPrep "mit" P.dative ;
youSg_Pron = mkPronPers "du" "dich" "dir" "deiner" "dein" Fem Sg P2 ;
youPl_Pron = mkPronPers "ihr" "euch" "euch" "eurer" "euer" Fem Pl P2 ; ---- poss
youPol_Pron = mkPronPers "Sie" "Sie" "Ihnen" "Ihrer" "Ihr" Fem Pl P3 ;
@@ -131,8 +132,8 @@ concrete StructuralGer of Structural = CatGer **
not_Predet = {s = \\_,_,_ => "nicht" ; c = noCase ; a = PAgNone} ;
no_Quant = let
keiner : Number => Gender => Case => Str = table {
Sg => \\g,c => "kein" + pronEnding ! GSg g ! c ;
keiner : Number => Gender => PCase => Str = table {
Sg => \\g,c => usePrepC c (\k -> "kein" + pronEnding ! GSg g ! k) ;
Pl => (detLikeAdj Pl "kein").s
}
in
@@ -144,7 +145,7 @@ concrete StructuralGer of Structural = CatGer **
nameNounPhrase {s = \\_ => "nichts"} ;
at_least_AdN = ss "wenigstens" ;
at_most_AdN = ss "höchstens" ;
except_Prep = mkPrep "außer" Dat ;
except_Prep = mkPrep "außer" P.dative ;
as_CAdv = X.mkCAdv "ebenso" "wie" ;
have_V2 = P.dirV2 IrregGer.haben_V ;

View File

@@ -14,12 +14,13 @@ lin
isPron = False
} ;
CNSymbNP det cn xs = let g = cn.g in {
s = \\c => det.s ! g ! c ++ cn.s ! adjfCase det.a c ! det.n ! c ++ xs.s ;
s = \\c => det.s ! g ! c ++
(let k = (prepC c).c in cn.s ! adjfCase det.a k ! det.n ! k) ++ xs.s ;
a = agrP3 det.n ;
isPron = False
} ;
CNNumNP cn i = {
s = \\c => artDef ! (GSg cn.g) ! c ++ cn.s ! Weak ! Sg ! Nom ++ i.s ! Neutr ! c ;
s = \\c => artDefContr (GSg cn.g) c ++ cn.s ! Weak ! Sg ! Nom ++ i.s ! Neutr ! (prepC c).c ;
a = agrP3 Sg ;
isPron = False
} ;

View File

@@ -67,13 +67,14 @@ concrete VerbGer of Verb = CatGer ** open Prelude, ResGer in {
-- we want to say "ich liebe sie nicht" but not "ich bin alt nicht"
CompAP ap = {s = \\_ => ap.s ! APred} ;
CompNP np = {s = \\_ => np.s ! Nom} ;
CompNP np = {s = \\_ => np.s ! NPC Nom} ;
CompAdv a = {s = \\_ => a.s} ;
AdvVP vp adv = insertAdv adv.s vp ;
AdVVP adv vp = insertAdV adv.s vp ;
ReflVP vp = insertObj (\\a => appPrep vp.c2 (reflPron ! a)) vp ;
ReflVP vp = insertObj (\\a => appPrep vp.c2
(\\k => usePrepC k (\c -> reflPron ! a ! c))) vp ;
PassV2 v = insertInf (v.s ! VPastPart APred) (predV werdenPass) ;