1
0
forked from GitHub/gf-core

German relatives

This commit is contained in:
aarne
2006-01-05 20:58:28 +00:00
parent b0d4f03165
commit 37cfc1b012
8 changed files with 132 additions and 71 deletions

View File

@@ -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} ;

View File

@@ -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"} ;

View File

@@ -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 ;

View File

@@ -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 ;

View File

@@ -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
} ;
} }

View File

@@ -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} ;
} }

View File

@@ -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} ;
--
} }

View File

@@ -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