From 996e0141e25528e59c5cb4433ea3bad15d31ccf3 Mon Sep 17 00:00:00 2001 From: aarne Date: Tue, 3 Dec 2013 18:54:56 +0000 Subject: [PATCH] three new uses of "self" in Idion(Eng,Fin,Ger,Swe): SelfAdvVP (he is singing himself), SelfAdVVP (he is himself singing), SelfNP (he himself is singing; I know the president himself) --- lib/src/abstract/Idiom.gf | 7 +++++++ lib/src/english/ExtraEng.gf | 19 +++++++++--------- lib/src/english/IdiomEng.gf | 9 ++++++++- lib/src/english/ParseEng.gf | 14 +++++++------- lib/src/english/ParseEngAbs.gf | 4 +--- lib/src/english/ResEng.gf | 28 ++++++++++++++------------- lib/src/finnish/DictEngFin.gf | 2 -- lib/src/finnish/IdiomFin.gf | 9 +++++++++ lib/src/finnish/ResFin.gf | 3 ++- lib/src/finnish/stemmed/ParseFin.gf | 2 +- lib/src/german/IdiomGer.gf | 8 ++++++++ lib/src/german/ParseGer.gf | 2 +- lib/src/scandinavian/CatScand.gf | 2 +- lib/src/scandinavian/CommonScand.gf | 12 +++++++----- lib/src/scandinavian/ExtraScand.gf | 2 +- lib/src/scandinavian/ResScand.gf | 2 +- lib/src/scandinavian/SentenceScand.gf | 2 +- lib/src/swedish/ExtraSwe.gf | 6 +++--- lib/src/swedish/IdiomSwe.gf | 14 ++++++++++++++ lib/src/swedish/ParseSwe.gf | 2 +- 20 files changed, 98 insertions(+), 51 deletions(-) diff --git a/lib/src/abstract/Idiom.gf b/lib/src/abstract/Idiom.gf index 4957824a6..85d1086a2 100644 --- a/lib/src/abstract/Idiom.gf +++ b/lib/src/abstract/Idiom.gf @@ -25,4 +25,11 @@ abstract Idiom = Cat ** { ImpPl1 : VP -> Utt ; -- let's go ImpP3 : NP -> VP -> Utt ; -- let John walk + +-- 3/12/2013 non-reflexive uses of "self" + + SelfAdvVP : VP -> VP ; -- is at home himself + SelfAdVVP : VP -> VP ; -- is himself at home + SelfNP : NP -> NP ; -- the president himself (is at home) + } diff --git a/lib/src/english/ExtraEng.gf b/lib/src/english/ExtraEng.gf index 94a56713f..1ee9c8430 100644 --- a/lib/src/english/ExtraEng.gf +++ b/lib/src/english/ExtraEng.gf @@ -38,9 +38,9 @@ concrete ExtraEng of ExtraEngAbs = CatEng ** MkVPI vp = { s = table { - VVAux => \\a => vp.ad ++ vp.inf ++ vp.p ++ vp.s2 ! a; - VVInf => \\a => "to" ++ vp.ad ++ vp.inf ++ vp.p ++ vp.s2 ! a; - VVPresPart => \\a => vp.ad ++ vp.prp ++ vp.p ++ vp.s2 ! a + VVAux => \\a => vp.ad ! a ++ vp.inf ++ vp.p ++ vp.s2 ! a; + VVInf => \\a => "to" ++ vp.ad ! a ++ vp.inf ++ vp.p ++ vp.s2 ! a; + VVPresPart => \\a => vp.ad ! a ++ vp.prp ++ vp.p ++ vp.s2 ! a } } ; ConjVPI = conjunctDistrTable2 VVType Agr ; @@ -79,7 +79,7 @@ concrete ExtraEng of ExtraEngAbs = CatEng ** let verb = vp.s ! t.t ! t.a ! p.p ! oDir ! a ; verbf = verb.aux ++ verb.adv ++ verb.fin ++ verb.inf ; - in t.s ++ p.s ++ vp.ad ++ verbf ++ vp.p ++ vp.s2 ! a ++ vp.ext + in t.s ++ p.s ++ vp.ad ! a ++ verbf ++ vp.p ++ vp.s2 ! a ++ vp.ext } ; ConjVPS = conjunctDistrTable Agr ; @@ -89,7 +89,7 @@ concrete ExtraEng of ExtraEngAbs = CatEng ** IAdvAdv adv = {s = "how" ++ adv.s} ; PartVP vp = { - s = \\a => vp.ad ++ vp.prp ++ vp.s2 ! a ; + s = \\a => vp.ad ! a ++ vp.prp ++ vp.s2 ! a ; isPre = False ---- depends on whether there are complements } ; @@ -141,9 +141,10 @@ concrete ExtraEng of ExtraEngAbs = CatEng ** NominalizeVPSlashNP vpslash np = - let vp : ResEng.VP = insertObjPre (\\_ => vpslash.c2 ++ np.s ! NPAcc) vpslash + let vp : ResEng.VP = insertObjPre (\\_ => vpslash.c2 ++ np.s ! NPAcc) vpslash ; + a = AgP3Sg Neutr in - lin NP {s=\\_=>vp.ad ++ vp.prp ++ vp.s2! (AgP3Sg Neutr); a=AgP3Sg Neutr } ; + lin NP {s = \\_ => vp.ad ! a ++ vp.prp ++ vp.s2 ! a ; a = a} ; lin UncNeg = {s = [] ; p = CNeg False} ; @@ -158,8 +159,8 @@ lin prp = be.prp ; ptp = be.ptp ; inf = be.inf ; - ad = [] ; - s2 = \\a => vps.ad ++ ppt ++ vps.p ++ vps.s2 ! a ++ vps.c2 ; ---- order + ad = \\_ => [] ; + s2 = \\a => vps.ad ! a ++ ppt ++ vps.p ++ vps.s2 ! a ++ vps.c2 ; ---- order ext = vps.ext } ; diff --git a/lib/src/english/IdiomEng.gf b/lib/src/english/IdiomEng.gf index da77623ea..dfa039c4b 100644 --- a/lib/src/english/IdiomEng.gf +++ b/lib/src/english/IdiomEng.gf @@ -30,11 +30,18 @@ concrete IdiomEng of Idiom = CatEng ** open Prelude, ResEng in { mkQuestion (ss (ip.s ! npNom)) (mkClause "there" (agrP3 ip.n) (insertObj (\\_ => adv.s) (predAux auxBe))) ; - ProgrVP vp = insertObj (\\a => vp.ad ++ vp.prp ++ vp.p ++ vp.s2 ! a) (predAux auxBe) ; + ProgrVP vp = insertObj (\\a => vp.ad ! a ++ vp.prp ++ vp.p ++ vp.s2 ! a) (predAux auxBe) ; ImpPl1 vp = {s = "let's" ++ infVP VVAux vp Simul CPos (AgP1 Pl)} ; ImpP3 np vp = {s = "let" ++ np.s ! NPAcc ++ infVP VVAux vp Simul CPos np.a} ; + SelfAdvVP vp = insertObj reflPron vp ; + SelfAdVVP vp = insertAdVAgr reflPron vp ; + SelfNP np = { + s = \\c => np.s ! c ++ reflPron ! np.a ; + a = np.a + } ; + } diff --git a/lib/src/english/ParseEng.gf b/lib/src/english/ParseEng.gf index 841798e2d..424543d03 100644 --- a/lib/src/english/ParseEng.gf +++ b/lib/src/english/ParseEng.gf @@ -13,7 +13,7 @@ concrete ParseEng of ParseEngAbs = SentenceEng - [UseCl], -- replaced by UseCl | ContractedUseCl QuestionEng, RelativeEng, - IdiomEng [NP, VP, Tense, Cl, ProgrVP, ExistNP], + IdiomEng [NP, VP, Tense, Cl, ProgrVP, ExistNP, SelfAdvVP, SelfAdVVP, SelfNP], ExtraEng [NP, Quant, VPSlash, VP, Tense, GenNP, PassVPSlash, Temp, Pol, Conj, VPS, ListVPS, S, Num, CN, RP, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, GenRP, VPI, VPIForm, VPIInf, VPIPresPart, ListVPI, VV, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, @@ -94,8 +94,8 @@ lin compl = vp.s2 ! np.a in case o of { - ODir _ => compl ++ frontComma ++ np.s ! npNom ++ verb.aux ++ vp.ad ++ verb.fin ++ verb.adv ++ verb.inf ; - OQuest => verb.aux ++ compl ++ frontComma ++ np.s ! npNom ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf + ODir _ => compl ++ frontComma ++ np.s ! npNom ++ verb.aux ++ vp.ad ! np.a ++ verb.fin ++ verb.adv ++ verb.inf ; + OQuest => verb.aux ++ compl ++ frontComma ++ np.s ! npNom ++ verb.adv ++ vp.ad ! np.a ++ verb.fin ++ verb.inf } } ; @@ -106,8 +106,8 @@ lin compl = vp.s2 ! np.a in case o of { - ODir _ => compl ++ frontComma ++ verb.aux ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ++ np.s ! npNom ; - OQuest => verb.aux ++ compl ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ++ np.s ! npNom + ODir _ => compl ++ frontComma ++ verb.aux ++ verb.adv ++ vp.ad ! np.a ++ verb.fin ++ verb.inf ++ np.s ! npNom ; + OQuest => verb.aux ++ compl ++ verb.adv ++ vp.ad ! np.a ++ verb.fin ++ verb.inf ++ np.s ! npNom } } ; @@ -131,12 +131,12 @@ lin {c2 = ""; gapInMiddle = False} ; PastPartRS ant pol vps = { - s = \\agr => vps.ad ++ vps.ptp ++ vps.s2 ! agr ; + s = \\agr => vps.ad ! agr ++ vps.ptp ++ vps.s2 ! agr ; c = npNom } ; PresPartRS ant pol vp = { - s = \\agr => vp.ad ++ vp.prp ++ vp.p ++ vp.s2 ! agr; + s = \\agr => vp.ad ! agr ++ vp.prp ++ vp.p ++ vp.s2 ! agr; c = npNom } ; diff --git a/lib/src/english/ParseEngAbs.gf b/lib/src/english/ParseEngAbs.gf index 1ae4955c8..f30090a78 100644 --- a/lib/src/english/ParseEngAbs.gf +++ b/lib/src/english/ParseEngAbs.gf @@ -12,7 +12,7 @@ abstract ParseEngAbs = Sentence, Question, Relative, - Idiom [NP, VP, Cl, Tense, ProgrVP, ExistNP], + Idiom [NP, VP, Cl, Tense, ProgrVP, ExistNP, SelfAdvVP, SelfAdVVP, SelfNP], ExtraEngAbs [NP, Quant, VPSlash, VP, GenNP, PassVPSlash, Temp, Tense, Pol, Conj, VPS, ListVPS, S, Num, CN, RP, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, GenRP, VPI, ListVPI, VV, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, ComplSlashPartLast, @@ -62,8 +62,6 @@ fun CompoundCN : Num -> N -> CN -> CN ; VPSlashVS : VS -> VP -> VPSlash ; - UncNeg : Pol ; - PastPartRS : Ant -> Pol -> VPSlash -> RS ; PresPartRS : Ant -> Pol -> VP -> RS ; diff --git a/lib/src/english/ResEng.gf b/lib/src/english/ResEng.gf index c8ab2fe3e..675c8c691 100644 --- a/lib/src/english/ResEng.gf +++ b/lib/src/english/ResEng.gf @@ -235,7 +235,7 @@ param prp : Str ; -- present participle ptp : Str ; -- past participle inf : Str ; -- the infinitive form ; VerbForms would be the logical place - ad : Str ; -- sentence adverb + ad : Agr => Str ; -- sentence adverb (can be Xself, hence Agr) s2 : Agr => Str ; -- complement ext : Str -- extreposed field such as S, QS, VP } ; @@ -291,7 +291,7 @@ param prp = verb.s ! VPresPart ; ptp = verb.s ! VPPart ; inf = verb.s ! VInf ; - ad = [] ; + ad = \\_ => [] ; ext = [] ; s2 = \\a => if_then_Str verb.isRefl (reflPron ! a) [] } ; @@ -349,7 +349,7 @@ param prp = verb.prpart ; ptp = verb.ppart ; inf = verb.inf ; - ad = [] ; + ad = \\_ => [] ; ext = [] ; s2 = \\_ => [] } ; @@ -407,13 +407,15 @@ param --- The adverb should be before the finite verb. - insertAdV : Str -> VP -> VP = \ad,vp -> { + insertAdV : Str -> VP -> VP = \ad -> insertAdVAgr (\\_ => ad) ; + + insertAdVAgr : (Agr => Str) -> VP -> VP = \ad,vp -> { s = vp.s ; p = vp.p ; prp = vp.prp ; ptp = vp.ptp ; inf = vp.inf ; - ad = vp.ad ++ ad ; + ad = \\a => vp.ad ! a ++ ad ! a ; s2 = \\a => vp.s2 ! a ; ext = vp.ext } ; @@ -459,14 +461,14 @@ param case cb of {CPos => ""; _ => "not"} ++ case ant of { Simul => case typ of { - VVAux => vp.ad ++ vp.inf ; - VVInf => "to" ++ vp.ad ++ vp.inf ; - _ => vp.ad ++ vp.prp + VVAux => vp.ad ! a ++ vp.inf ; + VVInf => "to" ++ vp.ad ! a ++ vp.inf ; ---- this is the "split infinitive" + _ => vp.ad ! a ++ vp.prp } ; Anter => case typ of { --# notpresent - VVAux => "have" ++ vp.ad ++ vp.ptp ; --# notpresent - VVInf => "to" ++ "have" ++ vp.ad ++ vp.ptp ; --# notpresent - _ => "having" ++ vp.ad ++ vp.ptp --# notpresent + VVAux => "have" ++ vp.ad ! a ++ vp.ptp ; --# notpresent + VVInf => "to" ++ "have" ++ vp.ad ! a ++ vp.ptp ; --# notpresent + _ => "having" ++ vp.ad ! a ++ vp.ptp --# notpresent } --# notpresent } ++ vp.p ++ vp.s2 ! a ++ vp.ext ; @@ -544,8 +546,8 @@ param compl = vp.s2 ! agr ++ vp.ext in case o of { - ODir _ => subj ++ verb.aux ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ++ vp.p ++ compl ; - OQuest => verb.aux ++ subj ++ verb.adv ++ vp.ad ++ verb.fin ++ verb.inf ++ vp.p ++ compl + ODir _ => subj ++ verb.aux ++ verb.adv ++ vp.ad ! agr ++ verb.fin ++ verb.inf ++ vp.p ++ compl ; + OQuest => verb.aux ++ subj ++ verb.adv ++ vp.ad ! agr ++ verb.fin ++ verb.inf ++ vp.p ++ compl } } ; diff --git a/lib/src/finnish/DictEngFin.gf b/lib/src/finnish/DictEngFin.gf index 74a5e8ba0..1a00411ad 100644 --- a/lib/src/finnish/DictEngFin.gf +++ b/lib/src/finnish/DictEngFin.gf @@ -8708,8 +8708,6 @@ cisterna_N = mkWN (k3 "säiliö") ; --UNCHK citadel_N = mkWN (k39 "linnoitus") ; --UNCHK citation_N = mkWN "Citation" ; --UNCHK citified_A = mkWA (k38 "kaupunkilainen") ; --UNCHK -citizenMasc_N = mkWN (k38 "kaupunkilainen") ; --UNCHK -citizenFem_N = mkWN (k38 "kaupunkilainen") ; --UNCHK citizenry_N = mkWN (k2 "väestö") ; --UNCHK citizenship_N = mkWN (compoundN "kansalais" (k7A "henki")) ; --UNCHK citrate_N = mkWN "sitraatti" ; --UNCHK diff --git a/lib/src/finnish/IdiomFin.gf b/lib/src/finnish/IdiomFin.gf index 145b09a7d..7352e85ae 100644 --- a/lib/src/finnish/IdiomFin.gf +++ b/lib/src/finnish/IdiomFin.gf @@ -73,6 +73,15 @@ concrete IdiomFin of Idiom = CatFin ** vp.s2 ! True ! Pos ! Ag Pl P1 ++ vp.ext } ; + SelfAdvVP vp = insertAdv (\\_ => "itse") vp ; + SelfAdVVP vp = insertAdv (\\_ => "itse") vp ; + SelfNP np = { + s = \\c => np.s ! c ++ (reflPron np.a).s ! c ; + a = np.a ; + isPron = False ; -- minun toloni --> minun itseni talo + isNeg = np.isNeg + } ; + oper olla = verbOlla ** {sc = NPCase Nom ; h = Back ; p = []} ; diff --git a/lib/src/finnish/ResFin.gf b/lib/src/finnish/ResFin.gf index c04595269..9693ab397 100644 --- a/lib/src/finnish/ResFin.gf +++ b/lib/src/finnish/ResFin.gf @@ -713,7 +713,8 @@ oper nsa = possSuffixFront agr in { s = table { - NPCase (Nom | Gen) | NPAcc => itse ! NPossNom Sg + nsa ; + NPCase Nom => itse ! NPossNom Sg ; + NPCase Gen | NPAcc => itse ! NPossNom Sg + nsa ; NPCase Transl => itse ! NPossTransl Sg + nsa ; NPCase Illat => itse ! NPossIllat Sg + nsa ; NPCase c => itse ! NCase Sg c + nsa diff --git a/lib/src/finnish/stemmed/ParseFin.gf b/lib/src/finnish/stemmed/ParseFin.gf index 9d0add4d3..94603ee70 100644 --- a/lib/src/finnish/stemmed/ParseFin.gf +++ b/lib/src/finnish/stemmed/ParseFin.gf @@ -14,7 +14,7 @@ concrete ParseFin of ParseEngAbs = SentenceFin, QuestionFin, RelativeFin, - IdiomFin [NP, VP, Tense, Cl, ProgrVP, ExistNP] + IdiomFin [NP, VP, Tense, Cl, ProgrVP, ExistNP, SelfAdvVP, SelfAdVVP, SelfNP] , ExtraFin [NP, Quant, VPSlash, VP, Tense, GenNP, PassVPSlash, Voc, RP, GenRP, Temp, Tense, Pol, Conj, VPS, ListVPS, S, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, VPI, VPIForm, VPIInf, VPIPresPart, ListVPI, VV, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV] diff --git a/lib/src/german/IdiomGer.gf b/lib/src/german/IdiomGer.gf index 8edde356a..ec58146b3 100644 --- a/lib/src/german/IdiomGer.gf +++ b/lib/src/german/IdiomGer.gf @@ -63,6 +63,14 @@ concrete IdiomGer of Idiom = CatGer ** MConjunct ! Pres ! Simul ! Pos ! Inv } ; + SelfAdvVP vp = insertAdv "selbst" vp ; + SelfAdVVP vp = insertAdv "selbst" vp ; + SelfNP np = { + s = \\c => np.s ! c ++ "selbst" ; + a = np.a ; + isPron = False + } ; + oper geben = dirV2 (mk6V "geben" "gibt" "gib" "gab" "gäbe" "gegeben") ; } diff --git a/lib/src/german/ParseGer.gf b/lib/src/german/ParseGer.gf index 58890876a..d0ef47d6f 100644 --- a/lib/src/german/ParseGer.gf +++ b/lib/src/german/ParseGer.gf @@ -12,7 +12,7 @@ concrete ParseGer of ParseEngAbs = SentenceGer, QuestionGer, RelativeGer, - IdiomGer [NP, VP, Tense, Cl, ProgrVP, ExistNP], + IdiomGer [NP, VP, Tense, Cl, ProgrVP, ExistNP, SelfAdvVP, SelfAdVVP, SelfNP], ExtraGer [NP, Quant, VPSlash, VP, Tense, GenNP, PassVPSlash, Temp, Pol, Conj, VPS, ListVPS, S, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, VPI, VPIForm, VPIInf, VPIPresPart, ListVPI, VV, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV, diff --git a/lib/src/scandinavian/CatScand.gf b/lib/src/scandinavian/CatScand.gf index 157e7cd41..724dd9fb0 100644 --- a/lib/src/scandinavian/CatScand.gf +++ b/lib/src/scandinavian/CatScand.gf @@ -43,7 +43,7 @@ incomplete concrete CatScand of Cat = fin : Str ; -- V1 har ---s1 inf : Str -- V2 sagt ---s4 } ; - a1 : Polarity => Str ; -- A1 inte ---s3 + a1 : Polarity => Agr => Str ; -- A1 inte ---s3 n2 : Agr => Str ; -- N2 dig ---s5 a2 : Str ; -- A2 idag ---s6 ext : Str ; -- S-Ext att hon går ---s7 diff --git a/lib/src/scandinavian/CommonScand.gf b/lib/src/scandinavian/CommonScand.gf index a66ccbdf0..1147e66eb 100644 --- a/lib/src/scandinavian/CommonScand.gf +++ b/lib/src/scandinavian/CommonScand.gf @@ -274,7 +274,7 @@ oper fin : Str ; -- V1 har ---s1 inf : Str -- V2 sagt ---s4 } ; - a1 : Polarity => Str ; -- A1 inte ---s3 + a1 : Polarity => Agr => Str ; -- A1 inte ---s3 själv/själva/självt n2 : Agr => Str ; -- N2 dig ---s5 a2 : Str ; -- A2 idag ---s6 ext : Str ; -- S-Ext att hon går ---s7 @@ -327,9 +327,11 @@ oper eext = True ; } ; - insertAdV : Str -> VP -> VP = \adv,vp -> { + insertAdV : Str -> VP -> VP = \adv -> insertAdVAgr (\\_ => adv) ; + + insertAdVAgr : (Agr => Str) -> VP -> VP = \adv,vp -> { s = vp.s ; - a1 = \\b => vp.a1 ! b ++ adv ; + a1 = \\b,a => vp.a1 ! b ! a ++ adv ! a ; n2 = vp.n2 ; a2 = vp.a2 ; ext = vp.ext ; @@ -352,7 +354,7 @@ oper infVP : VP -> Agr -> Str = \vp,a -> infVPPlus vp a Simul Pos ; infVPPlus : VP -> Agr -> Anteriority -> Polarity -> Str = \vp,a,ant,pol -> - vp.a1 ! pol ++ (vp.s ! Act ! VPInfinit ant).inf ++ vp.n2 ! a ++ vp.a2 ++ vp.ext ; --- a1 + vp.a1 ! pol ! a ++ (vp.s ! Act ! VPInfinit ant).inf ++ vp.n2 ! a ++ vp.a2 ++ vp.ext ; --- a1 -- For $Sentence$. @@ -365,7 +367,7 @@ oper s = \\t,a,b,o => let verb = vp.s ! Act ! VPFinite t a ; - neg = vp.a1 ! b ; + neg = vp.a1 ! b ! agr ; compl = vp.n2 ! agr ++ vp.a2 ++ vp.ext in case o of { diff --git a/lib/src/scandinavian/ExtraScand.gf b/lib/src/scandinavian/ExtraScand.gf index fb6b48e2f..2f89a0114 100644 --- a/lib/src/scandinavian/ExtraScand.gf +++ b/lib/src/scandinavian/ExtraScand.gf @@ -76,7 +76,7 @@ incomplete concrete ExtraScand of ExtraScandAbs = CatScand ** MkVPS t p vp = { s = \\o,a => let - neg = vp.a1 ! p.p ; + neg = vp.a1 ! p.p ! a ; verb = vp.s ! Act ! VPFinite t.t t.a ; compl = verb.inf ++ vp.n2 ! a ++ vp.a2 ++ vp.ext ; in t.s ++ p.s ++ case o of { diff --git a/lib/src/scandinavian/ResScand.gf b/lib/src/scandinavian/ResScand.gf index d9dd99431..1e7001b06 100644 --- a/lib/src/scandinavian/ResScand.gf +++ b/lib/src/scandinavian/ResScand.gf @@ -66,7 +66,7 @@ interface ResScand = DiffScand ** open CommonScand, Prelude in { VPInfinit Anter => vf [] (ha ++ vsup d) ; --# notpresent VPInfinit Simul => vf [] (vinf d) } ; - a1 : Polarity => Str = negation ; + a1 : Polarity => Agr => Str = \\p,a => negation ! p ; n2 : Agr => Str = \\a => case verb.vtype of { VRefl => reflPron a ; _ => [] diff --git a/lib/src/scandinavian/SentenceScand.gf b/lib/src/scandinavian/SentenceScand.gf index b44cc1b7b..9cbb495b3 100644 --- a/lib/src/scandinavian/SentenceScand.gf +++ b/lib/src/scandinavian/SentenceScand.gf @@ -14,7 +14,7 @@ incomplete concrete SentenceScand of Sentence = agr = {g = Utr ; n = n ; p = P2} ; verb = vp.s ! Act ! VPImperat ; in - verb.fin ++ vp.a1 ! pol ++ verb.inf ++ vp.n2 ! agr ++ vp.a2 ++ vp.ext + verb.fin ++ vp.a1 ! pol ! agr ++ verb.inf ++ vp.n2 ! agr ++ vp.a2 ++ vp.ext } ; SlashVP np vp = diff --git a/lib/src/swedish/ExtraSwe.gf b/lib/src/swedish/ExtraSwe.gf index ec497739d..907ce4042 100644 --- a/lib/src/swedish/ExtraSwe.gf +++ b/lib/src/swedish/ExtraSwe.gf @@ -90,7 +90,7 @@ lin verb = mkClause subj agr (predV do_V) ; comp = vp.n2 ! agr ++ vp.a2 ++ vp.ext in - vf ++ comp ++ (verb.s ! t ! a ! p ! Inv) ++ vp.a1 ! Pos + vf ++ comp ++ (verb.s ! t ! a ! p ! Inv) ++ vp.a1 ! Pos ! agr } ; oper do_V : V = mkV "göra" "gör" "gör" "gjorde" "gjort" "gjord" ; @@ -110,7 +110,7 @@ lin let vps = vp.s ! Act ! VPInfinit Simul ; vvp = UseV vv ; vvs = vvp.s ! Act ! VPFinite t a ; - always = vp.a1 ! Pos ++ vvp.a1 ! Pos ; + always = vp.a1 ! Pos ! np.a ++ vvp.a1 ! Pos ! np.a ; already = vp.a2 ++ vvp.a2 in vps.inf ++ vp.n2 ! np.a ++ vvs.fin ++ np.s ! NPNom ++ vv.c2.s ++ always ++ negation ! p ++ already ++ vvs.inf @@ -150,7 +150,7 @@ lin SupCl np vp pol = let sub = np.s ! nominative ; --# notpresent verb = (vp.s ! Act ! VPFinite SPres Anter).inf ; --# notpresent - neg = vp.a1 ! pol.p ++ pol.s ; --# notpresent + neg = vp.a1 ! pol.p ! np.a ++ pol.s ; --# notpresent compl = vp.n2 ! np.a ++ vp.a2 ++ vp.ext in --# notpresent {s = \\_ => sub ++ neg ++ verb ++ compl }; --# notpresent diff --git a/lib/src/swedish/IdiomSwe.gf b/lib/src/swedish/IdiomSwe.gf index e2fe4323a..d9e4c486d 100644 --- a/lib/src/swedish/IdiomSwe.gf +++ b/lib/src/swedish/IdiomSwe.gf @@ -55,6 +55,20 @@ concrete IdiomSwe of Idiom = CatSwe ** ImpPl1 vp = {s = ["låt oss"] ++ infVP vp {g = Utr ; n = Pl ; p = P1}} ; + SelfAdvVP vp = insertObj (\\a => sjalv a.g a.n) vp ; + SelfAdVVP vp = insertAdVAgr (\\a => sjalv a.g a.n) vp ; + SelfNP np = { + s = \\c => np.s ! c ++ sjalv np.a.g np.a.n ; + a = np.a + } ; + + oper + sjalv : Gender -> Number -> Str = \g,n -> case of { + => "själv" ; + => "självt" ; + _ => "själva" + } ; + } diff --git a/lib/src/swedish/ParseSwe.gf b/lib/src/swedish/ParseSwe.gf index 7779170e3..6d8e6dd65 100644 --- a/lib/src/swedish/ParseSwe.gf +++ b/lib/src/swedish/ParseSwe.gf @@ -12,7 +12,7 @@ concrete ParseSwe of ParseEngAbs = SentenceSwe, QuestionSwe, RelativeSwe, - IdiomSwe [NP, VP, Tense, Cl, ProgrVP, ExistNP], + IdiomSwe [NP, VP, Tense, Cl, ProgrVP, ExistNP, SelfAdvVP, SelfAdVVP, SelfNP], ExtraSwe [NP, Quant, VPSlash, VP, Tense, GenNP, PassVPSlash, Temp, Pol, Conj, VPS, ListVPS, S, Num, CN, RP, MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS, GenRP, VPI, VPIForm, VPIInf, VPIPresPart, ListVPI, VV, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,