forked from GitHub/gf-core
German relatives
This commit is contained in:
@@ -3,19 +3,20 @@ concrete CatGer of Cat = open ResGer, Prelude in {
|
|||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
|
|
||||||
Text, Phr, Utt = {s : Str} ;
|
Text, Phr, Utt = {s : Str} ;
|
||||||
|
|
||||||
Imp = {s : Polarity => Number => Str} ;
|
Imp = {s : Polarity => Number => Str} ;
|
||||||
|
|
||||||
S = {s : Order => Str} ;
|
S = {s : Order => Str} ;
|
||||||
QS = {s : QForm => Str} ;
|
QS = {s : QForm => Str} ;
|
||||||
-- RS = {s : Agr => Str} ;
|
RS = {s : GenNum => Str} ;
|
||||||
|
|
||||||
Cl = {s : Tense => Anteriority => Polarity => Order => Str} ;
|
Cl = {s : Tense => Anteriority => Polarity => Order => Str} ;
|
||||||
Slash = {s : Tense => Anteriority => Polarity => Order => Str} ** {c2 : Preposition} ;
|
Slash = {s : Tense => Anteriority => Polarity => Order => Str} ** {c2 : Preposition} ;
|
||||||
|
|
||||||
QCl = {s : Tense => Anteriority => Polarity => QForm => Str} ;
|
QCl = {s : Tense => Anteriority => Polarity => QForm => Str} ;
|
||||||
RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ;
|
RCl = {s : Tense => Anteriority => Polarity => GenNum => Str} ;
|
||||||
|
|
||||||
VP = ResGer.VP ;
|
VP = ResGer.VP ;
|
||||||
V, VS, VQ, VA = ResGer.Verb ; -- = {s : VForm => Str} ;
|
V, VS, VQ, VA = ResGer.Verb ; -- = {s : VForm => Str} ;
|
||||||
@@ -51,8 +52,8 @@ concrete CatGer of Cat = open ResGer, Prelude in {
|
|||||||
IDet = {s : Gender => Case => Str ; n : Number} ;
|
IDet = {s : Gender => Case => Str ; n : Number} ;
|
||||||
IAdv = {s : Str} ;
|
IAdv = {s : Str} ;
|
||||||
|
|
||||||
-- RP = {s : Case => Str ; a : RAgr} ;
|
RP = {s : GenNum => Case => Str ; a : RAgr} ;
|
||||||
--
|
|
||||||
-- Numeral = {s : CardOrd => Str ; n : Number} ;
|
-- Numeral = {s : CardOrd => Str ; n : Number} ;
|
||||||
|
|
||||||
CAdv = {s : Str} ;
|
CAdv = {s : Str} ;
|
||||||
|
|||||||
@@ -13,12 +13,14 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in {
|
|||||||
ask_VQ = regV "fragen" ;
|
ask_VQ = regV "fragen" ;
|
||||||
|
|
||||||
dog_N = mkN4 "Hund" "Hundes" "Hünde" "Hünden" Masc ;
|
dog_N = mkN4 "Hund" "Hundes" "Hünde" "Hünden" Masc ;
|
||||||
-- son_N2 = regN "son" ** {c2 = "of"} ;
|
son_N2 = mkN4 "Sohn" "Sohnes" "Söhne" "Söhnen" Masc **
|
||||||
-- way_N3 = regN "way" ** {c2 = "from" ; c3 = "to"} ;
|
{c2 = {s = "von" ; c = Dat}} ;
|
||||||
--
|
way_N3 = mkN4 "Weg" "Weges" "Wege" "Wegen" Masc **
|
||||||
|
{c2 = {s = "von" ; c = Dat} ; c3 = {s = "nach" ; c = Dat}} ;
|
||||||
|
|
||||||
warm_A = mkA "warm" "warm" "wärmer" "wärmst" ;
|
warm_A = mkA "warm" "warm" "wärmer" "wärmst" ;
|
||||||
-- close_A2 = regA "close" ** {c2 = "to"} ;
|
close_A2 = regA "eng" ** {c2 = {s = "zu" ; c = Dat}} ;
|
||||||
--
|
|
||||||
here_Adv = {s = "hier"} ;
|
here_Adv = {s = "hier"} ;
|
||||||
very_AdA = {s = "sehr"} ;
|
very_AdA = {s = "sehr"} ;
|
||||||
always_AdV = {s = "immer"} ;
|
always_AdV = {s = "immer"} ;
|
||||||
|
|||||||
@@ -79,9 +79,16 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
|
|||||||
n = Pl ;
|
n = Pl ;
|
||||||
a = Strong
|
a = Strong
|
||||||
} ;
|
} ;
|
||||||
--
|
|
||||||
-- ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ;
|
ComplN2 f x = {
|
||||||
-- ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ;
|
s = \\_,n,c => f.s ! n ! c ++ appPrep f.c2 x.s ;
|
||||||
|
g = f.g
|
||||||
|
} ;
|
||||||
|
ComplN3 f x = {
|
||||||
|
s = \\n,c => f.s ! n ! c ++ appPrep f.c2 x.s ;
|
||||||
|
g = f.g ;
|
||||||
|
c2 = f.c3
|
||||||
|
} ;
|
||||||
|
|
||||||
AdjCN ap cn =
|
AdjCN ap cn =
|
||||||
let
|
let
|
||||||
@@ -94,10 +101,19 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
|
|||||||
g = g
|
g = g
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ;
|
RelCN cn rs = {
|
||||||
--
|
s = \\a,n,c => cn.s ! a ! n ! c ++ rs.s ! gennum cn.g n ;
|
||||||
-- SentCN cn s = {s = \\n,c => cn.s ! n ! c ++ conjThat ++ s.s} ;
|
g = cn.g
|
||||||
-- QuestCN cn qs = {s = \\n,c => cn.s ! n ! c ++ qs.s ! QIndir} ;
|
} ;
|
||||||
|
|
||||||
|
SentCN cn s = {
|
||||||
|
s = \\a,n,c => cn.s ! a ! n ! c ++ conjThat ++ s.s ! Sub ;
|
||||||
|
g = cn.g
|
||||||
|
} ;
|
||||||
|
QuestCN cn qs = {
|
||||||
|
s = \\a,n,c => cn.s ! a ! n ! c ++ qs.s ! QIndir ;
|
||||||
|
g = cn.g
|
||||||
|
} ;
|
||||||
|
|
||||||
UseN n = {
|
UseN n = {
|
||||||
s = \\_ => n.s ;
|
s = \\_ => n.s ;
|
||||||
|
|||||||
@@ -60,13 +60,14 @@ resource ParamGer = ParamX ** {
|
|||||||
-- The order of sentence is depends on whether it is used as a main
|
-- The order of sentence is depends on whether it is used as a main
|
||||||
-- clause, inverted, or subordinate.
|
-- clause, inverted, or subordinate.
|
||||||
|
|
||||||
param Order = Main | Inv | Sub ;
|
param
|
||||||
|
Order = Main | Inv | Sub ;
|
||||||
|
|
||||||
|
|
||||||
|
--2 For $Relative$
|
||||||
|
|
||||||
|
RAgr = RNoAg | RAg {n : Number ; p : Person} ;
|
||||||
|
|
||||||
--
|
|
||||||
----2 For $Relative$
|
|
||||||
--
|
|
||||||
-- RAgr = RNoAg | RAg {n : Number ; p : Person} ;
|
|
||||||
--
|
|
||||||
----2 For $Numeral$
|
----2 For $Numeral$
|
||||||
--
|
--
|
||||||
-- CardOrd = NCard | NOrd ;
|
-- CardOrd = NCard | NOrd ;
|
||||||
@@ -84,6 +85,14 @@ resource ParamGer = ParamX ** {
|
|||||||
Pl => GPl
|
Pl => GPl
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- Needed in $RelativeGer$.
|
||||||
|
|
||||||
|
numGenNum : GenNum -> Number = \gn ->
|
||||||
|
case gn of {
|
||||||
|
GSg _ => Sg ;
|
||||||
|
GPl => Pl
|
||||||
|
} ;
|
||||||
|
|
||||||
agrAdj : Gender -> Adjf -> Number -> Case -> AForm = \g,a,n,c ->
|
agrAdj : Gender -> Adjf -> Number -> Case -> AForm = \g,a,n,c ->
|
||||||
AMod a (gennum g n) c ;
|
AMod a (gennum g n) c ;
|
||||||
|
|
||||||
|
|||||||
@@ -1,34 +1,45 @@
|
|||||||
concrete RelativeGer of Relative = CatGer ** open ResGer in {
|
concrete RelativeGer of Relative = CatGer ** open ResGer in {
|
||||||
--
|
|
||||||
-- flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
--
|
|
||||||
-- lin
|
lin
|
||||||
--
|
|
||||||
-- RelCl cl = {
|
RelCl cl = {
|
||||||
-- s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir
|
s = \\t,a,b,_ => "derart" ++ conjThat ++ cl.s ! t ! a ! b ! Sub
|
||||||
-- } ;
|
} ;
|
||||||
--
|
|
||||||
-- RelVP rp vp = {
|
RelVP rp vp = {
|
||||||
-- s = \\t,ant,b,ag =>
|
s = \\t,ant,b,gn =>
|
||||||
-- let
|
let
|
||||||
-- agr = case rp.a of {
|
agr = case rp.a of {
|
||||||
-- RNoAg => ag ;
|
RNoAg => agrP3 (numGenNum gn) ;
|
||||||
-- RAg a => a
|
RAg a => a
|
||||||
-- } ;
|
} ;
|
||||||
-- cl = mkClause (rp.s ! Nom) agr vp
|
cl = mkClause (rp.s ! gn ! Nom) agr vp
|
||||||
-- in
|
in
|
||||||
-- cl.s ! t ! ant ! b ! ODir
|
cl.s ! t ! ant ! b ! Sub
|
||||||
-- } ;
|
} ;
|
||||||
--
|
|
||||||
-- RelSlash rp slash = {
|
RelSlash rp slash = {
|
||||||
-- s = \\t,a,p,_ => slash.c2 ++ rp.s ! Acc ++ slash.s ! t ! a ! p ! ODir
|
s = \\t,a,p,gn =>
|
||||||
-- } ;
|
appPrep slash.c2 (rp.s ! gn) ++ slash.s ! t ! a ! p ! Sub
|
||||||
--
|
} ;
|
||||||
-- FunRP p np rp = {
|
|
||||||
-- s = \\c => np.s ! c ++ p.s ++ rp.s ! Acc ;
|
FunRP p np rp = {
|
||||||
-- a = RAg np.a
|
s = \\gn,c => np.s ! c ++ appPrep p (rp.s ! gn) ;
|
||||||
-- } ;
|
a = RAg np.a
|
||||||
--
|
} ;
|
||||||
-- IdRP = mkIP "which" "which" "whose" Sg ** {a = RNoAg} ;
|
|
||||||
--
|
IdRP = {s = relPron ; a = RNoAg} ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
relPron : GenNum => Case => Str = \\gn,c =>
|
||||||
|
case <gn,c> of {
|
||||||
|
<GSg Fem,Gen> => "deren" ;
|
||||||
|
<GSg g,Gen> => "dessen" ;
|
||||||
|
<GPl,Dat> => "denen" ;
|
||||||
|
<GPl,Gen> => "deren" ;
|
||||||
|
_ => artDef ! gn ! c
|
||||||
|
} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,18 +17,19 @@ concrete SentenceGer of Sentence = CatGer ** open ResGer in {
|
|||||||
verb.fin ++ vp.a1 ! pol ++ verb.inf ++ vp.n2 ! agr ++ vp.a2 ++ vp.ext
|
verb.fin ++ vp.a1 ! pol ++ verb.inf ++ vp.n2 ! agr ++ vp.a2 ++ vp.ext
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- SlashV2 np v2 =
|
SlashV2 np v2 =
|
||||||
-- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
|
mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
|
||||||
--
|
|
||||||
-- SlashVVV2 np vv v2 =
|
SlashVVV2 np vv v2 =
|
||||||
-- mkClause (np.s ! Nom) np.a (insertObj (\\_ => "to" ++ v2.s ! VInf) (predV vv)) **
|
mkClause (np.s ! Nom) np.a
|
||||||
-- {c2 = v2.c2} ;
|
(insertObj (\\a => vv.part ++ v2.s ! VInf) (predV vv)) **
|
||||||
--
|
{c2 = v2.c2} ;
|
||||||
-- AdvSlash slash adv = {
|
|
||||||
-- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
|
AdvSlash slash adv = {
|
||||||
-- c2 = slash.c2
|
s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
|
||||||
-- } ;
|
c2 = slash.c2
|
||||||
--
|
} ;
|
||||||
-- SlashPrep cl prep = cl ** {c2 = prep.s} ;
|
|
||||||
--
|
SlashPrep cl prep = cl ** {c2 = prep} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,7 +9,7 @@ concrete UntensedGer of Untensed = CatGer ** open ResGer in {
|
|||||||
PosQCl cl = {s = cl.s ! Pres ! Simul ! Pos} ;
|
PosQCl cl = {s = cl.s ! Pres ! Simul ! Pos} ;
|
||||||
NegQCl cl = {s = cl.s ! Pres ! Simul ! Neg} ;
|
NegQCl cl = {s = cl.s ! Pres ! Simul ! Neg} ;
|
||||||
|
|
||||||
-- PosRCl cl = {s = cl.s ! Pres ! Simul ! Pos} ;
|
PosRCl cl = {s = cl.s ! Pres ! Simul ! Pos} ;
|
||||||
-- NegRCl cl = {s = cl.s ! Pres ! Simul ! Neg} ;
|
NegRCl cl = {s = cl.s ! Pres ! Simul ! Neg} ;
|
||||||
--
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,3 +98,24 @@ QuestionGer: IDetCN (using NounGer.MkDet)
|
|||||||
> p -cat=QS -mcfg "welcher Hund geht"
|
> p -cat=QS -mcfg "welcher Hund geht"
|
||||||
> p -cat=QS -mcfg "in welchem Hund geht er"
|
> p -cat=QS -mcfg "in welchem Hund geht er"
|
||||||
|
|
||||||
|
wc german/*.gfc
|
||||||
|
69407 total
|
||||||
|
|
||||||
|
NounGer: ComplN2, ComplN3, SentCN, QuestCN
|
||||||
|
LexGer: N2, N3
|
||||||
|
> p -cat=NP "der Sohn von dem Hund"
|
||||||
|
> p -cat=CN -mcfg "Hund ob er geht"
|
||||||
|
|
||||||
|
SentenceGer: Slash rules
|
||||||
|
> p -cat=QS -mcfg "wem hilft er"
|
||||||
|
|
||||||
|
CatGer: RP, RS, RCl
|
||||||
|
ParamGer: RAgr
|
||||||
|
RelativeGer: all (copied from Scand; tweaking betw GenNum, Agr also in CatGer)
|
||||||
|
UntensedGer: PosRCl, NegRCl
|
||||||
|
NounGer: RelCN
|
||||||
|
> p -cat=RCl -mcfg "der geht" | l -table
|
||||||
|
> p -cat=NP -mcfg "der Hund dem wir helfen wollen" | l -table
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user