diff --git a/src/abstract/Extend.gf b/src/abstract/Extend.gf index a3b49a63e..0a45337d4 100644 --- a/src/abstract/Extend.gf +++ b/src/abstract/Extend.gf @@ -74,6 +74,14 @@ abstract Extend = Cat ** { ConjVPI2 : Conj -> [VPI2] -> VPI2 ; -- to love and hate ComplVPI2 : VPI2 -> NP -> VPI ; -- to love and hate that person +-- Conjunction of copula complements + cat [Comp]{2} ; + fun ConjComp : Conj -> ListComp -> Comp ; + +-- Conjunction of imperatives + cat [Imp] {2} ; + fun ConjImp : Conj -> ListImp -> Imp ; + fun ProDrop : Pron -> Pron ; -- unstressed subject pronoun becomes empty: "am tired" diff --git a/src/abstract/Sentence.gf b/src/abstract/Sentence.gf index fc3c760b5..d3e135ce0 100644 --- a/src/abstract/Sentence.gf +++ b/src/abstract/Sentence.gf @@ -40,6 +40,7 @@ abstract Sentence = Cat ** { -- To fix these parameters, see [Phrase Phrase.html]. ImpVP : VP -> Imp ; -- love yourselves + AdvImp : Adv -> Imp -> Imp ; -- please love yourselves --2 Embedded sentences diff --git a/src/bulgarian/ExtendBul.gf b/src/bulgarian/ExtendBul.gf index d37db0f6c..dca506698 100644 --- a/src/bulgarian/ExtendBul.gf +++ b/src/bulgarian/ExtendBul.gf @@ -96,6 +96,10 @@ lin lin PassVPSlash vp = insertObj (\\a => vp.ad.s ++ vp.s ! Perf ! VPassive (aform a.gn Indef (RObj Acc)) ++ vp.compl1 ! a ++ vp.compl2 ! a) Pos (predV verbBe) ; + ProgrVPSlash vp = vp ** { + s = \\_ => vp.s ! Imperf ; + isSimple = False + } ; PassAgentVPSlash vp np = insertObj (\\_ => "от" ++ np.s ! RObj CPrep) Pos @@ -155,6 +159,25 @@ lin s = \\a => linCoord []!conj.sep ++ vps.s!a!conj.sep ++ conj.s ++ vps.s!a!4 } ; +lincat [Comp] = {s : Agr => Ints 4 => Str} ; +lin BaseComp x y = + {s = \\agr=>table {4 => y.s!agr; _ => x.s!agr}} ; + ConsComp x xs = + {s = \\agr=>table {4 => xs.s!agr!4; t => x.s!agr++linCoord bindComma!t++xs.s!agr!t}} ; + ConjComp conj ss = { + s = \\agr => linCoord [] ! conj.sep ++ ss.s!agr!conj.sep ++ conj.s ++ ss.s!agr!4 ; + p = Pos + } ; + +lincat ListImp = {s : Polarity => GenNum => Ints 4 => Str} ; +lin BaseImp x y = + {s = \\p,gn=>table {4 => y.s!p!gn; _ => x.s!p!gn}} ; + ConsImp x xs = + {s = \\p,gn=>table {4 => xs.s!p!gn!4; t => x.s!p!gn++linCoord bindComma!t++xs.s!p!gn!t}} ; + ConjImp conj ss = { + s = \\p,gn => linCoord [] ! conj.sep ++ ss.s!p!gn!conj.sep ++ conj.s ++ ss.s!p!gn!4 + } ; + lin ComplBareVS = ComplVS ; ComplSlashPartLast = ComplSlash ; diff --git a/src/bulgarian/SentenceBul.gf b/src/bulgarian/SentenceBul.gf index ef563a608..0b70b0ac2 100644 --- a/src/bulgarian/SentenceBul.gf +++ b/src/bulgarian/SentenceBul.gf @@ -31,6 +31,10 @@ concrete SentenceBul of Sentence = CatBul ** open Prelude, ResBul in { } ++ compl ; } ; + AdvImp adv imp = { + s = \\pol,gennum => adv.s ++ imp.s ! pol ! gennum + } ; + SlashVP np slash = { s = \\agr => (mkClause (np.s ! RSubj) np.gn np.p {s = slash.s ; ad = slash.ad ; diff --git a/src/english/ExtendEng.gf b/src/english/ExtendEng.gf index 872e2772f..384a833f9 100644 --- a/src/english/ExtendEng.gf +++ b/src/english/ExtendEng.gf @@ -138,6 +138,20 @@ concrete ExtendEng of Extend = } } ; +-- Conjunction of copula complements + +lincat [Comp] = {s1,s2 : Agr => Str} ; +lin BaseComp x y = twoTable Agr x y ; + ConsComp xs x = consrTable Agr comma xs x ; + ConjComp conj ss = conjunctDistrTable Agr conj ss ; + +-- Conjunction of imperatives + +lincat ListImp = {s1,s2 : CPolarity => ImpForm => Str} ; +lin BaseImp = twoTable2 CPolarity ImpForm ; + ConsImp = consrTable2 CPolarity ImpForm comma ; + ConjImp conj ss = conjunctDistrTable2 CPolarity ImpForm conj ss ; + ----- lin diff --git a/src/english/SentenceEng.gf b/src/english/SentenceEng.gf index a3546ebdb..70d649bd2 100644 --- a/src/english/SentenceEng.gf +++ b/src/english/SentenceEng.gf @@ -22,6 +22,10 @@ concrete SentenceEng of Sentence = CatEng ** open Prelude, ResEng in { dont ++ verb } ; + AdvImp adv imp = { + s = \\pol,impform => adv.s ++ imp.s ! pol ! impform + } ; + SlashVP np vp = mkClause (np.s ! npNom) np.a vp ** {c2 = vp.c2} ; diff --git a/src/portuguese/ExtendPor.gf b/src/portuguese/ExtendPor.gf index d7081b36e..cfba13e64 100644 --- a/src/portuguese/ExtendPor.gf +++ b/src/portuguese/ExtendPor.gf @@ -28,9 +28,10 @@ concrete ExtendPor of Extend = CatPor ** ExtendRomanceFunctor - Prelude, ParadigmsPor, (L = LexiconPor), - (S = StructuralPor) in { + (S = StructuralPor), + (P = ParamX) in { - lin + lin ExistsNP np = mkClause [] True False np.a (insertComplement (\\_ => (np.s ! Nom).ton) @@ -88,6 +89,21 @@ concrete ExtendPor of Extend = CatPor ** ExtendRomanceFunctor - s = "a fim de" ++ infStr vp } ; + lincat ListComp = {s1,s2 : Agr => Str ; cop : CopulaType} ; + + lin + -- should one allow different copulas? + BaseComp x y = twoTable Agr x y ** {cop = x.cop } ; + ConsComp xs x = consrTable Agr comma xs x ** xs ; + ConjComp conj cs = conjunctDistrTable Agr conj cs ** {cop = cs.cop} ; + + lincat ListImp = {s1,s2 : RPolarity => P.ImpForm => Gender => Str} ; + + lin + BaseImp = twoTable3 RPolarity P.ImpForm Gender ; + ConsImp = consrTable3 RPolarity P.ImpForm Gender comma ; + ConjImp conj is = conjunctDistrTable3 RPolarity P.ImpForm Gender conj is ; + lin iFem_Pron = pronAgr S.i_Pron Fem Sg P1 ; weFem_Pron = pronAgr S.we_Pron Fem Pl P1 ; diff --git a/src/romance/SentenceRomance.gf b/src/romance/SentenceRomance.gf index a2ac17c21..fe9c72da1 100644 --- a/src/romance/SentenceRomance.gf +++ b/src/romance/SentenceRomance.gf @@ -15,6 +15,10 @@ incomplete concrete SentenceRomance of Sentence = } } ; + AdvImp adv imp = { + s = \\pol,impform,g => imp.s ! pol ! impform ! g ++ adv.s + } ; + {- SlashVP np vps = -- agreement decided afterwards: la fille qu'il a trouvée diff --git a/src/scandinavian/SentenceScand.gf b/src/scandinavian/SentenceScand.gf index db7af902c..f3cdc5ca5 100644 --- a/src/scandinavian/SentenceScand.gf +++ b/src/scandinavian/SentenceScand.gf @@ -19,6 +19,10 @@ incomplete concrete SentenceScand of Sentence = verb.fin ++ neg.p1 ++ verb.inf ++ pron ++ neg.p2 ++ vp.n2 ! agr ++ vp.a2 ++ vp.ext } ; + AdvImp adv imp = { + s = \\p,n => adv.s ++ imp.s ! p ! n + } ; + SlashVP np vp = mkClause (np.s ! nominative) np.a diff --git a/src/swedish/ExtendSwe.gf b/src/swedish/ExtendSwe.gf index 813468fba..85bd6f4af 100644 --- a/src/swedish/ExtendSwe.gf +++ b/src/swedish/ExtendSwe.gf @@ -69,6 +69,11 @@ in { insertObj (\\a => vps.c2.s ++ vps.n3 ! a) (passiveVP vps) ; PassAgentVPSlash vps np = insertObjPost (\\a => vps.c2.s ++ vps.n3 ! a) (insertObj (\\_ => (PrepNP by8agent_Prep np).s) (passiveVP vps)) ; + ProgrVPSlash vp = + insertObj (\\a => "att" ++ infVP vp a) (predV (P.partV I.hålla_V "på")) ** + { n3 = vp.n3 ; + c2 = vp.c2 + } ; lin UttVPShort vp = {s = infVP vp (agrP3 Utr Sg)} ; @@ -172,6 +177,16 @@ in { s = \\t,a => vpi2.s ! t ! a ++ vpi2.c2.s ++ np.s ! NPAcc } ; +lincat [Comp] = {s1,s2 : Agr => Str} ; +lin BaseComp x y = twoTable Agr x y ; + ConsComp xs x = consrTable Agr comma xs x ; + ConjComp conj ss = conjunctDistrTable Agr conj ss ; + +lincat ListImp = {s1,s2 : Polarity => Number => Str} ; +lin BaseImp = twoTable2 Polarity Number ; + ConsImp = consrTable2 Polarity Number comma ; + ConjImp conj ss = conjunctDistrTable2 Polarity Number conj ss ; + ----------- ICompAP ap = {s = \\a => hur_IAdv.s ++ ap.s ! a} ;