mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-09-14 22:36:03 -06:00
Reorganizing Ger by smaller prepositions and separating object cases from all (N, NP, etc.) cases (#474)
* (Ger) prepositions of contracting type, to base S,VV,QS-correlates and split adverbs on
* api/TryGer: omit mkAdv,mkIAdv,mkConj from ParadigmsGer, mkStructuralGer
* (Ger) sync with 'master' (undo changes unrelated to Preposition) up to few corrections
* (Ger) correct GPl to CPl in ExtraGer
* Returning to f4aae6a61a by ignoring prep-contraction
* (Ger) Prep contracting with DefArtSg, IP, RP
* (Ger) Corrected GPl to CPl in ExtraGer, ExtendGer
* (Ger) Simplified many lincats (Prep,V2,N2,A2,.. VPSlash,ClSlash) by reducing
Preposition from 4*3 = 12 parameters to 3*2 = 6 via
Prepositon : Type = {s : PrepForm => Str; s2:Str ; c : ObjCase ; t : PrepType} ;
param PrepType = isCase | isPrep ; -- isPrepDefArt
ObjCase = Acc | Dat | Gen ; Case = Nom | Obj ObjCase ;
This commit is contained in:
+13
-10
@@ -47,7 +47,7 @@ concrete CatGer of Cat =
|
|||||||
|
|
||||||
AP = {
|
AP = {
|
||||||
s : AForm => Str ; -- (strong) adjective paradigm
|
s : AForm => Str ; -- (strong) adjective paradigm
|
||||||
s2 : Case => Str ; -- comparison np, e.g. [s kleineres] (Tier) [s2 als den Hund] HL 1/34
|
s2 : Case => Str ; -- comparison np, e.g. [s kleineres] (Tier) [s2 als den Hund] HL 1/24
|
||||||
isPre : Bool ; -- pre-nominal as attribute, e.g. False with sentential complement
|
isPre : Bool ; -- pre-nominal as attribute, e.g. False with sentential complement
|
||||||
c: Str * Str ; -- np,pp-complement, e.g. (ich bin) [c1 ihm] treu ; stolz [c2 auf dich]
|
c: Str * Str ; -- np,pp-complement, e.g. (ich bin) [c1 ihm] treu ; stolz [c2 auf dich]
|
||||||
ext : Str -- s,inf-complement, (du bist) so klug (gewesen) [ext ihn zu lesen]
|
ext : Str -- s,inf-complement, (du bist) so klug (gewesen) [ext ihn zu lesen]
|
||||||
@@ -127,26 +127,29 @@ concrete CatGer of Cat =
|
|||||||
NP = \np -> np.s ! False ! Nom ++ np.ext ++ np.rc ; -- HL 7/2022 Bool added
|
NP = \np -> np.s ! False ! Nom ++ np.ext ++ np.rc ; -- HL 7/2022 Bool added
|
||||||
CN = \cn -> cn.s ! Strong ! Sg ! Nom ++ cn.adv ++ cn.ext ++ cn.rc ! Sg ;
|
CN = \cn -> cn.s ! Strong ! Sg ! Nom ++ cn.adv ++ cn.ext ++ cn.rc ! Sg ;
|
||||||
|
|
||||||
SSlash = \ss -> ss.s ! Main ++ ss.c2.s ! GPl ;
|
SSlash = \ss -> ss.s ! Main ++ ss.c2.s ! CPl ;
|
||||||
ClSlash = \cls -> cls.s ! MIndic ! Pres ! Simul ! Pos ! Main ++ cls.c2.s ! GPl ;
|
ClSlash = \cls -> cls.s ! MIndic ! Pres ! Simul ! Pos ! Main ++ cls.c2.s ! CPl ;
|
||||||
|
|
||||||
VP = \vp -> useInfVP False vp ;
|
VP = \vp -> useInfVP False vp ;
|
||||||
VPSlash = \vps -> useInfVP False vps ++ vps.c2.s ! GPl ++ vps.ext;
|
VPSlash = \vps -> useInfVP False vps ++ vps.c2.s ! CPl ++ vps.ext;
|
||||||
|
|
||||||
AP = \ap -> ap.c.p1 ++ ap.s ! APred ++ ap.c.p2 ++ ap.s2 ! Nom ++ ap.ext ;
|
AP = \ap -> ap.c.p1 ++ ap.s ! APred ++ ap.c.p2 ++ ap.s2 ! Nom ++ ap.ext ;
|
||||||
A2 = \a2 -> a2.s ! Posit ! APred ++ a2.c2.s ! GPl ;
|
A2 = \a2 -> a2.s ! Posit ! APred ++ a2.c2.s ! CPl ;
|
||||||
|
|
||||||
V, VS, VQ, VA = \v -> useInfVP False (predV v) ;
|
V, VS, VQ, VA = \v -> useInfVP False (predV v) ;
|
||||||
V2, V2A, V2Q, V2S = \v -> useInfVP False (predV v) ++ v.c2.s ! GPl ;
|
V2, V2A, V2Q, V2S = \v -> useInfVP False (predV v) ++ v.c2.s ! CPl ;
|
||||||
V3 = \v -> useInfVP False (predV v) ++ v.c2.s ! GPl ++ v.c3.s ! GPl;
|
V3 = \v -> useInfVP False (predV v) ++ v.c2.s ! CPl ++ v.c3.s ! CPl;
|
||||||
|
|
||||||
VV = \v -> useInfVP v.isAux (predVGen v.isAux v) ;
|
VV = \v -> useInfVP v.isAux (predVGen v.isAux v) ;
|
||||||
V2V = \v -> useInfVP v.isAux (predVGen v.isAux v) ++ v.c2.s ! GPl ;
|
V2V = \v -> useInfVP v.isAux (predVGen v.isAux v) ++ v.c2.s ! CPl ;
|
||||||
|
|
||||||
|
N2 = \n -> n.s ! Sg ! Nom ++ n.c2.s ! CPl ;
|
||||||
|
N3 = \n -> n.s ! Sg ! Nom ++ n.c2.s ! CPl ++ n.c3.s ! CPl ;
|
||||||
|
|
||||||
Conj = \c -> c.s1 ++ c.s2 ;
|
Conj = \c -> c.s1 ++ c.s2 ;
|
||||||
|
|
||||||
Det = \det -> det.s ! False ! Masc ! Nom ;
|
Det = \det -> det.s ! False ! Masc ! Nom ;
|
||||||
Prep = \prep -> case prep.t of {isPrepDefArt => prep.s ! GSg Masc ;
|
Prep = \prep -> case prep.t of {isContracting => prep.s ! CSg Masc ;
|
||||||
_ => prep.s ! GPl } ;
|
_ => prep.s ! CPl } ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ concrete ConstructionGer of Construction = CatGer **
|
|||||||
flags coding=utf8 ;
|
flags coding=utf8 ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
mkPrep : Str -> P.Case -> Prep = P.mkPrep ;
|
mkPrep : Str -> P.ObjCase -> Prep = \s,c -> P.mkPrep s c ;
|
||||||
mkV2 : V -> V2 = P.mkV2 ;
|
mkV2 : V -> V2 = P.mkV2 ;
|
||||||
accPrep = P.accPrep ;
|
accPrep = P.accPrep ;
|
||||||
datPrep = P.datPrep ;
|
datPrep = P.datPrep ;
|
||||||
@@ -178,9 +178,9 @@ lin
|
|||||||
|
|
||||||
monthAdv m = SyntaxGer.mkAdv inDat_Prep (mkNP the_Det m) ;
|
monthAdv m = SyntaxGer.mkAdv inDat_Prep (mkNP the_Det m) ;
|
||||||
yearAdv y = SyntaxGer.mkAdv (mkPrep "im Jahr" dative) y ; ----
|
yearAdv y = SyntaxGer.mkAdv (mkPrep "im Jahr" dative) y ; ----
|
||||||
dayMonthAdv d m = ParadigmsGer.mkAdv ("am" ++ d.s ! True ! dative ++ BIND ++ "." ++ m.s ! R.Sg ! R.Nom) ; -- am 17. Mai
|
dayMonthAdv d m = ParadigmsGer.mkAdv ("am" ++ d.s ! True ! (R.Obj R.Dat) ++ BIND ++ "." ++ m.s ! R.Sg ! R.Nom) ; -- am 17. Mai
|
||||||
monthYearAdv m y = SyntaxGer.mkAdv inDat_Prep (mkNP the_Det (mkCN m y)) ; -- im Mai 2012
|
monthYearAdv m y = SyntaxGer.mkAdv inDat_Prep (mkNP the_Det (mkCN m y)) ; -- im Mai 2012
|
||||||
dayMonthYearAdv d m y = ParadigmsGer.mkAdv ("am" ++ d.s ! True ! dative ++ BIND ++ "." ++ m.s ! R.Sg ! R.Nom ++ y.s ! True ! accusative) ; -- am 17. Mai 2013
|
dayMonthYearAdv d m y = ParadigmsGer.mkAdv ("am" ++ d.s ! True ! (R.Obj R.Dat) ++ BIND ++ "." ++ m.s ! R.Sg ! R.Nom ++ y.s ! True ! (R.Obj accusative)) ; -- am 17. Mai 2013
|
||||||
|
|
||||||
intYear = symb ;
|
intYear = symb ;
|
||||||
intMonthday = symb ;
|
intMonthday = symb ;
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ lin
|
|||||||
s2 = frameTable (
|
s2 = frameTable (
|
||||||
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter) ) ++
|
tr (th "" ++ th (heading singular_Parameter) ++ th (heading plural_Parameter) ) ++
|
||||||
tr (th (heading nominative_Parameter) ++ td (noun.s ! Sg ! Nom) ++ td (noun.s ! Pl ! Nom)) ++
|
tr (th (heading nominative_Parameter) ++ td (noun.s ! Sg ! Nom) ++ td (noun.s ! Pl ! Nom)) ++
|
||||||
tr (th (heading genitive_Parameter) ++ td (noun.s ! Sg ! Gen) ++ td (noun.s ! Pl ! Gen)) ++
|
tr (th (heading genitive_Parameter) ++ td (noun.s ! Sg ! (Obj Gen)) ++ td (noun.s ! Pl ! (Obj Gen))) ++
|
||||||
tr (th (heading dative_Parameter) ++ td (noun.s ! Sg ! Dat) ++ td (noun.s ! Pl ! Dat)) ++
|
tr (th (heading dative_Parameter) ++ td (noun.s ! Sg ! (Obj Dat)) ++ td (noun.s ! Pl ! (Obj Dat))) ++
|
||||||
tr (th (heading accusative_Parameter) ++ td (noun.s ! Sg ! Acc) ++ td (noun.s ! Pl ! Acc))
|
tr (th (heading accusative_Parameter) ++ td (noun.s ! Sg ! (Obj Acc)) ++ td (noun.s ! Pl ! (Obj Acc)))
|
||||||
)
|
)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -51,9 +51,9 @@ lin
|
|||||||
} ++")") ;
|
} ++")") ;
|
||||||
s2 = frameTable (
|
s2 = frameTable (
|
||||||
tr (th (heading nominative_Parameter) ++ td (pn.s ! Nom)) ++
|
tr (th (heading nominative_Parameter) ++ td (pn.s ! Nom)) ++
|
||||||
tr (th (heading genitive_Parameter) ++ td (pn.s ! Gen)) ++
|
tr (th (heading genitive_Parameter) ++ td (pn.s ! (Obj Gen))) ++
|
||||||
tr (th (heading dative_Parameter) ++ td (pn.s ! Dat)) ++
|
tr (th (heading dative_Parameter) ++ td (pn.s ! (Obj Dat))) ++
|
||||||
tr (th (heading accusative_Parameter) ++ td (pn.s ! Acc))
|
tr (th (heading accusative_Parameter) ++ td (pn.s ! (Obj Acc)))
|
||||||
)
|
)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -66,9 +66,9 @@ lin
|
|||||||
}) ;
|
}) ;
|
||||||
s2 = frameTable (
|
s2 = frameTable (
|
||||||
tr (th (heading nominative_Parameter) ++ td (gn.s ! Nom)) ++
|
tr (th (heading nominative_Parameter) ++ td (gn.s ! Nom)) ++
|
||||||
tr (th (heading genitive_Parameter) ++ td (gn.s ! Gen)) ++
|
tr (th (heading genitive_Parameter) ++ td (gn.s ! (Obj Gen))) ++
|
||||||
tr (th (heading dative_Parameter) ++ td (gn.s ! Dat)) ++
|
tr (th (heading dative_Parameter) ++ td (gn.s ! (Obj Dat))) ++
|
||||||
tr (th (heading accusative_Parameter) ++ td (gn.s ! Acc))
|
tr (th (heading accusative_Parameter) ++ td (gn.s ! (Obj Acc)))
|
||||||
) ;
|
) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -77,9 +77,9 @@ lin
|
|||||||
s1 = heading1 ("Familienname") ;
|
s1 = heading1 ("Familienname") ;
|
||||||
s2 = frameTable (
|
s2 = frameTable (
|
||||||
tr (th (heading nominative_Parameter) ++ td (sn.s ! Male ! Nom)) ++
|
tr (th (heading nominative_Parameter) ++ td (sn.s ! Male ! Nom)) ++
|
||||||
tr (th (heading genitive_Parameter) ++ td (sn.s ! Male ! Gen)) ++
|
tr (th (heading genitive_Parameter) ++ td (sn.s ! Male ! (Obj Gen))) ++
|
||||||
tr (th (heading dative_Parameter) ++ td (sn.s ! Male ! Dat)) ++
|
tr (th (heading dative_Parameter) ++ td (sn.s ! Male ! (Obj Dat))) ++
|
||||||
tr (th (heading accusative_Parameter) ++ td (sn.s ! Male ! Acc))
|
tr (th (heading accusative_Parameter) ++ td (sn.s ! Male ! (Obj Acc)))
|
||||||
) ;
|
) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -94,9 +94,9 @@ lin
|
|||||||
} ++")") ;
|
} ++")") ;
|
||||||
s2 = frameTable (
|
s2 = frameTable (
|
||||||
tr (th (heading nominative_Parameter) ++ td (ln.s ! Strong ! Nom)) ++
|
tr (th (heading nominative_Parameter) ++ td (ln.s ! Strong ! Nom)) ++
|
||||||
tr (th (heading genitive_Parameter) ++ td (ln.s ! Strong ! Gen)) ++
|
tr (th (heading genitive_Parameter) ++ td (ln.s ! Strong ! (Obj Gen))) ++
|
||||||
tr (th (heading dative_Parameter) ++ td (ln.s ! Strong ! Dat)) ++
|
tr (th (heading dative_Parameter) ++ td (ln.s ! Strong ! (Obj Dat))) ++
|
||||||
tr (th (heading accusative_Parameter) ++ td (ln.s ! Strong ! Acc))
|
tr (th (heading accusative_Parameter) ++ td (ln.s ! Strong ! (Obj Acc)))
|
||||||
)
|
)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -112,9 +112,9 @@ lin
|
|||||||
tr (th [] ++ th (heading masculine_Parameter) ++ th (heading feminine_Parameter) ++ th (heading neuter_Parameter) ++
|
tr (th [] ++ th (heading masculine_Parameter) ++ th (heading feminine_Parameter) ++ th (heading neuter_Parameter) ++
|
||||||
th (heading plural_Parameter)) ++
|
th (heading plural_Parameter)) ++
|
||||||
tr (th (heading nominative_Parameter) ++ gforms d Nom) ++
|
tr (th (heading nominative_Parameter) ++ gforms d Nom) ++
|
||||||
tr (th (heading genitive_Parameter) ++ gforms d Gen) ++
|
tr (th (heading genitive_Parameter) ++ gforms d (Obj Gen)) ++
|
||||||
tr (th (heading dative_Parameter) ++ gforms d Dat) ++
|
tr (th (heading dative_Parameter) ++ gforms d (Obj Dat)) ++
|
||||||
tr (th (heading accusative_Parameter) ++ gforms d Acc) ++
|
tr (th (heading accusative_Parameter) ++ gforms d (Obj Acc)) ++
|
||||||
tr (th (heading predicative_Parameter) ++ intagAttr "td" "colspan=4" (adj.s ! d ! APred))
|
tr (th (heading predicative_Parameter) ++ intagAttr "td" "colspan=4" (adj.s ! d ! APred))
|
||||||
))
|
))
|
||||||
in { t = "a" ;
|
in { t = "a" ;
|
||||||
|
|||||||
+16
-14
@@ -30,7 +30,7 @@ concrete ExtendGer of Extend =
|
|||||||
lin
|
lin
|
||||||
GenNP np =
|
GenNP np =
|
||||||
let tab : GenNum => Case => Str =
|
let tab : GenNum => Case => Str =
|
||||||
\\gn,c => np.s ! False ! Gen ++ np.ext ++ np.rc
|
\\gn,c => np.s ! False ! (Obj Gen) ++ np.ext ++ np.rc
|
||||||
in {s = \\_ => tab ;
|
in {s = \\_ => tab ;
|
||||||
sp = tab ;
|
sp = tab ;
|
||||||
a = Strong ;
|
a = Strong ;
|
||||||
@@ -39,17 +39,17 @@ concrete ExtendGer of Extend =
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
GenRP nu cn = {
|
GenRP nu cn = {
|
||||||
s = \\gn,c => relPron ! gn ! Gen ++ cn.s ! Strong ! nu.n ! c ;
|
s = \\gn,c => relPron ! gn ! (Obj Gen) ++ cn.s ! Strong ! nu.n ! c ;
|
||||||
a = RAg nu.n P3
|
a = RAg nu.n P3
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
GenIP ip = {s = \\gn,c => ip.s!Gen ; a = Strong} ;
|
GenIP ip = {s = \\gn,c => ip.s ! (Obj Gen) ; a = Strong} ;
|
||||||
GenModIP num ip cn = IdetCN (IdetQuant (GenIP ip) num) cn ;
|
GenModIP num ip cn = IdetCN (IdetQuant (GenIP ip) num) cn ;
|
||||||
|
|
||||||
EmptyRelSlash slash = {
|
EmptyRelSlash slash = {
|
||||||
s = \\m,t,a,p,gn =>
|
s = \\m,t,a,p,gn =>
|
||||||
appPrep slash.c2 (relPron ! gn) ++ slash.s ! m ! t ! a ! p ! Sub ;
|
appPrep (toSPrep slash.c2) (relPron ! gn) ++ slash.s ! m ! t ! a ! p ! Sub ;
|
||||||
c = slash.c2.c
|
c = Obj slash.c2.c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
@@ -227,7 +227,7 @@ concrete ExtendGer of Extend =
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
PrepCN prep cn = {
|
PrepCN prep cn = {
|
||||||
s = prep.s ! GPl ++ cn.s ! Strong ! Sg ! prep.c ++ cn.adv ++ cn.rc ! Sg ++ cn.ext} ;
|
s = prep.s ! CPl ++ cn.s ! Strong ! Sg ! (Obj prep.c) ++ cn.adv ++ cn.rc ! Sg ++ cn.ext} ;
|
||||||
|
|
||||||
-- fronted/focal constructions, only for main clauses
|
-- fronted/focal constructions, only for main clauses
|
||||||
|
|
||||||
@@ -259,7 +259,7 @@ concrete ExtendGer of Extend =
|
|||||||
in {
|
in {
|
||||||
s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3
|
s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3
|
||||||
++ vp.a2 ++ agent ++ vp.adj ++ vp.inf.inpl.p2
|
++ vp.a2 ++ agent ++ vp.adj ++ vp.inf.inpl.p2
|
||||||
++ vp.c2.s ! GPl -- junk if not TV
|
++ vp.c2.s ! CPl -- junk if not TV
|
||||||
++ vp.ext ++ (vp.inf.extr ! a) ++ vp.s.s ! VPastPart af ;
|
++ vp.ext ++ (vp.inf.extr ! a) ++ vp.s.s ! VPastPart af ;
|
||||||
s2 = \\_ => [] ;
|
s2 = \\_ => [] ;
|
||||||
isPre = True ;
|
isPre = True ;
|
||||||
@@ -329,14 +329,16 @@ concrete ExtendGer of Extend =
|
|||||||
RNPList = {s1,s2 : Agr => Case => Str} ;
|
RNPList = {s1,s2 : Agr => Case => Str} ;
|
||||||
|
|
||||||
linref
|
linref
|
||||||
RNP = \rnp -> rnp.s ! AgSgP3 Masc ! Acc ++ rnp.ext ++ rnp.rc ;
|
RNP = \rnp -> rnp.s ! AgSgP3 Masc ! (Obj Acc) ++ rnp.ext ++ rnp.rc ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
ReflRNP vps rnp =
|
ReflRNP vps rnp =
|
||||||
insertObjReflNP (lin RNP rnp) vps ;
|
insertObjReflNP (lin RNP rnp) vps ;
|
||||||
|
|
||||||
ReflPron = { -- with personal pronoun nominative
|
ReflPron = { -- with personal pronoun nominative
|
||||||
s = ResGer.reflPron ; rc,ext = [] ; isPron = True } ;
|
s = \\a,c => case c of {Nom => ResGer.persPronNom ! a ;
|
||||||
|
(Obj d) => ResGer.reflPron ! a ! d} ;
|
||||||
|
rc,ext = [] ; isPron = True } ;
|
||||||
|
|
||||||
-- To distinguish personal pronoun from reflexive pronoun:
|
-- To distinguish personal pronoun from reflexive pronoun:
|
||||||
-- du kennst mich vs. ich kenne mich selbst
|
-- du kennst mich vs. ich kenne mich selbst
|
||||||
@@ -371,19 +373,19 @@ concrete ExtendGer of Extend =
|
|||||||
g : Gender = genderAgr a ;
|
g : Gender = genderAgr a ;
|
||||||
d = case pred.c.k of {NoCase => c ; PredCase k => k} ;
|
d = case pred.c.k of {NoCase => c ; PredCase k => k} ;
|
||||||
in case rnp.isPron of {
|
in case rnp.isPron of {
|
||||||
True => pred.s ! Pl ! Masc ! c ++ "von" ++ rnp.s ! a ! Dat ;
|
True => pred.s ! Pl ! Masc ! c ++ "von" ++ rnp.s ! a ! (Obj Dat) ;
|
||||||
_ => pred.s ! n ! genderAgr a ! c ++ pred.c.p ++ rnp.s ! a ! d} ;
|
_ => pred.s ! n ! genderAgr a ! c ++ pred.c.p ++ rnp.s ! a ! d} ;
|
||||||
ext = rnp.ext ; rc = rnp.rc ;
|
ext = rnp.ext ; rc = rnp.rc ;
|
||||||
isPron = False} ;
|
isPron = False} ;
|
||||||
-- ok: alle von uns; die meisten von uns ; wrong: *nur von uns =/= nur wir
|
-- ok: alle von uns; die meisten von uns ; wrong: *nur von uns =/= nur wir
|
||||||
|
|
||||||
AdvRNP np prep rnp = {s = \\a,c => np.s ! False ! c
|
AdvRNP np prep rnp = {s = \\a,c => np.s ! False ! c
|
||||||
++ appPrep prep (rnp.s ! a) ++ rnp.ext ++ rnp.rc ;
|
++ appPrep (toSPrep prep) (rnp.s ! a) ++ rnp.ext ++ rnp.rc ;
|
||||||
ext = np.ext ; rc = np.rc ; isPron = False} ;
|
ext = np.ext ; rc = np.rc ; isPron = False} ;
|
||||||
|
|
||||||
AdvRAP ap prep rnp =
|
AdvRAP ap prep rnp =
|
||||||
let -- ? adv ++ ap.s ! af
|
let -- ? adv ++ ap.s ! af
|
||||||
adv = appPrep prep (rnp.s ! agrP3 Sg) ; -- bug: fixed agreement
|
adv = appPrep (toSPrep prep) (rnp.s ! agrP3 Sg) ; -- bug: fixed agreement
|
||||||
in ap ** { s = \\af => ap.s ! af ++ adv } ; -- e.g. unknown in one's youth
|
in ap ** { s = \\af => ap.s ! af ++ adv } ; -- e.g. unknown in one's youth
|
||||||
|
|
||||||
AdvRVP vp prep rnp =
|
AdvRVP vp prep rnp =
|
||||||
@@ -391,7 +393,7 @@ concrete ExtendGer of Extend =
|
|||||||
|
|
||||||
ReflA2RNP adj rnp = -- would need AP.c : Agr => Str*Str, not AP.c : Str*Str
|
ReflA2RNP adj rnp = -- would need AP.c : Agr => Str*Str, not AP.c : Str*Str
|
||||||
let -- as we have no reflexive AP,
|
let -- as we have no reflexive AP,
|
||||||
compl = appPrep adj.c2 (rnp.s ! agrP3 Sg) ; -- we use a fixed agreement
|
compl = appPrep (toSPrep adj.c2) (rnp.s ! agrP3 Sg) ; -- we use a fixed agreement
|
||||||
in {
|
in {
|
||||||
s = adj.s ! Posit ;
|
s = adj.s ! Posit ;
|
||||||
s2 = \\_ => [] ;
|
s2 = \\_ => [] ;
|
||||||
@@ -511,7 +513,7 @@ concrete ExtendGer of Extend =
|
|||||||
insertObjRNP : RNP -> Preposition -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022
|
insertObjRNP : RNP -> Preposition -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022
|
||||||
\rnp,prep,vp -> -- generalize ResGer.insertObjRefl
|
\rnp,prep,vp -> -- generalize ResGer.insertObjRefl
|
||||||
let
|
let
|
||||||
obj : Agr => Str = \\a => prep.s ! GPl ++ rnp.s ! a ! prep.c ++ rnp.ext ++ rnp.rc
|
obj : Agr => Str = \\a => prep.s ! CPl ++ rnp.s ! a ! (Obj prep.c) ++ rnp.ext ++ rnp.rc
|
||||||
in vp ** {
|
in vp ** {
|
||||||
nn = \\a =>
|
nn = \\a =>
|
||||||
let vpnn = vp.nn ! a in
|
let vpnn = vp.nn ! a in
|
||||||
|
|||||||
+14
-12
@@ -19,7 +19,7 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
|
|||||||
PPzuAdv cn = {s = case cn.g of {
|
PPzuAdv cn = {s = case cn.g of {
|
||||||
Masc | Neutr => "zum" ;
|
Masc | Neutr => "zum" ;
|
||||||
Fem => "zur"
|
Fem => "zur"
|
||||||
} ++ cn.s ! adjfCase Weak Dat ! Sg ! Dat
|
} ++ cn.s ! adjfCase Weak (Obj Dat) ! Sg ! (Obj Dat)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
TImpfSubj = {s = [] ; t = Past ; m = MConjunct} ; --# notpresent
|
TImpfSubj = {s = [] ; t = Past ; m = MConjunct} ; --# notpresent
|
||||||
@@ -49,8 +49,8 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
|
|||||||
|
|
||||||
EmptyRelSlash slash = {
|
EmptyRelSlash slash = {
|
||||||
s = \\m,t,a,p,gn =>
|
s = \\m,t,a,p,gn =>
|
||||||
appPrep slash.c2 (relPron ! gn) ++ slash.s ! m ! t ! a ! p ! Sub ;
|
appPrep (toSPrep slash.c2) (relPron ! gn) ++ slash.s ! m ! t ! a ! p ! Sub ;
|
||||||
c = slash.c2.c
|
c = Obj slash.c2.c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PassVPSlash vp =
|
PassVPSlash vp =
|
||||||
@@ -83,7 +83,7 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
|
|||||||
in {
|
in {
|
||||||
s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3
|
s = \\af => (vp.nn ! a).p1 ++ (vp.nn ! a).p2 ++ (vp.nn ! a).p3
|
||||||
++ vp.a2 ++ agent ++ vp.adj ++ vp.inf.inpl.p2
|
++ vp.a2 ++ agent ++ vp.adj ++ vp.inf.inpl.p2
|
||||||
++ vp.c2.s ! GPl -- junk if not TV
|
++ vp.c2.s ! CPl -- junk if not TV
|
||||||
++ vp.ext ++ (vp.inf.extr ! a) ++ vp.s.s ! VPastPart af ;
|
++ vp.ext ++ (vp.inf.extr ! a) ++ vp.s.s ! VPastPart af ;
|
||||||
s2 = \\_ => [] ;
|
s2 = \\_ => [] ;
|
||||||
isPre = True ;
|
isPre = True ;
|
||||||
@@ -179,14 +179,16 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
|
|||||||
RNPList = {s1,s2 : Agr => Case => Str} ;
|
RNPList = {s1,s2 : Agr => Case => Str} ;
|
||||||
|
|
||||||
linref
|
linref
|
||||||
RNP = \rnp -> rnp.s ! AgSgP3 Masc ! Acc ++ rnp.ext ++ rnp.rc ;
|
RNP = \rnp -> rnp.s ! AgSgP3 Masc ! (Obj Acc) ++ rnp.ext ++ rnp.rc ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
ReflRNP vps rnp =
|
ReflRNP vps rnp =
|
||||||
insertObjReflNP rnp vps ;
|
insertObjReflNP rnp vps ;
|
||||||
|
|
||||||
ReflPron = { -- with personal pronoun nominative
|
ReflPron = { -- with personal pronoun nominative
|
||||||
s = ResGer.reflPron ; rc,ext = [] ; isPron = True } ;
|
s = \\a,c => case c of {Nom => ResGer.persPronNom ! a ;
|
||||||
|
(Obj d) => ResGer.reflPron ! a ! d} ;
|
||||||
|
rc,ext = [] ; isPron = True } ;
|
||||||
|
|
||||||
-- We might define ReflPron by the stronger reflPronSelf below, using "selbst"
|
-- We might define ReflPron by the stronger reflPronSelf below, using "selbst"
|
||||||
-- to distinguish personal pronoun from reflexive pronoun:
|
-- to distinguish personal pronoun from reflexive pronoun:
|
||||||
@@ -212,24 +214,24 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
|
|||||||
g = genderAgr a ;
|
g = genderAgr a ;
|
||||||
d = case pred.c.k of {NoCase => c ; PredCase k => k} ;
|
d = case pred.c.k of {NoCase => c ; PredCase k => k} ;
|
||||||
in case rnp.isPron of {
|
in case rnp.isPron of {
|
||||||
True => pred.s ! Pl ! Masc ! c ++ "von" ++ rnp.s ! a ! Dat ;
|
True => pred.s ! Pl ! Masc ! c ++ "von" ++ rnp.s ! a ! (Obj Dat) ;
|
||||||
_ => pred.s ! n ! genderAgr a ! c ++ pred.c.p ++ rnp.s ! a ! d} ;
|
_ => pred.s ! n ! genderAgr a ! c ++ pred.c.p ++ rnp.s ! a ! d} ;
|
||||||
ext = rnp.ext ; rc = rnp.rc ;
|
ext = rnp.ext ; rc = rnp.rc ;
|
||||||
isPron = False} ;
|
isPron = False} ;
|
||||||
-- ok: alle von uns; die meisten von uns ; wrong: *nur von uns =/= nur wir
|
-- ok: alle von uns; die meisten von uns ; wrong: *nur von uns =/= nur wir
|
||||||
|
|
||||||
AdvRNP np prep rnp = {s = \\a,c => np.s ! False ! c
|
AdvRNP np prep rnp = {s = \\a,c => np.s ! False ! c
|
||||||
++ appPrep prep (rnp.s ! a) ++ rnp.ext ++ rnp.rc ;
|
++ appPrep (toSPrep prep) (rnp.s ! a) ++ rnp.ext ++ rnp.rc ;
|
||||||
ext = np.ext ; rc = np.rc ; isPron = False} ;
|
ext = np.ext ; rc = np.rc ; isPron = False} ;
|
||||||
|
|
||||||
AdvRAP ap prep rnp =
|
AdvRAP ap prep rnp =
|
||||||
let -- ? adv ++ ap.s ! af
|
let -- ? adv ++ ap.s ! af
|
||||||
adv = appPrep prep (rnp.s ! agrP3 Sg) ; -- bug: fixed agreement
|
adv = appPrep (toSPrep prep) (rnp.s ! agrP3 Sg) ; -- bug: fixed agreement
|
||||||
in ap ** { s = \\af => ap.s ! af ++ adv } ; -- e.g. unknown in one's youth
|
in ap ** { s = \\af => ap.s ! af ++ adv } ; -- e.g. unknown in one's youth
|
||||||
|
|
||||||
ReflA2RNP adj rnp = -- would need AP.c : Agr => Str*Str, not AP.c : Str*Str
|
ReflA2RNP adj rnp = -- would need AP.c : Agr => Str*Str, not AP.c : Str*Str
|
||||||
let -- as we have no reflexive AP,
|
let -- as we have no reflexive AP,
|
||||||
compl = appPrep adj.c2 (rnp.s ! agrP3 Sg) ; -- we use a fixed agreement
|
compl = appPrep (toSPrep adj.c2) (rnp.s ! agrP3 Sg) ; -- we use a fixed agreement
|
||||||
in {
|
in {
|
||||||
s = adj.s ! Posit ;
|
s = adj.s ! Posit ;
|
||||||
s2 = \\_ => [] ;
|
s2 = \\_ => [] ;
|
||||||
@@ -261,7 +263,7 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
|
|||||||
Cons_nr_RNP x xs = consrTable2 Agr Case comma {s = \\_,c => x.s ! False ! c ++ x.ext ++ x.rc} xs ;
|
Cons_nr_RNP x xs = consrTable2 Agr Case comma {s = \\_,c => x.s ! False ! c ++ x.ext ++ x.rc} xs ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
reflPronSelf : Agr => Case => Str = \\a => \\c => reflPron ! a ! c ++ "selbst" ;
|
reflPronSelf : Agr => ObjCase => Str = \\a => \\c => reflPron ! a ! c ++ "selbst" ;
|
||||||
|
|
||||||
reflPossPron : Agr -> Number -> Gender -> Case -> Str =
|
reflPossPron : Agr -> Number -> Gender -> Case -> Str =
|
||||||
let eigen = adjForms "eigen" "eigen" in
|
let eigen = adjForms "eigen" "eigen" in
|
||||||
@@ -273,7 +275,7 @@ concrete ExtraGer of ExtraGerAbs = CatGer **
|
|||||||
insertObjRNP : RNP -> Preposition -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022
|
insertObjRNP : RNP -> Preposition -> ResGer.VPSlash -> ResGer.VP = -- HL 5/2022
|
||||||
\rnp,prep,vp -> -- generalize ResGer.insertObjRefl
|
\rnp,prep,vp -> -- generalize ResGer.insertObjRefl
|
||||||
let
|
let
|
||||||
obj : Agr => Str = \\a => prep.s ! GPl ++ rnp.s ! a ! prep.c ++ rnp.ext ++ rnp.rc
|
obj : Agr => Str = \\a => prep.s ! CPl ++ rnp.s ! a ! (Obj prep.c) ++ rnp.ext ++ rnp.rc
|
||||||
in vp ** {
|
in vp ** {
|
||||||
nn = \\a =>
|
nn = \\a =>
|
||||||
let vpnn = vp.nn ! a in
|
let vpnn = vp.nn ! a in
|
||||||
|
|||||||
@@ -19,14 +19,14 @@ concrete IdiomGer of Idiom = CatGer **
|
|||||||
|
|
||||||
ExistNP np =
|
ExistNP np =
|
||||||
mkClause "es" (agrP3 Sg)
|
mkClause "es" (agrP3 Sg)
|
||||||
(insertObj (\\_ => appPrep geben.c2 (np.s ! False) ++ bigNP np)
|
(insertObj (\\_ => appPrep (toSPrep geben.c2) (np.s ! False) ++ bigNP np)
|
||||||
(predV geben)) ;
|
(predV geben)) ;
|
||||||
|
|
||||||
ExistIP ip = {
|
ExistIP ip = {
|
||||||
s = \\m,t,a,p =>
|
s = \\m,t,a,p =>
|
||||||
let
|
let
|
||||||
cls = (mkClause "es" (agrP3 Sg) (predV geben)).s ! m ! t ! a ! p ;
|
cls = (mkClause "es" (agrP3 Sg) (predV geben)).s ! m ! t ! a ! p ;
|
||||||
who = ip.s ! Acc
|
who = ip.s ! Obj Acc
|
||||||
in table {
|
in table {
|
||||||
QDir => who ++ cls ! Inv ;
|
QDir => who ++ cls ! Inv ;
|
||||||
QIndir => who ++ cls ! Sub
|
QIndir => who ++ cls ! Sub
|
||||||
@@ -35,7 +35,7 @@ concrete IdiomGer of Idiom = CatGer **
|
|||||||
|
|
||||||
ExistNPAdv np adv=
|
ExistNPAdv np adv=
|
||||||
mkClause "es" (agrP3 Sg)
|
mkClause "es" (agrP3 Sg)
|
||||||
(insertAdv adv.s (insertObj (\\_ => appPrep geben.c2 (np.s ! False) ++ bigNP np)
|
(insertAdv adv.s (insertObj (\\_ => appPrep (toSPrep geben.c2) (np.s ! False) ++ bigNP np)
|
||||||
(predV geben))) ;
|
(predV geben))) ;
|
||||||
|
|
||||||
ExistIPAdv ip adv = {
|
ExistIPAdv ip adv = {
|
||||||
@@ -43,7 +43,7 @@ concrete IdiomGer of Idiom = CatGer **
|
|||||||
let
|
let
|
||||||
cls =
|
cls =
|
||||||
(mkClause "es" (agrP3 Sg) (insertAdv adv.s (predV geben))).s ! m ! t ! a ! p ;
|
(mkClause "es" (agrP3 Sg) (insertAdv adv.s (predV geben))).s ! m ! t ! a ! p ;
|
||||||
who = ip.s ! Acc
|
who = ip.s ! Obj Acc
|
||||||
in table {
|
in table {
|
||||||
QDir => who ++ cls ! Inv ;
|
QDir => who ++ cls ! Inv ;
|
||||||
QIndir => who ++ cls ! Sub
|
QIndir => who ++ cls ! Sub
|
||||||
|
|||||||
@@ -17,8 +17,8 @@ oper
|
|||||||
|
|
||||||
-- For $StructuralGer$.
|
-- For $StructuralGer$.
|
||||||
|
|
||||||
mkPrep : Str -> Case -> Preposition = \s,c ->
|
-- mkPrep : Str -> Case -> Preposition = \s,c ->
|
||||||
{s = \\_ => s ; s2 = [] ; c = c ; t = isPrep} ;
|
-- {s = \\_ => s ; s2 = [] ; c = c ; t = isPrep} ;
|
||||||
|
|
||||||
nameNounPhrase : Gender -> {s : Case => Str} -> {s : Bool => Case => Str ;
|
nameNounPhrase : Gender -> {s : Case => Str} -> {s : Bool => Case => Str ;
|
||||||
a : Agr ;
|
a : Agr ;
|
||||||
|
|||||||
+10
-8
@@ -161,11 +161,11 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in {
|
|||||||
DefArt = {
|
DefArt = {
|
||||||
s = \\b,gn,c => case <b,gn> of {<True,GSg _> => [] ; _ => artDef ! gn ! c} ;
|
s = \\b,gn,c => case <b,gn> of {<True,GSg _> => [] ; _ => artDef ! gn ! c} ;
|
||||||
sp = \\gn,c => case <gn,c> of {
|
sp = \\gn,c => case <gn,c> of {
|
||||||
<GSg Masc,Gen> => "dessen" ;
|
<GSg Masc,Obj Gen> => "dessen" ;
|
||||||
<GSg Fem, Gen> => "derer" ;
|
<GSg Fem, Obj Gen> => "derer" ;
|
||||||
<GSg Neutr,Gen> => "dessen" ;
|
<GSg Neutr,Obj Gen> => "dessen" ;
|
||||||
<GPl,Dat> => "denen" ; -- HL 6/2019
|
<GPl,Obj Dat> => "denen" ; -- HL 6/2019
|
||||||
<GPl,Gen> => "derer" ; -- HL 6/2019
|
<GPl,Obj Gen> => "derer" ; -- HL 6/2019
|
||||||
_ => artDef ! gn ! c } ;
|
_ => artDef ! gn ! c } ;
|
||||||
a = Weak ;
|
a = Weak ;
|
||||||
isDefArt = True ;
|
isDefArt = True ;
|
||||||
@@ -252,11 +252,11 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in {
|
|||||||
s = \\a,n,c => cn.s ! a ! n ! c ++ np.s ! False ! c ++ bigNP np } ;
|
s = \\a,n,c => cn.s ! a ! n ! c ++ np.s ! False ! c ++ bigNP np } ;
|
||||||
|
|
||||||
PossNP cn np = cn ** {
|
PossNP cn np = cn ** {
|
||||||
s = \\a,n,c => cn.s ! a ! n ! c ++ appPrep vonDat (np.s ! False) ++ bigNP np } ;
|
s = \\a,n,c => cn.s ! a ! n ! c ++ appPrep (toSPrep vonDat) (np.s ! False) ++ bigNP np } ;
|
||||||
|
|
||||||
PartNP cn np = case np.w of {
|
PartNP cn np = case np.w of {
|
||||||
WPron => cn ** {s = \\a,n,c => cn.s ! a ! n ! c ++ appPrep vonDat (np.s ! False) ++ np.rc} ;
|
WPron => cn ** {s = \\a,n,c => cn.s ! a ! n ! c ++ appPrep (toSPrep vonDat) (np.s ! False) ++ np.rc} ;
|
||||||
_ => cn ** {s = \\a,n,c => cn.s ! a ! n ! c ++ np.s ! False ! Gen ++ np.ext ++ np.rc}
|
_ => cn ** {s = \\a,n,c => cn.s ! a ! n ! c ++ appPrep (toSPrep genPrep) (np.s ! False) ++ np.ext ++ np.rc}
|
||||||
}; -- glass of wine
|
}; -- glass of wine
|
||||||
|
|
||||||
CountNP det np = -- drei der Kinder | drei von den Kindern -- HL 7/22, ad-hoc TODO
|
CountNP det np = -- drei der Kinder | drei von den Kindern -- HL 7/22, ad-hoc TODO
|
||||||
@@ -296,4 +296,6 @@ concrete NounGer of Noun = CatGer ** open ResGer, MorphoGer, Prelude in {
|
|||||||
ext = "" ;
|
ext = "" ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
genPrep : Prep = {s = \\_ => [] ; s2 = [] ; c = Gen ; t = isCase ; lock_Prep = <>} ;
|
||||||
}
|
}
|
||||||
|
|||||||
+110
-42
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
--1 German Lexical Paradigms
|
--1 German Lexical Paradigms
|
||||||
--
|
--
|
||||||
-- Aarne Ranta, Harald Hammarström and Björn Bringert2003--2007
|
-- Aarne Ranta, Harald Hammarström and Björn Bringert 2003--2007
|
||||||
--
|
--
|
||||||
-- This is an API for the user of the resource grammar
|
-- This is an API for the user of the resource grammar
|
||||||
-- for adding lexical items. It gives functions for forming
|
-- for adding lexical items. It gives functions for forming
|
||||||
@@ -45,11 +45,12 @@ oper
|
|||||||
-- To abstract over case names, we define the following.
|
-- To abstract over case names, we define the following.
|
||||||
|
|
||||||
Case : Type ;
|
Case : Type ;
|
||||||
|
ObjCase : Type ;
|
||||||
|
|
||||||
nominative : Case ;
|
nominative : Case ;
|
||||||
accusative : Case ;
|
accusative : ObjCase ;
|
||||||
dative : Case ;
|
dative : ObjCase ;
|
||||||
genitive : Case ;
|
genitive : ObjCase ;
|
||||||
|
|
||||||
-- To abstract over number names, we define the following.
|
-- To abstract over number names, we define the following.
|
||||||
|
|
||||||
@@ -172,7 +173,7 @@ mkN : overload {
|
|||||||
-- In the worst case, all four forms are needed.
|
-- In the worst case, all four forms are needed.
|
||||||
|
|
||||||
mkLN : (nom,acc,dat,gen : Str) -> Gender -> LN = \nom,acc,dat,gen,g ->
|
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} ;
|
lin LN {s = \\a => table {Nom => nom ; Obj Acc => acc ; Obj Dat => dat ; Obj Gen => gen} ;
|
||||||
g = g ; n = Sg ;
|
g = g ; n = Sg ;
|
||||||
hasDefArt = False}
|
hasDefArt = False}
|
||||||
|
|
||||||
@@ -181,7 +182,7 @@ mkN : overload {
|
|||||||
defLN : LN -> LN = \n -> n ** {hasDefArt = True} ;
|
defLN : LN -> LN = \n -> n ** {hasDefArt = True} ;
|
||||||
|
|
||||||
mk2LN : (karolus, karoli : Str) -> Gender -> LN = \karolus, karoli, g ->
|
mk2LN : (karolus, karoli : Str) -> Gender -> LN = \karolus, karoli, g ->
|
||||||
lin LN {s = \\a => table {Gen => karoli ; _ => karolus} ; g = g ; n = Sg ;
|
lin LN {s = \\a => table {Obj Gen => karoli ; _ => karolus} ; g = g ; n = Sg ;
|
||||||
hasDefArt = False} ;
|
hasDefArt = False} ;
|
||||||
regLN : (horst : Str) -> Gender -> LN = \horst, g ->
|
regLN : (horst : Str) -> Gender -> LN = \horst, g ->
|
||||||
mk2LN horst (ifTok Tok (Predef.dp 1 horst) "s" horst (horst + "s")) g ;
|
mk2LN horst (ifTok Tok (Predef.dp 1 horst) "s" horst (horst + "s")) g ;
|
||||||
@@ -231,13 +232,18 @@ mkN : overload {
|
|||||||
-- A preposition is formed from a string and a case.
|
-- A preposition is formed from a string and a case.
|
||||||
|
|
||||||
mkPrep : overload {
|
mkPrep : overload {
|
||||||
mkPrep : Str -> Case -> Prep ; -- e.g. "durch" + accusative
|
mkPrep : Case -> Prep ; -- convert case to preposition (including Nom)
|
||||||
mkPrep : Case -> Str -> Prep ; -- postposition
|
mkPrep : ObjCase -> Prep ; -- convert case to preposition
|
||||||
mkPrep : Str -> Case -> Str -> Prep ; -- both sides
|
mkPrep : Str -> ObjCase -> Prep ; -- preposition, e.g. "durch" + accusative
|
||||||
-- for prepositions glued with DefArt in singular
|
mkPrep : ObjCase -> Str -> Prep ; -- postposition, e.g. genitive + "wegen"
|
||||||
|
mkPrep : Str -> ObjCase -> Str -> Prep ; -- circumposition, e.g. "um" + accusative + "herum"
|
||||||
|
mkPrep : Str -> Str -> Str -> Str -> ObjCase -> Prep ; -- prep contracted with defArtSg
|
||||||
-- e.g. "auf" "auf den" "auf die" "aufs" + accusative
|
-- e.g. "auf" "auf den" "auf die" "aufs" + accusative
|
||||||
mkPrep : Str -> Str -> Str -> Str -> Case -> Prep ;
|
} ;
|
||||||
mkPrep : Case -> Prep ; -- convert case to preposition
|
|
||||||
|
mkCPrep : overload { -- preposition contracting with relative pronoun ! RSentence
|
||||||
|
mkCPrep : Str -> ObjCase -> Prep ; -- preposition contracting with IP/RP, e.g. wo-mit, wo-r-an
|
||||||
|
mkCPrep : Str -> ObjCase -> Str -> Prep ; -- circumposition contracting with IP, e.g. von wo-her
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Often just a case with the empty string is enough.
|
-- Often just a case with the empty string is enough.
|
||||||
@@ -304,7 +310,7 @@ mkV : overload {
|
|||||||
|
|
||||||
-- Reflexive verbs can take reflexive pronouns of different cases.
|
-- Reflexive verbs can take reflexive pronouns of different cases.
|
||||||
|
|
||||||
reflV : V -> Case -> V ; -- reflexive, with case
|
reflV : V -> ObjCase -> V ; -- reflexive, with case
|
||||||
|
|
||||||
-- Compound verbs: verbs with a fixed particle; syntactically similar to prefix but written separately.
|
-- Compound verbs: verbs with a fixed particle; syntactically similar to prefix but written separately.
|
||||||
|
|
||||||
@@ -329,7 +335,7 @@ mkV2 : overload {
|
|||||||
|
|
||||||
-- Two-place verbs with object in the given case.
|
-- Two-place verbs with object in the given case.
|
||||||
|
|
||||||
mkV2 : V -> Case -> V2 ; -- just case for complement
|
mkV2 : V -> ObjCase -> V2 ; -- just case for complement
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@@ -413,6 +419,7 @@ mkV2 : overload {
|
|||||||
|
|
||||||
Gender = MorphoGer.Gender ;
|
Gender = MorphoGer.Gender ;
|
||||||
Case = MorphoGer.Case ;
|
Case = MorphoGer.Case ;
|
||||||
|
ObjCase = MorphoGer.ObjCase ;
|
||||||
Number = MorphoGer.Number ;
|
Number = MorphoGer.Number ;
|
||||||
|
|
||||||
masculine = Masc ;
|
masculine = Masc ;
|
||||||
@@ -495,7 +502,7 @@ mkV2 : overload {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
dative_eN : N -> N = \n -> n ** {
|
dative_eN : N -> N = \n -> n ** {
|
||||||
s = table {Sg => table {Dat => n.s ! Sg ! Dat + "e" ; c => n.s ! Sg ! c} ; Pl => n.s ! Pl} ;
|
s = table {Sg => table {Obj Dat => n.s ! Sg ! Obj Dat + "e" ; c => n.s ! Sg ! c} ; Pl => n.s ! Pl} ;
|
||||||
} ; ---- change uncap as well?
|
} ; ---- change uncap as well?
|
||||||
|
|
||||||
mkN2 = overload {
|
mkN2 = overload {
|
||||||
@@ -511,7 +518,7 @@ mkV2 : overload {
|
|||||||
mkN3 = \n,p,q -> n ** {c2 = p ; c3 = q ; lock_N3 = <>} ;
|
mkN3 = \n,p,q -> n ** {c2 = p ; c3 = q ; lock_N3 = <>} ;
|
||||||
|
|
||||||
mk2PN = \karolus, karoli, g ->
|
mk2PN = \karolus, karoli, g ->
|
||||||
{s = table {Gen => karoli ; _ => karolus} ; g = g ; n = Sg ; lock_PN = <>} ;
|
{s = table {Obj Gen => karoli ; _ => karolus} ; g = g ; n = Sg ; lock_PN = <>} ;
|
||||||
regPN = \horst, g ->
|
regPN = \horst, g ->
|
||||||
mk2PN horst (ifTok Tok (Predef.dp 1 horst) "s" horst (horst + "s")) g ;
|
mk2PN horst (ifTok Tok (Predef.dp 1 horst) "s" horst (horst + "s")) g ;
|
||||||
|
|
||||||
@@ -522,7 +529,7 @@ mkV2 : overload {
|
|||||||
mkPN : N -> PN = \n -> lin PN {s = n.s ! Sg; g = n.g; n = Sg} ;
|
mkPN : N -> PN = \n -> lin PN {s = n.s ! Sg; g = n.g; n = Sg} ;
|
||||||
mkPN : (nom,gen : Str) -> Gender -> PN = mk2PN ;
|
mkPN : (nom,gen : Str) -> Gender -> PN = mk2PN ;
|
||||||
mkPN : (nom,acc,dat,gen : Str) -> Gender -> PN = \nom,acc,dat,gen,g ->
|
mkPN : (nom,acc,dat,gen : Str) -> Gender -> PN = \nom,acc,dat,gen,g ->
|
||||||
{s = table {Nom => nom ; Acc => acc ; Dat => dat ; Gen => gen} ;
|
{s = table {Nom => nom ; Obj Acc => acc ; Obj Dat => dat ; Obj Gen => gen} ;
|
||||||
g = g ; n = Sg ; lock_PN = <>}
|
g = g ; n = Sg ; lock_PN = <>}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -534,7 +541,7 @@ mkV2 : overload {
|
|||||||
mkGN : Str -> Sex -> GN = \nom,g -> lin GN {s = (regPN nom (sex2gender g)).s; g = g} ; -- regular name with genitive in "s"
|
mkGN : Str -> Sex -> GN = \nom,g -> lin GN {s = (regPN nom (sex2gender g)).s; g = g} ; -- regular name with genitive in "s"
|
||||||
mkGN : (nom,gen : Str) -> Sex -> GN = \nom,gen,g -> lin GN {s = (mk2PN nom gen (sex2gender g)).s; g = g} ; -- name with other genitive
|
mkGN : (nom,gen : Str) -> Sex -> GN = \nom,gen,g -> lin GN {s = (mk2PN nom gen (sex2gender g)).s; g = g} ; -- name with other genitive
|
||||||
mkGN : (nom,acc,dat,gen : Str) -> Sex -> GN = \nom,acc,dat,gen,g ->
|
mkGN : (nom,acc,dat,gen : Str) -> Sex -> GN = \nom,acc,dat,gen,g ->
|
||||||
{s = table {Nom => nom ; Acc => acc ; Dat => dat ; Gen => gen} ;
|
{s = table {Nom => nom ; Obj Acc => acc ; Obj Dat => dat ; Obj Gen => gen} ;
|
||||||
g = g ; lock_GN = <>}
|
g = g ; lock_GN = <>}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -548,7 +555,7 @@ mkV2 : overload {
|
|||||||
-- In the worst case, all four forms are needed.
|
-- In the worst case, all four forms are needed.
|
||||||
|
|
||||||
mkSN : (nom,acc,dat,gen : Str) -> SN = \nom,acc,dat,gen ->
|
mkSN : (nom,acc,dat,gen : Str) -> SN = \nom,acc,dat,gen ->
|
||||||
{s = \\_ => table {Nom => nom ; Acc => acc ; Dat => dat ; Gen => gen} ;
|
{s = \\_ => table {Nom => nom ; Obj Acc => acc ; Obj Dat => dat ; Obj Gen => gen} ;
|
||||||
lock_SN = <>}
|
lock_SN = <>}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -576,34 +583,95 @@ mkV2 : overload {
|
|||||||
mkA2 = \a,p -> a ** {c2 = p ; lock_A2 = <>} ;
|
mkA2 = \a,p -> a ** {c2 = p ; lock_A2 = <>} ;
|
||||||
|
|
||||||
mkAdv s = {s = s ; lock_Adv = <>} ;
|
mkAdv s = {s = s ; lock_Adv = <>} ;
|
||||||
|
|
||||||
mkIAdv s = {s = s ; lock_IAdv = <>} ;
|
mkIAdv s = {s = s ; lock_IAdv = <>} ;
|
||||||
|
|
||||||
mkPrep = overload {
|
mkPrep = overload {
|
||||||
mkPrep : Str -> Case -> Prep = \s,c ->
|
mkPrep : Case -> SubjectPrep = \c ->
|
||||||
{s = \\_ => s ; s2 = [] ; c = c ; t = isPrep ; lock_Prep = <>} ;
|
{s = \\_ => [] ; s2 = [] ; c = c ; t = isCase ; lock_Prep = <>} ;
|
||||||
mkPrep : Case -> Str -> Prep = \c,s ->
|
mkPrep : ObjCase -> Prep = \c ->
|
||||||
{s = \\_ => [] ; s2 = s ; c = c ; t = isPrep ; lock_Prep = <>} ;
|
{s = \\_ => [] ; s2 = [] ; c = c ; t = isCase ; lock_Prep = <>} ;
|
||||||
mkPrep : Str -> Case -> Str -> Prep = \s,c,t ->
|
mkPrep : Str -> ObjCase -> Prep = \p,c -> -- TODO IPron Adv
|
||||||
{s = \\_ => s ; s2 = t ; c = c ; t = isPrep ; lock_Prep = <>} ;
|
{s = case c of {Acc => prepForms p (p ++ "den") (p ++ "die") (p ++ "das")
|
||||||
mkPrep : Str -> Str -> Str -> Str -> Case -> Prep = \s,masc,fem,neutr,c ->
|
(p ++ artDef ! GSg Neutr ! Obj c) (p ++ "was") ;
|
||||||
{s = table{GPl => s ; GSg Masc => masc ; GSg Fem => fem ; GSg Neutr => neutr} ;
|
Dat => prepForms p (p ++ "dem") (p ++ "der") (p ++ "dem")
|
||||||
s2 = [] ; c = c ; t = isPrepDefArt ; lock_Prep = <>} ;
|
(p ++ artDef ! GSg Neutr ! Obj c) (p ++ "wem") ;
|
||||||
mkPrep : Case -> Prep = \c ->
|
_ => prepForms p (p ++ "des") (p ++ "der") (p ++ "des")
|
||||||
{s = \\_ => [] ; s2 = [] ; c = c ; t = isCase ; lock_Prep = <>}
|
(p ++ "dessen") (p ++ "wessen")} ;
|
||||||
|
s2 = [] ; c = c ; t = isPrep ; lock_Prep = <>
|
||||||
|
} ;
|
||||||
|
mkPrep : ObjCase -> Str -> Prep = \c,q -> -- TODO IPron AdvPron
|
||||||
|
{s = case c of {Acc => prepForms [] "den" "die" "das"
|
||||||
|
(artDef ! GSg Neutr ! Obj c ++ q) ("was" ++ q) ;
|
||||||
|
Dat => prepForms [] "dem" "der" "dem"
|
||||||
|
(artDef ! GSg Neutr ! Obj c ++ q) ("wem" ++ q) ;
|
||||||
|
_ => prepForms [] "des" "der" "des"
|
||||||
|
("dessen" ++ q) ("wessen" ++ q)} ;
|
||||||
|
s2 = q ; c = c ; t = isPrep ; lock_Prep = <>} ;
|
||||||
|
mkPrep : Str -> ObjCase -> Str -> Prep = \p,c,q ->
|
||||||
|
{s = table{CAdvPron => p ++ artDef ! GSg Neutr ! Obj c ;
|
||||||
|
CIPron => p ++ (caselist "was" "was" "wem" "wessen") ! (Obj c) ;
|
||||||
|
_ => p} ;
|
||||||
|
s2 = q ; c = c ; t = isPrep ; lock_Prep = <>} ;
|
||||||
|
mkPrep : Str -> Str -> Str -> Str -> ObjCase -> Prep = \s,masc,fem,neutr,c ->
|
||||||
|
mkCPrep s masc fem neutr c ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
accPrep = mkPrep accusative ;
|
accPrep = mkPrep Acc ; -- accusative ;
|
||||||
datPrep = mkPrep dative ;
|
datPrep = mkPrep Dat ; -- dative ;
|
||||||
genPrep = mkPrep genitive ;
|
genPrep = mkPrep Gen ; -- genitive ;
|
||||||
|
|
||||||
|
von_Prep = mkPrep "von" "vom" "von der" "vom" Dat ; -- dative ;
|
||||||
|
zu_Prep = mkPrep "zu" "zum" "zur" "zum" Dat ; -- dative ;
|
||||||
|
bei_Prep = mkPrep "bei" "beim" "bei der" "beim" Dat ; -- dative ;
|
||||||
|
inDat_Prep = mkPrep "in" "im" "in der" "im" Dat ; -- dative ;
|
||||||
|
inAcc_Prep = mkPrep "in" "in den" "in die" "ins" Acc ; -- accusative ; ;
|
||||||
|
anDat_Prep = mkPrep "an" "am" "an der" "am" Dat ; -- dative ;
|
||||||
|
anAcc_Prep = mkPrep "an" "an den" "an die" "ans" Acc ; -- accusative ; ;
|
||||||
|
aufAcc_Prep = mkPrep "auf" "auf den" "auf die" "aufs" Acc ; -- accusative ; ;
|
||||||
|
|
||||||
|
mkCPrep = overload {
|
||||||
|
mkCPrep : Str -> Str -> Str -> Str -> ObjCase -> Prep = \s,masc,fem,neutr,c ->
|
||||||
|
{s = pflist s masc fem neutr ;
|
||||||
|
s2 = [] ; c = c ; t = isPrep ; lock_Prep = <>} ;
|
||||||
|
mkCPrep : Str -> ObjCase -> Prep = \p,c ->
|
||||||
|
{s = case c of {Acc => pflist p (p ++ "den") (p ++ "die") (p ++ "das") ;
|
||||||
|
Dat => pflist p (p ++ "dem") (p ++ "der") (p ++ "dem") ;
|
||||||
|
_ => pflist p (p ++ "des") (p ++ "der") (p ++ "des")} ;
|
||||||
|
s2 = [] ; c = c ; t = isPrep ; lock_Prep = <>
|
||||||
|
} ;
|
||||||
|
mkCPrep : Str -> ObjCase -> Str -> Prep = \p,c,post ->
|
||||||
|
{s = let dawo = pronAdvs post ;
|
||||||
|
darauf = dawo.p1 ;
|
||||||
|
worauf = dawo.p2
|
||||||
|
in case c of {
|
||||||
|
Acc => prepForms p (p++"den") (p++"die") (p++"das") darauf worauf ;
|
||||||
|
Dat => prepForms p (p++"dem") (p++"der") (p++"dem") darauf worauf ;
|
||||||
|
_ => prepForms p (p++"des") (p++"der") (p++"des") darauf worauf} ;
|
||||||
|
s2 = post ; c = c ; t = isPrep ; lock_Prep = <>
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
pronAdvs : Str -> Str * Str = \auf -> -- da|wo-rauf|mit, des|wes-halb|wegen
|
||||||
|
let
|
||||||
|
rauf : Str = case auf of {("a" | "i" | "u" | "ü") + _ => "r" + auf ; _ => auf} ;
|
||||||
|
darauf : Str = case rauf of {("ha" | "w") + _ => "des" + rauf ; _ => "da"+ rauf} ;
|
||||||
|
worauf : Str = case rauf of {("ha" | "w") + _ => "wes" + rauf ; _ => "wo"+ rauf} ;
|
||||||
|
in
|
||||||
|
<darauf, worauf> ;
|
||||||
|
|
||||||
|
pflist : (x1,_,_,x4 : Str) -> PrepForm => Str = \auf,m,f,n ->
|
||||||
|
let
|
||||||
|
rauf : Str = case auf of {("a" | "i" | "u" | "ü") + _ => "r" + auf ; _ => auf} ;
|
||||||
|
darauf : Str = case rauf of {("ha" | "w") + _ => "des" + rauf ; _ => "da"+ rauf} ;
|
||||||
|
worauf : Str = case rauf of {("ha" | "w") + _ => "wes" + rauf ; _ => "wo"+ rauf} ;
|
||||||
|
in
|
||||||
|
prepForms auf m f n darauf worauf ;
|
||||||
|
|
||||||
|
prepForms : (x1,_,_,_,_,x6 : Str) -> PrepForm => Str = \p,m,f,n,da,wo ->
|
||||||
|
table {CPl => p ;
|
||||||
|
CSg Masc => m ; CSg Fem => f ; CSg Neutr => n ;
|
||||||
|
CAdvPron => da ; CIPron => wo} ;
|
||||||
|
|
||||||
von_Prep = mkPrep "von" "vom" "von der" "vom" dative ;
|
|
||||||
zu_Prep = mkPrep "zu" "zum" "zur" "zum" dative ;
|
|
||||||
bei_Prep = mkPrep "bei" "beim" "bei der" "beim" dative ;
|
|
||||||
inDat_Prep = mkPrep "in" "im" "in der" "im" dative ;
|
|
||||||
inAcc_Prep = mkPrep "in" "in den" "in die" "ins" accusative ;
|
|
||||||
anDat_Prep = mkPrep "an" "am" "an der" "am" dative ;
|
|
||||||
anAcc_Prep = mkPrep "an" "an den" "an die" "ans" accusative ;
|
|
||||||
aufAcc_Prep = mkPrep "auf" "auf den" "auf die" "aufs" accusative ;
|
|
||||||
|
|
||||||
mk6V geben gibt gib gab gaebe gegeben =
|
mk6V geben gibt gib gab gaebe gegeben =
|
||||||
let
|
let
|
||||||
@@ -802,7 +870,7 @@ mkV2 : overload {
|
|||||||
mkV2 : Str -> V2 = \s -> dirV2 (regV s) ;
|
mkV2 : Str -> V2 = \s -> dirV2 (regV s) ;
|
||||||
mkV2 : V -> V2 = dirV2 ;
|
mkV2 : V -> V2 = dirV2 ;
|
||||||
mkV2 : V -> Prep -> V2 = prepV2;
|
mkV2 : V -> Prep -> V2 = prepV2;
|
||||||
mkV2 : V -> Case -> V2 = \v,c -> prepV2 v (mkPrep c) ;
|
mkV2 : V -> ObjCase -> V2 = \v,c -> prepV2 v (mkPrep c) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
mkMU : Str -> MU = \s -> lin MU {s=s; isPre=False} ;
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ concrete QuestionGer of Question = CatGer ** open ResGer, Prelude in {
|
|||||||
s = \\m,t,a,p =>
|
s = \\m,t,a,p =>
|
||||||
let
|
let
|
||||||
cls = slash.s ! m ! t ! a ! p ;
|
cls = slash.s ! m ! t ! a ! p ;
|
||||||
who = appPrep slash.c2 ip.s ;
|
who = appPrep (toSPrep slash.c2) ip.s ;
|
||||||
in table {
|
in table {
|
||||||
QDir => who ++ cls ! Inv ;
|
QDir => who ++ cls ! Inv ;
|
||||||
QIndir => who ++ cls ! Sub
|
QIndir => who ++ cls ! Sub
|
||||||
@@ -60,7 +60,7 @@ concrete QuestionGer of Question = CatGer ** open ResGer, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
PrepIP p ip = {
|
PrepIP p ip = {
|
||||||
s = appPrep p ip.s -- todo: mit was => womit ; an was => woran etc.
|
s = appPrep (toSPrep p) ip.s -- todo: mit was => womit ; an was => woran etc.
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvIP ip adv = {
|
AdvIP ip adv = {
|
||||||
|
|||||||
@@ -29,12 +29,12 @@ concrete RelativeGer of Relative = CatGer ** open ResGer, Prelude in {
|
|||||||
|
|
||||||
RelSlash rp slash = {
|
RelSlash rp slash = {
|
||||||
s = \\m,t,a,p,gn =>
|
s = \\m,t,a,p,gn =>
|
||||||
appPrep slash.c2 (rp.s ! gn) ++ slash.s ! m ! t ! a ! p ! Sub ;
|
(appPrep (toSPrep slash.c2) rp) ! gn ++ slash.s ! m ! t ! a ! p ! Sub ;
|
||||||
c = slash.c2.c
|
c = Obj slash.c2.c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
FunRP p np rp = {
|
FunRP p np rp = {
|
||||||
s = \\gn,c => np.s ! False ! c ++ appPrep p (rp.s ! gn) ;
|
s = \\gn,c => np.s ! False ! c ++ appPrep (toSPrep p) (rp.s ! gn) ;
|
||||||
a = RAg (numberAgr np.a) (personAgr np.a)
|
a = RAg (numberAgr np.a) (personAgr np.a)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
+147
-69
@@ -23,7 +23,9 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
-- These are the standard four-value case and three-value gender.
|
-- These are the standard four-value case and three-value gender.
|
||||||
|
|
||||||
param
|
param
|
||||||
Case = Nom | Acc | Dat | Gen ;
|
Case = Nom | Obj ObjCase ;
|
||||||
|
ObjCase = Acc | Dat | Gen ;
|
||||||
|
|
||||||
Gender = Masc | Fem | Neutr ;
|
Gender = Masc | Fem | Neutr ;
|
||||||
|
|
||||||
-- Complex $CN$s, like adjectives, have strong and weak forms.
|
-- Complex $CN$s, like adjectives, have strong and weak forms.
|
||||||
@@ -52,6 +54,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
AgPl _ | AgPlPol => Pl
|
AgPl _ | AgPlPol => Pl
|
||||||
} ;
|
} ;
|
||||||
numberAgr : VAgr -> Number = \r -> case r of {VAg n _ => n} ;
|
numberAgr : VAgr -> Number = \r -> case r of {VAg n _ => n} ;
|
||||||
|
numberAgr : RAgr -> Number = \r -> case r of {RAg n _ => n ; RNoAg => Sg} ;
|
||||||
} ;
|
} ;
|
||||||
personAgr = overload {
|
personAgr = overload {
|
||||||
personAgr : Agr -> Person = \r -> case r of {
|
personAgr : Agr -> Person = \r -> case r of {
|
||||||
@@ -132,7 +135,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
|
|
||||||
param VAux = VHaben | VSein ;
|
param VAux = VHaben | VSein ;
|
||||||
|
|
||||||
param VType = VAct | VRefl Case ;
|
param VType = VAct | VRefl ObjCase ;
|
||||||
|
|
||||||
-- The order of a sentence depends on whether it is used as a main
|
-- The order of a sentence depends on whether it is used as a main
|
||||||
-- clause, inverted, or subordinate.
|
-- clause, inverted, or subordinate.
|
||||||
@@ -189,20 +192,20 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
agrAdj : Adjf -> GenNum -> Case -> AForm = \a,gn,c ->
|
agrAdj : Adjf -> GenNum -> Case -> AForm = \a,gn,c ->
|
||||||
let
|
let
|
||||||
e = AMod (GSg Fem) Nom ;
|
e = AMod (GSg Fem) Nom ;
|
||||||
en = AMod (GSg Masc) Acc ;
|
en = AMod (GSg Masc) (Obj Acc) ;
|
||||||
in
|
in
|
||||||
case a of {
|
case a of {
|
||||||
Strong => AMod gn c ;
|
Strong => AMod gn c ;
|
||||||
Weak => case <gn,c> of {
|
Weak => case <gn,c> of {
|
||||||
<GSg _, Nom> => e ;
|
<GSg _, Nom> => e ;
|
||||||
<GSg Masc,Acc> => en ;
|
<GSg Masc,Obj Acc> => en ;
|
||||||
<GSg _, Acc> => e ;
|
<GSg _, Obj Acc> => e ;
|
||||||
_ => en } ;
|
_ => en } ;
|
||||||
Mixed => case <gn,c> of {
|
Mixed => case <gn,c> of {
|
||||||
<GSg g, Nom|Acc> => AMod gn c ;
|
<GSg g, Nom|Obj Acc> => AMod gn c ;
|
||||||
_ => en } ;
|
_ => en } ;
|
||||||
MixedStrong => case <gn,c> of {
|
MixedStrong => case <gn,c> of {
|
||||||
<GSg _, Dat|Gen> => en ;
|
<GSg _, Obj Dat|Obj Gen> => en ;
|
||||||
_ => AMod gn c }
|
_ => AMod gn c }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -210,7 +213,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
-- This is used twice in NounGer.
|
-- This is used twice in NounGer.
|
||||||
|
|
||||||
adjfCase : Adjf -> Case -> Adjf = \a,c -> case c of {
|
adjfCase : Adjf -> Case -> Adjf = \a,c -> case c of {
|
||||||
Nom|Acc => a ;
|
Nom | Obj Acc => a ;
|
||||||
_ => Weak
|
_ => Weak
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -251,6 +254,12 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
caselist : (x1,_,_,x4 : Str) -> Case => Str = \n,a,d,g ->
|
caselist : (x1,_,_,x4 : Str) -> Case => Str = \n,a,d,g ->
|
||||||
table {
|
table {
|
||||||
Nom => n ;
|
Nom => n ;
|
||||||
|
Obj Acc => a ;
|
||||||
|
Obj Dat => d ;
|
||||||
|
Obj Gen => g
|
||||||
|
} ;
|
||||||
|
objcaselist : (x1,_,x3 : Str) -> ObjCase => Str = \a,d,g ->
|
||||||
|
table {
|
||||||
Acc => a ;
|
Acc => a ;
|
||||||
Dat => d ;
|
Dat => d ;
|
||||||
Gen => g
|
Gen => g
|
||||||
@@ -274,7 +283,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
g : Gender
|
g : Gender
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
NP : Type = { -- HL 7/22: Bool = True if DefArt is dropped to combine with prep of type isPrepDefArt
|
NP : Type = { -- HL 7/22: Bool = True if DefArt is dropped to combine with contracting prep
|
||||||
s : Bool => Case => Str ;
|
s : Bool => Case => Str ;
|
||||||
rc : Str ; -- die Frage , [rc die ich gestellt habe]
|
rc : Str ; -- die Frage , [rc die ich gestellt habe]
|
||||||
ext : Str ; -- die Frage , [sc wo sie schläft] ; die Regel , [vp kein Fleisch zu essen] | [s dass ...]
|
ext : Str ; -- die Frage , [sc wo sie schläft] ; die Regel , [vp kein Fleisch zu essen] | [s dass ...]
|
||||||
@@ -345,6 +354,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
let
|
let
|
||||||
einb : Bool -> Str -> Str = \b,geb ->
|
einb : Bool -> Str -> Str = \b,geb ->
|
||||||
if_then_Str b (ein + geb) geb ;
|
if_then_Str b (ein + geb) geb ;
|
||||||
|
gebEn : Str = case geben of {an + "tun" => an + "tuen" ; _ => geben} ;
|
||||||
in
|
in
|
||||||
{s = table {
|
{s = table {
|
||||||
VInf False => ein + geben ;
|
VInf False => ein + geben ;
|
||||||
@@ -364,14 +374,14 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
VImpfSubj Sg _ => gaebe ; --# notpresent
|
VImpfSubj Sg _ => gaebe ; --# notpresent
|
||||||
VImpfSubj Pl P2 => gaebe + "t" ; --# notpresent
|
VImpfSubj Pl P2 => gaebe + "t" ; --# notpresent
|
||||||
VImpfSubj Pl _ => gaebe + "n" ; --# notpresent
|
VImpfSubj Pl _ => gaebe + "n" ; --# notpresent
|
||||||
VPresSubj Sg P2 => init geben + "st" ;
|
VPresSubj Sg P2 => init gebEn + "st" ;
|
||||||
VPresSubj Sg _ => init geben ;
|
VPresSubj Sg _ => init gebEn ;
|
||||||
VPresSubj Pl P2 => init geben + "t" ;
|
VPresSubj Pl P2 => init gebEn + "t" ;
|
||||||
VPresSubj Pl _ => geben
|
VPresSubj Pl _ => geben
|
||||||
}) ;
|
}) ;
|
||||||
VImper Sg => gib ;
|
VImper Sg => gib ;
|
||||||
VImper Pl => gebt ;
|
VImper Pl => gebt ;
|
||||||
VPresPart a => ein + (regA (geben + "d")).s ! Posit ! a ;
|
VPresPart a => ein + (regA (gebEn + "d")).s ! Posit ! a ;
|
||||||
VPastPart a => ein + (regA gegeben).s ! Posit ! a
|
VPastPart a => ein + (regA gegeben).s ! Posit ! a
|
||||||
} ;
|
} ;
|
||||||
prefix = ein ;
|
prefix = ein ;
|
||||||
@@ -445,67 +455,119 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
|
|
||||||
-- Prepositions indicate the case of their complement noun phrase.
|
-- Prepositions indicate the case of their complement noun phrase.
|
||||||
|
|
||||||
-- There are three types: (i) cases, (ii) pure pre-, post- and circum-positions,
|
-- There are two types: (i) object cases, (ii) pure pre-, post- and circum-positions,
|
||||||
-- and (iii) prepositions glued with definite article in singular (using s!(GSg g)).
|
-- where the pre part may contract with the definite article in singular or
|
||||||
|
-- with demonstrative pronoun (da+für, hier+für) [= pronominal adverb] or
|
||||||
|
-- with interrogative pronoun (wo+für).
|
||||||
|
|
||||||
|
-- e.g. in+Dat: in dem CN => im CN ; in da => darin ; in wo => worin
|
||||||
|
-- Gen+wegen: des CN!Gen wegen ; des(sen) wegen => deswegen ; wes(sen) wegen => weswegen
|
||||||
param
|
param
|
||||||
PrepType = isCase | isPrep | isPrepDefArt ; -- HL 7/2022
|
PrepType = isCase | isPrep ; -- | isContracting ;
|
||||||
|
PrepForm = CPl | CSg Gender | CAdvPron | CIPron ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
Preposition : Type = {s : GenNum => Str ; s2:Str ; c : Case ; t : PrepType} ;
|
Preposition : Type = {s : PrepForm => Str ; s2:Str ; c : ObjCase ; t : PrepType} ;
|
||||||
|
|
||||||
isaCase : Preposition -> Bool = \p -> case p.t of {isCase => True ; _ => False} ;
|
-- To specify subjects of V, VP etc, extend to allow nominative -- HL 9/26
|
||||||
isaPrep : Preposition -> Bool = \p -> case p.t of {isPrep => True ; _ => False} ;
|
SubjectPrep : Type = {s : PrepForm => Str ; s2:Str ; c : Case ; t : PrepType} ;
|
||||||
isaPrepDefArt : Preposition -> Bool = \p -> case p.t of {isPrepDefArt => True ; _ => False} ;
|
|
||||||
|
|
||||||
-- To apply a preposition to a complement.
|
-- auxiliary type for interrogative and relative pronoun
|
||||||
|
|
||||||
appPrep : Preposition -> (Case => Str) -> Str = \prep,arg ->
|
IP : Type = {s : Bool => Case => Str ; a : GenNum ; isPron : Bool} ;
|
||||||
prep.s ! GPl ++ arg ! prep.c ++ prep.s2 ;
|
RP : Type = {s : RelGenNum => Case => Str ; a : RAgr} ;
|
||||||
|
|
||||||
appPrepNP : Preposition -> NP -> Str = \prep,np ->
|
-- To apply a preposition to a noun phrase, interrogative or relative pronoun
|
||||||
|
|
||||||
|
appPrep = overload {
|
||||||
|
appPrep : Preposition -> (ObjCase => Str) -> Str = appPrep0 ;
|
||||||
|
-- appPrep : Preposition -> (Case => Str) -> Str = \p,c -> appSPrep (toSPrep p) c ; -- does not infer lintype e.g. in ExtraGer.AdvRAP
|
||||||
|
appPrep : SubjectPrep -> (Case => Str) -> Str = appSPrep ;
|
||||||
|
appPrep : SubjectPrep -> NP -> Str = appSPrepNP ; -- e.g. in dem CN => im CN
|
||||||
|
appPrep : SubjectPrep -> IP -> Str = appPrepIP ; -- e.g. in was => worin
|
||||||
|
appPrep : SubjectPrep -> RP -> RelGenNum => Str -- e.g. in was => worin
|
||||||
|
= appPrepRP ;
|
||||||
|
-- appPrep : Preposition -> DemPron -> Str = use CAdvPron ; -- e.g. in dem => darin
|
||||||
|
} ;
|
||||||
|
|
||||||
|
appPrep0 : Preposition -> (ObjCase => Str) -> Str = \prep,arg ->
|
||||||
|
prep.s ! CPl ++ arg ! prep.c ++ prep.s2 ;
|
||||||
|
|
||||||
|
appSPrep : SubjectPrep -> (Case => Str) -> Str = \prep,arg ->
|
||||||
|
prep.s ! CPl ++ arg ! prep.c ++ prep.s2 ;
|
||||||
|
|
||||||
|
appSPrepNP : SubjectPrep -> NP -> Str = \prep,np ->
|
||||||
let
|
let
|
||||||
g : Gender = genderAgr np.a ;
|
g : Gender = genderAgr np.a ;
|
||||||
n : Number = numberAgr np.a ;
|
n : Number = numberAgr np.a ;
|
||||||
glues = case <prep.t,n> of {<isPrepDefArt,Sg> => True ; _ => False} ;
|
b = case <prep.t,n,np.w> of {
|
||||||
nps = np.s ! glues ! prep.c
|
<isPrep,Sg,WDefArt> => True ; -- e.g. "zum Hof|zur Tür|zum Fenster herein"
|
||||||
|
_ => False} ; -- e.g. "auf dem Hof|auf der Tür|auf dem Fenster"
|
||||||
|
f = case b of {True => CSg g ; _ => CPl} ;
|
||||||
in
|
in
|
||||||
case <glues, np.w> of {
|
prep.s ! f ++ np.s ! b ! prep.c ++ np.ext ++ prep.s2 ++ np.rc ;
|
||||||
<True, WDefArt> => -- e.g. "zum Hof|zur Tür|zum Fenster herein"
|
|
||||||
prep.s ! (GSg g) ++ nps ++ np.ext ++ prep.s2 ++ np.rc ;
|
appPrepNP : Preposition -> NP -> Str = \prep,np ->
|
||||||
_ => prep.s ! GPl ++ nps ++ np.ext ++ prep.s2 ++ np.rc
|
appSPrepNP (toSPrep prep) np ;
|
||||||
} ;
|
|
||||||
|
appPrepIP : SubjectPrep -> IP -> Str = \prep,np ->
|
||||||
|
let
|
||||||
|
g : Gender = genGenNum np.a ;
|
||||||
|
n : Number = numGenNum np.a ;
|
||||||
|
b = case <np.isPron,n,g> of {<True,Sg,Neutr> => True ; _ => False} ;
|
||||||
|
f = case b of {True => CIPron ; _ => CPl} -- e.g. "zu was" => "wozu"
|
||||||
|
in prep.s ! f ++ np.s ! b ! prep.c ++ prep.s2 ;
|
||||||
|
|
||||||
|
appPrepRP : SubjectPrep -> RP -> (RelGenNum => Str) = \prep,np ->
|
||||||
|
let
|
||||||
|
uncontracted : RelGenNum => Str =
|
||||||
|
\\gn => prep.s ! CPl ++ np.s ! gn ! prep.c ++ prep.s2
|
||||||
|
in
|
||||||
|
case <prep.t, np.a> of {
|
||||||
|
<isPrep, RNoAg> => table{RSentence => prep.s ! CIPron ;
|
||||||
|
-- RGenNum (GSg Neutr) => prep.s ! CIPron ;
|
||||||
|
gn => uncontracted ! gn} ;
|
||||||
|
_ => uncontracted
|
||||||
|
} ;
|
||||||
|
|
||||||
{- -- Simplify to test the effect on grammar compilation complexity (without SlashV2VNP):
|
{- -- Simplify to test the effect on grammar compilation complexity (without SlashV2VNP):
|
||||||
-- with glues = False: 27096 msec, 3,2M VerbGer.gfo, 854 SentenceGer.gfo
|
-- contracts = False: 27096 msec, 3,2M VerbGer.gfo, 854 SentenceGer.gfo
|
||||||
-- and SlashV2VNP:102597 msec, 16 M VerbGer.gfo, 854 SentenceGer.gfo (good!)
|
-- and SlashV2VNP:102597 msec, 16 M VerbGer.gfo, 854 SentenceGer.gfo (good!)
|
||||||
appPrepNP : Preposition -> NP -> Str = \prep,np ->
|
appPrepNP : Preposition -> NP -> Str = \prep,np ->
|
||||||
let
|
let
|
||||||
glues = False ;
|
contracts = False ;
|
||||||
nps = np.s ! glues ! prep.c
|
nps = np.s ! contracts ! prep.c
|
||||||
in prep.s ! GPl ++ nps ++ np.ext ++ prep.s2 ++ np.rc ;
|
in prep.s ! CPl ++ nps ++ np.ext ++ prep.s2 ++ np.rc ;
|
||||||
-}
|
-}
|
||||||
|
|
||||||
bigNP : NP -> Str = \np -> np.ext ++ np.rc ;
|
bigNP : NP -> Str = \np -> np.ext ++ np.rc ;
|
||||||
|
|
||||||
-- To build a preposition from just a case. -- HL 9/19: no longer used in RGL
|
-- To build a preposition from just a case. -- HL 9/19: no longer used in RGL
|
||||||
|
|
||||||
noPreposition : Case -> Preposition = \c ->
|
noPreposition : Case -> SubjectPrep = \c ->
|
||||||
{s = \\_ => [] ; s2 = [] ; c = c ; t = isCase} ;
|
{s = \\_ => [] ; s2 = [] ; c = c ; t = isCase} ;
|
||||||
|
|
||||||
-- To build a preposition from just a case. -- HL 9/19: moved to mkPrep in ParadigmsGer
|
-- To build a preposition from just a case. -- HL 9/19: moved to mkPrep in ParadigmsGer
|
||||||
|
|
||||||
PrepNom : Preposition = {s = \\_ => [] ; t = isCase ; c = Nom ; s2 = []} ;
|
PrepNom : SubjectPrep = {s = \\_ => [] ; t = isCase ; c = Nom ; s2 = []} ;
|
||||||
|
|
||||||
|
vonDat : Preposition = {s=table{CPl => "von" ; CSg Fem => "von der" ; CSg _ => "vom" ;
|
||||||
|
CAdvPron => "davon" ; CIPron => "wovon"};
|
||||||
|
s2=[]; c=Dat; t=isPrep} ;
|
||||||
|
|
||||||
|
toSPrep : Preposition -> SubjectPrep = \prep ->
|
||||||
|
{s = prep.s ; s2 = prep.s2 ; c = Obj prep.c ; t = prep.t} ;
|
||||||
|
fromSPrep : SubjectPrep -> Preposition = \prep -> -- default Acc for Nom
|
||||||
|
{s = prep.s ; s2 = prep.s2 ; c = case prep.c of {Obj d => d ; Nom => Acc} ; t = prep.t} ;
|
||||||
|
|
||||||
vonDat : Preposition = {s=table{GPl => "von" ; GSg Fem => "von der"; _ => "vom"};
|
|
||||||
s2=[]; c=Dat; t=isPrepDefArt} ;
|
|
||||||
|
|
||||||
-- To build passive: accusative object -> nom subject; others -> same case or prep
|
-- To build passive: accusative object -> nom subject; others -> same case or prep
|
||||||
|
|
||||||
subjPrep : Preposition -> Preposition = \prep ->
|
subjPrep : Preposition -> SubjectPrep = \prep ->
|
||||||
|
let r : {s : PrepForm => Str ; s2:Str ; t : PrepType} = {s = prep.s ; s2 = prep.s2 ; t = prep.t} in
|
||||||
case <prep.c,prep.t> of {
|
case <prep.c,prep.t> of {
|
||||||
<Acc,isCase> => prep ** {c = Nom} ;
|
<Acc,isCase> => r ** {c = Nom} ;
|
||||||
_ => prep
|
<c, _> => r ** {c = Obj c}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Pronouns and articles
|
-- Pronouns and articles
|
||||||
@@ -532,7 +594,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
<_,Sg,P2> => AgSgP2 -- for "man", "Sie", set in StructuralGer HL
|
<_,Sg,P2> => AgSgP2 -- for "man", "Sie", set in StructuralGer HL
|
||||||
} ;
|
} ;
|
||||||
sp = table {PossF (GSg Masc) Nom => mein + "er" ; -- HL 12/23
|
sp = table {PossF (GSg Masc) Nom => mein + "er" ; -- HL 12/23
|
||||||
PossF (GSg Neutr) (Nom|Acc) => mein + "es" ;
|
PossF (GSg Neutr) (Nom|Obj Acc) => mein + "es" ;
|
||||||
PossF gn c => mein + (pronEnding ! gn ! c)} ;
|
PossF gn c => mein + (pronEnding ! gn ! c)} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -579,7 +641,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
let adj = adjForms teuer teur
|
let adj = adjForms teuer teur
|
||||||
in
|
in
|
||||||
table {
|
table {
|
||||||
AMod (GSg Masc| GSg Neutr) Gen => teur + "es" ;
|
AMod (GSg Masc| GSg Neutr) (Obj Gen) => teur + "es" ;
|
||||||
a => adj ! a
|
a => adj ! a
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -613,7 +675,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
ext : Str ; -- sentential complement of V(2)S, V(2)Q, e.g. dass|ob sie kommt
|
ext : Str ; -- sentential complement of V(2)S, V(2)Q, e.g. dass|ob sie kommt
|
||||||
inf : {inpl: (Agr => Str)*Str ; -- infinitival complement of V(2)V HL 3/2022
|
inf : {inpl: (Agr => Str)*Str ; -- infinitival complement of V(2)V HL 3/2022
|
||||||
extr: (Agr => Str)} ; -- e.g. ihn [] versuchen (lasse) [, ihr zu helfen]
|
extr: (Agr => Str)} ; -- e.g. ihn [] versuchen (lasse) [, ihr zu helfen]
|
||||||
c1 : Preposition -- case of subject
|
c1 : SubjectPrep -- case of subject
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
VPSlash = VP ** {c2 : Preposition ; objCtrl : Bool} ; -- HL 3/2019 objCtr added
|
VPSlash = VP ** {c2 : Preposition ; objCtrl : Bool} ; -- HL 3/2019 objCtr added
|
||||||
@@ -769,12 +831,12 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
|
|
||||||
insertObjNP : NP -> Preposition -> VPSlash -> VPSlash = \np,prep,vp ->
|
insertObjNP : NP -> Preposition -> VPSlash -> VPSlash = \np,prep,vp ->
|
||||||
let obj = appPrepNP prep np ;
|
let obj = appPrepNP prep np ;
|
||||||
b : Bool = case prep.t of {isPrep | isPrepDefArt => True ; _ => False} ;
|
b : Bool = case prep.t of {isPrep => True ; _ => False} ;
|
||||||
w = np.w ;
|
w = np.w ;
|
||||||
c = prep.c
|
c = prep.c -- TODO turn to ObjCase?
|
||||||
in insertObj' obj b w c vp ;
|
in insertObj' obj b w c vp ;
|
||||||
|
|
||||||
insertObj' : Str -> Bool -> Weight -> Case -> VPSlash -> VPSlash = \obj,isPrep,w,c,vp ->
|
insertObj' : Str -> Bool -> Weight -> ObjCase -> VPSlash -> VPSlash = \obj,isPrep,w,c,vp ->
|
||||||
vp ** {
|
vp ** {
|
||||||
nn = \\a =>
|
nn = \\a =>
|
||||||
let vpnn = vp.nn ! a in
|
let vpnn = vp.nn ! a in
|
||||||
@@ -800,7 +862,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
|
|
||||||
insertObjRefl : VPSlash -> VPSlash = \vp -> -- HL 6/2019, to order reflPron < neg < prep+reflPron
|
insertObjRefl : VPSlash -> VPSlash = \vp -> -- HL 6/2019, to order reflPron < neg < prep+reflPron
|
||||||
let prep = vp.c2 ;
|
let prep = vp.c2 ;
|
||||||
obj : Agr => Str = \\a => prep.s ! GPl ++ reflPron ! a ! prep.c ++ prep.s2
|
obj : Agr => Str = \\a => prep.s ! CPl ++ reflPron ! a ! prep.c ++ prep.s2
|
||||||
in vp ** {
|
in vp ** {
|
||||||
nn = \\a =>
|
nn = \\a =>
|
||||||
let vpnn = vp.nn ! a in
|
let vpnn = vp.nn ! a in
|
||||||
@@ -989,23 +1051,39 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
in
|
in
|
||||||
glue (embedInf vpi.inpl <vpi.objs, vpi.pred>) ++ vpi.extr!agr ++ vp.ext ;
|
glue (embedInf vpi.inpl <vpi.objs, vpi.pred>) ++ vpi.extr!agr ++ vp.ext ;
|
||||||
|
|
||||||
-- The nominative case is not used as reflexive, but defined here
|
-- Relfexive pronouns have object cases only, so nominative is omittet. -- HL 9/26
|
||||||
-- so that we can reuse this in personal pronouns.
|
-- (The old reflPron with nominative forms is not reused to define personal pronouns.)
|
||||||
|
|
||||||
reflPron : Agr => Case => Str = table { -- with persPron nominative
|
reflPron : Agr => ObjCase => Str = table {
|
||||||
AgSgP1 => caselist "ich" "mich" "mir" "meiner" ;
|
AgSgP1 => objcaselist "mich" "mir" "meiner" ;
|
||||||
AgSgP2 => caselist "du" "dich" "dir" "deiner" ;
|
AgSgP2 => objcaselist "dich" "dir" "deiner" ;
|
||||||
AgSgP3 Masc => caselist "er" "sich" "sich" "seiner" ;
|
AgSgP3 Masc => objcaselist "sich" "sich" "seiner" ;
|
||||||
AgSgP3 Fem => caselist "sie" "sich" "sich" "ihrer" ;
|
AgSgP3 Fem => objcaselist "sich" "sich" "ihrer" ;
|
||||||
AgSgP3 Neutr => caselist "es" "sich" "sich" "seiner" ;
|
AgSgP3 Neutr => objcaselist "sich" "sich" "seiner" ;
|
||||||
AgPl P1 => caselist "wir" "uns" "uns" "unser" ;
|
AgPl P1 => objcaselist "uns" "uns" "unser" ;
|
||||||
AgPl P2 => caselist "ihr" "euch" "euch" "euer" ;
|
AgPl P2 => objcaselist "euch" "euch" "euer" ;
|
||||||
AgPl P3 => caselist "sie" "sich" "sich" "ihrer" ;
|
AgPl P3 => objcaselist "sich" "sich" "ihrer" ;
|
||||||
AgPlPol => caselist "Sie" "sich" "sich" "Ihrer" -- HL 8/2023
|
AgPlPol => objcaselist "sich" "sich" "Ihrer" -- HL 8/2023
|
||||||
-- AgSgP3Gen => caselist "man selbst" "sich" "sich" "seiner" ; -- älter als man selbst sein
|
-- AgSgP3Gen => objcaselist "sich" "sich" "seiner" ; -- man wundert sich
|
||||||
-- ; AgPlReci => caselist "man" "einander" "einander" "einander" -- reciPron ?
|
-- ; AgPlReci => objcaselist "einander" "einander" "einander" -- man grüßt einander
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- Nominative forms of the personal pronouns, used in ExtendGer.ReflPron : RNP
|
||||||
|
persPronNom : Agr => Str = table {
|
||||||
|
AgSgP1 => "ich" ;
|
||||||
|
AgSgP2 => "du" ;
|
||||||
|
AgSgP3 Masc => "er";
|
||||||
|
AgSgP3 Fem => "sie" ;
|
||||||
|
AgSgP3 Neutr => "es" ;
|
||||||
|
AgPl P1 => "wir" ;
|
||||||
|
AgPl P2 => "ihr" ;
|
||||||
|
AgPl P3 => "sie" ;
|
||||||
|
AgPlPol => "Sie"
|
||||||
|
-- AgSgP3Gen => "man" ; -- älter als man selbst sein
|
||||||
|
-- ; AgPlReci => "man" ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
possPron : Agr -> Number -> Gender -> Case -> Str = \a,n,g,c -> case <a,n,g> of {
|
possPron : Agr -> Number -> Gender -> Case -> Str = \a,n,g,c -> case <a,n,g> of {
|
||||||
<AgSgP1,Sg,Masc> => caselist "mein" "meinen" "meinem" "meines" ! c ;
|
<AgSgP1,Sg,Masc> => caselist "mein" "meinen" "meinem" "meines" ! c ;
|
||||||
<AgSgP1,Sg,Fem> => caselist "meine" "meine" "meiner" "meiner" ! c ;
|
<AgSgP1,Sg,Fem> => caselist "meine" "meine" "meiner" "meiner" ! c ;
|
||||||
@@ -1063,20 +1141,20 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
case rgn of {
|
case rgn of {
|
||||||
RGenNum gn =>
|
RGenNum gn =>
|
||||||
case <gn,c> of {
|
case <gn,c> of {
|
||||||
<GSg Fem,Gen> => "deren" ;
|
<GSg Fem,Obj Gen> => "deren" ;
|
||||||
<GSg g,Gen> => "dessen" ;
|
<GSg g,Obj Gen> => "dessen" ;
|
||||||
<GPl,Dat> => "denen" ;
|
<GPl,Obj Dat> => "denen" ;
|
||||||
<GPl,Gen> => "deren" ;
|
<GPl,Obj Gen> => "deren" ;
|
||||||
_ => artDef ! gn ! c
|
_ => artDef ! gn ! c
|
||||||
} ;
|
} ;
|
||||||
RSentence => (caselist "was" "was" "was" "wessen") ! c -- wessen HL 4/2022
|
RSentence => (caselist "was" "was" "was" "wessen") ! c -- wessen HL 4/2022
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Function that allows the construction of non-nominative subjects.
|
-- Function that allows the construction of non-nominative subjects.
|
||||||
mkSubject : NP -> Preposition -> {s:Str ; a:Agr} = \np, prep ->
|
mkSubject : NP -> SubjectPrep -> {s:Str ; a:Agr} = \np, prep ->
|
||||||
let
|
let
|
||||||
agr = case prep.c of { Nom => np.a ; _ => AgSgP3 Masc } ;
|
agr = case prep.c of { Nom => np.a ; _ => AgSgP3 Masc } ;
|
||||||
subj = appPrepNP prep np
|
subj = appSPrepNP prep np
|
||||||
in {s = subj ; a = agr} ;
|
in {s = subj ; a = agr} ;
|
||||||
|
|
||||||
sex2gender : Sex -> Gender = \g ->
|
sex2gender : Sex -> Gender = \g ->
|
||||||
|
|||||||
+30
-28
@@ -8,8 +8,8 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
|
|
||||||
above_Prep = mkPrep "über" P.dative ;
|
above_Prep = P.mkCPrep "über" P.dative ;
|
||||||
after_Prep = mkPrep "nach" P.dative ;
|
after_Prep = P.mkCPrep "nach" P.dative ;
|
||||||
-- all_Predet = {s = appAdj (regA "all") ; c = noCase ; a = PAgNone} ;
|
-- all_Predet = {s = appAdj (regA "all") ; c = noCase ; a = PAgNone} ;
|
||||||
all_Predet = {s = appAdj (regA "all") ; c = noCase ; a = PAg Pl} ; -- HL 5/2022
|
all_Predet = {s = appAdj (regA "all") ; c = noCase ; a = PAg Pl} ; -- HL 5/2022
|
||||||
almost_AdA, almost_AdN = ss "fast" ;
|
almost_AdA, almost_AdN = ss "fast" ;
|
||||||
@@ -17,20 +17,20 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
always_AdV = ss "immer" ;
|
always_AdV = ss "immer" ;
|
||||||
and_Conj = {s1 = [] ; s2 = "und" ; n = Pl} ;
|
and_Conj = {s1 = [] ; s2 = "und" ; n = Pl} ;
|
||||||
because_Subj = ss "weil" ;
|
because_Subj = ss "weil" ;
|
||||||
before_Prep = mkPrep "vor" P.dative ;
|
before_Prep = P.mkCPrep "vor" P.dative ;
|
||||||
behind_Prep = mkPrep "hinter" P.dative ;
|
behind_Prep = P.mkCPrep "hinter" P.dative ;
|
||||||
between_Prep = mkPrep "zwischen" P.dative ;
|
between_Prep = P.mkCPrep "zwischen" P.dative ;
|
||||||
both7and_DConj = sd2 "sowohl" ["als auch"] ** {n = Sg} ;
|
both7and_DConj = sd2 "sowohl" "als auch" ** {n = Sg} ;
|
||||||
but_PConj = ss "aber" ;
|
but_PConj = ss "aber" ;
|
||||||
by8agent_Prep = mkPrep "durch" P.accusative ;
|
by8agent_Prep = P.mkCPrep "durch" P.accusative ;
|
||||||
by8means_Prep = mkPrep "mit" P.dative ;
|
by8means_Prep = P.mkCPrep "mit" P.dative ;
|
||||||
can8know_VV, can_VV = auxVV
|
can8know_VV, can_VV = MorphoGer.auxVV
|
||||||
(mkV
|
(mkV -- modal verb has no imperative forms "könne,könn(e)t" HL 12/2024
|
||||||
"können" "kann" "kannst" "kann" "könnt" "könn"
|
"können" "kann" "kannst" "kann" "könnt" "könne"
|
||||||
"konnte" "konntest" "konnten" "konntet"
|
"konnte" "konntest" "konnten" "konntet"
|
||||||
"könnte" "gekonnt" []
|
"könnte" "gekonnt" []
|
||||||
VHaben) ;
|
VHaben) ;
|
||||||
during_Prep = mkPrep "während" P.genitive ; --- no variants in the rgl | P.mkPrep P.accusative "über" ;
|
during_Prep = P.mkPrep "während" P.genitive ; --- no variants in the rgl | P.mkPrep P.accusative "über" ;
|
||||||
either7or_DConj = sd2 "entweder" "oder" ** {n = Sg} ;
|
either7or_DConj = sd2 "entweder" "oder" ** {n = Sg} ;
|
||||||
everybody_NP = nameNounPhrase Masc {s = caselist "jeder" "jeden" "jedem" "jedes"} ;
|
everybody_NP = nameNounPhrase Masc {s = caselist "jeder" "jeden" "jedem" "jedes"} ;
|
||||||
every_Det = {
|
every_Det = {
|
||||||
@@ -42,8 +42,8 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
s,sp = \\_,g,c => "wenig" + adjEnding ! (gennum g Pl) ! c ;
|
s,sp = \\_,g,c => "wenig" + adjEnding ! (gennum g Pl) ! c ;
|
||||||
n = Pl ; a = Strong ; isDef = False ; hasDefArt = False} ;
|
n = Pl ; a = Strong ; isDef = False ; hasDefArt = False} ;
|
||||||
---- first_Ord = {s = (regA "erst").s ! Posit} ;
|
---- first_Ord = {s = (regA "erst").s ! Posit} ;
|
||||||
for_Prep = mkPrep "für" P.accusative ;
|
for_Prep = P.mkCPrep "für" P.accusative ;
|
||||||
from_Prep = mkPrep "aus" P.dative ;
|
from_Prep = P.mkCPrep "aus" P.dative ;
|
||||||
he_Pron = mkPronPers "er" "ihn" "ihm" "seiner" "sein" Masc Sg P3 ;
|
he_Pron = mkPronPers "er" "ihn" "ihm" "seiner" "sein" Masc Sg P3 ;
|
||||||
here7to_Adv = ss ["hierher"] ;
|
here7to_Adv = ss ["hierher"] ;
|
||||||
here7from_Adv = ss ["hieraus"] ;
|
here7from_Adv = ss ["hieraus"] ;
|
||||||
@@ -52,7 +52,7 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
how8much_IAdv = ss "wieviel" ;
|
how8much_IAdv = ss "wieviel" ;
|
||||||
how8many_IDet = {s = \\g,c => "wie viel" + detEnding ! (gennum g Pl) ! c ; n = Pl ; a = Strong} ;
|
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" ;
|
if_Subj = ss "wenn" ; --- no variants in the RGL! | ss "falls" ;
|
||||||
in8front_Prep = mkPrep "vor" P.dative ;
|
in8front_Prep = P.mkCPrep "vor" P.dative ;
|
||||||
i_Pron = mkPronPers "ich" "mich" "mir" "meiner" "mein" Masc Sg P1 ;
|
i_Pron = mkPronPers "ich" "mich" "mir" "meiner" "mein" Masc Sg P1 ;
|
||||||
in_Prep = P.inDat_Prep ;
|
in_Prep = P.inDat_Prep ;
|
||||||
it_Pron = mkPronPers "es" "es" "ihm" "seiner" "sein" Neutr Sg P3 ;
|
it_Pron = mkPronPers "es" "es" "ihm" "seiner" "sein" Neutr Sg P3 ;
|
||||||
@@ -63,17 +63,18 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
more_CAdv = X.mkCAdv "mehr" "als" ;
|
more_CAdv = X.mkCAdv "mehr" "als" ;
|
||||||
-- most_Predet = {s = appAdj (regA "meist") ; c = noCase ; a = PAgNone} ;
|
-- most_Predet = {s = appAdj (regA "meist") ; c = noCase ; a = PAgNone} ;
|
||||||
most_Predet = { -- HL 5/2022
|
most_Predet = { -- HL 5/2022
|
||||||
s = \\n,g,c => let gn = R.gennum g n ;
|
s = \\n,g,c => let gn = MorphoGer.gennum g n ;
|
||||||
adj = (P.mkA "viel" "mehr" "meiste").s ! Superl
|
adj = (P.mkA "viel" "mehr" "meiste").s ! Superl
|
||||||
in
|
in
|
||||||
R.artDef ! gn ! c ++ adj ! (agrAdj Weak gn c) ;
|
MorphoGer.artDef ! gn ! c ++ adj ! (agrAdj Weak gn c) ;
|
||||||
c = {p = [] ; k = PredCase Gen} ;
|
c = {p = [] ; k = PredCase (Obj Gen)} ;
|
||||||
a = PAg Pl} ;
|
a = PAg Pl} ;
|
||||||
much_Det = {
|
much_Det = {
|
||||||
s = \\_,g,c => "viel" ;
|
s = \\_,g,c => "viel" ;
|
||||||
sp = \\_,g,c => "viel" + detEnding ! (gennum g Sg) ! c ; ---- (GSg _ Sg) ! Gen ?
|
sp = \\_,g,c => "viel" + detEnding ! (gennum g Sg) ! c ; ---- (GSg _ Sg) ! Gen ?
|
||||||
n = Sg ; a = Strong ; isDef = False ; hasDefArt = False} ;
|
n = Sg ; a = Strong ; isDef = False ; hasDefArt = False} ;
|
||||||
must_VV = auxVV
|
|
||||||
|
must_VV = MorphoGer.auxVV
|
||||||
(mkV -- modal verb, has no imperative forms "müsse,müsst" HL 12/2024
|
(mkV -- modal verb, has no imperative forms "müsse,müsst" HL 12/2024
|
||||||
"müssen" "muss" "musst" "muss" "müsst" "müsse"
|
"müssen" "muss" "musst" "muss" "müsst" "müsse"
|
||||||
"musste" "musstest" "mussten" "musstet"
|
"musste" "musstest" "mussten" "musstet"
|
||||||
@@ -83,7 +84,7 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
only_Predet = {s = \\_,_,_ => "nur" ; c = noCase ; a = PAgNone} ;
|
only_Predet = {s = \\_,_,_ => "nur" ; c = noCase ; a = PAgNone} ;
|
||||||
no_Utt = ss "nein" ;
|
no_Utt = ss "nein" ;
|
||||||
---b no_Phr = ss "nein" ;
|
---b no_Phr = ss "nein" ;
|
||||||
on_Prep = mkPrep "auf" P.dative ;
|
on_Prep = P.mkCPrep "auf" P.dative ;
|
||||||
or_Conj = {s1 = [] ; s2 = "oder" ; n = Sg} ;
|
or_Conj = {s1 = [] ; s2 = "oder" ; n = Sg} ;
|
||||||
otherwise_PConj = ss "sonst" ;
|
otherwise_PConj = ss "sonst" ;
|
||||||
part_Prep = P.von_Prep ; -- obsolete, better use PartNP cn np
|
part_Prep = P.von_Prep ; -- obsolete, better use PartNP cn np
|
||||||
@@ -108,7 +109,7 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
---b that_NP = nameNounPhrase Neutr {s = caselist "das" "das" "dem" "dessen"} ; ----
|
---b that_NP = nameNounPhrase Neutr {s = caselist "das" "das" "dem" "dessen"} ; ----
|
||||||
there_Adv = ss "da" ; --- no variants in the rgl | ss "dort" ;
|
there_Adv = ss "da" ; --- no variants in the rgl | ss "dort" ;
|
||||||
there7to_Adv = ss "dahin" ;
|
there7to_Adv = ss "dahin" ;
|
||||||
there7from_Adv = ss ["daher"] ;
|
there7from_Adv = ss "daher" ;
|
||||||
therefore_PConj = ss "deshalb" ;
|
therefore_PConj = ss "deshalb" ;
|
||||||
---b these_NP = {s = caselist "diese" "diese" "diesen" "dieser" ; a = agrP3 Pl} ;
|
---b these_NP = {s = caselist "diese" "diese" "diesen" "dieser" ; a = agrP3 Pl} ;
|
||||||
|
|
||||||
@@ -117,12 +118,13 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
in {s = \\_ => dieser ; sp = dieser ; a = Weak ; isDefArt, delCardOne = False} ;
|
in {s = \\_ => dieser ; sp = dieser ; a = Weak ; isDefArt, delCardOne = False} ;
|
||||||
---b this_NP = nameNounPhrase Neutr {s = caselist "dies" "dies" "diesem" "dieses"} ; ----
|
---b this_NP = nameNounPhrase Neutr {s = caselist "dies" "dies" "diesem" "dieses"} ; ----
|
||||||
---b those_NP = {s = caselist "jene" "jene" "jenen" "jener" ; a = agrP3 Pl} ;
|
---b those_NP = {s = caselist "jene" "jene" "jenen" "jener" ; a = agrP3 Pl} ;
|
||||||
through_Prep = mkPrep "durch" P.accusative ;
|
through_Prep = P.mkCPrep "durch" P.accusative ;
|
||||||
too_AdA = ss "zu" ;
|
too_AdA = ss "zu" ;
|
||||||
to_Prep = mkPrep "nach" P.dative ;
|
to_Prep = P.mkCPrep "nach" P.dative ;
|
||||||
under_Prep = mkPrep "unter" P.dative ;
|
under_Prep = P.mkCPrep "unter" P.dative ;
|
||||||
very_AdA = ss "sehr" ;
|
very_AdA = ss "sehr" ;
|
||||||
want_VV = auxVV
|
|
||||||
|
want_VV = MorphoGer.auxVV
|
||||||
(mkV -- modal verb, has no imperative forms "wolle,woll(e)t" HL 12/2024
|
(mkV -- modal verb, has no imperative forms "wolle,woll(e)t" HL 12/2024
|
||||||
"wollen" "will" "willst" "will" "wollt" "wolle"
|
"wollen" "will" "willst" "will" "wollt" "wolle"
|
||||||
"wollte" "wolltest" "wollten" "wolltet"
|
"wollte" "wolltest" "wollten" "wolltet"
|
||||||
@@ -144,8 +146,8 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
whoPl_IP = {s = caselist "wer alles" "wen alles" "wem alles" "wessen alles" ;
|
whoPl_IP = {s = caselist "wer alles" "wen alles" "wem alles" "wessen alles" ;
|
||||||
a = GSg Masc ; isPron = True} ; -- Duden 563
|
a = GSg Masc ; isPron = True} ; -- Duden 563
|
||||||
why_IAdv = ss "warum" ;
|
why_IAdv = ss "warum" ;
|
||||||
without_Prep = mkPrep "ohne" P.accusative ;
|
without_Prep = P.mkPrep "ohne" P.accusative ;
|
||||||
with_Prep = mkPrep "mit" P.dative ;
|
with_Prep = P.mkCPrep "mit" P.dative ;
|
||||||
youSg_Pron = mkPronPers "du" "dich" "dir" "deiner" "dein" Fem Sg P2 ;
|
youSg_Pron = mkPronPers "du" "dich" "dir" "deiner" "dein" Fem Sg P2 ;
|
||||||
youPl_Pron = mkPronPers "ihr" "euch" "euch" "eurer" "euer" Fem Pl P2 ; ---- poss
|
youPl_Pron = mkPronPers "ihr" "euch" "euch" "eurer" "euer" Fem Pl P2 ; ---- poss
|
||||||
youPol_Pron = mkPronPers "Sie" "Sie" "Ihnen" "Ihrer" "Ihr" Fem Pl P3 ** {a = AgPlPol} ;
|
youPol_Pron = mkPronPers "Sie" "Sie" "Ihnen" "Ihrer" "Ihr" Fem Pl P3 ** {a = AgPlPol} ;
|
||||||
@@ -164,7 +166,7 @@ concrete StructuralGer of Structural = CatGer **
|
|||||||
nameNounPhrase Neutr {s = \\_ => "nichts"} ; --maybe add: nameNounPhrase {s = \\_ => "garnichts"}
|
nameNounPhrase Neutr {s = \\_ => "nichts"} ; --maybe add: nameNounPhrase {s = \\_ => "garnichts"}
|
||||||
at_least_AdN = ss "wenigstens" ;
|
at_least_AdN = ss "wenigstens" ;
|
||||||
at_most_AdN = ss "höchstens" ;
|
at_most_AdN = ss "höchstens" ;
|
||||||
except_Prep = mkPrep "außer" P.dative ;
|
except_Prep = P.mkPrep "außer" P.dative ;
|
||||||
|
|
||||||
as_CAdv = X.mkCAdv "ebenso" "wie" ;
|
as_CAdv = X.mkCAdv "ebenso" "wie" ;
|
||||||
have_V2 = P.dirV2 IrregGer.haben_V ;
|
have_V2 = P.dirV2 IrregGer.haben_V ;
|
||||||
|
|||||||
+4
-26
@@ -37,7 +37,7 @@ concrete VerbGer of Verb = CatGer ** open Prelude, ResGer, Coordination in {
|
|||||||
insertInf inf vps) ** {c2 = v.c2 ; objCtrl = v.objCtrl} ;
|
insertInf inf vps) ** {c2 = v.c2 ; objCtrl = v.objCtrl} ;
|
||||||
|
|
||||||
SlashV2A v ap =
|
SlashV2A v ap =
|
||||||
insertAdj (ap.s ! APred ++ ap.s2 ! Nom) ap.c ap.ext (predV v) ** {c2 = v.c2; objCtrl = False} ;
|
insertAdj (ap.s ! APred ++ appSPrep (toSPrep v.c2) ap.s2) ap.c ap.ext (predV v) ** {c2 = v.c2; objCtrl = False} ;
|
||||||
|
|
||||||
ComplSlash vps np =
|
ComplSlash vps np =
|
||||||
-- IL 24/04/2018 force reflexive in the VPSlash to take the agreement of np.
|
-- IL 24/04/2018 force reflexive in the VPSlash to take the agreement of np.
|
||||||
@@ -94,8 +94,8 @@ concrete VerbGer of Verb = CatGer ** open Prelude, ResGer, Coordination in {
|
|||||||
SlashV2VNP v np vp = -- bitte ihn, zu kaufen | lasse ihn kaufen HL 3/22
|
SlashV2VNP v np vp = -- bitte ihn, zu kaufen | lasse ihn kaufen HL 3/22
|
||||||
-- insertObjNP np v.c2 (ComplVV v vp ** {c2 = vp.c2 ; objCtrl = vp.objCtrl}) ;
|
-- insertObjNP np v.c2 (ComplVV v vp ** {c2 = vp.c2 ; objCtrl = vp.objCtrl}) ;
|
||||||
let prep = v.c2 ;
|
let prep = v.c2 ;
|
||||||
obj = appPrep prep (np.s!False) ; -- simplify: no glueing of prep+DefArt, HL 8/22
|
obj = appPrep (toSPrep prep) (np.s!False) ; -- simplify: no glueing of prep+DefArt, HL 8/22
|
||||||
b : Bool = case prep.t of {isPrep | isPrepDefArt => True ; _ => False} ;
|
b : Bool = case prep.t of {isPrep => True ; _ => False} ;
|
||||||
c = prep.c ;
|
c = prep.c ;
|
||||||
w = np.w ;
|
w = np.w ;
|
||||||
vps = (ComplVV v vp ** {c2 = vp.c2 ; objCtrl = vp.objCtrl})
|
vps = (ComplVV v vp ** {c2 = vp.c2 ; objCtrl = vp.objCtrl})
|
||||||
@@ -139,31 +139,9 @@ concrete VerbGer of Verb = CatGer ** open Prelude, ResGer, Coordination in {
|
|||||||
|
|
||||||
PassV2 v = -- acc object -> nom subject; all others: same PCase
|
PassV2 v = -- acc object -> nom subject; all others: same PCase
|
||||||
let c = case <v.c2.c, v.c2.t> of {
|
let c = case <v.c2.c, v.c2.t> of {
|
||||||
<Acc, isCase> => Nom ; _ => v.c2.c}
|
<Acc, isCase> => Nom ; _ => Obj v.c2.c}
|
||||||
in insertObj (\\_ => v.s ! VPastPart APred) (predV werdenPass) ** { c1 = v.c2 ** {c = c} } ;
|
in insertObj (\\_ => v.s ! VPastPart APred) (predV werdenPass) ** { c1 = v.c2 ** {c = c} } ;
|
||||||
|
|
||||||
{- HL: The construction VPSlashPrep : VP -> Prep -> VPSlash does not exist
|
|
||||||
in German. In abstract/Verb.gf, the example
|
|
||||||
|
|
||||||
VPSlashPrep : VP -> Prep -> VPSlash ; -- live in (it)
|
|
||||||
|
|
||||||
(with live_V:V) indicates that, here, you consider Prep=AdvSlash,
|
|
||||||
so to speak, for building a compact version of relative clauses:
|
|
||||||
|
|
||||||
the city we live in : NP
|
|
||||||
|
|
||||||
from "we live (in the city : Adv) : Cl"
|
|
||||||
|
|
||||||
In German we cannot move the NP part of an Adv, we only have the
|
|
||||||
full relative clauses like
|
|
||||||
|
|
||||||
die Stadt, in der wir leben,
|
|
||||||
die Stadt, worin wir leben, --contracted Prep+Rel
|
|
||||||
|
|
||||||
But: VPSlashPrep is used to parse "sie ist mit mir verheiratet",
|
|
||||||
(ist verheiratet:VP mit:Prep):VPSlash,
|
|
||||||
ComplA2 is used to parse "sie ist verheiratet mit mir"
|
|
||||||
-}
|
|
||||||
VPSlashPrep vp prep = vp ** {c2 = prep ; objCtrl = False} ;
|
VPSlashPrep vp prep = vp ** {c2 = prep ; objCtrl = False} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,15 +31,15 @@ concrete TestLangGer of TestLang =
|
|||||||
(insertObjRefl (predVc v3) ** {c2 = v3.c3});
|
(insertObjRefl (predVc v3) ** {c2 = v3.c3});
|
||||||
|
|
||||||
PassV2Q v q =
|
PassV2Q v q =
|
||||||
let c = case <v.c2.c, isaPrep v.c2> of {
|
let c = case <v.c2.c, v.c2.t> of {
|
||||||
<Acc, False> => Nom ; _ => v.c2.c} ; -- acc;pcase object -> nom;pcase subject
|
<Acc, isCase> => Nom ; _ => v.c2.c} ; -- acc;pcase object -> nom;pcase subject
|
||||||
vp = insertObj (\\_ => v.s ! VPastPart APred) (predV werdenPass)
|
vp = insertObj (\\_ => v.s ! VPastPart APred) (predV werdenPass)
|
||||||
** { c1 = v.c2 ** {c = c} }
|
** { c1 = v.c2 ** {c = c} }
|
||||||
in insertExtrapos (bindComma ++ q.s ! QIndir) vp ;
|
in insertExtrapos (bindComma ++ q.s ! QIndir) vp ;
|
||||||
|
|
||||||
PassV2S v s =
|
PassV2S v s =
|
||||||
let c = case <v.c2.c, isaPrep v.c2> of {
|
let c = case <v.c2.c, v.c2.t> of {
|
||||||
<Acc, False> => Nom ; _ => v.c2.c} ; -- acc;pcase object -> nom;pcase subject
|
<Acc, isCase> => Nom ; _ => v.c2.c} ; -- acc;pcase object -> nom;pcase subject
|
||||||
vp = insertObj (\\_ => v.s ! VPastPart APred) (predV werdenPass)
|
vp = insertObj (\\_ => v.s ! VPastPart APred) (predV werdenPass)
|
||||||
** { c1 = v.c2 ** {c = c} }
|
** { c1 = v.c2 ** {c = c} }
|
||||||
in insertExtrapos (bindComma ++ conjThat ++ s.s ! Sub) vp ;
|
in insertExtrapos (bindComma ++ conjThat ++ s.s ! Sub) vp ;
|
||||||
@@ -47,15 +47,15 @@ concrete TestLangGer of TestLang =
|
|||||||
PassV2V v vp =
|
PassV2V v vp =
|
||||||
let
|
let
|
||||||
inf = mkInf v.isAux Simul Pos vp ; -- ok for v.isAux=False, v.c2.c=Acc
|
inf = mkInf v.isAux Simul Pos vp ; -- ok for v.isAux=False, v.c2.c=Acc
|
||||||
c = case <v.c2.c, isaPrep v.c2> of { -- v.objCtrl=True HL 3/22
|
c = case <v.c2.c, v.c2.t> of { -- v.objCtrl=True HL 3/22
|
||||||
<Acc, False> => Nom ; _ => v.c2.c} ; -- acc;pcase object -> nom;pcase subject
|
<Acc, isCase> => Nom ; _ => v.c2.c} ; -- acc;pcase object -> nom;pcase subject
|
||||||
vp2 = insertObj (\\_ => v.s ! VPastPart APred) (predV werdenPass)
|
vp2 = insertObj (\\_ => v.s ! VPastPart APred) (predV werdenPass)
|
||||||
** { c1 = subjPrep v.c2 } ;
|
** { c1 = subjPrep v.c2 } ;
|
||||||
in insertInf inf vp2 ; -- v=lassen needs in-place inf instead
|
in insertInf inf vp2 ; -- v=lassen needs in-place inf instead
|
||||||
|
|
||||||
PassVPSlash vp =
|
PassVPSlash vp =
|
||||||
let c = case <vp.c2.c, isaPrep vp.c2> of {
|
let c = case <vp.c2.c, vp.c2.t> of {
|
||||||
<Acc, False> => Nom ; _ => vp.c2.c} ;
|
<Acc, isCase> => Nom ; _ => vp.c2.c} ;
|
||||||
ctrl = case vp.objCtrl of { True => False ; _ => True } -- always False?
|
ctrl = case vp.objCtrl of { True => False ; _ => True } -- always False?
|
||||||
in -- insertObj (\\_ => (PastPartAP vp).s ! APred) (predV werdenPass ** {c1 = vp.c2 ** {c = c}})
|
in -- insertObj (\\_ => (PastPartAP vp).s ! APred) (predV werdenPass ** {c1 = vp.c2 ** {c = c}})
|
||||||
insertObj (\\_ => vp.s.s ! (VPastPart APred))
|
insertObj (\\_ => vp.s.s ! (VPastPart APred))
|
||||||
|
|||||||
Reference in New Issue
Block a user