1
0
forked from GitHub/gf-rgl

(Som) Add verbforms: neg.cond + reduced present for Pl1

This commit is contained in:
Inari Listenmaa
2019-08-19 15:12:35 +02:00
parent 92b9f6ceb0
commit 40a30b9fd1
6 changed files with 54 additions and 28 deletions

View File

@@ -9,7 +9,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
S = ResSom.Sentence ;
QS = SS ;
RS = {s : State => Gender => Case => Str} ;
RS = {s : State => GenNum => Case => Str} ;
-- relative sentence. Tense and polarity fixed,
-- but agreement may depend on the CN/NP it modifies.

View File

@@ -44,9 +44,9 @@ lincat
[RS] = {s1,s2 : State => Gender => Case => Str} ;
lin
BaseRS = twoTable3 State Gender Case ;
ConsRS = consrTable3 State Gender Case comma ;
ConjRS = conjunctRSTable State Gender Case ;
BaseRS = twoTable3 State GenNum Case ;
ConsRS = consrTable3 State GenNum Case comma ;
ConjRS = conjunctRSTable ;
{-
lincat
@@ -120,7 +120,7 @@ oper
s = \\c => co.s1 ++ xs.s1 ! Abs ++ co.s2 ! xs.st ++ xs.s2 ! c
}) ;
conjunctRSTable : ConjDistr -> {s1,s2 : State => Gender => Case => Str} -> RS = \co,xs -> lin RS (xs ** {
conjunctRSTable : ConjDistr -> {s1,s2 : State => GenNum => Case => Str} -> RS = \co,xs -> lin RS (xs ** {
s = \\st,g,c => co.s1
++ xs.s1 ! st ! g ! c
++ co.s2 ! st

View File

@@ -83,7 +83,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
which RS are restrictive and which appositive, as it is semantic.
-}
RelNP np rs = np ** {
s = \\c => objpron np ! c ++ "oo" ++ rs.s ! Indefinite ! npgender np ! c ;
s = \\c => objpron np ! c ++ "oo" ++ rs.s ! Indefinite ! npgennum np ! c ;
isPron = False ;
} ;
@@ -245,7 +245,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
mod = \\st,n,c => --what to do with subject case if there's both adj and RS?
cn.mod ! st ! n ! Abs
++ andConj st cn.hasMod
++ rs.s ! st ! gender cn ! c ;
++ rs.s ! st ! gennum cn n ! c ;
hasMod = True ;
} ;

View File

@@ -188,8 +188,17 @@ oper
gender : {gda : GenderDefArt} -> Gender = \n ->
case n.gda of {FM _ _ => Fem ; _ => Masc} ;
npgender : {a : Agreement} -> Gender = \n ->
case n.a of {Sg3 Fem => Fem ; _ => Masc} ;
gennum : {gda : GenderDefArt} -> Number -> GenNum = \gda,n ->
case n of {Pl => PlInv ; Sg =>
case gda.gda of {FM _ _ => SgFem ; _ => SgMasc}
} ;
npgennum : {a : Agreement} -> GenNum = \n ->
case n.a of {
Sg2|Sg3 Fem => SgFem ;
Sg1|Sg3 Masc => SgMasc ;
_ => PlInv } ;
--------------------------------------------------------------------------------
-- Numerals
@@ -272,12 +281,12 @@ param
| VNegPast Aspect
| VPast Aspect VAgr
| VImp Number Polarity
-- | VRelShort -- "som är/har/…" TODO is this used in other verbs?
| VRel Gender ; {- Sayeed p. 95-96 + ch 8
| VRel GenNum {- Sayeed p. 95-96 + ch 8
Reduced present general in relative clauses; as absolutive
1/2SG/3SG M/2PL/3PL sugá (VRel Masc)
3 SG F sugtá (VRel Fem)
1PL sugná -- not yet in the grammar -}
1/2SG/3SG M/2PL/3PL suga (VRel MascSg)
3 SG F sugta (VRel FemSg)
1PL sugna (VRel PlInv) -}
| VNegCond GenNum ;
VAgr =
Sg1_Sg3Masc

View File

@@ -13,11 +13,11 @@ lin
These forms are found in VRel in VP, and aren't chosen by predVP, so we put
them in manually in RelVP.
-}
RelVP rp vp = {s = \\g,c,t,a,p =>
RelVP rp vp = {s = \\gn,c,t,a,p =>
let cls = predVPSlash impersNP vp ;
rclSubord = mergeRCl (cls.s ! True) ;
rclStatement = mergeRCl (cls.s ! False) ;
in rp.s ++ case <g,c,t,a,p> of {
in rp.s ++ case <gn,c,t,a,p> of {
<g,Abs,Pres,Simul,Pos> => linVP (VRel g) vp ; -- reduced present only in absolutive
<_,Nom,Pres,Simul,Pos> => rclStatement.s ! t ! a ! p ; -- the usual forms, not subordinate
_ => rclSubord.s ! t ! a ! p } -- the rest is Subord because of negation.

View File

@@ -537,6 +537,10 @@ oper
VNegPast Simple => arkin ;
VNegPast Progressive => progr + "n" ;
-- TODO check conjugations 2 and 3
VNegCond PlInv => arag + n + "een" ;
VNegCond SgMasc => qaat + "een" ; -- for most verbs same as VPast Simple Pl3_
VNegCond SgFem => arag + t + "een" ; -- for most verbs same as VPast Simple Pl2_
VImp Sg Pos => arag ;
VImp Pl Pos => qaat + "a" ;
@@ -544,9 +548,11 @@ oper
VImp Pl Neg => qaat + "ina" ;
VInf => arki ;
-- VRelShort => arki ; -- TODO does this exist?
VRel Masc => qaat + "a" ;
VRel Fem => arag + t + "a" } ;
VRel SgMasc => qaat + "a" ;
VRel SgFem => arag + t + "a" ;
VRel PlInv => arag + "na"
} ;
sii, dhex = [] ;
} ;
@@ -609,6 +615,9 @@ oper
VPast _ Pl2_ => "ahaydeen" ;
VPast _ Pl3_ => "ahaayeen" ;
VNegPast _ => "ahi" ;
VNegCond SgMasc => "ahaadeen" ; -- 1SG/3 SG M/3PL
VNegCond SgFem => "ahaateen" ; -- 2SG/3 SG F/2PL
VNegCond PlInv => "ahaanneen" ; -- 1PL
--VRelShort => "ah" ;
VRel _ => "ah" ; -- TODO find right forms
VInf => "ahaan" ;
@@ -628,6 +637,7 @@ oper
VPres _ Pl2_ Pos => "leedihiin" ;
VPres _ Pl3_ Pos => "leeyihiin" ;
VPast asp agr => "l" + copula.s ! VPast asp agr ;
VNegCond agr => "l" + copula.s ! VNegCond agr ;
-- VRelShort => "leh" ;
VRel _ => "leh" ; -- TODO find right forms
x => hold_V.s ! x }
@@ -764,7 +774,7 @@ oper
Clause : Type = {s : ClType => Tense => Anteriority => Polarity => BaseCl} ;
ClSlash : Type = {s : Bool {-is subordinate-} => Tense => Anteriority => Polarity => BaseCl} ;
Sentence : Type = {s : Bool {-is subordinate-} => BaseCl} ;
RClause : Type = {s : Gender => Case => Tense => Anteriority => Polarity => Str} ;
RClause : Type = {s : GenNum => Case => Tense => Anteriority => Polarity => Str} ;
QClause : Type = {s : Tense => Anteriority => Polarity => Str} ;
mergeQCl : (Tense => Anteriority => Polarity => BaseCl) -> QClause = mergeSTM True ;
@@ -847,15 +857,15 @@ oper
Subord => vfSubord ; _ => vfStatement } ;
vfStatement : VFun = \t,ant,p,agr,vp ->
case <t,ant> of {
case <t,ant,p> of {
<Cond,_,Pos> => {fin = pastV have_V ; inf = vp.s ! VInf} ;
<Cond,_,Neg> => {fin = condNegV vp ; inf = []} ;
<Pres,Simul> => {fin = presV vp ; inf = [] } ;
<Past,Simul> => {fin = pastV vp ; inf = [] } ;
<Pres,Anter> => {fin = presCopula ! agrPol ; inf = vp.s ! VInf } ; ---- just guessing
<Past,Anter> => {fin = pastV (cSug "jir") ; inf = vp.s ! VInf} ;
<Fut,Simul> => {fin = presV (cSug "doon") ; inf = vp.s ! VInf} ;
<Fut,Anter> => {fin = pastV (cSug "doon") ; inf = vp.s ! VInf} ;
<Cond,Simul> => {fin = pastV have_V ; inf = vp.s ! VInf} ; -- TODO check
<Cond,Anter> => {fin = pastV have_V ; inf = vp.s ! VInf} -- TODO check
<Fut,Anter> => {fin = pastV (cSug "doon") ; inf = vp.s ! VInf}
}
where {
agrPol : {agr:Agreement ; pol:Polarity} = {agr=agr; pol=p} ;
@@ -864,6 +874,13 @@ oper
Pos => v.s ! VPast Simple (agr2vagr agr) } ;
presV : Verb -> Str = \v -> v.s ! VPres Simple (agr2vagr agr) p ;
condNegV : Verb -> Str = \v -> case agr of {
Sg2|Sg3 Fem
|Pl2 => v.s ! VNegCond SgFem ;
Pl1 _ => v.s ! VNegCond PlInv ;
_ => v.s ! VNegCond SgMasc --Sg1|Sg3 Masc|Pl3|Impers
}
} ;
vfSubord : VFun = \t,ant,p,agr,vp ->