1
0
forked from GitHub/gf-rgl

Merge pull request #279 from inariksit/somali

Somali
This commit is contained in:
Inari Listenmaa
2019-08-27 16:53:12 +02:00
committed by GitHub
10 changed files with 133 additions and 66 deletions

View File

@@ -11,7 +11,14 @@ lin
-- ComparAdvAdjS : CAdv -> A -> S -> Adv ; -- more warmly than he runs
-- : Prep -> NP -> Adv ;
PrepNP prep np = prep ** {s = [] ; np = nplite np} ;
PrepNP prep np = prep ** {
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.

View File

@@ -84,7 +84,11 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
-- Constructed in StructuralSom.
Conj = {s2 : State => Str ; s1 : Str ; n : Number } ;
Subj = SS ;
Prep = ResSom.Prep ** {c2 : Preposition ; berri, sii, dhex : Str} ;
Prep = ResSom.Prep ** {
isPoss : Bool ;
c2 : Preposition ;
berri, sii, dhex : Str ;
miscAdv : Agreement => Str } ;
@@ -94,9 +98,9 @@ concrete CatSom of Cat = CommonX - [Adv] ** open ResSom, Prelude in {
-- additional lexicon modules.
V,
-- TODO: eventually proper lincats
VV, -- verb-phrase-complement verb e.g. "want"
VS, -- sentence-complement verb e.g. "claim" -- TODO: VPs that have VS use waxa as stm? see Nilsson p. 68
VV, -- verb-phrase-complement verb e.g. "want" -- TODO: VPs that have sentential complement use waxa as stm? see Nilsson p. 68
VS, -- sentence-complement verb e.g. "claim"
-- TODO: eventually different lincats
VQ, -- question-complement verb e.g. "wonder"
VA, -- adjective-complement verb e.g. "look"
V2V, -- verb with NP and V complement e.g. "cause"
@@ -121,6 +125,6 @@ linref
-- Cl = linCl ;
VP = linVP VInf ;
CN = linCN ;
Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ;
Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ++ prep.miscAdv ! Sg3 Masc ;
S = \s -> linBaseCl (s.s ! False) ;
}

View File

@@ -31,7 +31,13 @@ concrete IdiomSom of Idiom = CatSom ** open Prelude, ResSom, VerbSom in {
ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris
-}
-- : VP -> VP ;
--ProgrVP vp = vp ** { } ;
ProgrVP vp = vp ** {
s = table {
VPres _ agr pol => vp.s ! VPres Progressive agr pol ;
VPast _ agr => vp.s ! VPast Progressive agr ;
VNegPast _ => vp.s ! VNegPast Progressive ;
x => vp.s ! x }
} ;
{- TODO: Saeed p. 92 optative

View File

@@ -1,5 +1,5 @@
concrete LexiconSom of Lexicon = CatSom **
open ParadigmsSom,ResSom in {
open ParadigmsSom, ResSom in {
----
-- A
@@ -63,7 +63,7 @@ lin car_N = mkN "baabuur" masc ;
-- lin carpet_N = mkN "" ;
lin cat_N = mkN "bisad" ;
-- lin ceiling_N = mkN "" ;
-- lin chair_N = mkN "" ;
lin chair_N = mkN "kursi" ;
-- lin cheese_N = mkN "" ;
-- lin child_N = mkN "" ;
-- lin church_N = mkN "" ;
@@ -74,7 +74,7 @@ lin city_N = mkN "magaalo" ;
-- lin cloud_N = mkN "" ;
-- lin coat_N = mkN "" ;
-- lin cold_A = mkA "" ;
-- lin come_V = etorri_V ;
lin come_V = mkV "iman" ;
-- lin computer_N = mkN "" ;
-- lin correct_A = mkA "" ;
-- lin count_V2 = mkV2 "" ;
@@ -193,7 +193,7 @@ lin jump_V = mkV "bood" ;
-- lin knee_N = mkN "" ;
-- lin know_V2 = mkV2 "" ;
-- lin know_VQ = mkVQ "" ;
-- lin know_VS = mkVS "" ;
lin know_VS = mkV "ogaan" ; -- copula ** {sii = "og"} ;
----
@@ -211,7 +211,7 @@ lin language_N = mkN "af" ;
-- lin lie_V = mkV "" ;
-- lin like_V2 = mkV2 "" ;
-- lin listen_V2 = mkV2 "" ;
-- lin live_V = mkV "" ;
lin live_V = copula ** {sii = "nool"} ;
-- lin liver_N = mkN "" ;
-- lin long_A = mkA "" ;
-- lin lose_V2 = mkV2 "" ;
@@ -304,7 +304,7 @@ lin salt_N = mkN "cusbo" ;
-- lin school_N = mkN "" ;
-- lin science_N = mkN "" ;
-- lin scratch_V2 = mkV2 "" ;
-- lin sea_N = mkN "" ;
lin sea_N = mkN "bad" fem ;
lin see_V2 = mkV2 "ark" ;
-- lin seed_N = mkN "" ;
-- lin seek_V2 = mkV2 "" ;

View File

@@ -64,13 +64,14 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
True => glue predet.s det ;
False => predet.s
} ;
in np ** {s = \\c =>
case <np.isPron,predet.isPoss> of {
<True,True> => np.empty ++ predetS ;
_ => np.s ! c ++ predetS}
in np ** {
s = \\c =>
case <np.isPron,predet.isPoss> of {
<True,True> => np.empty ++ predetS ;
_ => np.s ! c ++ predetS} ;
isPron = False ; -- NP it loses its pronoun status when Predet is added
} ;
-- A noun phrase can also be postmodified by the past participle of a
-- verb, by an adverb, or by a relative clause

View File

@@ -1,4 +1,4 @@
resource ParadigmsSom = open CatSom, ResSom, ParamSom, Prelude in {
resource ParadigmsSom = open CatSom, ResSom, ParamSom, NounSom, Prelude in {
oper
@@ -104,17 +104,17 @@ oper
mkPrep = overload {
mkPrep : Str -> CatSom.Prep = \s ->
lin Prep ((ResSom.mkPrep s s s s s s) ** {
c2=noPrep ; sii,dhex,berri=[]}) ;
emptyPrep ** (ResSom.mkPrep s s s s s s) ; -- ** {
mkPrep : (x1,_,_,_,_,x6 : Str) -> CatSom.Prep = \a,b,c,d,e,f ->
lin Prep ((ResSom.mkPrep a b c d e f) ** {
c2=noPrep ; sii,dhex,berri=[]}) ;
emptyPrep ** (ResSom.mkPrep a b c d e f) ; --
mkPrep : Preposition -> CatSom.Prep = \p ->
lin Prep ((prep p) ** {sii,dhex,berri=[]}) ;
emptyPrep ** (prep p) ;
mkPrep : CatSom.Prep -> (x1,x2,x3 : Str) -> CatSom.Prep = \p,s,t,u ->
p ** {berri = s ; sii = t ; dhex = u} ;
} ;
possPrep : N -> CatSom.Prep ; -- Nouns like dhex that are used with possessive suffix to form adverbials
-- mkConj : (_,_ : Str) -> Number -> Conj = \s1,s2,num ->
-- lin Conj { s = s1 ; s2 = s2 } ;
@@ -125,7 +125,7 @@ oper
berri = s ;
c2 = noPrep ;
np = {s = [] ; a = P3_Prep} ;
sii,dhex = []
sii,dhex,miscAdv = []
} ;
mkAdV : Str -> AdV = \s -> lin AdV {s = s} ;
@@ -216,6 +216,24 @@ oper
mkV3 : (sug : Str) -> (_,_ : Preposition) -> V3 = \s,p,q -> lin V3 (regV s ** {c2 = p ; c3 = q}) ;
mkV3 : V -> (_,_ : Preposition) -> V2 = \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q}) ;
} ;
possPrep : N -> CatSom.Prep = \dhex -> emptyPrep ** {
miscAdv = \\agr =>
let qnt = PossPron (pronTable ! agr) ;
num = getNum agr ;
art = gda2da dhex.gda ! Sg ;
det = qnt.s ! art ! Abs ; -- this includes BIND
in dhex.s ! Def Sg ++ det ;
isPoss = True
} ;
emptyPrep : CatSom.Prep = lin Prep {
sii,berri,dhex = [] ;
miscAdv = \\_ => [] ;
s = \\_ => [] ;
c2 = noPrep ;
isPoss = False
} ;
--------------------------------------------------------------------------------
}

View File

@@ -247,7 +247,7 @@ oper
s = \\_ => [] ; -- the string `la' comes from Passive (: PrepCombination)
a = Impers ; isPron = True ; sp = \\_ => "" ;
empty = [] ; st = Definite ;
poss = {s, short = quantTable "??" ; sp = gnTable "??" "??" "??"}
poss = {s, short = quantTable "iis" ; sp = gnTable "iis" "iis" "uwiis"}
}
} ;
@@ -463,15 +463,14 @@ oper
BaseVerb : Type = {
s : VForm => Str ;
} ;
Verb : Type = BaseVerb ** {
sii : Str ; -- closed class of particles: sii, soo, kala, wada (Saeed 171)
dhex : Str ; -- closed class of adverbials: hoos, kor, dul, dhex, …
isCopula : Bool ;
} ;
Verb2 : Type = Verb ** {c2 : Preposition} ;
Verb3 : Type = Verb2 ** {c3 : Preposition} ;
-- Saeed page 79:
-- "… the reference form is the imperative singular form
-- since it corresponds to the form of the basic root."
@@ -566,6 +565,7 @@ oper
} ;
sii, dhex = [] ;
isCopula = False ;
} ;
-------------------------
@@ -637,7 +637,8 @@ oper
VImp Pl pol => if_then_Pol pol "ahaada" "ahaanina" ;
VPres _ _ _ => nonExist -- use presCopula instead
} ;
sii, dhex = []
sii, dhex = [] ;
isCopula = True
} ;
have_V : Verb =
@@ -672,7 +673,8 @@ oper
BaseAdv : Type = {
sii, -- sii, soo, wala, kada go inside VP.
dhex, -- dhex, hoos, koor, dul, … go inside VP.
berri : Str -- e.g. "tomorrow"; goes before VP.
berri, -- AdV, e.g. "tomorrow"; goes before VP.
miscAdv : Str -- dump for any other kind of adverbial.
} ;
Adverb : Type = BaseAdv ** {
@@ -690,14 +692,13 @@ oper
obj2 : NPLite ; -- {s : Str ; a : PrepAgr}
secObj : Str ; -- if two overt pronoun objects
vComp : Str ; -- VV complement
miscAdv : Str ; -- dump for any other kind of adverb, that isn't
} ; -- in a closed class of particles or made with PrepNP.
} ;
VPSlash : Type = VerbPhrase ;
useV : Verb -> VerbPhrase = \v -> v ** {
comp = \\_ => <[],[]> ;
pred = NoPred ;
pred = case v.isCopula of {True => Copula ; _ => NoPred} ;
vComp,berri,miscAdv,refl = [] ;
c2 = Single NoPrep ;
obj2 = {s = [] ; a = P3_Prep} ;
@@ -712,7 +713,7 @@ oper
c2 = combine v3.c2 v3.c3 ;
} ;
passV2 : Verb2 -> VerbPhrase = \v2 -> passVP (useV v2) ;
passV2 : Verb2 -> VerbPhrase = \v2 -> passVP (useVc v2) ;
passVP : VerbPhrase -> VerbPhrase = \vp -> vp ** {
c2 = case vp.c2 of {
@@ -739,9 +740,9 @@ oper
} ;
insertComp : VPSlash -> NounPhrase -> VerbPhrase = \vp,np ->
insertCompAgrPlus vp (nplite np) ;
insertCompLite vp (nplite np) ;
insertCompAgrPlus : VPSlash -> NPLite -> VerbPhrase = \vp,nplite ->
insertCompLite : VPSlash -> NPLite -> VerbPhrase = \vp,nplite ->
case vp.obj2.a of {
-- 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.
@@ -765,20 +766,21 @@ oper
NoPrep => vp ** adv'' ; -- the adverb is not formed with PrepNP, e.g. "tomorrow"
_ => case vp.c2 of {
-- if free complement slots, introduce adv.np with insertComp
Single NoPrep => insertCompAgrPlus (vp ** {c2 = Single adv.c2}) adv.np ** adv' ;
Single p => insertCompAgrPlus (vp ** {c2 = combine p adv.c2}) adv.np ** adv' ;
Single NoPrep => insertCompLite (vp ** {c2 = Single adv.c2}) adv.np ** adv' ;
Single p => insertCompLite (vp ** {c2 = combine p adv.c2}) adv.np ** adv' ;
-- if complement slots are full, just insert strings.
_ => vp ** adv''
}
} where {
adv' : {sii,dhex,berri : Str} = { -- adv.np done with insertComp
adv' : {sii,dhex,berri,miscAdv : Str} = { -- adv.np done with insertComp
sii = vp.sii ++ adv.sii ;
dhex = vp.dhex ++ adv.dhex ;
berri = vp.berri ++ adv.berri } ;
berri = vp.berri ++ adv.berri ;
miscAdv = vp.miscAdv ++ adv.miscAdv} ;
adv'' : {sii,dhex,berri,miscAdv : Str} -- adv.np inserted into miscAdv
= adv' ** {dhex = (prepTable ! adv.c2).s ! adv.np.a ++ adv.dhex ;
miscAdv = adv.np.s}
miscAdv = adv.miscAdv ++ adv.np.s}
} ;
--------------------------------------------------------------------------------
-- Sentences etc.
@@ -839,10 +841,10 @@ oper
_ => stmarkerNoContr ! subj.a ! p }} ;
in (wordOrder subjnoun subjpron stm obj pred vp) ;
} where {
vp = case isPassive vps of {
vp : VerbPhrase = case isPassive vps of {
True => complSlash (insertComp vps np) ;
_ => complSlash vps } ;
subj = case isPassive vps of {True => impersNP ; _ => np}
subj : NounPhrase = case isPassive vps of {True => impersNP ; _ => np}
} ;
wordOrder : (sn,sp : Str) -> (stm,obj : {p1,p2 : Str}) -> {fin,inf : Str} -> VerbPhrase -> BaseCl =
@@ -862,7 +864,7 @@ oper
++ vp.miscAdv } ; ---- NB. Only used if there are several adverbs.
---- Primary places for adverbs are obj, sii or dhex.
VFun : Type = Tense -> Anteriority -> Polarity -> Agreement -> Verb
VFun : Type = Tense -> Anteriority -> Polarity -> Agreement -> BaseVerb
-> {fin : Str ; inf : Str} ;
vf : ClType -> VFun = \clt -> case clt of {
@@ -881,13 +883,13 @@ oper
}
where {
agrPol : {agr:Agreement ; pol:Polarity} = {agr=agr; pol=p} ;
pastV : Verb -> Str = \v ->
pastV : BaseVerb -> Str = \v ->
case p of { Neg => v.s ! VNegPast Simple ;
Pos => v.s ! VPast Simple (agr2vagr agr) } ;
presV : Verb -> Str = \v -> v.s ! VPres Simple (agr2vagr agr) p ;
presV : BaseVerb -> Str = \v -> v.s ! VPres Simple (agr2vagr agr) p ;
condNegV : Verb -> Str = \v -> case agr of {
condNegV : BaseVerb -> Str = \v -> case agr of {
Sg2|Sg3 Fem
|Pl2 => v.s ! VNegCond SgFem ;
Pl1 _ => v.s ! VNegCond PlInv ;
@@ -936,7 +938,8 @@ oper
++ adv.sii
++ (prepTable ! adv.c2).s ! adv.np.a
++ adv.dhex
++ adv.np.s ;
++ adv.np.s
++ adv.miscAdv ;
linBaseCl : BaseCl -> Str = \b -> b.beforeSTM ++ b.stm ++ b.afterSTM ;
}

View File

@@ -55,11 +55,10 @@ lin or_Conj = {s2 = \\_ => "ama" ; s1 = [] ; n = Sg} ; -- mise with interrogativ
--lin how8many_IDet = R.indefDet "" pl ;
lin all_Predet = {s = "giddi" ; isPoss = True ; da = M GA} ;
--lin not_Predet = { s = "" } ;
--lin only_Predet = { s = "" } ;
lin most_Predet = {s = "badi" ; isPoss = True ; da = F DA} ;
{-
lin not_Predet = { s = "" } ;
lin only_Predet = { s = "" } ;
lin most_Predet = { s = "" } ;
lin every_Det = R.defDet [] pl **
{ s = mkVow } ;
lin few_Det = R.indefDet "" pl ;
@@ -67,12 +66,12 @@ lin many_Det = R.indefDet "" pl ;
lin much_Det = R.indefDet "" sg ;
-}
lin somePl_Det = {
sp = \\_,_ => "qaar" ;
isPoss, isNum = False ;
st = Definite ; -- NB. Indefinite means actually only IndefArt.
n = Pl ;
s = \\x,_ => BIND ++ defStems ! x ++ BIND ++ "a qaarkood" ;
shortPoss = \\x => BIND ++ defStems ! x ++ BIND ++ "a qaarkood" ;
sp = \\_,_ => "qaarkood" ;
isPoss, isNum = False ;
n = Pl ;
st = Definite -- NB. Indefinite is really only reserved for IndefArt NumSg.
} ;
lin someSg_Det = somePl_Det ** {
@@ -82,8 +81,7 @@ lin someSg_Det = somePl_Det ** {
F x => \\_ => BIND ++ defStems ! F x ++ BIND ++ "a qaarkeed" } ;
shortPoss = table {
M x => BIND ++ defStems ! M x ++ BIND ++ "a qaarkiis" ;
F x => BIND ++ defStems ! F x ++ BIND ++ "a qaarkeed" } ;
sp = \\g,c => case g of {Fem => "qaarkeed" ; _ => "qaarkiis"}
F x => BIND ++ defStems ! F x ++ BIND ++ "a qaarkeed" }
} ;
@@ -112,24 +110,26 @@ oper
-- Prep
lin above_Prep = mkPrep (mkPrep ka) [] [] "dul" ;
-- lin after_Prep = mkPrep "" ;
-- lin after_Prep = mkPrep ""
-- lin before_Prep = mkPrep "" ;
-- lin behind_Prep = mkPrep "" ;
-- lin between_Prep = mkPrep "" ;
lin between_Prep = possPrep (nUl "dhex") ;
-- lin by8agent_Prep = mkPrep ;
-- lin by8means_Prep = mkPrep ;
-- lin during_Prep = mkPrep ;
-- lin except_Prep = mkPrep ;
-- lin for_Prep = mkPrep ;
-- lin from_Prep = mkPrep "" ;
-- lin in8front_Prep = mkPrep "" ;
lin in8front_Prep = possPrep (nUl "hor") ;
lin in_Prep = mkPrep ku ;
lin on_Prep = mkPrep ku ;
-- lin part_Prep = mkPrep ;
-- lin possess_Prep = mkPrep ;
-- lin through_Prep = mkPrep ;
-- lin to_Prep = mkPrep ;
-- lin under_Prep = mkPrep "" ;
lin under_Prep =
let hoos : CatSom.Prep = possPrep (nUl "hoos")
in hoos ** {c2 = Ku} ;
lin with_Prep = mkPrep la ;
-- lin without_Prep = mkPrep ;

View File

@@ -1,4 +1,4 @@
concrete VerbSom of Verb = CatSom ** open ResSom, Prelude in {
concrete VerbSom of Verb = CatSom ** open ResSom, AdverbSom, Prelude in {
lin
@@ -20,10 +20,14 @@ lin
vComp = vp.vComp ++ vp.s ! VInf ;
pred = NoPred ;
} ;
{-
-- : VS -> S -> VP ;
ComplVS vs s = ;
-- : VS -> S -> VP ;
ComplVS vs s =
let vps = useV vs ;
subord = SubjS {s="in"} s ;
in vps ** {obj2 = {s = subord.berri ; a = P3_Prep}} ;
{-
-- : VQ -> QS -> VP ;
ComplVQ vq qs = ;

View File

@@ -63,6 +63,13 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (GenericCl (ComplSla
LangSom: hilib cusbo 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
--------------------------------------------------------------------------------
-- Other complements
--LangEng: we knew that he is coming
LangSom: in uu imanayo waa aynu ogaannay
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron we_Pron) (ComplVS know_VS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (ProgrVP (UseV come_V)))))))) NoVoc
--------------------------------------------------------------------------------
-- Adverbials
@@ -73,3 +80,20 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_P
-- LangEng: you can't jump above me
LangSom: iga BIND ma dul boodi karto
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PNeg (PredVP (UsePron youSg_Pron) (AdvVP (ComplVV can_VV (UseV jump_V)) (PrepNP above_Prep (UsePron i_Pron)))))) NoVoc
-- LangEng: I am taught in front of the house
LangSom: waa laygu baraa guri BIND ga hor BIND tiis BIND a
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (AdvVP (PassV2 teach_V2) (PrepNP in8front_Prep (DetCN (DetQuant DefArt NumSg) (UseN house_N))))))) NoVoc
-- LangEng: I am taught in front of my mother
LangSom: waa laygu baraa hooya BIND day hor BIND teed BIND a
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (AdvVP (PassV2 teach_V2) (PrepNP in8front_Prep (DetCN (DetQuant (PossPron i_Pron) NumSg) (UseN2 mother_N2))))))) NoVoc
-- LangEng: I see a cat under the chair
LangSom: bisad waa aan ku arkaa kursi BIND ga hoos BIND tiis BIND a
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (AdvVP (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN cat_N))) (PrepNP under_Prep (DetCN (DetQuant DefArt NumSg) (UseN chair_N))))))) NoVoc
-- LangEng: my mother lives under the sea
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