mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
German preposition contractions
This commit is contained in:
@@ -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
|
||||
} ;
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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} ;
|
||||
|
||||
|
||||
@@ -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
|
||||
} ;
|
||||
|
||||
|
||||
@@ -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} ;
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
@@ -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
|
||||
} ;
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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} ;
|
||||
|
||||
}
|
||||
|
||||
@@ -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 = {
|
||||
|
||||
@@ -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)
|
||||
} ;
|
||||
|
||||
|
||||
@@ -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.
|
||||
|
||||
|
||||
@@ -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} ;
|
||||
|
||||
|
||||
@@ -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 ;
|
||||
|
||||
@@ -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
|
||||
} ;
|
||||
|
||||
@@ -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) ;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user