diff --git a/lib/src/dutch/ExtraDut.gf b/lib/src/dutch/ExtraDut.gf index 6825ba13c..7baed49d0 100644 --- a/lib/src/dutch/ExtraDut.gf +++ b/lib/src/dutch/ExtraDut.gf @@ -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 ; diff --git a/lib/src/dutch/IdiomDut.gf b/lib/src/dutch/IdiomDut.gf index d73fb9652..f0efe674f 100644 --- a/lib/src/dutch/IdiomDut.gf +++ b/lib/src/dutch/IdiomDut.gf @@ -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 diff --git a/lib/src/dutch/IrregDut.gf b/lib/src/dutch/IrregDut.gf index 1b5fd1498..027a24706 100644 --- a/lib/src/dutch/IrregDut.gf +++ b/lib/src/dutch/IrregDut.gf @@ -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" ; diff --git a/lib/src/dutch/LexiconDut.gf b/lib/src/dutch/LexiconDut.gf index 3da339d29..a94aeee0a 100644 --- a/lib/src/dutch/LexiconDut.gf +++ b/lib/src/dutch/LexiconDut.gf @@ -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 ; diff --git a/lib/src/dutch/ParadigmsDut.gf b/lib/src/dutch/ParadigmsDut.gf index ef4b84308..9dcc54765 100644 --- a/lib/src/dutch/ParadigmsDut.gf +++ b/lib/src/dutch/ParadigmsDut.gf @@ -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 = }) ; --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) ; } ; diff --git a/lib/src/dutch/ResDut.gf b/lib/src/dutch/ResDut.gf index c33b39693..09f897bac 100644 --- a/lib/src/dutch/ResDut.gf +++ b/lib/src/dutch/ResDut.gf @@ -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 = ; 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 of { diff --git a/lib/src/dutch/SentenceDut.gf b/lib/src/dutch/SentenceDut.gf index f345798ba..3619a7ddb 100644 --- a/lib/src/dutch/SentenceDut.gf +++ b/lib/src/dutch/SentenceDut.gf @@ -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 } ; } ; diff --git a/lib/src/dutch/VerbDut.gf b/lib/src/dutch/VerbDut.gf index 6b9569376..62a8a735f 100644 --- a/lib/src/dutch/VerbDut.gf +++ b/lib/src/dutch/VerbDut.gf @@ -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} ;