forked from GitHub/gf-rgl
(Som) WIP relative clauses.
Add short relative forms in VForm, split Cl(Slash) etc. even further, to make it possible to not add sentence type marker in RelVP.
This commit is contained in:
@@ -25,7 +25,7 @@ lin
|
|||||||
|
|
||||||
-- : Subj -> S -> Adv ;
|
-- : Subj -> S -> Adv ;
|
||||||
SubjS subj s = let subs = s.s ! True in
|
SubjS subj s = let subs = s.s ! True in
|
||||||
mkAdv (subs.beforeSTM ++ subj.s ++ subs.afterSTM) ;
|
mkAdv (subs.beforeSTM ++ subj.s ++ subs.stm ++ subs.afterSTM) ;
|
||||||
|
|
||||||
-- Comparison adverbs also work as numeral adverbs.
|
-- Comparison adverbs also work as numeral adverbs.
|
||||||
|
|
||||||
|
|||||||
@@ -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 : {-Agreement =>-} Str} ; -- TODO
|
RS = {s : Gender => 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.
|
||||||
|
|
||||||
@@ -30,7 +30,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
|
|||||||
|
|
||||||
--2 Subord clauses and pronouns
|
--2 Subord clauses and pronouns
|
||||||
|
|
||||||
RCl = ResSom.QClause ;
|
RCl = ResSom.RClause ;
|
||||||
RP = SS ;
|
RP = SS ;
|
||||||
|
|
||||||
--2 Verb phrases
|
--2 Verb phrases
|
||||||
@@ -119,7 +119,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
|
|||||||
|
|
||||||
linref
|
linref
|
||||||
-- Cl = linCl ;
|
-- Cl = linCl ;
|
||||||
VP = linVP ;
|
VP = linVP VInf ;
|
||||||
CN = linCN ;
|
CN = linCN ;
|
||||||
Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ;
|
Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
|
|||||||
|
|
||||||
-- : NP -> RS -> NP ; -- Paris, which is here
|
-- : NP -> RS -> NP ; -- Paris, which is here
|
||||||
RelNP np rs = np ** {
|
RelNP np rs = np ** {
|
||||||
s = \\c => np.s ! c ++ rs.s
|
s = \\c => np.s ! c ++ rs.s ! npgender np ! c
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Determiners can form noun phrases directly.
|
-- Determiners can form noun phrases directly.
|
||||||
@@ -230,7 +230,8 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
|
|||||||
|
|
||||||
-- : CN -> RS -> CN ;
|
-- : CN -> RS -> CN ;
|
||||||
RelCN cn rs = cn ** {
|
RelCN cn rs = cn ** {
|
||||||
mod = \\n,c => cn.mod ! n ! c ++ rs.s
|
mod = \\n,c => cn.mod ! n ! c ++ rs.s ! gender cn ! c ;
|
||||||
|
hasMod = True ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
{-
|
{-
|
||||||
|
|||||||
@@ -171,8 +171,12 @@ oper
|
|||||||
case agr of {P3_Prep => True ; _ => False} ;
|
case agr of {P3_Prep => True ; _ => False} ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
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} ;
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Numerals
|
-- Numerals
|
||||||
|
|
||||||
@@ -253,7 +257,8 @@ param
|
|||||||
| VPres Aspect VAgr Polarity
|
| VPres Aspect VAgr Polarity
|
||||||
| VNegPast Aspect
|
| VNegPast Aspect
|
||||||
| VPast Aspect VAgr
|
| VPast Aspect VAgr
|
||||||
| VRel -- "som är/har/…" TODO is this used in other verbs?
|
-- | VRelShort -- "som är/har/…" TODO is this used in other verbs?
|
||||||
|
| VRel Gender -- Reduced present general in relative clauses
|
||||||
| VImp Number Polarity ;
|
| VImp Number Polarity ;
|
||||||
|
|
||||||
VAgr =
|
VAgr =
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ concrete PhraseSom of Phrase = CatSom ** open Prelude, ResSom in {
|
|||||||
lin
|
lin
|
||||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||||
|
|
||||||
UttS s = let basecl = s.s ! False in {s = basecl.beforeSTM ++ basecl.afterSTM} ;
|
UttS s = let basecl = s.s ! False in {s = linBaseCl basecl} ;
|
||||||
UttQS qs = qs ;
|
UttQS qs = qs ;
|
||||||
|
|
||||||
UttImpSg pol imp =
|
UttImpSg pol imp =
|
||||||
@@ -15,7 +15,7 @@ concrete PhraseSom of Phrase = CatSom ** open Prelude, ResSom in {
|
|||||||
UttIP ip = { s = ip.s ! Abs} ;
|
UttIP ip = { s = ip.s ! Abs} ;
|
||||||
UttIAdv iadv = iadv ;
|
UttIAdv iadv = iadv ;
|
||||||
UttNP np = { s = np.s ! Abs} ;
|
UttNP np = { s = np.s ! Abs} ;
|
||||||
UttVP vp = { s = linVP vp } ;
|
UttVP vp = { s = infVP vp } ;
|
||||||
UttAdv adv = {s = linAdv adv} ;
|
UttAdv adv = {s = linAdv adv} ;
|
||||||
UttCN n = {s = linCN n } ;
|
UttCN n = {s = linCN n } ;
|
||||||
UttCard n = {s = n.s ! Mid} ;
|
UttCard n = {s = n.s ! Mid} ;
|
||||||
|
|||||||
@@ -19,12 +19,19 @@ Reduced present general in relative clauses; as absolutive
|
|||||||
books-the men-the bring 'the books which the men bring'
|
books-the men-the bring 'the books which the men bring'
|
||||||
-}
|
-}
|
||||||
-- : RP -> VP -> RCl ;
|
-- : RP -> VP -> RCl ;
|
||||||
RelVP rp vp = RelSlash rp (predVPSlash emptyNP vp) ;
|
RelVP rp vp = {s = \\g,c,t,a,p =>
|
||||||
|
let cls = predVPSlash impersNP vp ;
|
||||||
|
rcl = mergeSTM (cls.s ! False) ; -- Other than present tense, just use normal verb forms
|
||||||
|
in rp.s ++ case <g,c,t,a,p> of {
|
||||||
|
<Fem,Abs,Pres,Simul,Pos> => linVP (VRel Fem) vp ;
|
||||||
|
<Masc,Abs,Pres,Simul,Pos> => linVP (VRel Masc) vp ;
|
||||||
|
_ => rcl.s ! t ! a ! p }
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : RP -> ClSlash -> RCl ; -- whom John loves
|
-- : RP -> ClSlash -> RCl ; -- whom John loves
|
||||||
RelSlash rp cls =
|
RelSlash rp cls =
|
||||||
let rcl = mergeSTM (cls.s ! True)
|
let rcl = mergeSTM (cls.s ! True)
|
||||||
in rcl ** {s = \\t,a,p => rp.s ++ rcl.s ! t ! a ! p} ;
|
in rcl ** {s = \\g,c,t,a,p => rp.s ++ rcl.s ! t ! a ! p} ;
|
||||||
|
|
||||||
|
|
||||||
-- : RP ;
|
-- : RP ;
|
||||||
|
|||||||
@@ -540,7 +540,9 @@ oper
|
|||||||
VImp Pl Neg => qaat + "ina" ;
|
VImp Pl Neg => qaat + "ina" ;
|
||||||
|
|
||||||
VInf => arki ;
|
VInf => arki ;
|
||||||
VRel => arki } ; -- TODO does this exist?
|
-- VRelShort => arki ; -- TODO does this exist?
|
||||||
|
VRel Masc => qaat + "a" ;
|
||||||
|
VRel Fem => arag + t + "a" } ;
|
||||||
sii, dhex = [] ;
|
sii, dhex = [] ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -603,7 +605,8 @@ oper
|
|||||||
VPast _ Pl2_ => "ahaydeen" ;
|
VPast _ Pl2_ => "ahaydeen" ;
|
||||||
VPast _ Pl3_ => "ahaayeen" ;
|
VPast _ Pl3_ => "ahaayeen" ;
|
||||||
VNegPast _ => "ahi" ;
|
VNegPast _ => "ahi" ;
|
||||||
VRel => "ah" ;
|
--VRelShort => "ah" ;
|
||||||
|
VRel _ => "ah" ; -- TODO find right forms
|
||||||
VInf => "ahaan" ;
|
VInf => "ahaan" ;
|
||||||
VImp Sg pol => if_then_Pol pol "ahaw" "ahaanin" ;
|
VImp Sg pol => if_then_Pol pol "ahaw" "ahaanin" ;
|
||||||
VImp Pl pol => if_then_Pol pol "ahaada" "ahaanina" ;
|
VImp Pl pol => if_then_Pol pol "ahaada" "ahaanina" ;
|
||||||
@@ -621,7 +624,8 @@ oper
|
|||||||
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 ;
|
||||||
VRel => "leh" ;
|
-- VRelShort => "leh" ;
|
||||||
|
VRel _ => "leh" ; -- TODO find right forms
|
||||||
x => hold_V.s ! x }
|
x => hold_V.s ! x }
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
@@ -749,10 +753,11 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
-- Sentences etc.
|
-- Sentences etc.
|
||||||
BaseCl : Type = {beforeSTM, afterSTM : Str} ; -- adverbs, subjects, all that comes before sentence type marker. Eventual Subj attaches to the part after STM.
|
BaseCl : Type = {beforeSTM, stm, afterSTM : Str} ; -- adverbs, subjects, all that comes before sentence type marker. Eventual Subj attaches to the part after STM.
|
||||||
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} ;
|
||||||
QClause : Type = {s : Tense => Anteriority => Polarity => Str} ;
|
QClause : Type = {s : Tense => Anteriority => Polarity => Str} ;
|
||||||
|
|
||||||
mergeSTM : (Tense => Anteriority => Polarity => BaseCl) -> QClause = \b ->
|
mergeSTM : (Tense => Anteriority => Polarity => BaseCl) -> QClause = \b ->
|
||||||
@@ -803,8 +808,8 @@ oper
|
|||||||
beforeSTM = vp.berri -- AdV
|
beforeSTM = vp.berri -- AdV
|
||||||
++ subjnoun -- subject if it's a noun
|
++ subjnoun -- subject if it's a noun
|
||||||
++ obj.p1 ; -- object if it's a noun
|
++ obj.p1 ; -- object if it's a noun
|
||||||
afterSTM = stm -- sentence type marker + possible subj. pronoun
|
stm = stm ; -- sentence type marker + possible subj. pronoun
|
||||||
++ obj.p2 -- object if it's a pronoun
|
afterSTM = obj.p2 -- object if it's a pronoun
|
||||||
++ vp.sii -- restricted set of particles
|
++ vp.sii -- restricted set of particles
|
||||||
++ vp.dhex -- restricted set of nouns/adverbials
|
++ vp.dhex -- restricted set of nouns/adverbials
|
||||||
++ vp.secObj -- "second object"
|
++ vp.secObj -- "second object"
|
||||||
@@ -846,10 +851,7 @@ oper
|
|||||||
_ => vfStatement t ant p agr vp
|
_ => vfStatement t ant p agr vp
|
||||||
} ; -- TODO other relative forms
|
} ; -- TODO other relative forms
|
||||||
|
|
||||||
infVP : VerbPhrase -> Str = \vp ->
|
infVP : VerbPhrase -> Str = linVP VInf ;
|
||||||
let inf = {inf = vp.s ! VInf ; fin=[]} ;
|
|
||||||
wo = wordOrder [] [] [] (vp.comp ! Pl3) inf vp ;
|
|
||||||
in wo.beforeSTM ++ wo.afterSTM ;
|
|
||||||
|
|
||||||
stmarkerContr : Agreement => Polarity => Str = \\a,b =>
|
stmarkerContr : Agreement => Polarity => Str = \\a,b =>
|
||||||
let stm = if_then_Pol b "w" "m"
|
let stm = if_then_Pol b "w" "m"
|
||||||
@@ -872,7 +874,11 @@ oper
|
|||||||
-- linrefs
|
-- linrefs
|
||||||
|
|
||||||
oper
|
oper
|
||||||
linVP : VerbPhrase -> Str = infVP ;
|
linVP : VForm -> VerbPhrase -> Str = \vf,vp ->
|
||||||
|
let inf = {inf = vp.s ! vf ; fin=[]} ;
|
||||||
|
wo = wordOrder [] [] [] (vp.comp ! Pl3) inf vp ;
|
||||||
|
in wo.beforeSTM ++ wo.afterSTM ;
|
||||||
|
|
||||||
linCN : CNoun -> Str = \cn -> cn.s ! NomSg ++ cn.mod ! Sg ! Abs ;
|
linCN : CNoun -> Str = \cn -> cn.s ! NomSg ++ cn.mod ! Sg ! Abs ;
|
||||||
linAdv : Adverb -> Str = \adv ->
|
linAdv : Adverb -> Str = \adv ->
|
||||||
adv.berri
|
adv.berri
|
||||||
@@ -880,5 +886,6 @@ oper
|
|||||||
++ (prepTable ! adv.c2).s ! adv.np.a
|
++ (prepTable ! adv.c2).s ! adv.np.a
|
||||||
++ adv.dhex
|
++ adv.dhex
|
||||||
++ adv.np.s ;
|
++ adv.np.s ;
|
||||||
|
linBaseCl : BaseCl -> Str = \b -> b.beforeSTM ++ b.stm ++ b.afterSTM ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ lin
|
|||||||
UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ;
|
UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ;
|
||||||
|
|
||||||
-- : Temp -> Pol -> RCl -> RS ;
|
-- : Temp -> Pol -> RCl -> RS ;
|
||||||
UseRCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ;
|
UseRCl t p cl = {s = \\g,c => t.s ++ p.s ++ cl.s ! g ! c ! t.t ! t.a ! p.p} ;
|
||||||
|
|
||||||
-- AdvS : Adv -> S -> S ; -- then I will go home
|
-- AdvS : Adv -> S -> S ; -- then I will go home
|
||||||
-- ExtAdvS : Adv -> S -> S ; -- next week, I will go home
|
-- ExtAdvS : Adv -> S -> S ; -- next week, I will go home
|
||||||
|
|||||||
Reference in New Issue
Block a user