diff --git a/lib/src/abstract/Verb.gf b/lib/src/abstract/Verb.gf index 857e47c29..17d41fb75 100644 --- a/lib/src/abstract/Verb.gf +++ b/lib/src/abstract/Verb.gf @@ -61,6 +61,8 @@ abstract Verb = Cat ** { AdvVPSlash : VPSlash -> Adv -> VPSlash ; -- use (it) here AdVVPSlash : AdV -> VPSlash -> VPSlash ; -- always use (it) + VPSlashPrep : VP -> Prep -> VPSlash ; -- live in (it) + -- *Agents of passives* are constructed as adverbs with the -- preposition [Structural Structural.html]$.8agent_Prep$. diff --git a/lib/src/english/CatEng.gf b/lib/src/english/CatEng.gf index 98838aac2..24ead9c01 100644 --- a/lib/src/english/CatEng.gf +++ b/lib/src/english/CatEng.gf @@ -43,7 +43,7 @@ concrete CatEng of Cat = CommonX - [Pol] ** open ResEng, Prelude in { -- Verb VP = ResEng.VP ; - VPSlash = ResEng.VP ** {c2 : Str} ; + VPSlash = ResEng.SlashVP ; Comp = {s : Agr => Str} ; -- Adjective diff --git a/lib/src/english/ResEng.gf b/lib/src/english/ResEng.gf index ff6ec2ceb..000a77078 100644 --- a/lib/src/english/ResEng.gf +++ b/lib/src/english/ResEng.gf @@ -231,10 +231,10 @@ resource ResEng = ParamX ** open Prelude in { } ; - SlashVP = VP ** {c2 : Str} ; + SlashVP = VP ** {c2 : Str ; gapInMiddle : Bool} ; predVc : (Verb ** {c2 : Str}) -> SlashVP = \verb -> - predV verb ** {c2 = verb.c2} ; + predV verb ** {c2 = verb.c2 ; gapInMiddle = True} ; predV : Verb -> VP = \verb -> { s = \\t,ant,b,ord,agr => @@ -338,7 +338,7 @@ resource ResEng = ParamX ** open Prelude in { } ; insertObjc : (Agr => Str) -> SlashVP -> SlashVP = \obj,vp -> - insertObj obj vp ** {c2 = vp.c2} ; + insertObj obj vp ** {c2 = vp.c2 ; gapInMiddle = vp.gapInMiddle} ; --- The adverb should be before the finite verb. diff --git a/lib/src/english/VerbEng.gf b/lib/src/english/VerbEng.gf index 7d9addfe8..03fce9679 100644 --- a/lib/src/english/VerbEng.gf +++ b/lib/src/english/VerbEng.gf @@ -1,4 +1,4 @@ -concrete VerbEng of Verb = CatEng ** open ResEng in { +concrete VerbEng of Verb = CatEng ** open ResEng, Prelude in { flags optimize=all_subs ; @@ -7,7 +7,7 @@ concrete VerbEng of Verb = CatEng ** open ResEng in { SlashV2a v = predVc v ; Slash2V3 v np = - insertObjc (\\_ => v.c2 ++ np.s ! NPAcc) (predV v ** {c2 = v.c3}) ; + insertObjc (\\_ => v.c2 ++ np.s ! NPAcc) (predV v ** {c2 = v.c3 ; gapInMiddle = False}) ; Slash3V3 v np = insertObjc (\\_ => v.c3 ++ np.s ! NPAcc) (predVc v) ; ---- @@ -21,23 +21,26 @@ concrete VerbEng of Verb = CatEng ** open ResEng in { SlashV2Q v q = insertObjc (\\_ => q.s ! QIndir) (predVc v) ; SlashV2A v ap = insertObjc (\\a => ap.s ! a) (predVc v) ; ---- - ComplSlash vp np = insertObjPre (\\_ => vp.c2 ++ np.s ! NPAcc) vp ; + ComplSlash vp np = case vp.gapInMiddle of { + True => insertObjPre (\\_ => vp.c2 ++ np.s ! NPAcc) vp ; + False => insertObj (\\_ => vp.c2 ++ np.s ! NPAcc) vp + } ; SlashVV vv vp = insertObj (\\a => infVP vv.typ vp Simul CPos a) (predVV vv) ** - {c2 = vp.c2} ; + {c2 = vp.c2 ; gapInMiddle = vp.gapInMiddle} ; SlashV2VNP vv np vp = insertObjPre (\\_ => vv.c2 ++ np.s ! NPAcc) (insertObjc (\\a => vv.c3 ++ infVP vv.typ vp Simul CPos a) (predVc vv)) ** - {c2 = vp.c2} ; + {c2 = vp.c2 ; gapInMiddle = vp.gapInMiddle} ; UseComp comp = insertObj comp.s (predAux auxBe) ; AdvVP vp adv = insertObj (\\_ => adv.s) vp ; AdVVP adv vp = insertAdV adv.s vp ; - AdvVPSlash vp adv = insertObj (\\_ => adv.s) vp ** {c2 = vp.c2} ; - AdVVPSlash adv vp = insertAdV adv.s vp ** {c2 = vp.c2} ; + AdvVPSlash vp adv = insertObj (\\_ => adv.s) vp ** {c2 = vp.c2 ; gapInMiddle = vp.gapInMiddle} ; + AdVVPSlash adv vp = insertAdV adv.s vp ** {c2 = vp.c2 ; gapInMiddle = vp.gapInMiddle} ; ReflVP v = insertObjPre (\\a => v.c2 ++ reflPron ! a) v ; @@ -56,4 +59,6 @@ concrete VerbEng of Verb = CatEng ** open ResEng in { UseCopula = predAux auxBe ; + VPSlashPrep vp p = vp ** {c2 = p.s ; gapInMiddle = False} ; + } diff --git a/lib/src/german/VerbGer.gf b/lib/src/german/VerbGer.gf index 81ca154da..fc316b944 100644 --- a/lib/src/german/VerbGer.gf +++ b/lib/src/german/VerbGer.gf @@ -85,5 +85,6 @@ concrete VerbGer of Verb = CatGer ** open Prelude, ResGer, Coordination in { PassV2 v = insertInf (v.s ! VPastPart APred) (predV werdenPass) ; + VPSlashPrep vp prep = vp ** {c2 = prep} ; } diff --git a/lib/src/scandinavian/VerbScand.gf b/lib/src/scandinavian/VerbScand.gf index 1f087548d..0fee4dd10 100644 --- a/lib/src/scandinavian/VerbScand.gf +++ b/lib/src/scandinavian/VerbScand.gf @@ -1,4 +1,4 @@ -incomplete concrete VerbScand of Verb = CatScand ** open CommonScand, ResScand in { +incomplete concrete VerbScand of Verb = CatScand ** open CommonScand, ResScand, Prelude in { flags optimize=all_subs ; @@ -38,7 +38,7 @@ incomplete concrete VerbScand of Verb = CatScand ** open CommonScand, ResScand i } ; ComplSlash vp np = - insertObj + insertObjPost (\\_ => vp.c2.s ++ np.s ! accusative ++ vp.n3 ! np.a) vp ; SlashVV v vp = @@ -61,6 +61,8 @@ incomplete concrete VerbScand of Verb = CatScand ** open CommonScand, ResScand i ReflVP vp = insertObj (\\a => vp.c2.s ++ reflPron a ++ vp.n3 ! a) vp ; + VPSlashPrep vp prep = vp ** {n3 = \\_ => [] ; c2 = {s = prep.s ; hasPrep = True}} ; + PassV2 v = insertObj (\\a => v.s ! VI (VPtPret (agrAdjNP a DIndef) Nom))