Merge pull request #288 from inariksit/somali-questions

Somali: questions
This commit is contained in:
Inari Listenmaa
2019-09-10 17:14:46 +02:00
committed by GitHub
12 changed files with 153 additions and 92 deletions

View File

@@ -11,14 +11,7 @@ lin
-- ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs -- ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs
-- : Prep -> NP -> Adv ; -- : Prep -> NP -> Adv ;
PrepNP prep np = prep ** { PrepNP = prepNP ;
np = case prep.isPoss of {
True => nplite emptyNP ;
False => nplite np } ;
miscAdv = case prep.isPoss of {
True => np.s ! Abs ++ prep.miscAdv ! np.a ;
False => prep.miscAdv ! Sg3 Masc }
} ;
-- Adverbs can be modified by 'adadjectives', just like adjectives. -- Adverbs can be modified by 'adadjectives', just like adjectives.

View File

@@ -1,4 +1,4 @@
concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in { concrete CatSom of Cat = CommonX - [Adv,IAdv] ** open ResSom, Prelude in {
flags optimize=all_subs ; flags optimize=all_subs ;
@@ -23,7 +23,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
-- Constructed in QuestionSom. -- Constructed in QuestionSom.
QCl = ResSom.QClause ; QCl = ResSom.QClause ;
IP = ResSom.NounPhrase ; IP = ResSom.NounPhrase ** {contractSTM : Bool} ;
IComp = SS ; -- interrogative complement of copula e.g. "where" IComp = SS ; -- interrogative complement of copula e.g. "where"
IDet = ResSom.Determiner ; -- interrogative determiner e.g. "how many" IDet = ResSom.Determiner ; -- interrogative determiner e.g. "how many"
IQuant = ResSom.Quant ; -- interrogative quantifier e.g. "which" IQuant = ResSom.Quant ; -- interrogative quantifier e.g. "which"
@@ -84,11 +84,7 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
-- Constructed in StructuralSom. -- Constructed in StructuralSom.
Conj = {s2 : State => Str ; s1 : Str ; n : Number } ; Conj = {s2 : State => Str ; s1 : Str ; n : Number } ;
Subj = SS ; Subj = SS ;
Prep = ResSom.Prep ** { Prep = ResSom.Prep ;
isPoss : Bool ;
c2 : Preposition ;
berri, sii, dhex : Str ;
miscAdv : Agreement => Str } ;
@@ -97,18 +93,18 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
-- These are constructed in LexiconSom and in -- These are constructed in LexiconSom and in
-- additional lexicon modules. -- additional lexicon modules.
V,
VS, -- sentence-complement verb e.g. "claim" VS, -- sentence-complement verb e.g. "claim"
-- TODO: eventually different lincats -- TODO: eventually different lincats
VQ, -- question-complement verb e.g. "wonder" VQ, -- question-complement verb e.g. "wonder"
VA, -- adjective-complement verb e.g. "look" VA, -- adjective-complement verb e.g. "look"
V2V, -- verb with NP and V complement e.g. "cause" V = ResSom.Verb ;
V2S, -- verb with NP and S complement e.g. "tell"
V2Q, -- verb with NP and Q complement e.g. "ask"
V2A = ResSom.Verb ; -- verb with NP and AP complement e.g. "paint"
VV = ResSom.VV ; -- verb-phrase-complement verb e.g. "want" VV = ResSom.VV ; -- verb-phrase-complement verb e.g. "want"
V2A, -- verb with NP and AP complement e.g. "paint"
V2V, -- verb with NP and V complement e.g. "cause"
V2S, -- verb with NP and S complement e.g. "tell"
V2Q, -- verb with NP and Q complement e.g. "ask"
V2 = ResSom.Verb2 ; V2 = ResSom.Verb2 ;
V3 = ResSom.Verb3 ; V3 = ResSom.Verb3 ;
@@ -120,11 +116,12 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
N3 = ResSom.Noun3 ; N3 = ResSom.Noun3 ;
PN = ResSom.PNoun ; PN = ResSom.PNoun ;
Adv = ResSom.Adverb ; -- Preposition of an adverbial can merge with obligatory complements of the verb. Adv,
IAdv = ResSom.Adverb ; -- Preposition of an adverbial can merge with obligatory complements of the verb.
linref linref
-- Cl = linCl ; -- Cl = linCl ;
VP = infVP ; VP = infVP ;
CN = linCN ; CN = linCN ;
Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ++ prep.miscAdv ! Sg3 Masc ; Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ++ prep.hoostiisa ! Sg3 Masc ;
} }

View File

@@ -9,10 +9,10 @@ concrete GrammarSom of Grammar =
RelativeSom, RelativeSom,
ConjunctionSom, ConjunctionSom,
PhraseSom, PhraseSom,
TextX - [Adv], TextX - [Adv,IAdv],
StructuralSom, StructuralSom,
IdiomSom, IdiomSom,
TenseX - [Adv] TenseX - [Adv,IAdv]
** { ** {
flags startcat = Phr ; unlexer = text ; lexer = text ; flags startcat = Phr ; unlexer = text ; lexer = text ;

View File

@@ -253,7 +253,7 @@ lin name_N = mkN "magac" ;
-- lin oil_N = mkN "" ; -- lin oil_N = mkN "" ;
-- lin old_A = mkA "" ; -- lin old_A = mkA "" ;
-- lin open_V2 = mkV2 "" ; -- lin open_V2 = mkV2 "" ;
-- lin paint_V2A = mkV2 "" ; lin paint_V2A = mkV2 "rinjiyee" ;
-- lin paper_N = mkN "" ; -- lin paper_N = mkN "" ;
-- lin paris_PN = mkPN "Paris" ; -- lin paris_PN = mkPN "Paris" ;
-- lin peace_N = mkN "" ; -- lin peace_N = mkN "" ;

View File

@@ -247,7 +247,7 @@ oper
} ; } ;
possPrep : N -> CatSom.Prep = \dhex -> emptyPrep ** { possPrep : N -> CatSom.Prep = \dhex -> emptyPrep ** {
miscAdv = \\agr => hoostiisa = \\agr =>
let qnt = PossPron (pronTable ! agr) ; let qnt = PossPron (pronTable ! agr) ;
num = getNum agr ; num = getNum agr ;
art = gda2da dhex.gda ! Sg ; art = gda2da dhex.gda ! Sg ;
@@ -258,7 +258,7 @@ oper
emptyPrep : CatSom.Prep = lin Prep { emptyPrep : CatSom.Prep = lin Prep {
sii,berri,dhex = [] ; sii,berri,dhex = [] ;
miscAdv = \\_ => [] ; hoostiisa = \\_ => [] ;
s = \\_ => [] ; s = \\_ => [] ;
c2 = noPrep ; c2 = noPrep ;
isPoss = False isPoss = False

View File

@@ -12,11 +12,11 @@ concrete PhraseSom of Phrase = CatSom ** open Prelude, ResSom in {
UttImpPl = UttImpSg ; UttImpPl = UttImpSg ;
UttImpPol = UttImpSg ; UttImpPol = UttImpSg ;
UttIP ip = { s = ip.s ! Abs} ; UttIP ip = {s = ip.s ! Abs} ;
UttIAdv iadv = iadv ; UttNP np = {s = np.s ! Abs} ;
UttNP np = { s = np.s ! Abs} ; UttVP vp = {s = infVP vp} ;
UttVP vp = { s = infVP vp } ; UttAdv,
UttAdv adv = {s = linAdv adv} ; UttIAdv = \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} ;
UttAP ap = { s = ap.s ! AF Sg Abs } ; UttAP ap = { s = ap.s ! AF Sg Abs } ;

View File

@@ -1,12 +1,12 @@
concrete QuestionSom of Question = CatSom ** open concrete QuestionSom of Question = CatSom ** open
Prelude, ResSom, (VS=VerbSom), (NS=NounSom), (AS=AdverbSom) in { Prelude, ResSom, ParadigmsSom, (VS=VerbSom), (NS=NounSom), (AS=AdverbSom) in {
-- A question can be formed from a clause ('yes-no question') or -- A question can be formed from a clause ('yes-no question') or
-- with an interrogative. -- with an interrogative.
lin lin
-- : Cl -> QCl ; -- : Cl -> QCl ;
QuestCl = cl2qcl ; QuestCl = cl2qcl True;
-- : IP -> VP -> QCl ; -- : IP -> VP -> QCl ;
QuestVP ip vp = -- TODO: if we want to contract baa + subj. pronoun, change ResSom.predVP QuestVP ip vp = -- TODO: if we want to contract baa + subj. pronoun, change ResSom.predVP
@@ -16,13 +16,30 @@ concrete QuestionSom of Question = CatSom ** open
<_,Pos> => "baa" ; <_,Pos> => "baa" ;
_ => clRaw.stm ! clt ! p } _ => clRaw.stm ! clt ! p }
} }
in cl2qcl cl ; in cl2qcl (notB ip.contractSTM) cl ;
-- : IP -> ClSlash -> QCl ; -- whom does John love -- : IP -> ClSlash -> QCl ; -- whom does John love
--QuestSlash ip cls = ; QuestSlash ip cls =
let clsIPFocus = cls ** {
subj = cls.subj ** {noun = ip.s ! Nom} ; -- place IP first in the sentence, keep old subject pronoun.
obj2 = cls.obj2 ** {s = cls.subj.noun ++ cls.obj2.s} -- move old subject noun before object.
} ;
in cl2qcl (notB ip.contractSTM) clsIPFocus ;
-- : IAdv -> Cl -> QCl ; -- why does John walk -- : IAdv -> Cl -> QCl ; -- why does John walk
-- QuestIAdv iadv cl = { } ; QuestIAdv iadv cls =
let clRaw : ClSlash = insertIAdv iadv cls ;
sbj = clRaw.subj ;
cl : ClSlash = clRaw ** {
stm = \\clt,p => case <clt,p> of {
-- IAdv is focused with baa, and subject comes after
<_,Pos> => "baa" ++ sbj.pron ++ sbj.noun;
-- TODO how do negative questions work
_ => clRaw.stm ! Question ! p ++ sbj.pron ++ sbj.noun } ;
subj = sbj ** {noun, pron = []} -- to force subject after baa
} ;
in cl2qcl True cl ; -- TODO: add contractSTM field to IAdv as well
-- : IComp -> NP -> QCl ; -- where is John? -- : IComp -> NP -> QCl ; -- where is John?
-- QuestIComp icomp np = ; -- QuestIComp icomp np = ;
@@ -31,10 +48,10 @@ concrete QuestionSom of Question = CatSom ** open
-- determiners, with or without a noun. -- determiners, with or without a noun.
-- : IDet -> CN -> IP ; -- which five songs -- : IDet -> CN -> IP ; -- which five songs
IdetCN = NS.DetCN ; IdetCN idet cn = {contractSTM = False} ** NS.DetCN idet cn ;
-- : IDet -> IP ; -- which five -- : IDet -> IP ; -- which five
IdetIP = NS.DetNP ; IdetIP idet = {contractSTM = False} ** NS.DetNP idet ;
-- They can be modified with adverbs. -- They can be modified with adverbs.
-- : IP -> Adv -> IP ; -- who in Paris -- : IP -> Adv -> IP ; -- who in Paris
@@ -47,21 +64,23 @@ concrete QuestionSom of Question = CatSom ** open
-- Interrogative adverbs can be formed prepositionally. -- Interrogative adverbs can be formed prepositionally.
-- : Prep -> IP -> IAdv ; -- with whom -- : Prep -> IP -> IAdv ; -- with whom
PrepIP prep ip = let a = AS.PrepNP prep ip in a ** {s = a.berri} ; PrepIP prep ip =
let ipAbs : Str = ip.s ! Abs
in prepNP (mkPrep prep ipAbs [] []) emptyNP ;
-- They can be modified with other adverbs. -- They can be modified with other adverbs.
-- : IAdv -> Adv -> IAdv ; -- where in Paris -- : IAdv -> Adv -> IAdv ; -- where in Paris
AdvIAdv iadv adv = iadv ** {s = iadv.s ++ adv.berri} ; -- AdvIAdv iadv adv = iadv ** {s = iadv.s ++ adv.berri} ; -- TODO do we need PrepCombination in IAdv?
-- Interrogative complements to copulas can be both adverbs and -- Interrogative complements to copulas can be both adverbs and
-- pronouns. -- pronouns.
-- : IAdv -> IComp ; -- : IAdv -> IComp ;
CompIAdv iadv = iadv ; -- where (is it) --CompIAdv iadv = iadv ; -- where (is it)
-- : IP -> IComp ; -- : IP -> IComp ;
CompIP ip = { s = ip.s ! Abs } ; -- who (is it) --CompIP ip = { s = ip.s ! Abs } ; -- who (is it)
{- {-
-- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$. -- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$.

View File

@@ -170,6 +170,8 @@ oper
impersNP : NounPhrase = pronTable ! Impers ; impersNP : NounPhrase = pronTable ! Impers ;
indeclNP : Str -> NounPhrase = \s -> emptyNP ** {s = \\c => s} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Pronouns -- Pronouns
@@ -182,11 +184,11 @@ oper
sp : Case => Str ; sp : Case => Str ;
} ; } ;
{- Saeed p.115: "This combination of possessive and article [kay-ga, tay-da] {- Saeed p.115: "This combination of possessive and article [kay-ga, tay-da]
is the basic form but possessives occur with the full range of determiners, is the basic form but possessives occur with the full range of determiners,
with associated meanings, for example: with associated meanings, for example:
remote article kii/tii: gurigaagii 'your house (remote)' remote article kii/tii: gurigaagii 'your house (remote)'
demonstrative kaas/taas: gurigaagaas 'that house of yours' demonstrative kaas/taas: gurigaagaas 'that house of yours'
interrogative kee/tee: gurigaagee? 'which house of yours?'" interrogative kee/tee: gurigaagee? 'which house of yours?'"
Since RGL abstract syntax doesn't allow combining two Quants, the way to go is Since RGL abstract syntax doesn't allow combining two Quants, the way to go is
@@ -327,7 +329,7 @@ oper
} ; } ;
defIQuant : Str -> Quant = \ee -> defIQuant : Str -> Quant = \ee ->
let quantRaw = defQuant ee ("k"+ee) ("t"+ee) ("kuw"+ee) False let quantRaw = defQuant ee ("k"+ee) ("t"+ee) ("kuw"+ee) False
in quantRaw ** { in quantRaw ** {
s = \\da,c => quantRaw.s ! da ! Abs ; s = \\da,c => quantRaw.s ! da ! Abs ;
sp = \\gn,c => quantRaw.sp ! gn ! Abs } ; sp = \\gn,c => quantRaw.sp ! gn ! Abs } ;
@@ -344,9 +346,14 @@ oper
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Prepositions -- Prepositions
Prep : Type = {s : PrepAgr => Str} ; Prep : Type = {
s : PrepAgr => Str ;
c2 : Preposition ;
isPoss : Bool ;
berri, sii, dhex : Str ;
hoostiisa : Agreement => Str } ;
mkPrep : (x1,_,_,_,_,x6 : Str) -> Prep = \ku,ii,kuu,noo,idiin,isku -> { mkPrep : (x1,_,_,_,_,x6 : Str) -> {s : PrepAgr => Str} = \ku,ii,kuu,noo,idiin,isku -> {
s = table { s = table {
P3_Prep => ku ; P3_Prep => ku ;
Sg1_Prep => ii ; Sg1_Prep => ii ;
@@ -357,9 +364,10 @@ oper
Reflexive_Prep => isku Reflexive_Prep => isku
} }
} ; } ;
prep : Preposition -> (Prep ** {c2 : Preposition}) = \p -> prepTable ! p ** {c2 = p} ; prep : Preposition -> {s : PrepAgr => Str ; c2 : Preposition} = \p ->
prepTable ! p ** {c2 = p} ;
prepTable : Preposition => Prep = table { prepTable : Preposition => {s : PrepAgr => Str} = table {
Ku => mkPrep "ku" "igu" "kugu" "nagu" "idinku" "isku" ; Ku => mkPrep "ku" "igu" "kugu" "nagu" "idinku" "isku" ;
Ka => mkPrep "ka" "iga" "kaa" "naga" "idinka" "iska" ; Ka => mkPrep "ka" "iga" "kaa" "naga" "idinka" "iska" ;
La => mkPrep "la" "ila" "kula" "nala" "idinla" "isla" ; La => mkPrep "la" "ila" "kula" "nala" "idinla" "isla" ;
@@ -557,7 +565,7 @@ oper
VNegPast Progressive => progr + "n" ; VNegPast Progressive => progr + "n" ;
-- TODO check conjugations 2 and 3 -- TODO check conjugations 2 and 3
VNegCond PlInv => arag + n + "een" ; VNegCond PlInv => arag + n + "een" ;
VNegCond SgMasc => qaat + "een" ; -- for most verbs same as VPast Simple Pl3_ 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_ VNegCond SgFem => arag + t + "een" ; -- for most verbs same as VPast Simple Pl2_
@@ -636,11 +644,11 @@ 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 SgMasc => "ahaadeen" ; -- 1SG/3 SG M/3PL
VNegCond SgFem => "ahaateen" ; -- 2SG/3 SG F/2PL VNegCond SgFem => "ahaateen" ; -- 2SG/3 SG F/2PL
VNegCond PlInv => "ahaanneen" ; -- 1PL VNegCond PlInv => "ahaanneen" ; -- 1PL
VRel _ => "ah" ; -- All persons: see Nilsson p. 78. TODO check Saeed p. 103 VRel _ => "ah" ; -- All persons: see Nilsson p. 78. TODO check Saeed p. 103
VRelNeg => "ahayni" ; -- Saeed VRelNeg => "ahayni" ; -- Saeed
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" ;
@@ -675,7 +683,7 @@ oper
} ; } ;
------------------ ------------------
-- VP -- Adv
BaseAdv : Type = { BaseAdv : Type = {
sii, -- sii, soo, wala, kada go inside VP. sii, -- sii, soo, wala, kada go inside VP.
@@ -689,6 +697,18 @@ oper
np : NPLite ; -- NP from PrepNP can be promoted into a core argument. np : NPLite ; -- NP from PrepNP can be promoted into a core argument.
} ; } ;
prepNP : Prep -> NounPhrase -> Adverb = \prep,np -> prep ** {
np = case prep.isPoss of {
True => nplite emptyNP ;
False => nplite np } ;
miscAdv = case prep.isPoss of {
True => np.s ! Abs ++ prep.hoostiisa ! np.a ;
False => prep.hoostiisa ! Sg3 Masc }
} ;
------------------
-- VP
Complement : Type = { Complement : Type = {
comp : Agreement => {p1,p2 : Str} ; -- Agreement for AP complements comp : Agreement => {p1,p2 : Str} ; -- Agreement for AP complements
stm : STM ; -- to choose right sentence type marker stm : STM ; -- to choose right sentence type marker
@@ -708,7 +728,7 @@ oper
useV : Verb -> VerbPhrase = \v -> v ** { useV : Verb -> VerbPhrase = \v -> v ** {
comp = \\_ => <[],[]> ; comp = \\_ => <[],[]> ;
stm = case v.isCopula of { -- can change into Waxa in ComplVV stm = case v.isCopula of { -- can change into Waxa in ComplVV
True => Waa Copula ; True => Waa Copula ;
False => Waa NoPred False => Waa NoPred
} ; } ;
vComp = {subjunc, inf = [] ; vComp = {subjunc, inf = [] ;
@@ -754,28 +774,42 @@ oper
} ; } ;
insertComp : VPSlash -> NounPhrase -> VerbPhrase = \vp,np -> insertComp : VPSlash -> NounPhrase -> VerbPhrase = \vp,np ->
insertCompLite vp (nplite np) ; vp ** insertCompLite vp (nplite np) ;
insertCompLite : VPSlash -> NPLite -> VerbPhrase = \vp,nplite -> insertCompCl : ClSlash -> NounPhrase -> ClSlash = \cls,np ->
cls ** insertCompLite cls (nplite np) ;
insertAdv : VerbPhrase -> Adverb -> VerbPhrase = \vp,adv ->
vp ** insertAdvLite vp adv ;
insertIAdv : Adverb -> ClSlash -> ClSlash = \adv,cls ->
cls ** insertAdvLite cls adv ;
-- To generalise insertAdv and insertComp
VPLite : Type = {
c2 : PrepCombination ;
obj2 : NPLite ;
sii,dhex,berri,miscAdv,secObj : Str} ;
insertCompLite : VPLite -> NPLite -> VPLite = \vp,nplite ->
case vp.obj2.a of { case vp.obj2.a of {
-- If the old object is 3rd person (or nonexistent), we replace its agreement. -- If the old object is 3rd person (or nonexistent), we replace its agreement.
-- We keep both old and new string (=noun, if there was one) in obj2.s. -- We keep both old and new string (=noun, if there was one) in obj2.s.
P3_Prep => P3_Prep =>
vp ** {obj2 = nplite ** { vp ** {obj2 = nplite ** {
s = vp.obj2.s ++ nplite.s} s = nplite.s ++ vp.obj2.s}
} ; -- no secObj, because there's ≤1 non-3rd-person pronoun. } ; -- no secObj, because there's ≤1 non-3rd-person pronoun.
-- If old object was non-3rd person, we keep its agreement. -- If old object was non-3rd person, we keep its agreement.
-- The new object is put in the secondObject field. -- The new object is put in the secondObject field.
_ => _ =>
vp ** {obj2 = vp.obj2 ** { vp ** {obj2 = vp.obj2 ** {
s = vp.obj2.s ++ nplite.s s = nplite.s ++ vp.obj2.s
} ; } ;
secObj = vp.secObj ++ secondObject ! nplite.a} secObj = vp.secObj ++ secondObject ! nplite.a}
} ; } ;
insertAdv : VerbPhrase -> Adverb -> VerbPhrase = \vp,adv -> insertAdvLite : VPLite -> Adverb -> VPLite = \vp,adv ->
case adv.c2 of { case adv.c2 of {
NoPrep => vp ** adv'' ; -- the adverb is not formed with PrepNP, e.g. "tomorrow" NoPrep => vp ** adv'' ; -- the adverb is not formed with PrepNP, e.g. "tomorrow"
_ => case vp.c2 of { _ => case vp.c2 of {
@@ -801,7 +835,7 @@ oper
{- After PredVP, we might still want to add more adverbs (QuestIAdv), {- After PredVP, we might still want to add more adverbs (QuestIAdv),
but we're done with verb inflection. but we're done with verb inflection.
-} -}
ClSlash : Type = BaseAdv ** { ClSlash : Type = BaseAdv ** {
-- Fixed in Cl -- Fixed in Cl
@@ -826,7 +860,7 @@ oper
predVP : NounPhrase -> VerbPhrase -> ClSlash = \np,vps -> vp ** { predVP : NounPhrase -> VerbPhrase -> ClSlash = \np,vps -> vp ** {
subj = {noun = subjnoun ; pron = subjpron ; isP3 = isP3 subj.a} ; subj = {noun = subjnoun ; pron = subjpron ; isP3 = isP3 subj.a} ;
pred = \\cltyp,t,a,p => pred = \\cltyp,t,a,p =>
let predRaw = vf cltyp t a p subj.a vp ; let predRaw = vf cltyp t a p subj.a vp ;
in case <cltyp, p, t, vp.stm, subj.a> of { in case <cltyp, p, t, vp.stm, subj.a> of {
<Statement, Pos, Pres, Waa NoCopula, Sg3 _|Pl3> -- VP comes from CompNP/CompCN + P3 subject <Statement, Pos, Pres, Waa NoCopula, Sg3 _|Pl3> -- VP comes from CompNP/CompCN + P3 subject
@@ -838,7 +872,7 @@ oper
_ => predRaw -- Any other verb _ => predRaw -- Any other verb
} ; } ;
stm = \\cltyp,pol => stm = \\cltyp,pol =>
case <cltyp,pol> of { case <cltyp,pol> of {
<Statement,Pos> => showSTM vp.stm ; <Statement,Pos> => showSTM vp.stm ;
<Statement,Neg> => "ma" ; <Statement,Neg> => "ma" ;
@@ -856,7 +890,7 @@ oper
True => insertComp vps np ; True => insertComp vps np ;
_ => vps } ; _ => vps } ;
subj : NounPhrase = case isPassive vps of { subj : NounPhrase = case isPassive vps of {
True => impersNP ; True => impersNP ;
_ => np } ; _ => np } ;
subjnoun : Str = case np.isPron of { subjnoun : Str = case np.isPron of {
True => np.empty ; True => np.empty ;
@@ -878,7 +912,7 @@ oper
-- RelVP: subject pronoun is never included -- RelVP: subject pronoun is never included
cl2rcl : ClSlash -> Clause = cl2rcl : ClSlash -> Clause =
let hasSubjPron : Bool = False ; let hasSubjPron : Bool = False ;
hasSTM : Bool = False ; hasSTM : Bool = False ;
isRel : Bool = True ; isRel : Bool = True ;
@@ -900,11 +934,10 @@ oper
in mkClause Subord isRel hasSubjPron hasSTM ; in mkClause Subord isRel hasSubjPron hasSTM ;
-- Question clauses: subject pronoun not included, STM is -- Question clauses: subject pronoun not included, STM is
cl2qcl : ClSlash -> Clause = cl2qcl : Bool -> ClSlash -> Clause =
let hasSubjPron : Bool = False ; let hasSubjPron : Bool = False ;
hasSTM : Bool = True ;
isRel : Bool = False ; isRel : Bool = False ;
in mkClause Question isRel hasSubjPron hasSTM ; in mkClause Question isRel hasSubjPron ;
-- Sentence: include subject pronoun and STM. -- Sentence: include subject pronoun and STM.
-- When subordinate, include "in". -- When subordinate, include "in".
@@ -922,7 +955,7 @@ oper
mkClause : ClType -> (rel,sp,stm : Bool) -> ClSlash -> Clause = \cltyp,isRel,hasSubjPron,hasSTM,incomplCl -> { mkClause : ClType -> (rel,sp,stm : Bool) -> ClSlash -> Clause = \cltyp,isRel,hasSubjPron,hasSTM,incomplCl -> {
s = \\t,a,p => s = \\t,a,p =>
let -- Put all arguments in their right place let -- Put all arguments in their right place
cl : ClSlash = complCl incomplCl ; cl : ClSlash = complCl incomplCl ;
@@ -954,14 +987,14 @@ oper
stm : Str = case <hasSTM,p> of { stm : Str = case <hasSTM,p> of {
<True,_> => cl.stm ! cltyp ! p ; <True,_> => cl.stm ! cltyp ! p ;
<_,Neg> => cl.stm ! cltyp ! p ; -- negation overrides hasSTM=False <_,Neg> => cl.stm ! cltyp ! p ; -- negation overrides hasSTM=False
_ => [] } _ => [] }
in cl.berri -- AdV in cl.berri -- AdV
++ cl.subj.noun -- subject if it's a noun ++ cl.subj.noun -- subject if it's a noun
++ statementNounObj -- noun object if it's a statement ++ statementNounObj -- noun object if it's a statement
++ stm ++ stm
++ cl.vComp.subjunc -- "waa in" construction / ++ cl.vComp.subjunc -- "waa in" construction /
++ subjpron -- subject pronoun ++ subjpron -- subject pronoun
++ subordNounObj -- noun object if it's subordinate clause: "timir aan /laf/ lahayn" (Saeed p. 210-211) ++ subordNounObj -- noun object if it's subordinate clause: "timir aan /laf/ lahayn" (Saeed p. 210-211)
@@ -1050,7 +1083,7 @@ oper
++ adv.sii ++ adv.sii
++ (prepTable ! adv.c2).s ! adv.np.a ++ (prepTable ! adv.c2).s ! adv.np.a
++ adv.dhex ++ adv.dhex
++ adv.np.s ++ adv.np.s
++ adv.miscAdv ; ++ adv.miscAdv ;
@@ -1082,5 +1115,5 @@ oper
++ pred -- the verb inflected ++ pred -- the verb inflected
++ vp.vComp.subcl ! Sg3 Masc -- VV complement, if it's subordinate clause ++ vp.vComp.subcl ! Sg3 Masc -- VV complement, if it's subordinate clause
++ vp.miscAdv ; ---- NB. Only used if there are several adverbs, or for "waa in" construction. ++ vp.miscAdv ; ---- NB. Only used if there are several adverbs, or for "waa in" construction.
} }

View File

@@ -15,8 +15,9 @@ lin very_AdA = mkAdA "" ;
lin as_CAdv = { s = "" ; p = [] } ; lin as_CAdv = { s = "" ; p = [] } ;
lin less_CAdv = { s = "" ; p = [] } ; lin less_CAdv = { s = "" ; p = [] } ;
lin more_CAdv = { s = "" ; p = [] } ; lin more_CAdv = { s = "" ; p = [] } ;
-}
lin how_IAdv = ss "" ; lin how_IAdv = prepNP (mkPrep (mkPrep u) "sidee" [] []) emptyNP ;
{-
lin how8much_IAdv = ss "" ; lin how8much_IAdv = ss "" ;
lin when_IAdv = ss "" ; lin when_IAdv = ss "" ;
lin where_IAdv = ss "" ; lin where_IAdv = ss "" ;
@@ -127,7 +128,7 @@ lin on_Prep = mkPrep ku ;
-- lin possess_Prep = mkPrep ; -- lin possess_Prep = mkPrep ;
-- lin through_Prep = mkPrep ; -- lin through_Prep = mkPrep ;
-- lin to_Prep = mkPrep ; -- lin to_Prep = mkPrep ;
lin under_Prep = lin under_Prep =
let hoos : CatSom.Prep = possPrep (nUl "hoos") let hoos : CatSom.Prep = possPrep (nUl "hoos")
in hoos ** {c2 = Ku} ; in hoos ** {c2 = Ku} ;
lin with_Prep = mkPrep la ; lin with_Prep = mkPrep la ;
@@ -151,10 +152,16 @@ lin with_Prep = mkPrep la ;
lin whatPl_IP = ; lin whatPl_IP = ;
lin whatSg_IP = ; lin whatSg_IP = ;
lin whoPl_IP = ; lin whoPl_IP = ;
lin whoSg_IP = ;
-} -}
lin whoSg_IP = emptyNP ** {
s = table {
Nom => "yaa" ; -- together with STM
Abs => "ayo" } ; -- alone, no STM (used in UttIP)
contractSTM = True ;
} ;
------- -------
-- Subj -- Subj

View File

@@ -18,14 +18,14 @@ lin
ComplVV vv vp = let vc = vp.vComp in case vv.vvtype of { ComplVV vv vp = let vc = vp.vComp in case vv.vvtype of {
Waa_In => vp ** { Waa_In => vp ** {
vComp = vc ** {subjunc = vv.s ! VInf} ; -- it's always the word "in", and it will be placed before subject pronoun. it's placed in vv.s!VInf so that the VV would contribute with some string. /IL vComp = vc ** {subjunc = vv.s ! VInf} ; -- it's always the word "in", and it will be placed before subject pronoun. it's placed in vv.s!VInf so that the VV would contribute with some string. /IL
obj2 = vp.obj2 ** {s = []} ; -- word order hack to avoid more parameters: obj2 = vp.obj2 ** {s = []} ; -- word order hack to avoid more parameters:
miscAdv = vp.miscAdv ++ vp.obj2.s -- dump the object to miscAdv miscAdv = vp.miscAdv ++ vp.obj2.s -- dump the object to miscAdv
} ; } ;
Subjunctive => useV vv ** { Subjunctive => useV vv ** {
stm = Waxa ; stm = Waxa ;
vComp = vc ** { -- The whole previous VP becomes the subordinate clause vComp = vc ** { -- The whole previous VP becomes the subordinate clause
subcl = \\agr => subcl = \\agr =>
let subj = pronTable ! agr ; let subj = pronTable ! agr ;
cls = predVPslash subj vp ; cls = predVPslash subj vp ;
scl = cl2sentence True cls ; scl = cl2sentence True cls ;
@@ -39,11 +39,11 @@ lin
inf = vc.inf ++ vp.s ! VInf inf = vc.inf ++ vp.s ! VInf
} ; } ;
stm = Waa NoPred ; stm = Waa NoPred ;
} }
} ; } ;
-- : VS -> S -> VP ; -- : VS -> S -> VP ;
ComplVS vs s = ComplVS vs s =
let vps = useV vs ; let vps = useV vs ;
subord = SubjS {s="in"} s ; subord = SubjS {s="in"} s ;
in vps ** {obj2 = {s = subord.berri ; a = P3_Prep}} ; in vps ** {obj2 = {s = subord.berri ; a = P3_Prep}} ;
@@ -75,12 +75,13 @@ lin
-- : V2Q -> QS -> VPSlash ; -- ask (him) who came -- : V2Q -> QS -> VPSlash ; -- ask (him) who came
SlashV2Q v2q qs = ; SlashV2Q v2q qs = ;
-- : V2A -> AP -> VPSlash ; -- paint (it) red
SlashV2A v2a ap = slashDObj v2a **
{ comp = (CompAP ap).s } ;
-} -}
-- : V2A -> AP -> VPSlash ; -- paint (it) red
-- TODO: is "red" plural in "paint them red"?
SlashV2A v2a ap = useVc v2a ** {
comp = \\_ => (CompAP ap).comp ! Sg3 Masc
} ;
-- : VPSlash -> NP -> VP -- : VPSlash -> NP -> VP
ComplSlash = insertComp ; ComplSlash = insertComp ;

View File

@@ -82,6 +82,18 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (RelNP (UseP
-- Question clauses -- Question clauses
-- to whom did mother give the meat
LangSom: yaa siisey hooyo hilib BIND ka
Lang: PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPast ASimul) PPos (QuestSlash whoSg_IP (SlashVP (MassNP (UseN2 mother_N2)) (Slash3V3 give_V3 (DetCN (DetQuant DefArt NumSg) (UseN meat_N))))))) NoVoc
-- LangEng: who wants to go
LangSom: yaa rabaa in uu tago
Lang: PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestVP whoSg_IP (ComplVV want_VV (UseV go_V))))) NoVoc
-- LangEng: which cat teaches him -- LangEng: which cat teaches him
LangSom: bisad BIND dee baa ku bartaa LangSom: bisad BIND dee baa ku bartaa
Lang: PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestVP (IdetCN (IdetQuant which_IQuant NumSg) (UseN cat_N)) (ComplSlash (SlashV2a teach_V2) (UsePron he_Pron))))) NoVoc Lang: PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestVP (IdetCN (IdetQuant which_IQuant NumSg) (UseN cat_N)) (ComplSlash (SlashV2a teach_V2) (UsePron he_Pron))))) NoVoc
-- LangEng: how does your mother paint the house black
LangSom: sidee baa ay hooya BIND daa madow u rinjiyeysaa guri BIND ga
Lang: PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestIAdv how_IAdv (PredVP (DetCN (DetQuant (PossPron youSg_Pron) NumSg) (UseN2 mother_N2)) (ComplSlash (SlashV2A paint_V2A (PositA black_A)) (DetCN (DetQuant DefArt NumSg) (UseN house_N))))))) NoVoc

View File

@@ -56,11 +56,11 @@ LangSom: rooti waa uu is siiyey
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron he_Pron) (ReflVP (Slash2V3 give_V3 (MassNP (UseN bread_N))))))) NoVoc Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron he_Pron) (ReflVP (Slash2V3 give_V3 (MassNP (UseN bread_N))))))) NoVoc
-- LangEng: one adds salt to the meat -- LangEng: one adds salt to the meat
LangSom: hilib BIND ka cusbo waa lagu daraa LangSom: cusbo hilib BIND ka waa lagu daraa
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (GenericCl (ComplSlash (Slash3V3 add_V3 (DetCN (DetQuant DefArt NumSg) (UseN meat_N))) (MassNP (UseN salt_N)))))) NoVoc Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (GenericCl (ComplSlash (Slash3V3 add_V3 (DetCN (DetQuant DefArt NumSg) (UseN meat_N))) (MassNP (UseN salt_N)))))) NoVoc
-- LangEng: one can add salt to meat -- LangEng: one can add salt to meat
LangSom: hilib cusbo waa lagu dari karaa LangSom: cusbo hilib waa lagu dari karaa
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (GenericCl (ComplVV can_VV (ComplSlash (Slash3V3 add_V3 (MassNP (UseN meat_N))) (MassNP (UseN salt_N))))))) NoVoc Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (GenericCl (ComplVV can_VV (ComplSlash (Slash3V3 add_V3 (MassNP (UseN meat_N))) (MassNP (UseN salt_N))))))) NoVoc
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@@ -116,4 +116,3 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_P
-- LangEng: my mother lives under the sea -- LangEng: my mother lives under the sea
LangSom: hooya BIND day waa ku nool tahay bad BIND da hoos BIND teed BIND a LangSom: hooya BIND day waa ku nool tahay bad BIND da hoos BIND teed BIND a
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN2 mother_N2)) (AdvVP (UseV live_V) (PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN sea_N))))))) NoVoc Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN2 mother_N2)) (AdvVP (UseV live_V) (PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN sea_N))))))) NoVoc