From 20966efd8517ae924c832c02dea41be992b5d157 Mon Sep 17 00:00:00 2001 From: aarne Date: Thu, 2 Jun 2011 08:05:31 +0000 Subject: [PATCH] factored English uncontracted negation to one constant, ExtraEng.UncNeg : Pol --- lib/src/english/CatEng.gf | 6 +++- lib/src/english/ExtraEng.gf | 50 ++++++++++++++++++++-------------- lib/src/english/ExtraEngAbs.gf | 24 ++++++++++------ lib/src/english/GrammarEng.gf | 11 ++++++-- lib/src/english/PhraseEng.gf | 6 ++-- lib/src/english/SentenceEng.gf | 3 +- 6 files changed, 63 insertions(+), 37 deletions(-) diff --git a/lib/src/english/CatEng.gf b/lib/src/english/CatEng.gf index 87232db95..98838aac2 100644 --- a/lib/src/english/CatEng.gf +++ b/lib/src/english/CatEng.gf @@ -1,9 +1,13 @@ -concrete CatEng of Cat = CommonX ** open ResEng, Prelude in { +concrete CatEng of Cat = CommonX - [Pol] ** open ResEng, Prelude in { flags optimize=all_subs ; lincat +-- exception to CommonX, due to the distinction contracted/uncontracted negation + + Pol = {s : Str ; p : CPolarity} ; + -- Tensed/Untensed S = {s : Str} ; diff --git a/lib/src/english/ExtraEng.gf b/lib/src/english/ExtraEng.gf index 316c2cf1e..e33c160c2 100644 --- a/lib/src/english/ExtraEng.gf +++ b/lib/src/english/ExtraEng.gf @@ -37,26 +37,6 @@ concrete ExtraEng of ExtraEngAbs = CatEng ** let isAux = case vv.typ of {VVAux => True ; _ => False} in insertObj (\\a => (if_then_Str isAux [] "to") ++ vpi.s ! VPIInf ! a) (predVV vv) ; - UncNegCl t p cl = { - s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! unc p.p ! ODir - } ; - UncNegQCl t p cl = { - s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! unc p.p ! q - } ; - UncNegRCl t p cl = { - s = \\r => t.s ++ p.s ++ cl.s ! t.t ! t.a ! unc p.p ! r ; - c = cl.c - } ; - - UncNegImpSg p imp = {s = p.s ++ imp.s ! unc p.p ! ImpF Sg False} ; - UncNegImpPl p imp = {s = p.s ++ imp.s ! unc p.p ! ImpF Pl False} ; - - CompoundCN a b = {s = \\n,c => a.s ! Sg ! Nom ++ b.s ! n ! c ; g = b.g} ; - - oper - unc = contrNeg False ; - - lin that_RP = { s = table { @@ -89,7 +69,7 @@ concrete ExtraEng of ExtraEngAbs = CatEng ** MkVPS t p vp = { s = \\a => let - verb = vp.s ! t.t ! t.a ! contrNeg True p.p ! ODir ! a ; + 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.s2 ! a } ; @@ -122,4 +102,32 @@ concrete ExtraEng of ExtraEngAbs = CatEng ** typ = VVAux } ; + +lin + UncNeg = {s = [] ; p = CNeg False} ; + +--- obsolete: use UncNeg : Pol + + UncNegCl t p cl = { + s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! unc p.p ! ODir + } ; + UncNegQCl t p cl = { + s = \\q => t.s ++ p.s ++ cl.s ! t.t ! t.a ! unc p.p ! q + } ; + UncNegRCl t p cl = { + s = \\r => t.s ++ p.s ++ cl.s ! t.t ! t.a ! unc p.p ! r ; + c = cl.c + } ; + + UncNegImpSg p imp = {s = p.s ++ imp.s ! unc p.p ! ImpF Sg False} ; + UncNegImpPl p imp = {s = p.s ++ imp.s ! unc p.p ! ImpF Pl False} ; + + CompoundCN a b = {s = \\n,c => a.s ! Sg ! Nom ++ b.s ! n ! c ; g = b.g} ; + + oper + unc : CPolarity -> CPolarity = \x -> case x of { + CNeg _ => CNeg False ; + _ => x + } ; + } diff --git a/lib/src/english/ExtraEngAbs.gf b/lib/src/english/ExtraEngAbs.gf index 0ccb9e101..ed5931893 100644 --- a/lib/src/english/ExtraEngAbs.gf +++ b/lib/src/english/ExtraEngAbs.gf @@ -1,13 +1,8 @@ abstract ExtraEngAbs = Extra - [ProDrop] ** { --- uncontracted negations; contracted are the default - fun - UncNegCl : Temp -> Pol -> Cl -> S ; - UncNegQCl : Temp -> Pol -> QCl -> QS ; - UncNegRCl : Temp -> Pol -> RCl -> RS ; - - UncNegImpSg : Pol -> Imp -> Utt; -- do not help yourself - UncNegImpPl : Pol -> Imp -> Utt; -- do not help yourselves +-- uncontracted negative polarity; contracted is the default for PNeg + fun + UncNeg : Pol ; -- freely compounded nouns @@ -24,4 +19,17 @@ abstract ExtraEngAbs = Extra - [ProDrop] ** { -- emphasizing "do", e.g. "John does walk" do_VV : VV ; + + +--- these are obsolete: use UncNeg : Pol instead + + fun + UncNegCl : Temp -> Pol -> Cl -> S ; + UncNegQCl : Temp -> Pol -> QCl -> QS ; + UncNegRCl : Temp -> Pol -> RCl -> RS ; + + UncNegImpSg : Pol -> Imp -> Utt; -- do not help yourself + UncNegImpPl : Pol -> Imp -> Utt; -- do not help yourselves + + } diff --git a/lib/src/english/GrammarEng.gf b/lib/src/english/GrammarEng.gf index 6b7474ac6..86f993b62 100644 --- a/lib/src/english/GrammarEng.gf +++ b/lib/src/english/GrammarEng.gf @@ -11,12 +11,17 @@ concrete GrammarEng of Grammar = RelativeEng, ConjunctionEng, PhraseEng, - TextX, + TextX - [Pol,PPos,PNeg], StructuralEng, IdiomEng, - TenseX - ** { + TenseX - [Pol,PPos,PNeg] + ** open ResEng, Prelude in { flags startcat = Phr ; unlexer = text ; lexer = text ; +lin + PPos = {s = [] ; p = CPos} ; + PNeg = {s = [] ; p = CNeg True} ; -- contracted: don't + + } ; diff --git a/lib/src/english/PhraseEng.gf b/lib/src/english/PhraseEng.gf index 6b53c4944..496f8ee03 100644 --- a/lib/src/english/PhraseEng.gf +++ b/lib/src/english/PhraseEng.gf @@ -5,9 +5,9 @@ concrete PhraseEng of Phrase = CatEng ** open Prelude, ResEng in { UttS s = s ; UttQS qs = {s = qs.s ! QDir} ; - UttImpSg pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg False} ; - UttImpPl pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Pl False} ; - UttImpPol pol imp = {s = pol.s ++ imp.s ! contrNeg True pol.p ! ImpF Sg True} ; + UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg False} ; + UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Pl False} ; + UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg True} ; UttIP ip = {s = ip.s ! npNom} ; --- Acc also UttIAdv iadv = iadv ; diff --git a/lib/src/english/SentenceEng.gf b/lib/src/english/SentenceEng.gf index 8807dd20c..00d2405a9 100644 --- a/lib/src/english/SentenceEng.gf +++ b/lib/src/english/SentenceEng.gf @@ -63,7 +63,8 @@ concrete SentenceEng of Sentence = CatEng ** open Prelude, ResEng in { RelS s r = {s = s.s ++ "," ++ r.s ! agrP3 Sg} ; oper - ctr = contrNeg True ; -- contracted negations + ctr : CPolarity -> CPolarity = \x -> x ; +--- ctr = contrNeg True ; -- contracted negations }