mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-11 22:09:32 -06:00
fixed problems with position of Dutch negation
This commit is contained in:
@@ -16,12 +16,12 @@ concrete ExtraDut of ExtraDutAbs = CatDut **
|
||||
|
||||
ComplVPIVV v vpi =
|
||||
insertInf (vpi.s ! v.isAux) (
|
||||
predVGen v.isAux v) ; ----
|
||||
predVGen v.isAux BeforeObjs v) ; ----
|
||||
--{-
|
||||
-- insertExtrapos vpi.p3 (
|
||||
-- insertInf vpi.p2 (
|
||||
-- insertObj vpi.p1 (
|
||||
-- predVGen v.isAux v))) ;
|
||||
-- predVGen v.isAux vpi.negPos v))) ;
|
||||
---}
|
||||
--
|
||||
-- PPzuAdv cn = {s = case cn.g of {
|
||||
@@ -122,7 +122,7 @@ lin
|
||||
lin
|
||||
NominalizeVPSlashNP vpslash np =
|
||||
--False for negation place; doesn't matter because vp.a1 ! Pos is chosen
|
||||
let vp : ResDut.VP = insertObjNP np.isPron False (\\_ => appPrep vpslash.c2.p1 np.s) vpslash ;
|
||||
let vp : ResDut.VP = insertObjNP np.isPron AfterObjs (\\_ => appPrep vpslash.c2.p1 np.s) vpslash ;
|
||||
agrDef : Agr = agrP3 Sg ;
|
||||
compl : Str = vp.n0 ! agrDef ++ vp.a1 ! Pos ++ vp.n2 ! agrDef ++ vp.s.prefix ;
|
||||
inf : Str = vp.inf.p1 ;
|
||||
|
||||
@@ -4,7 +4,7 @@ concrete IdiomDut of Idiom = CatDut **
|
||||
flags optimize=all_subs ;
|
||||
|
||||
lin
|
||||
ImpersCl vp = mkClause "'t" (agrP3 Sg) vp ;
|
||||
ImpersCl vp = mkClause "het" (agrP3 Sg) vp ; -- cunger: 't -> het
|
||||
GenericCl vp = mkClause "men" (agrP3 Sg) vp ;
|
||||
|
||||
CleftNP np rs = mkClause "'t" (agrP3 Sg)
|
||||
@@ -41,7 +41,7 @@ concrete IdiomDut of Idiom = CatDut **
|
||||
vvp = insertExtrapos vpi.p3 (
|
||||
insertInf vpi.p2 (
|
||||
insertObj vpi.p1 (
|
||||
predVGen True v))) ;
|
||||
predVGen True vp.negPos v))) ;
|
||||
in
|
||||
{s = (mkClause "we" {g = Utr ; n = Pl ; p = P1} vvp).s !
|
||||
Pres ! Simul ! Pos ! Inv
|
||||
|
||||
@@ -52,7 +52,7 @@ lin heffen_V = mkV "heffen" "hief" "hieven" "geheven" ;
|
||||
lin helpen_V = mkV "helpen" "hielp" "hielpen" "geholpen" ;
|
||||
lin heten_V = mkV "heten" "heette" "heetten" "geheten" ;
|
||||
lin hijsen_V = mkV "hijsen" "hees" "hesen" "gehesen" ;
|
||||
lin hoeven_V = mkV "hoeven" "hoeft" "hoeven" "hoefde" "hoefden" "gehoefd" ;
|
||||
lin hoeven_V = mkV "hoef" "hoeft" "hoeven" "hoefde" "hoefden" "gehoefd" ;
|
||||
lin houden_V = mkV "houden" "hield" "hielden" "gehouden" ;
|
||||
lin houwen_V = mkV "houwen" "houwde" "houwden" "gehouwen" ;
|
||||
lin jagen_V = mkV "jagen" "joeg" "joegen" "gejaagd" ;
|
||||
|
||||
@@ -45,7 +45,7 @@ lin
|
||||
married_A2 = mkA2 (mkA "getrouwd") (mkPrep "met") ;
|
||||
mother_N2 = mkN2 (mkN "moeder") ;
|
||||
now_Adv = mkAdv "nu" ;
|
||||
paint_V2A = mkV2A (mkV "schilderen" "schildert") noPrep ;
|
||||
paint_V2A = mkV2A (mkV "schilderen" "schildert") ;
|
||||
paris_PN = mkPN "Parijs" ;
|
||||
red_A = mkA "rood" ;
|
||||
say_VS = mkVS zeggen_V ;
|
||||
@@ -246,7 +246,7 @@ queen_N = mkN "koningin" utrum ;
|
||||
question_N = mkN "vraag" utrum ;
|
||||
radio_N = mkN "radio" utrum ;
|
||||
rain_N = mkN "regen" utrum ;
|
||||
rain_V0 = mkV "regenen" ;
|
||||
rain_V0 = mkV "regen" "regent" "regenen" "regende" "regenden" "geregend" ;
|
||||
read_V2 = mkV2 lezen_V ;
|
||||
ready_A = mkA "klaar" ;
|
||||
reason_N = mkN "reden" utrum ;
|
||||
|
||||
@@ -485,8 +485,11 @@ oper
|
||||
-- sein_V = MorphoDut.sein_V ** {lock_V = <>} ;
|
||||
-- werden_V = MorphoDut.werden_V ** {lock_V = <>} ;
|
||||
--
|
||||
prepV2 : V -> Prep -> V2 ;
|
||||
prepV2 : V -> Prep -> V2 ;
|
||||
prepV2 v c = lin V2 (v ** {c2 = <c.s,True>}) ; --if it has prep, needed for word order (place of negation)
|
||||
|
||||
noprepV2 : V -> V2 ;
|
||||
noprepV2 v = lin V2 (v ** {c2 = <[],False>}) ;
|
||||
-- dirV2 v = prepV2 v (mkPrep [] accusative) ;
|
||||
-- datV2 v = prepV2 v (mkPrep [] dative) ;
|
||||
--
|
||||
@@ -504,23 +507,23 @@ oper
|
||||
|
||||
mkV2V = overload {
|
||||
mkV2V : V -> Prep -> V2V = \v,p -> lin V2V (prepV2 v p ** {isAux = False}) ;
|
||||
mkV2V : V -> V2V = \v -> lin V2V (prepV2 v (mkPrep []) ** {isAux = False}) ;
|
||||
mkV2V : V -> V2V = \v -> lin V2V (noprepV2 v ** {isAux = False}) ;
|
||||
} ;
|
||||
auxV2V = overload {
|
||||
auxV2V : V -> Prep -> V2V = \v,p -> lin V2V (prepV2 v p ** {isAux = True}) ;
|
||||
auxV2V : V -> V2V = \v -> lin V2V (prepV2 v (mkPrep []) ** {isAux = True}) ;
|
||||
auxV2V : V -> V2V = \v -> lin V2V (noprepV2 v ** {isAux = True}) ;
|
||||
} ;
|
||||
mkV2S = overload {
|
||||
mkV2S : V -> Prep -> V2S = \v,p -> lin V2S (prepV2 v p) ;
|
||||
mkV2S : V -> V2S = \v -> lin V2S (prepV2 v (mkPrep [])) ;
|
||||
mkV2S : V -> V2S = \v -> lin V2S (noprepV2 v) ;
|
||||
} ;
|
||||
mkV2A = overload {
|
||||
mkV2A : V -> Prep -> V2A = \v,p -> lin V2A (prepV2 v p) ;
|
||||
mkV2A : V -> V2A = \v -> lin V2A (prepV2 v (mkPrep [])) ;
|
||||
mkV2A : V -> V2A = \v -> lin V2A (noprepV2 v) ;
|
||||
} ;
|
||||
mkV2Q = overload {
|
||||
mkV2Q : V -> Prep -> V2Q = \v,p -> lin V2Q (prepV2 v p) ;
|
||||
mkV2Q : V -> V2Q = \v -> lin V2Q (prepV2 v (mkPrep [])) ;
|
||||
mkV2Q : V -> V2Q = \v -> lin V2Q (noprepV2 v) ;
|
||||
} ;
|
||||
|
||||
|
||||
|
||||
@@ -388,7 +388,7 @@ param
|
||||
a = {g = g ; n = n ; p = p}
|
||||
} ;
|
||||
|
||||
het_Pron : Pronoun = mkPronoun "'t" "'t" "ze" "hij" "hem" "zijn" "zijne" Neutr Sg P3 ;
|
||||
het_Pron : Pronoun = mkPronoun "het" "het" "ze" "hij" "hem" "zijn" "zijne" Neutr Sg P3 ; -- cunger: 't -> het
|
||||
|
||||
|
||||
-- Complex $CN$s, like adjectives, have strong and weak forms.
|
||||
@@ -475,6 +475,8 @@ param
|
||||
_ => AAttr
|
||||
} ;
|
||||
|
||||
param NegPosition = BeforeObjs | AfterObjs | BetweenObjs;
|
||||
|
||||
oper VP : Type = {
|
||||
s : VVerb ;
|
||||
a1 : Polarity => Str ; -- niet
|
||||
@@ -482,15 +484,14 @@ param
|
||||
n2 : Agr => Str ; -- je vrouw
|
||||
a2 : Str ; -- vandaag
|
||||
isAux : Bool ; -- is a double infinitive
|
||||
negBeforeObj : Bool ; -- ik schoop X niet ; ik houd niet van X ; dat is niet leuk
|
||||
negPos : NegPosition ; -- ik schoop X niet ; ik houd niet van X ; dat is niet leuk
|
||||
inf : Str * Bool ; -- zeggen (True = non-empty)
|
||||
ext : Str -- dat je komt
|
||||
} ;
|
||||
|
||||
predV : VVerb -> VP = predVGen False ;
|
||||
predV : VVerb -> VP = predVGen False AfterObjs;
|
||||
|
||||
|
||||
predVGen : Bool -> VVerb -> VP = \isAux, verb -> {
|
||||
predVGen : Bool -> NegPosition -> VVerb -> VP = \isAux, negPos, verb -> {
|
||||
s = verb ;
|
||||
a1 : Polarity => Str = negation ;
|
||||
n0 : Agr => Str = \\a => case verb.vtype of {
|
||||
@@ -499,8 +500,8 @@ param
|
||||
} ;
|
||||
n2 : Agr => Str = \\a => [] ;
|
||||
a2 : Str = [] ;
|
||||
isAux = isAux ; ----
|
||||
negBeforeObj = False ;
|
||||
isAux = isAux ;
|
||||
negPos = negPos ;
|
||||
inf : Str * Bool = <[],False> ;
|
||||
ext : Str = []
|
||||
} ;
|
||||
@@ -512,18 +513,18 @@ param
|
||||
|
||||
-- Extending a verb phrase with new constituents.
|
||||
|
||||
--when we call it with a normal VP, just copy the negBeforeObj field of the vp
|
||||
insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> insertObjNP False vp.negBeforeObj obj vp;
|
||||
--when we call it with a normal VP, just copy the negPos field of the vp
|
||||
insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> insertObjNP False vp.negPos obj vp;
|
||||
|
||||
--this is needed when we call insertObjNP in ComplSlash: VPSlash is a subtype of VP so it works
|
||||
insertObjNP : Bool -> Bool -> (Agr => Str) -> VP -> VP = \isPron,negBeforeObj,obj,vp -> {
|
||||
insertObjNP : Bool -> NegPosition -> (Agr => Str) -> VP -> VP = \isPron,negPos,obj,vp -> {
|
||||
s = vp.s ;
|
||||
a1 = vp.a1 ;
|
||||
n0 = \\a => case isPron of {True => obj ! a ; _ => []} ++ vp.n0 ! a ;
|
||||
n2 = \\a => case isPron of {False => obj ! a ; _ => []} ++ vp.n2 ! a ;
|
||||
a2 = vp.a2 ;
|
||||
isAux = vp.isAux ;
|
||||
negBeforeObj = negBeforeObj ;
|
||||
negPos = negPos ;
|
||||
inf = vp.inf ;
|
||||
ext = vp.ext
|
||||
} ;
|
||||
@@ -535,7 +536,7 @@ param
|
||||
n2 = vp.n2 ;
|
||||
a2 = vp.a2 ;
|
||||
isAux = vp.isAux ;
|
||||
negBeforeObj = vp.negBeforeObj ;
|
||||
negPos = vp.negPos ;
|
||||
inf = vp.inf ;
|
||||
ext = vp.ext
|
||||
} ;
|
||||
@@ -547,7 +548,7 @@ param
|
||||
n2 = vp.n2 ;
|
||||
a2 = vp.a2 ++ adv ;
|
||||
isAux = vp.isAux ;
|
||||
negBeforeObj = vp.negBeforeObj ;
|
||||
negPos = vp.negPos ;
|
||||
inf = vp.inf ;
|
||||
ext = vp.ext
|
||||
} ;
|
||||
@@ -559,7 +560,7 @@ param
|
||||
n2 = vp.n2 ;
|
||||
a2 = vp.a2 ;
|
||||
isAux = vp.isAux ;
|
||||
negBeforeObj = vp.negBeforeObj ;
|
||||
negPos = vp.negPos ;
|
||||
inf = vp.inf ;
|
||||
ext = vp.ext ++ ext
|
||||
} ;
|
||||
@@ -571,7 +572,7 @@ param
|
||||
n2 = vp.n2 ;
|
||||
a2 = vp.a2 ;
|
||||
isAux = vp.isAux ; ----
|
||||
negBeforeObj = vp.negBeforeObj ;
|
||||
negPos = vp.negPos ;
|
||||
inf = <inf ++ vp.inf.p1, True> ;
|
||||
ext = vp.ext
|
||||
} ;
|
||||
@@ -603,9 +604,10 @@ param
|
||||
obj0 = vp.n0 ! agr ;
|
||||
obj = vp.n2 ! agr ;
|
||||
part = vp.s.particle ;
|
||||
compl = case vp.negBeforeObj of {
|
||||
True => neg ++ obj0 ++ obj ++ part ++ vp.a2 ++ vp.s.prefix ;
|
||||
_ => obj0 ++ obj ++ neg ++ part ++ vp.a2 ++ vp.s.prefix
|
||||
compl = case vp.negPos of {
|
||||
BeforeObjs => neg ++ obj0 ++ obj ++ part ++ vp.a2 ++ vp.s.prefix ;
|
||||
AfterObjs => obj0 ++ obj ++ neg ++ part ++ vp.a2 ++ vp.s.prefix ;
|
||||
BetweenObjs => obj0 ++ neg ++ obj ++ part ++ vp.a2 ++ vp.s.prefix
|
||||
} ;
|
||||
inf : Str =
|
||||
case <vp.isAux, vp.inf.p2, a> of {
|
||||
|
||||
@@ -20,11 +20,13 @@ concrete SentenceDut of Sentence = CatDut ** open ResDut, Prelude in {
|
||||
verb = vp.s.s ! ps.p1 ;
|
||||
inf = vp.inf.p1 ;
|
||||
in
|
||||
case vp.negBeforeObj of {
|
||||
True => verb ++ ps.p2 ++ vp.a1 ! pol ++ vp.n0 ! agr ++
|
||||
case vp.negPos of {
|
||||
BeforeObjs => verb ++ ps.p2 ++ vp.a1 ! pol ++ vp.n0 ! agr ++
|
||||
vp.n2 ! agr ++ vp.a2 ++ inf ++ vp.ext ;
|
||||
_ => verb ++ ps.p2 ++ vp.n0 ! agr ++ vp.n2 ! agr ++
|
||||
vp.a1 ! pol ++ vp.a2 ++ inf ++ vp.ext
|
||||
AfterObjs => verb ++ ps.p2 ++ vp.n0 ! agr ++ vp.n2 ! agr ++
|
||||
vp.a1 ! pol ++ vp.a2 ++ inf ++ vp.ext ;
|
||||
BetweenObjs => verb ++ ps.p2 ++ vp.n0 ! agr ++ vp.a1 ! pol ++ vp.n2 ! agr ++
|
||||
vp.a2 ++ inf ++ vp.ext
|
||||
} ;
|
||||
} ;
|
||||
|
||||
|
||||
@@ -12,13 +12,13 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in {
|
||||
insertExtrapos vpi.p3 (
|
||||
insertInf vpi.p2 (
|
||||
insertObj vpi.p1 (
|
||||
predVGen v.isAux (v2v v)))) ; ---- subtyp
|
||||
predVGen v.isAux vp.negPos (v2v v)))) ; ---- subtyp
|
||||
|
||||
ComplVS v s =
|
||||
insertExtrapos (conjThat ++ s.s ! Sub) (predV v) ;
|
||||
ComplVQ v q =
|
||||
insertExtrapos (q.s ! QIndir) (predV v) ;
|
||||
ComplVA v ap = insertObj (\\ _ => ap.s ! APred) (predV v) ;
|
||||
ComplVA v ap = insertObj (\\ _ => ap.s ! APred) (predVGen False BetweenObjs v) ;
|
||||
|
||||
SlashV2a v = predV (v2v v) ** {c2 = v.c2} ;
|
||||
|
||||
@@ -37,13 +37,13 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in {
|
||||
in
|
||||
insertExtrapos vpi.p3 (
|
||||
insertInf vpi.p2 (
|
||||
insertObj vpi.p1 ((predVGen v.isAux v)))) ** {c2 = v.c2} ;
|
||||
insertObj vpi.p1 ((predVGen v.isAux vp.negPos v)))) ** {c2 = v.c2} ;
|
||||
|
||||
SlashV2A v ap =
|
||||
insertObj (\\_ => ap.s ! APred) (predVv v) ** {c2 = v.c2} ;
|
||||
insertObj (\\_ => ap.s ! APred) (predVGen False BetweenObjs (v2v v)) ** {c2 = v.c2} ;
|
||||
|
||||
--vp.c2.p2: if the verb has a preposition or not
|
||||
ComplSlash vp np = insertObjNP np.isPron vp.c2.p2 (\\_ => appPrep vp.c2.p1 np.s) vp ;
|
||||
ComplSlash vp np = insertObjNP np.isPron (case vp.c2.p2 of {True => BeforeObjs; False => vp.negPos}) (\\_ => appPrep vp.c2.p1 np.s) vp ;
|
||||
|
||||
SlashVV v vp =
|
||||
let
|
||||
@@ -52,7 +52,7 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in {
|
||||
insertExtrapos vpi.p3 (
|
||||
insertInf vpi.p2 (
|
||||
insertObj vpi.p1 (
|
||||
predVGen v.isAux (v2v v)))) ** {c2 = vp.c2} ;
|
||||
predVGen v.isAux vp.negPos (v2v v)))) ** {c2 = vp.c2} ;
|
||||
|
||||
SlashV2VNP v np vp =
|
||||
let
|
||||
@@ -62,13 +62,13 @@ concrete VerbDut of Verb = CatDut ** open Prelude, ResDut in {
|
||||
insertInf vpi.p2 (
|
||||
insertObj vpi.p1 (
|
||||
insertObj (\\_ => appPrep v.c2.p1 np.s) (
|
||||
predVGen v.isAux v)))) ** {c2 = v.c2} ;
|
||||
predVGen v.isAux vp.negPos v)))) ** {c2 = v.c2} ;
|
||||
|
||||
-- True, because negation comes before copula complement
|
||||
-- BeforeObjs, because negation comes before copula complement
|
||||
-- "ik ben niet groot" but "ik begrijp hem niet"
|
||||
UseComp comp = insertObjNP False True comp.s (predV zijn_V) ; -- agr not used
|
||||
UseComp comp = insertObjNP False BeforeObjs comp.s (predV zijn_V) ; -- agr not used
|
||||
|
||||
UseCopula = predV zijn_V ;
|
||||
UseCopula = predV zijn_V;
|
||||
|
||||
CompCN cn = {s = \\a => cn.s ! Strong ! NF a.n Nom} ;
|
||||
CompAP ap = {s = \\_ => ap.s ! APred} ;
|
||||
|
||||
Reference in New Issue
Block a user