forked from GitHub/gf-core
reflexive and deponent as verb features added
This commit is contained in:
@@ -175,6 +175,10 @@ oper
|
||||
seinV : V -> V ;
|
||||
habenV : V -> V ;
|
||||
|
||||
-- Reflexive verbs can take reflexive pronouns of different cases.
|
||||
|
||||
reflV : V -> Case -> V ;
|
||||
|
||||
--3 Two-place verbs
|
||||
--
|
||||
-- Two-place verbs need a preposition, except the special case with direct object
|
||||
@@ -332,16 +336,21 @@ oper
|
||||
in
|
||||
mkV singen singt sing sang saenge gesungen ;
|
||||
|
||||
prefixV p v = {s = v.s ; prefix = p ; lock_V = v.lock_V ; aux = v.aux} ;
|
||||
habenV v = {s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VHaben} ;
|
||||
seinV v = {s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VSein} ;
|
||||
prefixV p v =
|
||||
{s = v.s ; prefix = p ; lock_V = v.lock_V ; aux = v.aux ; vtype = v.vtype} ;
|
||||
habenV v =
|
||||
{s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VHaben ; vtype = v.vtype} ;
|
||||
seinV v =
|
||||
{s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VSein ; vtype = v.vtype} ;
|
||||
reflV v c =
|
||||
{s = v.s ; prefix = v.prefix ; lock_V = v.lock_V ; aux = VHaben ; vtype = VRefl c} ;
|
||||
|
||||
no_geV v = let vs = v.s in {
|
||||
s = table {
|
||||
p@(VPastPart _) => Predef.drop 2 (vs ! p) ;
|
||||
p => vs ! p
|
||||
} ;
|
||||
prefix = v.prefix ; lock_V = v.lock_V ; aux = v.aux
|
||||
prefix = v.prefix ; lock_V = v.lock_V ; aux = v.aux ; vtype = v.vtype
|
||||
} ;
|
||||
|
||||
mkV2 v c = v ** {c2 = c ; lock_V2 = <>} ;
|
||||
|
||||
@@ -57,6 +57,8 @@ resource ParamGer = ParamX ** {
|
||||
|
||||
param VAux = VHaben | VSein ;
|
||||
|
||||
param VType = VAct | VRefl Case ;
|
||||
|
||||
-- The order of sentence is depends on whether it is used as a main
|
||||
-- clause, inverted, or subordinate.
|
||||
|
||||
|
||||
@@ -62,7 +62,12 @@ resource ResGer = ParamGer ** open Prelude in {
|
||||
-- suffixes "t" and "st". Auxiliaries like "sein" will have to
|
||||
-- make extra cases even for this.
|
||||
|
||||
Verb : Type = {s : VForm => Str ; prefix : Str ; aux : VAux} ;
|
||||
Verb : Type = {
|
||||
s : VForm => Str ;
|
||||
prefix : Str ;
|
||||
aux : VAux ;
|
||||
vtype : VType
|
||||
} ;
|
||||
|
||||
mkV : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> Str -> VAux -> Verb =
|
||||
\geben,gebe,gibst,gibt,gebt,gib,gab,gabst,gaben,gabt,gaebe,gegeben,ein,aux ->
|
||||
@@ -91,7 +96,8 @@ resource ResGer = ParamGer ** open Prelude in {
|
||||
VPastPart a => (regA gegeben).s ! Posit ! a
|
||||
} ;
|
||||
prefix = ein ;
|
||||
aux = aux
|
||||
aux = aux ;
|
||||
vtype = VAct
|
||||
} ;
|
||||
|
||||
-- These functions cover many regular cases; full coverage inflectional patterns are
|
||||
@@ -237,7 +243,10 @@ resource ResGer = ParamGer ** open Prelude in {
|
||||
VPInfinit Anter => vf [] (vpart ++ haben)
|
||||
} ;
|
||||
a1 : Polarity => Str = negation ;
|
||||
n2 : Agr => Str = \\_ => [] ;
|
||||
n2 : Agr => Str = case verb.vtype of {
|
||||
VAct => \\_ => [] ;
|
||||
VRefl c => \\a => reflPron ! a ! c
|
||||
} ;
|
||||
a2 : Str = [] ;
|
||||
ext : Str = []
|
||||
} ;
|
||||
@@ -287,7 +296,8 @@ resource ResGer = ParamGer ** open Prelude in {
|
||||
v => sein.s ! v
|
||||
} ;
|
||||
prefix = [] ;
|
||||
aux = VSein
|
||||
aux = VSein ;
|
||||
vtype = VAct
|
||||
} ;
|
||||
|
||||
auxVV : Verb -> Verb ** {isAux : Bool} = \v -> v ** {isAux = True} ;
|
||||
|
||||
Reference in New Issue
Block a user