mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-05-21 00:52:51 -06:00
replaced German Agr record by an algebraic type
This commit is contained in:
@@ -10,7 +10,7 @@ concrete ConjunctionGer of Conjunction =
|
|||||||
ConjAdv conj ss = conjunctDistrSS conj ss ;
|
ConjAdv conj ss = conjunctDistrSS conj ss ;
|
||||||
|
|
||||||
ConjNP conj ss = conjunctDistrTable Case conj ss ** {
|
ConjNP conj ss = conjunctDistrTable Case conj ss ** {
|
||||||
a = {g = Fem ; n = conjNumber conj.n ss.a.n ; p = ss.a.p}
|
a = Ag Fem (conjNumber conj.n (numberAgr ss.a)) (personAgr ss.a)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ConjAP conj ss = conjunctDistrTable AForm conj ss ** {
|
ConjAP conj ss = conjunctDistrTable AForm conj ss ** {
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ concrete IdiomGer of Idiom = CatGer **
|
|||||||
GenericCl vp = mkClause "man" (agrP3 Sg) vp ;
|
GenericCl vp = mkClause "man" (agrP3 Sg) vp ;
|
||||||
|
|
||||||
CleftNP np rs = mkClause "es" (agrP3 Sg)
|
CleftNP np rs = mkClause "es" (agrP3 Sg)
|
||||||
(insertExtrapos (rs.s ! gennum np.a.g np.a.n) ----
|
(insertExtrapos (rs.s ! gennum (genderAgr np.a) (numberAgr np.a)) ----
|
||||||
(insertObj (\\_ => np.s ! rs.c) (predV MorphoGer.sein_V))) ;
|
(insertObj (\\_ => np.s ! rs.c) (predV MorphoGer.sein_V))) ;
|
||||||
|
|
||||||
CleftAdv ad s = mkClause "es" (agrP3 Sg)
|
CleftAdv ad s = mkClause "es" (agrP3 Sg)
|
||||||
@@ -36,7 +36,7 @@ concrete IdiomGer of Idiom = CatGer **
|
|||||||
ProgrVP = insertAdv "eben" ; ----
|
ProgrVP = insertAdv "eben" ; ----
|
||||||
|
|
||||||
ImpPl1 vp = {s =
|
ImpPl1 vp = {s =
|
||||||
(mkClause "wir" {g = Fem ; n = Pl ; p = P1} vp).s !
|
(mkClause "wir" (Ag Fem Pl P1) vp).s !
|
||||||
MConjunct ! Pres ! Simul ! Pos ! Inv
|
MConjunct ! Pres ! Simul ! Pos ! Inv
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
|
|||||||
PredetNP pred np = {
|
PredetNP pred np = {
|
||||||
s = \\c0 =>
|
s = \\c0 =>
|
||||||
let c = case pred.c of {NoCase => c0 ; PredCase k => k} in
|
let c = case pred.c of {NoCase => c0 ; PredCase k => k} in
|
||||||
pred.s ! np.a.n ! Masc ! c0 ++ np.s ! c ; ---- g
|
pred.s ! numberAgr np.a ! Masc ! c0 ++ np.s ! c ; ---- g
|
||||||
a = np.a
|
a = np.a
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -157,7 +157,8 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
RelNP np rs = {
|
RelNP np rs = {
|
||||||
s = \\c => np.s ! c ++ "," ++ rs.s ! gennum np.a.g np.a.n ;
|
s = \\c => np.s ! c ++ "," ++
|
||||||
|
rs.s ! gennum (genderAgr np.a) (numberAgr np.a) ;
|
||||||
a = np.a ;
|
a = np.a ;
|
||||||
isPron = False
|
isPron = False
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ concrete RelativeGer of Relative = CatGer ** open ResGer in {
|
|||||||
let
|
let
|
||||||
agr = case rp.a of {
|
agr = case rp.a of {
|
||||||
RNoAg => agrP3 (numGenNum gn) ;
|
RNoAg => agrP3 (numGenNum gn) ;
|
||||||
RAg a => a ** {g = Neutr}
|
RAg n p => Ag Neutr n p
|
||||||
} ;
|
} ;
|
||||||
cl = mkClause (rp.s ! gn ! Nom) agr vp
|
cl = mkClause (rp.s ! gn ! Nom) agr vp
|
||||||
in
|
in
|
||||||
@@ -30,7 +30,7 @@ concrete RelativeGer of Relative = CatGer ** open ResGer in {
|
|||||||
|
|
||||||
FunRP p np rp = {
|
FunRP p np rp = {
|
||||||
s = \\gn,c => np.s ! c ++ appPrep p (rp.s ! gn) ;
|
s = \\gn,c => np.s ! c ++ appPrep p (rp.s ! gn) ;
|
||||||
a = RAg {n = np.a.n ; p = np.a.p}
|
a = RAg (numberAgr np.a) (personAgr np.a)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
IdRP = {s = relPron ; a = RNoAg} ;
|
IdRP = {s = relPron ; a = RNoAg} ;
|
||||||
|
|||||||
@@ -29,9 +29,16 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
|
|
||||||
GenNum = GSg Gender | GPl ;
|
GenNum = GSg Gender | GPl ;
|
||||||
|
|
||||||
-- Agreement of $NP$ is a record.
|
-- Agreement of $NP$ has three parts.
|
||||||
|
|
||||||
oper Agr = {g : Gender ; n : Number ; p : Person} ;
|
Agr = Ag Gender Number Person ;
|
||||||
|
|
||||||
|
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} ;
|
||||||
|
|
||||||
-- Pronouns are the worst-case noun phrases, which have both case
|
-- Pronouns are the worst-case noun phrases, which have both case
|
||||||
-- and possessive forms.
|
-- and possessive forms.
|
||||||
@@ -87,7 +94,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
|
|
||||||
--2 For $Relative$
|
--2 For $Relative$
|
||||||
|
|
||||||
RAgr = RNoAg | RAg {n : Number ; p : Person} ;
|
RAgr = RNoAg | RAg Number Person ;
|
||||||
|
|
||||||
--2 For $Numeral$
|
--2 For $Numeral$
|
||||||
|
|
||||||
@@ -100,7 +107,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
agrP3 : Number -> Agr = agrgP3 Neutr ;
|
agrP3 : Number -> Agr = agrgP3 Neutr ;
|
||||||
|
|
||||||
agrgP3 : Gender -> Number -> Agr = \g,n ->
|
agrgP3 : Gender -> Number -> Agr = \g,n ->
|
||||||
{g = g ; n = n ; p = P3} ;
|
Ag g n P3 ;
|
||||||
|
|
||||||
gennum : Gender -> Number -> GenNum = \g,n ->
|
gennum : Gender -> Number -> GenNum = \g,n ->
|
||||||
case n of {
|
case n of {
|
||||||
@@ -142,19 +149,23 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
vFin : Bool -> Mood -> Tense -> Agr -> VForm = \b,m,t,a ->
|
vFin : Bool -> Mood -> Tense -> Agr -> VForm = \b,m,t,a ->
|
||||||
|
let
|
||||||
|
an = numberAgr a ;
|
||||||
|
ap = personAgr a ;
|
||||||
|
in
|
||||||
case <t,m> of {
|
case <t,m> of {
|
||||||
<Pres,MIndic> => VFin b (VPresInd a.n a.p) ;
|
<Pres,MIndic> => VFin b (VPresInd an ap) ;
|
||||||
<Pres,MConjunct> => VFin b (VPresSubj a.n a.p)
|
<Pres,MConjunct> => VFin b (VPresSubj an ap)
|
||||||
; --# notpresent
|
; --# notpresent
|
||||||
<Past,MIndic> => VFin b (VImpfInd a.n a.p) ; --# notpresent
|
<Past,MIndic> => VFin b (VImpfInd an ap) ; --# notpresent
|
||||||
<Past,MConjunct> => VFin b (VImpfSubj a.n a.p) ; --# notpresent
|
<Past,MConjunct> => VFin b (VImpfSubj an ap) ; --# notpresent
|
||||||
_ => VInf False --# notpresent
|
_ => VInf False --# notpresent
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
conjAgr : Agr -> Agr -> Agr = \a,b -> {
|
conjAgr : Agr -> Agr -> Agr = \a,b -> mkAgr {
|
||||||
g = Neutr ; ----
|
g = Neutr ; ----
|
||||||
n = conjNumber a.n b.n ;
|
n = conjNumber (numberAgr a) (numberAgr b) ;
|
||||||
p = conjPerson a.p b.p
|
p = conjPerson (personAgr a) (personAgr b)
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- For $Lex$.
|
-- For $Lex$.
|
||||||
@@ -326,7 +337,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
NPCase c => caselist ich mich mir meiner ! c ;
|
NPCase c => caselist ich mich mir meiner ! c ;
|
||||||
NPPoss gn c => mein + pronEnding ! gn ! c
|
NPPoss gn c => mein + pronEnding ! gn ! c
|
||||||
} ;
|
} ;
|
||||||
a = {g = g ; n = n ; p = p}
|
a = Ag g n p
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
pronEnding : GenNum => Case => Str = table {
|
pronEnding : GenNum => Case => Str = table {
|
||||||
@@ -405,12 +416,17 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
vHaben ! vFin False m t a ;
|
vHaben ! vFin False m t a ;
|
||||||
haben : Str = vHaben ! VInf False ;
|
haben : Str = vHaben ! VInf False ;
|
||||||
|
|
||||||
wird : Mood -> Agr -> Str = \m,a -> case m of {
|
wird : Mood -> Agr -> Str = \m,a ->
|
||||||
MIndic => werden_V.s ! VFin False (VPresInd a.n a.p) ;
|
let
|
||||||
MConjunct => werden_V.s ! VFin False (VPresSubj a.n a.p)
|
an = numberAgr a ;
|
||||||
|
ap = personAgr a ;
|
||||||
|
in
|
||||||
|
case m of {
|
||||||
|
MIndic => werden_V.s ! VFin False (VPresInd an ap) ;
|
||||||
|
MConjunct => werden_V.s ! VFin False (VPresSubj an ap)
|
||||||
} ;
|
} ;
|
||||||
wuerde : Agr -> Str = \a -> --# notpresent
|
wuerde : Agr -> Str = \a -> --# notpresent
|
||||||
werden_V.s ! VFin False (VImpfSubj a.n a.p) ; --# notpresent
|
werden_V.s ! VFin False (VImpfSubj (numberAgr a) (personAgr a)) ; --# notpresent
|
||||||
|
|
||||||
auf = verb.prefix ;
|
auf = verb.prefix ;
|
||||||
|
|
||||||
@@ -433,7 +449,7 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
Fut => vf True (wird m a) (vpart ++ haben) ; --# notpresent
|
Fut => vf True (wird m a) (vpart ++ haben) ; --# notpresent
|
||||||
Cond => vf True (wuerde a) (vpart ++ haben) --# notpresent
|
Cond => vf True (wuerde a) (vpart ++ haben) --# notpresent
|
||||||
} ; --# notpresent
|
} ; --# notpresent
|
||||||
VPImperat False => vf False (verb.s ! VImper a.n) [] ;
|
VPImperat False => vf False (verb.s ! VImper (numberAgr a)) [] ;
|
||||||
VPImperat True => vf False (verb.s ! VFin False (VPresSubj Pl P3)) [] ;
|
VPImperat True => vf False (verb.s ! VFin False (VPresSubj Pl P3)) [] ;
|
||||||
VPInfinit Anter => vf True [] (vpart ++ haben) ; --# notpresent
|
VPInfinit Anter => vf True [] (vpart ++ haben) ; --# notpresent
|
||||||
VPInfinit Simul => vf True [] (verb.s ! VInf b)
|
VPInfinit Simul => vf True [] (verb.s ! VInf b)
|
||||||
@@ -617,14 +633,14 @@ resource ResGer = ParamX ** open Prelude in {
|
|||||||
-- be needed.
|
-- be needed.
|
||||||
|
|
||||||
reflPron : Agr => Case => Str = table {
|
reflPron : Agr => Case => Str = table {
|
||||||
{n = Sg ; p = P1} => caselist "ich" "mich" "mir" "meiner" ;
|
Ag _ Sg P1 => caselist "ich" "mich" "mir" "meiner" ;
|
||||||
{n = Sg ; p = P2} => caselist "du" "dich" "dir" "deiner" ;
|
Ag _ Sg P2 => caselist "du" "dich" "dir" "deiner" ;
|
||||||
{g = Masc ; n = Sg ; p = P3} => caselist "er" "sich" "sich" "seiner" ;
|
Ag Masc Sg P3 => caselist "er" "sich" "sich" "seiner" ;
|
||||||
{g = Fem ; n = Sg ; p = P3} => caselist "sie" "sich" "sich" "ihrer" ;
|
Ag Fem Sg P3 => caselist "sie" "sich" "sich" "ihrer" ;
|
||||||
{g = Neutr ; n = Sg ; p = P3} => caselist "es" "sich" "sich" "seiner" ;
|
Ag Neutr Sg P3 => caselist "es" "sich" "sich" "seiner" ;
|
||||||
{n = Pl ; p = P1} => caselist "wir" "uns" "uns" "unser" ;
|
Ag _ Pl P1 => caselist "wir" "uns" "uns" "unser" ;
|
||||||
{n = Pl ; p = P2} => caselist "ihr" "euch" "euch" "euer" ;
|
Ag _ Pl P2 => caselist "ihr" "euch" "euch" "euer" ;
|
||||||
{n = Pl ; p = P3} => caselist "sie" "sich" "sich" "ihrer"
|
Ag _ Pl P3 => caselist "sie" "sich" "sich" "ihrer"
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
conjThat : Str = "daß" ;
|
conjThat : Str = "daß" ;
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ concrete SentenceGer of Sentence = CatGer ** open ResGer, Prelude in {
|
|||||||
ImpF _ True => <P3,"Sie",True> ; -- setzen Sie sich
|
ImpF _ True => <P3,"Sie",True> ; -- setzen Sie sich
|
||||||
_ => <P2,[],False>
|
_ => <P2,[],False>
|
||||||
} ;
|
} ;
|
||||||
agr = {g = Fem ; n = numImp n ; p = ps.p1} ; --- g does not matter
|
agr = Ag Fem (numImp n) ps.p1 ; --- g does not matter
|
||||||
verb = vps.s ! False ! agr ! VPImperat ps.p3 ;
|
verb = vps.s ! False ! agr ! VPImperat ps.p3 ;
|
||||||
inf = vp.inf ++ verb.inf ;
|
inf = vp.inf ++ verb.inf ;
|
||||||
in
|
in
|
||||||
|
|||||||
Reference in New Issue
Block a user