mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 04:59:31 -06:00
German relatives
This commit is contained in:
@@ -3,19 +3,20 @@ concrete CatGer of Cat = open ResGer, Prelude in {
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lincat
|
||||
|
||||
Text, Phr, Utt = {s : Str} ;
|
||||
|
||||
Imp = {s : Polarity => Number => Str} ;
|
||||
|
||||
S = {s : Order => Str} ;
|
||||
QS = {s : QForm => Str} ;
|
||||
-- RS = {s : Agr => Str} ;
|
||||
RS = {s : GenNum => Str} ;
|
||||
|
||||
Cl = {s : Tense => Anteriority => Polarity => Order => Str} ;
|
||||
Slash = {s : Tense => Anteriority => Polarity => Order => Str} ** {c2 : Preposition} ;
|
||||
|
||||
QCl = {s : Tense => Anteriority => Polarity => QForm => Str} ;
|
||||
RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ;
|
||||
RCl = {s : Tense => Anteriority => Polarity => GenNum => Str} ;
|
||||
|
||||
VP = ResGer.VP ;
|
||||
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} ;
|
||||
IAdv = {s : Str} ;
|
||||
|
||||
-- RP = {s : Case => Str ; a : RAgr} ;
|
||||
--
|
||||
RP = {s : GenNum => Case => Str ; a : RAgr} ;
|
||||
|
||||
-- Numeral = {s : CardOrd => Str ; n : Number} ;
|
||||
|
||||
CAdv = {s : Str} ;
|
||||
|
||||
@@ -13,12 +13,14 @@ concrete LexGer of Lex = CatGer ** open ResGer, Prelude in {
|
||||
ask_VQ = regV "fragen" ;
|
||||
|
||||
dog_N = mkN4 "Hund" "Hundes" "Hünde" "Hünden" Masc ;
|
||||
-- son_N2 = regN "son" ** {c2 = "of"} ;
|
||||
-- way_N3 = regN "way" ** {c2 = "from" ; c3 = "to"} ;
|
||||
--
|
||||
son_N2 = mkN4 "Sohn" "Sohnes" "Söhne" "Söhnen" Masc **
|
||||
{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" ;
|
||||
-- close_A2 = regA "close" ** {c2 = "to"} ;
|
||||
--
|
||||
close_A2 = regA "eng" ** {c2 = {s = "zu" ; c = Dat}} ;
|
||||
|
||||
here_Adv = {s = "hier"} ;
|
||||
very_AdA = {s = "sehr"} ;
|
||||
always_AdV = {s = "immer"} ;
|
||||
|
||||
@@ -79,9 +79,16 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
|
||||
n = Pl ;
|
||||
a = Strong
|
||||
} ;
|
||||
--
|
||||
-- ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ;
|
||||
-- ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ;
|
||||
|
||||
ComplN2 f x = {
|
||||
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 =
|
||||
let
|
||||
@@ -94,10 +101,19 @@ concrete NounGer of Noun = CatGer ** open ResGer, Prelude in {
|
||||
g = g
|
||||
} ;
|
||||
|
||||
-- RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ;
|
||||
--
|
||||
-- SentCN cn s = {s = \\n,c => cn.s ! n ! c ++ conjThat ++ s.s} ;
|
||||
-- QuestCN cn qs = {s = \\n,c => cn.s ! n ! c ++ qs.s ! QIndir} ;
|
||||
RelCN cn rs = {
|
||||
s = \\a,n,c => cn.s ! a ! n ! c ++ rs.s ! gennum cn.g n ;
|
||||
g = cn.g
|
||||
} ;
|
||||
|
||||
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 = {
|
||||
s = \\_ => n.s ;
|
||||
|
||||
@@ -60,13 +60,14 @@ resource ParamGer = ParamX ** {
|
||||
-- The order of sentence is depends on whether it is used as a main
|
||||
-- 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$
|
||||
--
|
||||
-- CardOrd = NCard | NOrd ;
|
||||
@@ -84,6 +85,14 @@ resource ParamGer = ParamX ** {
|
||||
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 ->
|
||||
AMod a (gennum g n) c ;
|
||||
|
||||
|
||||
@@ -1,34 +1,45 @@
|
||||
concrete RelativeGer of Relative = CatGer ** open ResGer in {
|
||||
--
|
||||
-- flags optimize=all_subs ;
|
||||
--
|
||||
-- lin
|
||||
--
|
||||
-- RelCl cl = {
|
||||
-- s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir
|
||||
-- } ;
|
||||
--
|
||||
-- RelVP rp vp = {
|
||||
-- s = \\t,ant,b,ag =>
|
||||
-- let
|
||||
-- agr = case rp.a of {
|
||||
-- RNoAg => ag ;
|
||||
-- RAg a => a
|
||||
-- } ;
|
||||
-- cl = mkClause (rp.s ! Nom) agr vp
|
||||
-- in
|
||||
-- cl.s ! t ! ant ! b ! ODir
|
||||
-- } ;
|
||||
--
|
||||
-- RelSlash rp slash = {
|
||||
-- s = \\t,a,p,_ => slash.c2 ++ rp.s ! Acc ++ slash.s ! t ! a ! p ! ODir
|
||||
-- } ;
|
||||
--
|
||||
-- FunRP p np rp = {
|
||||
-- s = \\c => np.s ! c ++ p.s ++ rp.s ! Acc ;
|
||||
-- a = RAg np.a
|
||||
-- } ;
|
||||
--
|
||||
-- IdRP = mkIP "which" "which" "whose" Sg ** {a = RNoAg} ;
|
||||
--
|
||||
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
|
||||
RelCl cl = {
|
||||
s = \\t,a,b,_ => "derart" ++ conjThat ++ cl.s ! t ! a ! b ! Sub
|
||||
} ;
|
||||
|
||||
RelVP rp vp = {
|
||||
s = \\t,ant,b,gn =>
|
||||
let
|
||||
agr = case rp.a of {
|
||||
RNoAg => agrP3 (numGenNum gn) ;
|
||||
RAg a => a
|
||||
} ;
|
||||
cl = mkClause (rp.s ! gn ! Nom) agr vp
|
||||
in
|
||||
cl.s ! t ! ant ! b ! Sub
|
||||
} ;
|
||||
|
||||
RelSlash rp slash = {
|
||||
s = \\t,a,p,gn =>
|
||||
appPrep slash.c2 (rp.s ! gn) ++ slash.s ! t ! a ! p ! Sub
|
||||
} ;
|
||||
|
||||
FunRP p np rp = {
|
||||
s = \\gn,c => np.s ! c ++ appPrep p (rp.s ! gn) ;
|
||||
a = RAg np.a
|
||||
} ;
|
||||
|
||||
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
|
||||
} ;
|
||||
|
||||
-- SlashV2 np v2 =
|
||||
-- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
|
||||
--
|
||||
-- SlashVVV2 np vv v2 =
|
||||
-- mkClause (np.s ! Nom) np.a (insertObj (\\_ => "to" ++ v2.s ! VInf) (predV vv)) **
|
||||
-- {c2 = v2.c2} ;
|
||||
--
|
||||
-- AdvSlash slash adv = {
|
||||
-- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
|
||||
-- c2 = slash.c2
|
||||
-- } ;
|
||||
--
|
||||
-- SlashPrep cl prep = cl ** {c2 = prep.s} ;
|
||||
--
|
||||
SlashV2 np v2 =
|
||||
mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
|
||||
|
||||
SlashVVV2 np vv v2 =
|
||||
mkClause (np.s ! Nom) np.a
|
||||
(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 ;
|
||||
c2 = slash.c2
|
||||
} ;
|
||||
|
||||
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} ;
|
||||
NegQCl cl = {s = cl.s ! Pres ! Simul ! Neg} ;
|
||||
|
||||
-- PosRCl cl = {s = cl.s ! Pres ! Simul ! Pos} ;
|
||||
-- NegRCl cl = {s = cl.s ! Pres ! Simul ! Neg} ;
|
||||
--
|
||||
PosRCl cl = {s = cl.s ! Pres ! Simul ! Pos} ;
|
||||
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 "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