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 ; S = ResSom.Sentence ;
QS = SS ; QS = SS ;
RS = {s : State => Gender => Case => Str} ; RS = {s : State => GenNum => Case => Str} ;
-- relative sentence. Tense and polarity fixed, -- relative sentence. Tense and polarity fixed,
-- but agreement may depend on the CN/NP it modifies. -- but agreement may depend on the CN/NP it modifies.

View File

@@ -44,9 +44,9 @@ lincat
[RS] = {s1,s2 : State => Gender => Case => Str} ; [RS] = {s1,s2 : State => Gender => Case => Str} ;
lin lin
BaseRS = twoTable3 State Gender Case ; BaseRS = twoTable3 State GenNum Case ;
ConsRS = consrTable3 State Gender Case comma ; ConsRS = consrTable3 State GenNum Case comma ;
ConjRS = conjunctRSTable State Gender Case ; ConjRS = conjunctRSTable ;
{- {-
lincat lincat
@@ -120,7 +120,7 @@ oper
s = \\c => co.s1 ++ xs.s1 ! Abs ++ co.s2 ! xs.st ++ xs.s2 ! c 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 s = \\st,g,c => co.s1
++ xs.s1 ! st ! g ! c ++ xs.s1 ! st ! g ! c
++ co.s2 ! st ++ 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. which RS are restrictive and which appositive, as it is semantic.
-} -}
RelNP np rs = np ** { 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 ; 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? mod = \\st,n,c => --what to do with subject case if there's both adj and RS?
cn.mod ! st ! n ! Abs cn.mod ! st ! n ! Abs
++ andConj st cn.hasMod ++ andConj st cn.hasMod
++ rs.s ! st ! gender cn ! c ; ++ rs.s ! st ! gennum cn n ! c ;
hasMod = True ; hasMod = True ;
} ; } ;

View File

@@ -188,8 +188,17 @@ oper
gender : {gda : GenderDefArt} -> Gender = \n -> gender : {gda : GenderDefArt} -> Gender = \n ->
case n.gda of {FM _ _ => Fem ; _ => Masc} ; 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 -- Numerals
@@ -272,12 +281,12 @@ param
| VNegPast Aspect | VNegPast Aspect
| VPast Aspect VAgr | VPast Aspect VAgr
| VImp Number Polarity | VImp Number Polarity
-- | VRelShort -- "som är/har/…" TODO is this used in other verbs? | VRel GenNum {- Sayeed p. 95-96 + ch 8
| VRel Gender ; {- Sayeed p. 95-96 + ch 8 Reduced present general in relative clauses; as absolutive
Reduced present general in relative clauses; as absolutive 1/2SG/3SG M/2PL/3PL suga (VRel MascSg)
1/2SG/3SG M/2PL/3PL sugá (VRel Masc) 3 SG F sugta (VRel FemSg)
3 SG F sugtá (VRel Fem) 1PL sugna (VRel PlInv) -}
1PL sugná -- not yet in the grammar -} | VNegCond GenNum ;
VAgr = VAgr =
Sg1_Sg3Masc 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 These forms are found in VRel in VP, and aren't chosen by predVP, so we put
them in manually in RelVP. 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 ; let cls = predVPSlash impersNP vp ;
rclSubord = mergeRCl (cls.s ! True) ; rclSubord = mergeRCl (cls.s ! True) ;
rclStatement = mergeRCl (cls.s ! False) ; 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 <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 <_,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. _ => rclSubord.s ! t ! a ! p } -- the rest is Subord because of negation.

View File

@@ -521,7 +521,7 @@ oper
VPres Progressive Pl3_ pol => progr + "aan" ; VPres Progressive Pl3_ pol => progr + "aan" ;
VPast Simple Sg1_Sg3Masc VPast Simple Sg1_Sg3Masc
=> qaat + ay ; => qaat + ay ;
VPast Simple Sg2_Sg3Fem => arag + t + ay ; -- t, d or s VPast Simple Sg2_Sg3Fem => arag + t + ay ; -- t, d or s
VPast Simple Pl1_ => arag + n + ay ; VPast Simple Pl1_ => arag + n + ay ;
VPast Simple Pl2_ => arag + t + "een" ; -- t, d or s VPast Simple Pl2_ => arag + t + "een" ; -- t, d or s
@@ -537,6 +537,10 @@ oper
VNegPast Simple => arkin ; VNegPast Simple => arkin ;
VNegPast Progressive => progr + "n" ; 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 Sg Pos => arag ;
VImp Pl Pos => qaat + "a" ; VImp Pl Pos => qaat + "a" ;
@@ -544,9 +548,11 @@ oper
VImp Pl Neg => qaat + "ina" ; VImp Pl Neg => qaat + "ina" ;
VInf => arki ; VInf => arki ;
-- VRelShort => arki ; -- TODO does this exist? VRel SgMasc => qaat + "a" ;
VRel Masc => qaat + "a" ; VRel SgFem => arag + t + "a" ;
VRel Fem => arag + t + "a" } ; VRel PlInv => arag + "na"
} ;
sii, dhex = [] ; sii, dhex = [] ;
} ; } ;
@@ -609,6 +615,9 @@ oper
VPast _ Pl2_ => "ahaydeen" ; VPast _ Pl2_ => "ahaydeen" ;
VPast _ Pl3_ => "ahaayeen" ; VPast _ Pl3_ => "ahaayeen" ;
VNegPast _ => "ahi" ; VNegPast _ => "ahi" ;
VNegCond SgMasc => "ahaadeen" ; -- 1SG/3 SG M/3PL
VNegCond SgFem => "ahaateen" ; -- 2SG/3 SG F/2PL
VNegCond PlInv => "ahaanneen" ; -- 1PL
--VRelShort => "ah" ; --VRelShort => "ah" ;
VRel _ => "ah" ; -- TODO find right forms VRel _ => "ah" ; -- TODO find right forms
VInf => "ahaan" ; VInf => "ahaan" ;
@@ -627,7 +636,8 @@ oper
VPres _ Pl1_ Pos => "leenahay" ; VPres _ Pl1_ Pos => "leenahay" ;
VPres _ Pl2_ Pos => "leedihiin" ; VPres _ Pl2_ Pos => "leedihiin" ;
VPres _ Pl3_ Pos => "leeyihiin" ; VPres _ Pl3_ Pos => "leeyihiin" ;
VPast asp agr => "l" + copula.s ! VPast asp agr ; VPast asp agr => "l" + copula.s ! VPast asp agr ;
VNegCond agr => "l" + copula.s ! VNegCond agr ;
-- VRelShort => "leh" ; -- VRelShort => "leh" ;
VRel _ => "leh" ; -- TODO find right forms VRel _ => "leh" ; -- TODO find right forms
x => hold_V.s ! x } x => hold_V.s ! x }
@@ -764,7 +774,7 @@ oper
Clause : Type = {s : ClType => Tense => Anteriority => Polarity => BaseCl} ; Clause : Type = {s : ClType => Tense => Anteriority => Polarity => BaseCl} ;
ClSlash : Type = {s : Bool {-is subordinate-} => Tense => Anteriority => Polarity => BaseCl} ; ClSlash : Type = {s : Bool {-is subordinate-} => Tense => Anteriority => Polarity => BaseCl} ;
Sentence : Type = {s : Bool {-is subordinate-} => 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} ; QClause : Type = {s : Tense => Anteriority => Polarity => Str} ;
mergeQCl : (Tense => Anteriority => Polarity => BaseCl) -> QClause = mergeSTM True ; mergeQCl : (Tense => Anteriority => Polarity => BaseCl) -> QClause = mergeSTM True ;
@@ -847,15 +857,15 @@ oper
Subord => vfSubord ; _ => vfStatement } ; Subord => vfSubord ; _ => vfStatement } ;
vfStatement : VFun = \t,ant,p,agr,vp -> 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 = [] } ; <Pres,Simul> => {fin = presV vp ; inf = [] } ;
<Past,Simul> => {fin = pastV vp ; inf = [] } ; <Past,Simul> => {fin = pastV vp ; inf = [] } ;
<Pres,Anter> => {fin = presCopula ! agrPol ; inf = vp.s ! VInf } ; ---- just guessing <Pres,Anter> => {fin = presCopula ! agrPol ; inf = vp.s ! VInf } ; ---- just guessing
<Past,Anter> => {fin = pastV (cSug "jir") ; inf = vp.s ! VInf} ; <Past,Anter> => {fin = pastV (cSug "jir") ; inf = vp.s ! VInf} ;
<Fut,Simul> => {fin = presV (cSug "doon") ; inf = vp.s ! VInf} ; <Fut,Simul> => {fin = presV (cSug "doon") ; inf = vp.s ! VInf} ;
<Fut,Anter> => {fin = pastV (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
} }
where { where {
agrPol : {agr:Agreement ; pol:Polarity} = {agr=agr; pol=p} ; agrPol : {agr:Agreement ; pol:Polarity} = {agr=agr; pol=p} ;
@@ -864,7 +874,14 @@ oper
Pos => v.s ! VPast Simple (agr2vagr agr) } ; Pos => v.s ! VPast Simple (agr2vagr agr) } ;
presV : Verb -> Str = \v -> v.s ! VPres Simple (agr2vagr agr) p ; 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 -> vfSubord : VFun = \t,ant,p,agr,vp ->
case <t,ant,p> of { case <t,ant,p> of {