diff --git a/src/abstract/Extend.gf b/src/abstract/Extend.gf index f3fd11319..8ba3ad41a 100644 --- a/src/abstract/Extend.gf +++ b/src/abstract/Extend.gf @@ -47,6 +47,7 @@ abstract Extend = Cat ** { PredVPS : NP -> VPS -> S ; -- she [has walked and won't sleep] SQuestVPS : NP -> VPS -> QS ; -- has she walked QuestVPS : IP -> VPS -> QS ; -- who has walked + RelVPS : RP -> VPS -> RS ; -- which won't sleep -- existentials that work in the absence of Cl ExistS : Temp -> Pol -> NP -> S ; -- there was a party diff --git a/src/common/ExtendFunctor.gf b/src/common/ExtendFunctor.gf index d70ebe31d..51785c2d7 100644 --- a/src/common/ExtendFunctor.gf +++ b/src/common/ExtendFunctor.gf @@ -26,6 +26,7 @@ lin MkVPS vp = variants {} ; -- Temp -> Pol -> VP -> VPS ; -- hasn't slept ConjVPS = variants {} ; -- Conj -> [VPS] -> VPS ; -- has walked and won't sleep PredVPS = variants {} ; -- NP -> VPS -> S ; -- has walked and won't sleep + RelVPS = variants {} ; -- RP -> VPS -> RS ; -- which won't sleep MkVPI vp = variants {} ; -- Temp -> Pol -> VP -> VPI ; -- to sleep / hasn't slept ConjVPI = variants {} ; -- Conj -> [VPI] -> VPI ; -- has walked and won't sleep ComplVPIVV = variants {} ; -- VV -> VPI -> VP ; -- want to sleep and to walk diff --git a/src/english/ExtendEng.gf b/src/english/ExtendEng.gf index 820a05b90..db3010140 100644 --- a/src/english/ExtendEng.gf +++ b/src/english/ExtendEng.gf @@ -5,7 +5,7 @@ concrete ExtendEng of Extend = [ VPS, ListVPS, VPI, ListVPI, VPS2, ListVPS2, VPI2, ListVPI2, RNP, RNPList, AdAdV, AdjAsCN, AdjAsNP, ApposNP, AdvIsNP, - MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, QuestVPS, SQuestVPS, + MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, QuestVPS, SQuestVPS, RelVPS, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, MkVPS2, BaseVPS2, ConsVPS2, ConjVPS2, ComplVPS2, ReflVPS2, MkVPI2, BaseVPI2, ConsVPI2, ConjVPI2, ComplVPI2, @@ -127,6 +127,11 @@ concrete ExtendEng of Extend = QuestVPS ip vps = let vp = vps.s ! oDir ! toAgr ip.n P3 Neutr in { s = \\q => ip.s ! npNom ++ vp.fin ++ vp.inf } ; + RelVPS rp vps = { + s = \\agr => let vp = vps.s ! oDir ! agr in + rp.s ! RC (fromAgr agr).g npNom ++ vp.fin ++ vp.inf ; + c = npNom ; + } ; MkVPI vp = mkVPI (lin VP vp) ; diff --git a/src/swedish/ExtendSwe.gf b/src/swedish/ExtendSwe.gf index 061f50cdc..76b1b7759 100644 --- a/src/swedish/ExtendSwe.gf +++ b/src/swedish/ExtendSwe.gf @@ -7,7 +7,7 @@ concrete ExtendSwe of Extend = CatSwe ** StrandRelSlash, EmptyRelSlash, StrandQuestSlash, PassVPSlash, PassAgentVPSlash, UttVPShort, ByVP, InOrderToVP, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, - MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, + MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, RelVPS, MkVPS2, ConjVPS2, ComplVPS2, ReflVPS2, MkVPI2, ConjVPI2, ComplVPI2, ICompAP,ProDrop,EmbedSSlash, AdAdV, PositAdVAdj, GerundCN, GerundNP, GerundAdv, PresPartAP, PastPartAP, PastPartAgentAP, @@ -132,6 +132,16 @@ in { } } ; + RelVPS rp vps = { + s = \\ag,rcase => + let agr = case rp.a of { -- RP's agr may override in the regular RelativeScand, is this true with VPS too? + RNoAg => ag ; + RAg g n p => {g = g ; n = n ; p = p} + } ; + in rp.s ! ag.g ! ag.n ! rcase ++ vps.s ! Sub ! agr ; + c = NPNom + } ; + MkVPS t p vp = { s = \\o,a => let