mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-06-29 04:46:30 -06:00
(Ger) Shrink Agr = Ag Gender Number Person from 3*2*3 = 18 values to 2+3+1+3+1 = 10 by
Agr = AgSgP1 | AgSgP2 | AgSgP3 Gender | AgSgP3Gen | AgPl Person | AgPlPol ;
with AgSgP3Gen resp. AgPlPol used for reflexive,possessive forms of "man", "Sie".
Compiles AllGer from src in 162sec with 15M VerbGer.gfo vs. 380sec with 17M VerbGer.gfo
This commit is contained in:
+161
-130
@@ -35,16 +35,41 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
GenNum = GSg Gender | GPl ;
|
||||
RelGenNum = RGenNum GenNum | RSentence ;
|
||||
|
||||
-- Agreement of $NP$ has three parts.
|
||||
-- Agreement of $NP$ has three parts: gender, number and person.
|
||||
|
||||
Agr = Ag Gender Number Person ;
|
||||
-- These 3*2*3 = 18 values can be reduced to 8, since gender is used only
|
||||
-- in 3rd person singular. To select reflexive and possessive forms for "Sie"
|
||||
-- in (mkClause str agr vp), add a value AgPlPol, for "man", add AgSgP3Gen. HL 29.9.2023
|
||||
|
||||
Agr = AgSgP1 | AgSgP2 | AgSgP3 Gender | AgSgP3Gen | AgPl Person | AgPlPol ;
|
||||
|
||||
oper
|
||||
mkAgr : {g : Gender ; n : Number ; p : Person} -> Agr = \r ->
|
||||
Ag r.g r.n r.p ;
|
||||
genderAgr : Agr -> Gender = \r -> case r of {Ag g _ _ => g} ;
|
||||
numberAgr : Agr -> Number = \r -> case r of {Ag _ n _ => n} ;
|
||||
personAgr : Agr -> Person = \r -> case r of {Ag _ _ p => p} ;
|
||||
genderAgr : Agr -> Gender = \r -> case r of {AgSgP3 g => g ; _ => Masc} ;
|
||||
|
||||
numberAgr = overload {
|
||||
numberAgr : Agr -> Number = \r -> case r of {
|
||||
AgSgP1 | AgSgP2 | AgSgP3 _ | AgSgP3Gen => Sg ;
|
||||
AgPl _ | AgPlPol => Pl
|
||||
} ;
|
||||
numberAgr : VAgr -> Number = \r -> case r of {VAg n _ => n} ;
|
||||
} ;
|
||||
personAgr = overload {
|
||||
personAgr : Agr -> Person = \r -> case r of {
|
||||
AgSgP1 | AgPl P1 => P1 ;
|
||||
AgSgP2 | AgPl P2 => P2 ;
|
||||
AgSgP3 _ | AgSgP3Gen => P3 ;
|
||||
AgPl P3 | AgPlPol => P3
|
||||
} ;
|
||||
personAgr : VAgr -> Person = \r -> case r of {VAg _ p => p}
|
||||
} ;
|
||||
|
||||
conjAgr : Agr -> Agr -> Agr = \a,b ->
|
||||
let n : Number = conjNumber (numberAgr a) (numberAgr b) ;
|
||||
p : Person = conjPerson (personAgr a) (personAgr b)
|
||||
in case <n,p> of {<Pl,p> => AgPl p ;
|
||||
<Sg,P3> => AgSgP3 Neutr ;
|
||||
<Sg,P1> => AgSgP1 ;
|
||||
<Sg,P2> => AgSgP2 } ;
|
||||
|
||||
-- Pronouns are the worst-case noun phrases, which have both case
|
||||
-- and possessive forms.
|
||||
@@ -58,16 +83,14 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
param
|
||||
PredetCase = NoCase | PredCase Case ;
|
||||
PredetAgr = PAg Number | PAgNone ;
|
||||
|
||||
oper
|
||||
noCase : {p : Str ; k : PredetCase} = {p = [] ; k = NoCase} ;
|
||||
|
||||
-- Pronominal nps are ordered differently, and light nps come before negation in clauses.
|
||||
-- (To save space, reduce isPron * isLight = 4 values to the following three.) HL 9/19
|
||||
|
||||
param
|
||||
Weight = WPron | WLight | WHeavy | WDefArt ; -- HL: may need WIndefArt for nicht+ein => kein
|
||||
oper -- to handle clause negation properly
|
||||
Weight = WPron | WLight | WHeavy | WDefArt ;
|
||||
oper
|
||||
isPron : {w : Weight} -> Bool = \np ->
|
||||
case np.w of {WPron => True ; _ => False} ;
|
||||
isLight : {w : Weight} -> Bool = \np ->
|
||||
@@ -82,6 +105,9 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
|
||||
--2 For $Verb$
|
||||
|
||||
param VAgr = -- Gender is irrelevant for verb forms, HL 8/2023
|
||||
VAg Number Person ; -- except participles
|
||||
|
||||
param VForm =
|
||||
VInf Bool -- True = with the particle "zu"
|
||||
| VFin Bool VFormFin -- True = prefix glued to verb
|
||||
@@ -130,8 +156,10 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
oper
|
||||
agrP3 : Number -> Agr = agrgP3 Neutr ;
|
||||
|
||||
agrgP3 : Gender -> Number -> Agr = \g,n ->
|
||||
Ag g n P3 ;
|
||||
agrgP3 : Gender -> Number -> Agr = \g,n -> case n of {
|
||||
Sg => AgSgP3 g ;
|
||||
Pl => AgPl P3 -- no gender in Pl
|
||||
} ;
|
||||
|
||||
gennum : Gender -> Number -> GenNum = \g,n ->
|
||||
case n of {
|
||||
@@ -172,10 +200,10 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
_ => Weak
|
||||
} ;
|
||||
|
||||
vFin : Bool -> Mood -> Tense -> Agr -> VForm = \b,m,t,a ->
|
||||
vFin : Bool -> Mood -> Tense -> VAgr -> VForm = \b,m,t,a ->
|
||||
let
|
||||
an = numberAgr a ;
|
||||
ap = personAgr a ;
|
||||
an : Number = numberAgr a ;
|
||||
ap : Person = personAgr a ;
|
||||
in
|
||||
case <t,m> of {
|
||||
<Pres,MIndic> => VFin b (VPresInd an ap) ;
|
||||
@@ -186,11 +214,15 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
_ => VInf False --# notpresent
|
||||
} ;
|
||||
|
||||
conjAgr : Agr -> Agr -> Agr = \a,b -> mkAgr {
|
||||
g = Neutr ; ----
|
||||
n = conjNumber (numberAgr a) (numberAgr b) ;
|
||||
p = conjPerson (personAgr a) (personAgr b)
|
||||
} ;
|
||||
agr2vagr : Agr -> VAgr = \r -> case r of {
|
||||
AgSgP1 => VAg Sg P1 ;
|
||||
AgSgP2 => VAg Sg P2 ;
|
||||
AgSgP3 _ | AgSgP3Gen => VAg Sg P3 ;
|
||||
AgPl p => VAg Pl p ;
|
||||
AgPlPol => VAg Pl P3
|
||||
} ;
|
||||
|
||||
vagrP3 : Number -> VAgr = \n -> VAg n P3 ;
|
||||
|
||||
--------------------------------------------
|
||||
--TYPE DEFINITIONS + WORST-CASE CONSTRUCTORS
|
||||
@@ -415,51 +447,44 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
-- To apply a preposition to a complement.
|
||||
|
||||
appPrep : Preposition -> (Case => Str) -> Str = \prep,arg ->
|
||||
prep.s ! GPl ++ arg ! prep.c ++ prep.s2 ;
|
||||
prep.s ! GPl ++ arg ! prep.c ++ prep.s2 ;
|
||||
|
||||
appPrepNP : Preposition -> NP -> Str = \prep,np ->
|
||||
let
|
||||
g = (genderAgr np.a) ;
|
||||
n = (numberAgr np.a) ;
|
||||
g : Gender = genderAgr np.a ;
|
||||
n : Number = numberAgr np.a ;
|
||||
glues = case <prep.isPrep,n> of {<isPrepDefArt,Sg> => True ; _ => False} ;
|
||||
nps = np.s ! glues ! prep.c
|
||||
in
|
||||
case <glues, np.w> of {
|
||||
<True, WDefArt> => -- e.g. "zum Hof|zur Tür|zum Fenster herein"
|
||||
prep.s ! (GSg g) ++ nps ++ np.ext ++ prep.s2 ++ np.rc ;
|
||||
_ => prep.s ! GPl ++ nps ++ np.ext ++ prep.s2 ++ np.rc
|
||||
} ;
|
||||
{-
|
||||
-- Simplify to test the effect on grammar compilation complexity (without SlashV2VNP):
|
||||
-- with glues = False: 27096 msec, 3,2M VerbGer.gfo, 854K SentenceGer.gfo
|
||||
-- and SlashV2VNP:102597 msec, 16 M VerbGer.gfo, 854K SentenceGer.gfo (good!)
|
||||
appPrepNP : Preposition -> NP -> Str = \prep,np ->
|
||||
let
|
||||
glues = False ;
|
||||
nps = np.s ! glues ! prep.c
|
||||
in prep.s ! GPl ++ nps ++ np.ext ++ prep.s2 ++ np.rc ;
|
||||
_ => prep.s ! GPl ++ nps ++ np.ext ++ prep.s2 ++ np.rc
|
||||
} ;
|
||||
|
||||
{- -- Simplify to test the effect on grammar compilation complexity (without SlashV2VNP):
|
||||
-- with glues = False: 27096 msec, 3,2M VerbGer.gfo, 854 SentenceGer.gfo
|
||||
-- and SlashV2VNP:102597 msec, 16 M VerbGer.gfo, 854 SentenceGer.gfo (good!)
|
||||
appPrepNP : Preposition -> NP -> Str = \prep,np ->
|
||||
let
|
||||
glues = False ;
|
||||
nps = np.s ! glues ! prep.c
|
||||
in prep.s ! GPl ++ nps ++ np.ext ++ prep.s2 ++ 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
|
||||
|
||||
noPreposition : Case -> Preposition = \c ->
|
||||
{s = \\_ => [] ; s2 = [] ; c = c ; isPrep = isCase} ;
|
||||
|
||||
-- To build a preposition from just a case. -- HL 9/19: moved to mkPrep in ParadigmsGer
|
||||
|
||||
PrepNom : Preposition = {s = \\_ => []; isPrep = isCase ; c = Nom ; s2 = []} ;
|
||||
|
||||
vonDat : Preposition = {s=table{GPl => "von" ; GSg Fem => "von der"; _ => "vom"};
|
||||
s2=[]; c=Dat; isPrep=isPrepDefArt} ;
|
||||
-- for testing:
|
||||
Dat' : Preposition = {s = \\_ => []; s2 = []; c=Dat; isPrep=isCase} ;
|
||||
mit' : Preposition = {s = \\_ => "zusammen mit"; s2 = []; c=Dat; isPrep=isPrep} ;
|
||||
|
||||
zuDat' : Preposition = {s=\\_ => "zu"; s2="herein"; c=Dat; isPrep=isPrep} ;
|
||||
zum' : Preposition = {s= table{GPl => "zu"; GSg Fem =>"zur"; _ => "zum"};
|
||||
s2="herein"; c=Dat; isPrep=isPrepDefArt} ;
|
||||
inDat' : Preposition = {s= \\_ => "in" ; s2="drin"; c=Dat; isPrep=isPrep} ;
|
||||
im' : Preposition = {s= table{GPl => "in"; GSg Fem=>"in der"; _ =>"im"};
|
||||
s2="drin"; c=Dat; isPrep=isPrepDefArt} ;
|
||||
inAcc' : Preposition = {s=\\_ => "in"; s2="hinein"; c=Acc; isPrep=isPrep} ;
|
||||
ins' : Preposition = {s=table{GPl => "in"; GSg Masc=>"in den"; GSg Fem=>"in die"; GSg Neutr=>"ins"};
|
||||
s2="hinein"; c=Acc; isPrep=isPrepDefArt} ;
|
||||
|
||||
-- To build passive: accusative object -> nom subject; others -> same case or prep
|
||||
|
||||
@@ -473,8 +498,8 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
-- Here we define personal and relative pronouns.
|
||||
-- All personal pronouns, except "ihr", conform to the simple pattern $mkPronPers$.
|
||||
|
||||
mkPronPers : (x1,_,_,_,x5 : Str) -> Gender -> Number -> Person ->
|
||||
{s : NPForm => Str ; a : Agr} =
|
||||
mkPronPers : (x1,_,_,_,x5 : Str) -> Gender -> Number -> Person ->
|
||||
{s : NPForm => Str ; a : Agr} =
|
||||
\ich,mich,mir,meiner,mein,g,n,p -> {
|
||||
s = table {
|
||||
NPCase c => caselist ich mich mir meiner ! c ;
|
||||
@@ -486,7 +511,12 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
}
|
||||
}
|
||||
} ;
|
||||
a = Ag g n p
|
||||
a = case <g,n,p> of {
|
||||
<_,Pl,p > => AgPl p ;
|
||||
<g,Sg,P3> => AgSgP3 g ;
|
||||
<_,Sg,P1> => AgSgP1 ;
|
||||
<_,Sg,P2> => AgSgP2 -- for "man", "Sie", set in StructuralGer HL
|
||||
}
|
||||
} ;
|
||||
|
||||
pronEnding : GenNum => Case => Str = table {
|
||||
@@ -503,30 +533,14 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
GPl => caselist "die" "die" "den" "der"
|
||||
} ;
|
||||
|
||||
{- -- used in SymbolGer:
|
||||
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" ;
|
||||
<CVonDat, GSg (Masc | Neutr)> => "vom" ;
|
||||
_ => 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 ->
|
||||
let
|
||||
ad : GenNum -> Case -> Str = \gn,c ->
|
||||
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 => case n of {Sg => ad (GSg g) c ; _ => ad GPl c} ;
|
||||
|
||||
-- This auxiliary gives the forms in each degree of adjectives.
|
||||
|
||||
@@ -559,7 +573,7 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
-- For $Verb$.
|
||||
|
||||
VPC : Type = {
|
||||
s : Bool => Agr => VPForm => { -- True = prefix glued to verb
|
||||
s : Bool => VAgr => VPForm => { -- True = prefix glued to verb
|
||||
fin : Str ; -- wird
|
||||
inf, inf2 : Str -- lesen,[] | gelesen,haben | können,haben (= gekonnt,haben)
|
||||
} -- HL 11/6/2019 Fut Anter: lesen gekonnt haben => haben lesen können
|
||||
@@ -575,8 +589,9 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
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
|
||||
extr: (Agr => Str)} ; -- e.g. ihn [] versuchen (lasse) [, ihr zu helfen]
|
||||
c1 : Preposition -- case of subject
|
||||
c1 : Preposition -- case of subject
|
||||
} ;
|
||||
|
||||
VPSlash = VP ** {c2 : Preposition ; objCtrl : Bool} ; -- HL 3/2019 objCtr added
|
||||
|
||||
-- objCtrl distinguishes object-control from subject-control verb v:V2V in VP.s:
|
||||
@@ -587,26 +602,26 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
let
|
||||
isAux = vp.isAux ;
|
||||
verb = vp.s ;
|
||||
vfin : Bool -> Mood -> Tense -> Agr -> Str = \b,m,t,a ->
|
||||
vfin : Bool -> Mood -> Tense -> VAgr -> Str = \b,m,t,a ->
|
||||
verb.s ! vFin b m t a ;
|
||||
vinf = verb.s ! VInf False ;
|
||||
vpart = if_then_Str isAux vinf (verb.s ! VPastPart APred) ;
|
||||
|
||||
vHaben = auxPerfect verb ;
|
||||
hat : Mood -> Tense -> Agr -> Str = \m,t,a ->
|
||||
hat : Mood -> Tense -> VAgr -> Str = \m,t,a ->
|
||||
vHaben ! vFin False m t a ;
|
||||
haben : Str = vHaben ! VInf False ;
|
||||
|
||||
wird : Mood -> Agr -> Str = \m,a ->
|
||||
wird : Mood -> VAgr -> Str = \m,a ->
|
||||
let
|
||||
an = numberAgr a ;
|
||||
ap = personAgr a ;
|
||||
an : Number = numberAgr a ;
|
||||
ap : Person = personAgr a ;
|
||||
in
|
||||
case m of {
|
||||
MIndic => werden_V.s ! VFin False (VPresInd an ap) ;
|
||||
MIndic => werden_V.s ! VFin False (VPresInd an ap) ;
|
||||
MConjunct => werden_V.s ! VFin False (VPresSubj an ap)
|
||||
} ;
|
||||
wuerde : Agr -> Str = \a -> --# notpresent
|
||||
} ;
|
||||
wuerde : VAgr -> Str = \a -> --# notpresent
|
||||
werden_V.s ! VFin False (VImpfSubj (numberAgr a) (personAgr a)) ; --# notpresent
|
||||
|
||||
auf = verb.prefix ;
|
||||
@@ -730,10 +745,10 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
|
||||
insertObjNP : NP -> Preposition -> VPSlash -> VPSlash = \np,prep,vp ->
|
||||
let obj = appPrepNP prep np ;
|
||||
b : Bool = case prep.isPrep of {isPrep | isPrepDefArt => True ; _ => False} ;
|
||||
b : Bool = case isPrep of {isPrep | isPrepDefArt => True ; _ => False} ;
|
||||
w = np.w ;
|
||||
c = prep.c
|
||||
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 ->
|
||||
vp ** {
|
||||
@@ -759,10 +774,9 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
<vpnn.p1, vpnn.p2, vpnn.p3 ++ obj, vpnn.p4> }
|
||||
} ; -- the ordering of objects of v:V3 (and v:V4) is also determined by Slash?V3 (and Slash?V4)
|
||||
|
||||
|
||||
insertObjRefl : VPSlash -> VPSlash = \vp -> -- HL 6/2019, to order reflPron < neg < prep+reflPron
|
||||
let prep = vp.c2 ; -- HL 7/22 reduced to c:Case
|
||||
obj : Agr => Str = \\a => prep.s ! GPl ++ reflPron ! a ! prep.c ++ prep.s2 ;
|
||||
let prep = vp.c2 ;
|
||||
obj : Agr => Str = \\a => prep.s ! GPl ++ reflPron ! a ! prep.c ++ prep.s2
|
||||
in vp ** {
|
||||
nn = \\a =>
|
||||
let vpnn = vp.nn ! a in
|
||||
@@ -837,14 +851,15 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
} ;
|
||||
|
||||
mkClause : Str -> Agr -> VP -> Clause = \subj,agr,vp ->
|
||||
let vps = useVP vp in {
|
||||
let vagr = agr2vagr agr ;
|
||||
vps = useVP vp in {
|
||||
s = \\m,t,a,b,o =>
|
||||
let
|
||||
ord = case o of {
|
||||
Sub => True ; -- glue prefix to verb
|
||||
_ => False
|
||||
} ;
|
||||
verb = vps.s ! ord ! agr ! VPFinite m t a ;
|
||||
verb = vps.s ! ord ! vagr ! VPFinite m t a ;
|
||||
haben = verb.inf2 ;
|
||||
neg = negation ! b ;
|
||||
obj1 = (vp.nn ! agr).p1 ++ (vp.nn ! agr).p2 ; -- refl ++ pronouns ++ light nps
|
||||
@@ -912,7 +927,7 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
in
|
||||
<
|
||||
\\agr => (vp.nn ! agr).p1 ++ (vp.nn ! agr).p2 ++ (vp.nn ! agr).p3 ++ (vp.nn ! agr).p4 ++ vp.a2,
|
||||
vp.a1 ++ vp.adj ++ (vps.s ! (notB isAux) ! agrP3 Sg ! VPInfinit Simul).inf, -- vp.a1 ! Pos
|
||||
vp.a1 ++ vp.adj ++ (vps.s ! (notB isAux) ! vagrP3 Sg ! VPInfinit Simul).inf, -- vp.a1 ! Pos
|
||||
vp.inf.inpl.p2, -- ! HL
|
||||
infExt ++ vp.ext
|
||||
> ;
|
||||
@@ -923,7 +938,7 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
{
|
||||
objs = \\agr => (vp.nn ! agr).p1 ++ (vp.nn ! agr).p2 ++ negation ! pol ++ (vp.nn ! agr).p3
|
||||
++ vp.a2 ++ (vp.nn ! agr).p4 ; -- objects + predicative A|CN|NP
|
||||
pred = vp.a1 ++ vp.adj ++ (vps.s ! (notB isAux) ! agrP3 Sg ! VPInfinit ant).inf ;
|
||||
pred = vp.a1 ++ vp.adj ++ (vps.s ! (notB isAux) ! vagrP3 Sg ! VPInfinit ant).inf ;
|
||||
-- inplace and extracted parts of vp.inf:
|
||||
inpl = vp.inf.inpl ;
|
||||
extr = vp.inf.extr
|
||||
@@ -934,7 +949,7 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
\isAux, ant, pol, vp -> let vps = useVP vp in
|
||||
{ objs = \\agr => (vp.nn ! agr).p1 ++ (vp.nn ! agr).p2 ++ negation ! pol ++ (vp.nn ! agr).p3
|
||||
++ vp.a2 ++ (vp.nn ! agr).p4 ; -- objects + predicative A|CN|NP
|
||||
pred = vp.inf.inpl.p2 ++ vp.a1 ++ vp.adj ++ (vps.s ! (notB isAux) ! agrP3 Sg ! VPInfinit ant).inf ;
|
||||
pred = vp.inf.inpl.p2 ++ vp.a1 ++ vp.adj ++ (vps.s ! (notB isAux) ! vagrP3 Sg ! VPInfinit ant).inf ;
|
||||
-- inplace and extracted parts of vp.inf:
|
||||
inpl = <vp.inf.inpl.p1, []> ; -- move the predicate part to pred
|
||||
extr = vp.inf.extr
|
||||
@@ -945,7 +960,7 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
-- let vpi = infVP isAux vp in
|
||||
-- vpi.p1 ! agrP3 Sg ++ vpi.p3 ++ vpi.p2 ++ vpi.p4 ;
|
||||
let vpi = infVP isAux Simul Pos vp ; -- HL 3/2022
|
||||
agr : Agr = (Ag Masc Sg P3) ;
|
||||
agr : Agr = AgSgP3Gen ; -- HL 17.8.2023
|
||||
glue : (Agr => Str)*Str -> Str = \i -> i.p1!agr ++ i.p2
|
||||
in
|
||||
glue (embedInf vpi.inpl <vpi.objs, vpi.pred>) ++ vpi.extr!agr ++ vp.ext ;
|
||||
@@ -953,47 +968,64 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
-- The nominative case is not used as reflexive, but defined here
|
||||
-- so that we can reuse this in personal pronouns.
|
||||
|
||||
reflPron : Agr => Case => Str = table {
|
||||
Ag _ Sg P1 => caselist "ich" "mich" "mir" "meiner" ;
|
||||
Ag _ Sg P2 => caselist "du" "dich" "dir" "deiner" ;
|
||||
Ag Masc Sg P3 => caselist "er" "sich" "sich" "seiner" ;
|
||||
Ag Fem Sg P3 => caselist "sie" "sich" "sich" "ihrer" ;
|
||||
Ag Neutr Sg P3 => caselist "es" "sich" "sich" "seiner" ;
|
||||
Ag _ Pl P1 => caselist "wir" "uns" "uns" "unser" ;
|
||||
Ag _ Pl P2 => caselist "ihr" "euch" "euch" "euer" ;
|
||||
Ag _ Pl P3 => caselist "sie" "sich" "sich" "ihrer"
|
||||
reflPron : Agr => Case => Str = table { -- with persPron nominative
|
||||
AgSgP1 => caselist "ich" "mich" "mir" "meiner" ;
|
||||
AgSgP2 => caselist "du" "dich" "dir" "deiner" ;
|
||||
AgSgP3 Masc => caselist "er" "sich" "sich" "seiner" ;
|
||||
AgSgP3 Fem => caselist "sie" "sich" "sich" "ihrer" ;
|
||||
AgSgP3 Neutr => caselist "es" "sich" "sich" "seiner" ;
|
||||
AgSgP3Gen => caselist "man selbst" "sich" "sich" "seiner" ; -- älter als man selbst sein
|
||||
AgPl P1 => caselist "wir" "uns" "uns" "unser" ;
|
||||
AgPl P2 => caselist "ihr" "euch" "euch" "euer" ;
|
||||
AgPl P3 => caselist "sie" "sich" "sich" "ihrer" ;
|
||||
AgPlPol => caselist "Sie" "sich" "sich" "Ihrer" -- HL 8/2023
|
||||
-- ; AgPlReci => caselist "man" "einander" "einander" "einander" -- reciPron ?
|
||||
} ;
|
||||
|
||||
possPron : Agr -> Number -> Gender -> Case -> Str = \a,n,g,c -> case <a,n,g> of {
|
||||
<Ag _ Sg P1,Sg,Masc> => caselist "mein" "meinen" "meinem" "meines" ! c ;
|
||||
<Ag _ Sg P1,Sg,Fem> => caselist "meine" "meine" "meiner" "meiner" ! c ;
|
||||
<Ag _ Sg P1,Sg,Neutr> => caselist "mein" "mein" "meinem" "meines" ! c ;
|
||||
<Ag _ Sg P1,Pl,_> => caselist "meine" "meine" "meinen" "meiner" ! c ;
|
||||
<Ag _ Sg P2,Sg,Masc> => caselist "dein" "deinen" "deinem" "deines" ! c ;
|
||||
<Ag _ Sg P2,Sg,Fem> => caselist "deine" "deine" "deiner" "deiner" ! c ;
|
||||
<Ag _ Sg P2,Sg,Neutr> => caselist "dein" "dein" "deinem" "deines" ! c ;
|
||||
<Ag _ Sg P2,Pl,_> => caselist "deine" "deine" "deinen" "deiner" ! c ;
|
||||
|
||||
<Ag (Masc|Neutr) Sg P3,Sg,Masc> => caselist "sein" "seinen" "seinem" "seines" ! c ;
|
||||
<Ag (Masc|Neutr) Sg P3,Sg,Fem> => caselist "seine" "seine" "seiner" "seiner" ! c ;
|
||||
<Ag (Masc|Neutr) Sg P3,Sg,Neutr> => caselist "sein" "sein" "seinem" "seines" ! c ;
|
||||
<Ag (Masc|Neutr) Sg P3,Pl,_> => caselist "seine" "seine" "seinen" "seiner" ! c ;
|
||||
<AgSgP1,Sg,Masc> => caselist "mein" "meinen" "meinem" "meines" ! c ;
|
||||
<AgSgP1,Sg,Fem> => caselist "meine" "meine" "meiner" "meiner" ! c ;
|
||||
<AgSgP1,Sg,Neutr> => caselist "mein" "mein" "meinem" "meines" ! c ;
|
||||
<AgSgP1,Pl,_> => caselist "meine" "meine" "meinen" "meiner" ! c ;
|
||||
<AgSgP2,Sg,Masc> => caselist "dein" "deinen" "deinem" "deines" ! c ;
|
||||
<AgSgP2,Sg,Fem> => caselist "deine" "deine" "deiner" "deiner" ! c ;
|
||||
<AgSgP2,Sg,Neutr> => caselist "dein" "dein" "deinem" "deines" ! c ;
|
||||
<AgSgP2,Pl,_> => caselist "deine" "deine" "deinen" "deiner" ! c ;
|
||||
|
||||
<Ag _ _ P3,Sg,Masc> => caselist "ihr" "ihren" "ihrem" "ihres" ! c ;
|
||||
<Ag _ _ P3,Sg,Fem> => caselist "ihre" "ihre" "ihrer" "ihrer" ! c ;
|
||||
<Ag _ _ P3,Sg,Neutr> => caselist "ihr" "ihr" "ihrem" "ihres" ! c ;
|
||||
<Ag _ _ P3,Pl,_> => caselist "ihre" "ihre" "ihren" "ihrer" ! c ;
|
||||
<AgSgP3 Fem,Sg,Masc> => caselist "ihr" "ihren" "ihrem" "ihres" ! c ;
|
||||
<AgSgP3 Fem,Sg,Fem> => caselist "ihre" "ihre" "ihrer" "ihrer" ! c ;
|
||||
<AgSgP3 Fem,Sg,Neutr> => caselist "ihr" "ihr" "ihrem" "ihres" ! c ;
|
||||
<AgSgP3 Fem,Pl,_> => caselist "ihre" "ihre" "ihren" "ihrer" ! c ;
|
||||
|
||||
<Ag _ Pl P1,Sg,Masc> => caselist "unser" "unseren" "unserem" "unseres" ! c ;
|
||||
<Ag _ Pl P1,Sg,Fem> => caselist "unsere" "unsere" "unserer" "unserer" ! c ;
|
||||
<Ag _ Pl P1,Sg,Neutr> => caselist "unser" "unser" "unserem" "unseres" ! c ;
|
||||
<Ag _ Pl P1,Pl,_> => caselist "unsere" "unsere" "unseren" "unserer" ! c ;
|
||||
|
||||
<Ag _ Pl P2,Sg,Masc> => caselist "euer" "euren" "eurem" "eures" ! c ;
|
||||
<Ag _ Pl P2,Sg,Fem> => caselist "eure" "eure" "eurer" "eurer" ! c ;
|
||||
<Ag _ Pl P2,Sg,Neutr> => caselist "euer" "euer" "eurem" "eures" ! c ;
|
||||
<Ag _ Pl P2,Pl,_> => caselist "eure" "eure" "euren" "eurer" ! c
|
||||
|
||||
<AgSgP3 _,Sg,Masc> => caselist "sein" "seinen" "seinem" "seines" ! c ;
|
||||
<AgSgP3 _,Sg,Fem> => caselist "seine" "seine" "seiner" "seiner" ! c ;
|
||||
<AgSgP3 _,Sg,Neutr> => caselist "sein" "sein" "seinem" "seines" ! c ;
|
||||
<AgSgP3 _,Pl,_> => caselist "seine" "seine" "seinen" "seiner" ! c ;
|
||||
|
||||
<AgSgP3Gen,Sg,Masc> => caselist "sein" "seinen" "seinem" "seines" ! c ;
|
||||
<AgSgP3Gen,Sg,Fem> => caselist "seine" "seine" "seiner" "seiner" ! c ;
|
||||
<AgSgP3Gen,Sg,Neutr> => caselist "sein" "sein" "seinem" "seines" ! c ;
|
||||
<AgSgP3Gen,Pl,_> => caselist "seine" "seine" "seinen" "seiner" ! c ;
|
||||
|
||||
<AgPl P1,Sg,Masc> => caselist "unser" "unseren" "unserem" "unseres" ! c ;
|
||||
<AgPl P1,Sg,Fem> => caselist "unsere" "unsere" "unserer" "unserer" ! c ;
|
||||
<AgPl P1,Sg,Neutr> => caselist "unser" "unser" "unserem" "unseres" ! c ;
|
||||
<AgPl P1,Pl,_> => caselist "unsere" "unsere" "unseren" "unserer" ! c ;
|
||||
|
||||
<AgPl P2,Sg,Masc> => caselist "euer" "euren" "eurem" "eures" ! c ;
|
||||
<AgPl P2,Sg,Fem> => caselist "eure" "eure" "eurer" "eurer" ! c ;
|
||||
<AgPl P2,Sg,Neutr> => caselist "euer" "euer" "eurem" "eures" ! c ;
|
||||
<AgPl P2,Pl,_> => caselist "eure" "eure" "euren" "eurer" ! c ;
|
||||
|
||||
<AgPl P3,Sg,Masc> => caselist "ihr" "ihren" "ihrem" "ihres" ! c ;
|
||||
<AgPl P3,Sg,Fem> => caselist "ihre" "ihre" "ihrer" "ihrer" ! c ;
|
||||
<AgPl P3,Sg,Neutr> => caselist "ihr" "ihr" "ihrem" "ihres" ! c ;
|
||||
<AgPl P3,Pl,_> => caselist "ihre" "ihre" "ihren" "ihrer" ! c ;
|
||||
|
||||
<AgPlPol,Sg,Masc> => caselist "Ihr" "Ihren" "Ihrem" "Ihres" ! c ;
|
||||
<AgPlPol,Sg,Fem> => caselist "Ihre" "Ihre" "Ihrer" "Ihrer" ! c ;
|
||||
<AgPlPol,Sg,Neutr> => caselist "Ihr" "Ihr" "Ihrem" "Ihres" ! c ;
|
||||
<AgPlPol,Pl,_> => caselist "Ihre" "Ihre" "Ihren" "Ihrer" ! c
|
||||
} ;
|
||||
|
||||
conjThat : Str = "dass" ;
|
||||
@@ -1022,11 +1054,10 @@ resource ResGer = ParamX ** open Prelude in {
|
||||
} ;
|
||||
|
||||
-- Function that allows the construction of non-nominative subjects.
|
||||
|
||||
mkSubject : NP -> Preposition -> {s:Str ; a:Agr} = \np, prep ->
|
||||
let
|
||||
subj = appPrepNP prep np ;
|
||||
agr = case prep.c of { Nom => np.a ; _ => Ag Masc Sg P3 }
|
||||
agr = case prep.c of { Nom => np.a ; _ => AgSgP3 Masc } ;
|
||||
subj = appPrepNP prep np
|
||||
in {s = subj ; a = agr} ;
|
||||
|
||||
sex2gender : Sex -> Gender = \g ->
|
||||
|
||||
Reference in New Issue
Block a user