Merge pull request #294 from inariksit/somali

Somali
This commit is contained in:
Inari Listenmaa
2019-09-27 17:55:21 +02:00
committed by GitHub
11 changed files with 249 additions and 126 deletions

View File

@@ -8,12 +8,15 @@ concrete AdjectiveSom of Adjective = CatSom ** open ResSom, Prelude in {
-- elliptic-relational. -- elliptic-relational.
-- : A -> AP ; -- : A -> AP ;
PositA a = a ; PositA a = a ** {
compar = [] ;
} ;
-- : A -> NP -> AP ; -- : A -> NP -> AP ;
-- ComparA a np = a ** { ComparA a np = a ** {
-- s = \\agr => np.s ! Abs ++ "ka" ++ a.s ! AF Compar ; s = \\af => "ka" ++ a.s ! af ;
-- } ; compar = np.s ! Abs
} ;
-- : A2 -> NP -> AP ; -- married to her -- : A2 -> NP -> AP ; -- married to her
-- ComplA2 a2 np = a2 ** { } ; -- ComplA2 a2 np = a2 ** { } ;
@@ -25,7 +28,10 @@ concrete AdjectiveSom of Adjective = CatSom ** open ResSom, Prelude in {
UseA2 = PositA ; UseA2 = PositA ;
-- : A -> AP ; -- warmer -- : A -> AP ; -- warmer
--UseComparA a = a ** {} ; UseComparA a = a ** {
s = \\af => "ka" ++ a.s ! af ;
compar = []
} ;
-- : CAdv -> AP -> NP -> AP ; -- as cool as John -- : CAdv -> AP -> NP -> AP ; -- as cool as John
@@ -34,7 +40,9 @@ concrete AdjectiveSom of Adjective = CatSom ** open ResSom, Prelude in {
-- The superlative use is covered in $Ord$. -- The superlative use is covered in $Ord$.
-- : Ord -> AP ; -- warmest -- : Ord -> AP ; -- warmest
-- AdjOrd ord = ord ** {} ; AdjOrd ord = ord ** {
compar = []
} ;
-- Sentence and question complements defined for all adjectival -- Sentence and question complements defined for all adjectival
-- phrases, although the semantics is only clear for some adjectives. -- phrases, although the semantics is only clear for some adjectives.

View File

@@ -23,7 +23,7 @@ concrete CatSom of Cat = CommonX - [Adv,IAdv] ** open ResSom, Prelude in {
-- Constructed in QuestionSom. -- Constructed in QuestionSom.
QCl = ResSom.QClause ; QCl = ResSom.QClause ;
IComp = ResSom.Complement ; -- 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"
IP = ResSom.NounPhrase ** {contractSTM : Bool} ; -- like NP but may contract with STM IP = ResSom.NounPhrase ** {contractSTM : Bool} ; -- like NP but may contract with STM
@@ -66,7 +66,10 @@ concrete CatSom of Cat = CommonX - [Adv,IAdv] ** open ResSom, Prelude in {
Predet = {s : Str ; da : DefArticle ; isPoss : Bool} ; Predet = {s : Str ; da : DefArticle ; isPoss : Bool} ;
Quant = ResSom.Quant ; Quant = ResSom.Quant ;
Num = ResSom.Num ; Num = ResSom.Num ;
Ord = {s : Str ; n : Number} ; Ord = {
s : AForm => Str ; -- Ord can came from AP and become AP again
n : Number -- Ord can come from Num, which has inherent number
} ;
DAP = ResSom.Determiner ; DAP = ResSom.Determiner ;

View File

@@ -13,15 +13,15 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
a = getAgr det.n (gender cn) } where { a = getAgr det.n (gender cn) } where {
sTable : Case => Str = \\c => sTable : Case => Str = \\c =>
let nfc : {nf : NForm ; c : Case} = let nfc : {nf : NForm ; c : Case} =
case <det.isNum,c,cn.hasMod,det.st,det.n> of { case <det.numtype,c,cn.modtype,det.st,det.n> of {
-- Numbers -- Numbers
<True,_,_,_,_> => {nf=Numerative ; c=c} ; <Basic|Compound,_,_,_,_> => {nf=Numerative ; c=c} ;
-- special form for fem. nouns -- special form for fem. nouns
<_,Nom,False,Indefinite,Sg> => {nf=NomSg ; c=c} ; <_,Nom,NoMod|OtherMod,Indefinite,Sg> => {nf=NomSg ; c=c} ;
-- If cn has modifier, Nom ending attaches to the modifier -- If cn has modifier, Nom ending attaches to the modifier
<_,Nom,True,_,_> => {nf=Def det.n ; c=Abs} ; <_,Nom,AMod,_,_> => {nf=Def det.n ; c=Abs} ;
-- a Det with st=Indefinite uses Indef forms -- a Det with st=Indefinite uses Indef forms
<_,_,_,Indefinite,n> => {nf=Indef n ; c=c} ; <_,_,_,Indefinite,n> => {nf=Indef n ; c=c} ;
@@ -30,13 +30,24 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
_ => {nf=Def det.n ; c=c} _ => {nf=Def det.n ; c=c}
} ; } ;
art = gda2da cn.gda ! det.n ; art = gda2da cn.gda ! det.n ;
num = case det.isNum of {True => Sg ; _ => det.n} ; num = case isNum det.numtype of {True => Sg ; _ => det.n} ;
dt : {pref,s : Str} = dt : {pref,s : Str} =
case <nfc.nf,cn.isPoss,andB det.isPoss cn.shortPoss> of { case <nfc.nf,cn.isPoss,andB det.isPoss cn.shortPoss> of {
<Numerative,_,_> => {s = [] ; pref = det.s ! art ! nfc.c} ; -- determiner comes before CN -- Det is a cardinal number. The number is the head of the NP,
<_, True,_> => {pref = [] ; s = det.sp ! gender cn ! nfc.c} ; -- CN has undergone ComplN2 and is already quantified -- and CN becomes its modifier. If CN has modifiers of its own,
<_,_, True> => {pref = [] ; s = BIND ++ det.shortPoss ! art} ; -- we insert the conjunction "oo" between the number and the CN.
_ => {pref = [] ; s = det.s ! art ! nfc.c} <Numerative,_,_> =>
let oo = case det.numtype of {Compound => "oo" ; _ => []}
in {s = [] ; pref = det.s ! art ! nfc.c ++ oo} ;
-- CN has undergone ComplN2 and is already quantified
<_,True,_> => {pref = [] ; s = det.sp ! gender cn ! nfc.c} ;
-- CN is e.g. a kinship term and takes short possessive
<_,_,True> => {pref = [] ; s = BIND ++ det.shortPoss ! art} ;
-- Default case
_ => {pref = [] ; s = det.s ! art ! nfc.c}
} ; } ;
in dt.pref -- if det is numeral in dt.pref -- if det is numeral
++ cn.s ! nfc.nf ++ cn.s ! nfc.nf
@@ -56,15 +67,15 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
UsePron pron = pron ** {st = Definite} ; UsePron pron = pron ** {st = Definite} ;
-- : Predet -> NP -> NP ; -- only the man -- : Predet -> NP -> NP ; -- only the man
PredetNP predet np = PredetNP predet np =
let qnt = PossPron (pronTable ! np.a) ; let qnt = PossPron (pronTable ! np.a) ;
det = qnt.shortPoss ! predet.da ; det = qnt.shortPoss ! predet.da ;
predetS : Str = case predet.isPoss of { predetS : Str = case predet.isPoss of {
True => glue predet.s det ; True => glue predet.s det ;
False => predet.s False => predet.s
} ; } ;
in np ** { in np ** {
s = \\c => s = \\c =>
case <np.isPron,predet.isPoss> of { case <np.isPron,predet.isPoss> of {
<True,True> => np.empty ++ predetS ; <True,True> => np.empty ++ predetS ;
_ => np.s ! c ++ predetS} ; _ => np.s ! c ++ predetS} ;
@@ -120,30 +131,26 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
-- : Quant -> Num -> Det ; -- : Quant -> Num -> Det ;
DetQuant quant num = let indep = Hal in quant ** { DetQuant quant num = let indep = Hal in quant ** {
s = \\da,c => s = \\da,c =>
case num.isNum of { case isNum num.numtype of {
True => num.s ! indep ++ quant.s ! num.da ! c ++ num.thousand ; True => num.s ! indep ++ quant.s ! num.da ! c ++ num.thousand ;
False => num.s ! indep ++ quant.s ! da ! c ++ num.thousand } ; False => num.s ! indep ++ quant.s ! da ! c ++ num.thousand } ;
sp = \\g,c => case <num.n,g> of { -- TODO check what happens when num.isNum sp = \\g,c => case <num.n,g> of {
<Sg,Masc> => num.s ! indep ++ quant.sp ! SgMasc ! c ++ num.thousand ; <Sg,Masc> => num.s ! indep ++ quant.sp ! SgMasc ! c ++ num.thousand ;
<Sg,Fem> => num.s ! indep ++ quant.sp ! SgFem ! c ++ num.thousand ; <Sg,Fem> => num.s ! indep ++ quant.sp ! SgFem ! c ++ num.thousand ;
-- Independent form uses plural morpheme, not gender-flipped allomorph -- Independent form uses plural morpheme, not gender-flipped allomorph
<Pl,_> => num.s ! indep ++ quant.sp ! PlInv ! c ++ num.thousand } ; <Pl,_> => num.s ! indep ++ quant.sp ! PlInv ! c ++ num.thousand } ;
isNum = num.isNum ; numtype = num.numtype ;
n = num.n ; n = num.n ;
shortPoss = \\da => quant.shortPoss ! da ++ num.s ! indep shortPoss = \\da => quant.shortPoss ! da ++ num.s ! indep
} ; } ;
-- d = case <num.isNum,quant.st> of {
-- <True,_> => Numerative ;
-- <False,Definite> => Def num.n quant.v ;
-- <False,Indefinite> => Indef num.n } ;
-- : Quant -> Num -> Ord -> Det ; -- these five best -- : Quant -> Num -> Ord -> Det ; -- these five best
DetQuantOrd quant num ord = DetQuantOrd quant num ord =
let theseFive = DetQuant quant num in theseFive ** { let theseFive = DetQuant quant num in theseFive ** {
s = \\g,c => theseFive.s ! g ! c ++ ord.s ; s = \\g,c => theseFive.s ! g ! c ++ ord.s ! AF num.n c ;
sp = \\g,c => theseFive.sp ! g ! c ++ ord.s ; sp = \\g,c => theseFive.sp ! g ! c ++ ord.s ! AF num.n c ;
shortPoss = \\da => theseFive.shortPoss ! da ++ ord.s shortPoss = \\da => theseFive.shortPoss ! da ++ ord.s ! AF num.n Abs
} ; } ;
-- Whether the resulting determiner is singular or plural depends on the -- Whether the resulting determiner is singular or plural depends on the
@@ -157,7 +164,11 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
NumPl = baseNum ** {n = Pl} ; NumPl = baseNum ** {n = Pl} ;
-- : Card -> Num ; -- : Card -> Num ;
NumCard card = card ** {isNum = True} ; NumCard card = card ** {
numtype = case card.hasThousand of {
True => Compound ;
False => Basic }
} ;
-- : Digits -> Card ; -- : Digits -> Card ;
-- NumDigits dig = { s = dig.s ! NCard ; n = dig.n } ; -- NumDigits dig = { s = dig.s ! NCard ; n = dig.n } ;
@@ -173,17 +184,20 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
OrdDigits digs = digs ** { s = digs.s ! NOrd } ; OrdDigits digs = digs ** { s = digs.s ! NOrd } ;
-} -}
-- : Numeral -> Ord ; -- : Numeral -> Ord ;
OrdNumeral num = num ** {s = num.ord} ; OrdNumeral num = num ** {
s = \\_ => num.ord
} ;
{-
-- : A -> Ord ; -- : A -> Ord ;
OrdSuperl a = { } ; OrdSuperl a = {
s = \\af => "ugu" ++ a.s ! af ;
n = Sg -- ?? is this meaningful?
} ;
-- One can combine a numeral and a superlative. -- One can combine a numeral and a superlative.
-- : Numeral -> A -> Ord ; -- third largest -- : Numeral -> A -> Ord ; -- third largest
OrdNumeralSuperl num a = num ** { } ; -- OrdNumeralSuperl num a = num ** { } ;
-}
-- : Quant -- : Quant
DefArt = defQuant "a" "kan" "tan" "kuwan" False ; DefArt = defQuant "a" "kan" "tan" "kuwan" False ;
@@ -242,22 +256,28 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
Use3N3 n3 = lin N2 n3 ; Use3N3 n3 = lin N2 n3 ;
-- : AP -> CN -> CN -- : AP -> CN -> CN
AdjCN ap cn = cn ** { AdjCN ap cn = cn ** {
s = table { NomSg => cn.s ! Indef Sg ; -- When an adjective is added, noun loses case marker. s = table { -- Add oo after Numerative only if this is CN's first modifier.
x => cn.s ! x } ; Numerative => cn.s ! Numerative
++ andConj Indefinite (notMod cn.modtype) ;
NomSg => cn.s ! Indef Sg ; -- Add adj -> noun loses case marker
nf => cn.s ! nf } ;
mod = \\st,n,c => mod = \\st,n,c =>
cn.mod ! st ! n ! Abs -- If there was something before, it is now in Abs cn.mod ! st ! n ! Abs -- If there was something before, it is now in Abs
++ andConj st cn.hasMod -- If the sentence is already modified, any new modifier needs to be introduced with conjunction ++ andConj st cn.modtype -- If the sentence is already modified, any new modifier needs to be introduced with conjunction
++ ap.s ! AF n c ; ++ ap.s ! AF n c ;
hasMod = True modtype = AMod
} ; } ;
-- : CN -> RS -> CN ; -- : CN -> RS -> CN ;
RelCN cn rs = cn ** { RelCN cn rs = cn ** {
s = table {
Numerative => cn.s ! Numerative ++ andConj Indefinite (notMod cn.modtype) ;
nf => cn.s ! nf } ;
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.modtype
++ rs.s ! st ! gennum cn Sg ! c ; -- gennum cn Sg, because plural form is only for 1st person plural ++ rs.s ! st ! gennum cn Sg ! c ; -- gennum cn Sg, because plural form is only for 1st person plural
hasMod = True ; modtype = AMod
} ; } ;
{- {-
@@ -286,11 +306,23 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
PossNP cn np = cn ** { -- guriga Axmed, not Axmed gurigiisa PossNP cn np = cn ** { -- guriga Axmed, not Axmed gurigiisa
mod = \\st,n,c => cn.mod ! st ! n ! c ++ objpron np ! Abs mod = \\st,n,c => cn.mod ! st ! n ! c ++ objpron np ! Abs
} ; } ;
{-
-- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples -- : CN -> NP -> CN ; -- glass of wine / two kilos of red apples
PartNP cn np = cn ** { } ; PartNP cn np = cn ** {
s = table {
Numerative => cn.s ! Numerative ++ andConj Indefinite (notMod cn.modtype) ;
nf => cn.s ! nf } ;
mod = \\st,n,c =>
cn.mod ! st ! n ! c
++ andConj st cn.modtype -- If the sentence is already modified, any new modifier needs to be introduced with conjunction
++ objpron np ! Abs
++ "ah" ;
modtype = case cn.modtype of {
AMod => AMod ;
_ => OtherMod }
} ;
{-
-- This is different from the partitive, as shown by many languages. -- This is different from the partitive, as shown by many languages.
@@ -308,10 +340,10 @@ concrete NounSom of Noun = CatSom ** open ResSom, Prelude in {
-} -}
oper oper
andConj : State -> Bool -> Str = \st,hasMod -> andConj : State -> ModType -> Str = \st,mod ->
case <st,hasMod> of { case <st,mod> of {
<Indefinite,True> => "oo" ; <Indefinite,AMod|OtherMod> => "oo" ;
<Definite,True> => "ee" ; <Definite,AMod|OtherMod> => "ee" ;
_ => [] _ => []
} ; } ;
} }

View File

@@ -40,6 +40,7 @@ lincat
Sub10, Sub100, Sub1000, Sub1000000 = { Sub10, Sub100, Sub1000, Sub1000000 = {
s : DForm => Str ; s : DForm => Str ;
thousand : Str ; -- TODO figure out if this really works so thousand : Str ; -- TODO figure out if this really works so
hasThousand : Bool ;
ord : Str ; ord : Str ;
da : DefArticle ; da : DefArticle ;
n : Number n : Number
@@ -64,25 +65,28 @@ lin n7 = mkNum2 "toddoba" "toddobaatan" ;
lin n8 = mkNum2Masc "siddeed" "siddeetan" ; lin n8 = mkNum2Masc "siddeed" "siddeetan" ;
lin n9 = mkNum2Masc "sagaal" "sagaashan" ; lin n9 = mkNum2Masc "sagaal" "sagaashan" ;
lin pot01 = n1.unit ** {n = Sg ; thousand = []} ; lin pot01 = n1.unit ** {n = Sg ; thousand = [] ; hasThousand = False} ;
lin pot0 d = d.unit ** {n = Pl ; thousand = []} ; lin pot0 d = d.unit ** {n = Pl ; thousand = [] ; hasThousand = False} ;
lin pot110 = n1.ten ** { lin pot110 = n1.ten ** {
s = \\df => n1.ten.s ; s = \\df => n1.ten.s ;
thousand = [] ; thousand = [] ;
hasThousand = False ;
n = Pl n = Pl
} ; } ;
lin pot111 = { lin pot111 = {
s = \\_ => "koob iyo" ++ n1.ten.s ; s = \\_ => "koob iyo" ++ n1.ten.s ;
ord = "koob iyo" ++ n1.ten.ord ; ord = "koob iyo" ++ n1.ten.ord ;
thousand = [] ; thousand = [] ;
hasThousand = False ;
da = M KA ; da = M KA ;
n = Pl n = Pl
} ; } ;
lin pot1to19 d = { lin pot1to19 d = {
s = \\_ => d.unit.s ! Hal ++ "iyo" ++ n1.ten.s ; s = \\_ => d.unit.s ! Hal ++ "iyo" ++ n1.ten.s ;
thousand = [] ; thousand = [] ;
hasThousand = False ;
ord = d.unit.s ! Hal ++ "iyo" ++ n1.ten.ord ; ord = d.unit.s ! Hal ++ "iyo" ++ n1.ten.ord ;
da = M KA ; da = M KA ;
n = Pl n = Pl
@@ -91,26 +95,31 @@ lin pot0as1 n = n ;
lin pot1 d = d.ten ** { lin pot1 d = d.ten ** {
s = \\df => d.ten.s ; s = \\df => d.ten.s ;
thousand = [] ; thousand = [] ;
hasThousand = False ;
n = Pl n = Pl
} ; } ;
lin pot1plus d e = d.ten ** { lin pot1plus d e = d.ten ** {
s = \\b => e.s ! b ++ "iyo" ++ d.ten.s ; s = \\b => e.s ! b ++ "iyo" ++ d.ten.s ;
ord = e.s ! Hal ++ "iyo" ++ d.ten.ord ; ord = e.s ! Hal ++ "iyo" ++ d.ten.ord ;
thousand = [] ; thousand = [] ;
hasThousand = False ;
n = Pl ; n = Pl ;
} ; } ;
lin pot1as2 n = n ; lin pot1as2 n = n ;
lin pot2 d = d ** { lin pot2 d = d ** {
thousand = "boqol" ; thousand = "boqol" ;
hasThousand = True ;
ord = d.s ! Hal ++ "boqlaad" ord = d.s ! Hal ++ "boqlaad"
} ; } ;
lin pot2plus d e = d ** { lin pot2plus d e = d ** {
thousand = "boqol iyo" ++ e.s ! Hal ; thousand = "boqol iyo" ++ e.s ! Hal ;
hasThousand = True ;
ord = d.s ! Hal ++ "boqol iyo" ++ e.ord ; ord = d.s ! Hal ++ "boqol iyo" ++ e.ord ;
n = Pl} ; n = Pl} ;
lin pot2as3 n = n ; lin pot2as3 n = n ;
lin pot3 n = n ** { lin pot3 n = n ** {
thousand = n.thousand ++ "kun" ; thousand = n.thousand ++ "kun" ;
hasThousand = True ;
ord = n.s ! Hal ++ "kunaad" ; ord = n.s ! Hal ++ "kunaad" ;
n = Pl } ; n = Pl } ;
@@ -119,9 +128,7 @@ lin pot3plus n m = n ** {
ord = n.ord ++ "kun iyo" ++ m.ord ; ord = n.ord ++ "kun iyo" ++ m.ord ;
n = Pl} ; n = Pl} ;
--TODO:
-- two thousand small cats
-- => laba kun oo bisadood oo yar (kun and bisadood are both attributes)
---------------------------------------------------------------------------- ----------------------------------------------------------------------------
lincat Dig = TDigit ; lincat Dig = TDigit ;

View File

@@ -210,12 +210,29 @@ param
CardOrd = NOrd | NCard ; CardOrd = NOrd | NCard ;
-- to know whether to put oo in between numeral and CN
NumType = NoNum | Basic | Compound ;
oper
isNum : NumType -> Bool = \nt -> case nt of {
NoNum => False ;
_ => True
} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Adjectives -- Adjectives
param param
AForm = AF Number Case ; ---- TODO: past tense AForm = AF Number Case ; ---- TODO: past tense
ModType = NoMod | AMod | OtherMod ;
oper
-- to flip ModType
notMod : ModType -> ModType = \mt -> case mt of {
NoMod => OtherMod ;
_ => NoMod
} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Prepositions -- Prepositions

View File

@@ -24,8 +24,8 @@ concrete QuestionSom of Question = CatSom ** open
subj = cls.subj ** { -- keep old subject pronoun, subj = cls.subj ** { -- keep old subject pronoun,
noun = ip.s ! Nom -- and place IP first. noun = ip.s ! Nom -- and place IP first.
} ; } ;
obj2 = cls.obj2 ** { -- move old subject noun before object. obj = cls.obj ** { -- move old subject noun before object.
s = cls.subj.noun ++ cls.obj2.s s = cls.subj.noun ++ cls.obj.s
} ; } ;
stm = modSTM "baa" baan cls.stm stm = modSTM "baa" baan cls.stm
} ; } ;
@@ -50,7 +50,7 @@ concrete QuestionSom of Question = CatSom ** open
-- : IComp -> NP -> QCl ; -- where is John? -- : IComp -> NP -> QCl ; -- where is John?
QuestIComp icomp np = QuestIComp icomp np =
let cls = predVP np (VS.UseComp icomp) ; let cls = predVP np (VS.UseComp (icomp2comp icomp)) ;
-- cl = cls ** { -- TODO: neg. questions -- cl = cls ** { -- TODO: neg. questions
-- stm : ClType=>Polarity=>Str = \\_,_ => "waa" -- stm : ClType=>Polarity=>Str = \\_,_ => "waa"
-- } -- }
@@ -87,18 +87,10 @@ concrete QuestionSom of Question = CatSom ** open
-- pronouns. -- pronouns.
-- : IAdv -> IComp ; -- : IAdv -> IComp ;
CompIAdv iadv = { -- where (is it) CompIAdv iadv = iadv ; -- where (is it)
aComp = \\_ => [] ;
nComp = iadv.s ;
stm = Waa NoCopula ;
} ;
-- : IP -> IComp ; -- : IP -> IComp ;
CompIP ip = { -- who (is it) CompIP ip = {s = ip.s ! Abs} ; -- who (is it)
aComp = \\_ => [] ;
nComp = ip.s ! Abs ;
stm = Waa NoCopula ;
} ;
{- {-
-- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$. -- More $IP$, $IDet$, and $IAdv$ are defined in $Structural$.
@@ -117,6 +109,13 @@ concrete QuestionSom of Question = CatSom ** open
oper oper
icomp2comp : SS -> Complement = \icomp -> icomp ** {
aComp = \\_ => [] ;
nComp = icomp.s ;
compar = [] ;
stm = Waa NoCopula
} ;
-- Question clauses: subject pronoun not included, STM is -- Question clauses: subject pronoun not included, STM is
cl2qcl : ClType -> Bool -> ClSlash -> Clause = \cltyp -> cl2qcl : ClType -> Bool -> ClSlash -> Clause = \cltyp ->
let hasSubjPron : Bool = False ; let hasSubjPron : Bool = False ;

View File

@@ -15,7 +15,7 @@ oper
CNoun : Type = Noun ** { CNoun : Type = Noun ** {
mod : State -- for conjunctions: oo for indef, ee for def mod : State -- for conjunctions: oo for indef, ee for def
=> Number => Case => Str ; => Number => Case => Str ;
hasMod : Bool ; modtype : ModType ;
isPoss : Bool -- to prevent impossible forms in ComplN2 with Ns that have short possessive, e.g. "father" isPoss : Bool -- to prevent impossible forms in ComplN2 with Ns that have short possessive, e.g. "father"
} ; } ;
@@ -46,12 +46,16 @@ oper
magacya + "da" => magacya ; magacya + "da" => magacya ;
wiila + "sha" => wiila ; wiila + "sha" => wiila ;
_ => wiilal} ; _ => wiilal} ;
bisadi : Str = case gender of bisadi : Str = case gender of {
{ Fem => case wiil of { _ + #c => wiil+"i" ; _ => wiil} ; Fem => case wiil of {
Masc => wiil } ; _ + #c => wiil+"i" ;
bisadood : Str = case gender of _ => wiil } ;
{ Fem => case wiilal of {_ + "o" => wiilal+"od" ; _ => wiil} ; Masc => wiil } ;
Masc => wiil } bisadood : Str = case gender of {
Fem => case wiilal of {
_ + "o" => wiilal+"od" ;
_ => wiil } ;
Masc => wiil }
} ; } ;
------------------------- -------------------------
@@ -155,7 +159,7 @@ oper
False => np.s} ; False => np.s} ;
useN : Noun -> CNoun ** BaseNP = \n -> n ** useN : Noun -> CNoun ** BaseNP = \n -> n **
{ mod = \\_,_,_ => [] ; hasMod = False ; { mod = \\_,_,_ => [] ; modtype = NoMod ;
a = Sg3 (gender n) ; isPron,isPoss = False ; a = Sg3 (gender n) ; isPron,isPoss = False ;
empty = [] ; st = Indefinite empty = [] ; st = Indefinite
} ; } ;
@@ -275,7 +279,7 @@ oper
Determiner : Type = BaseQuant ** { Determiner : Type = BaseQuant ** {
sp : Gender => Case => Str ; sp : Gender => Case => Str ;
n : Number ; n : Number ;
isNum : Bool ; -- placement in NP + whether to choose Numerative from CN numtype : NumType ; -- placement in NP + whether to choose Numerative from CN
} ; } ;
Quant : Type = BaseQuant ** { Quant : Type = BaseQuant ** {
@@ -285,6 +289,7 @@ oper
BaseNum : Type = { BaseNum : Type = {
s : DForm => Str ; -- independent or attribute s : DForm => Str ; -- independent or attribute
thousand : Str ; -- TODO check where possessive suffix goes thousand : Str ; -- TODO check where possessive suffix goes
hasThousand : Bool ;
da : DefArticle ; da : DefArticle ;
n : Number n : Number
} ; } ;
@@ -292,13 +297,14 @@ oper
baseNum : Num = { baseNum : Num = {
s = \\_ => [] ; s = \\_ => [] ;
thousand = [] ; thousand = [] ;
hasThousand = False ;
da = M KA ; da = M KA ;
n = Sg ; n = Sg ;
isNum = False numtype = NoNum
} ; } ;
Num : Type = BaseNum ** { Num : Type = BaseNum ** {
isNum : Bool -- whether to choose Numerative as the value of NForm numtype : NumType -- whether to choose Numerative as the value of NForm
} ; } ;
Numeral : Type = BaseNum ** { Numeral : Type = BaseNum ** {
@@ -422,17 +428,9 @@ oper
-- Sequences of adjectives follow the rules for restrictive relatives clauses, i.e. are linked by oo 'and' on an indefinite head NounPhrase and by ee 'and' on a definite NounPhrase (8.1). -- Sequences of adjectives follow the rules for restrictive relatives clauses, i.e. are linked by oo 'and' on an indefinite head NounPhrase and by ee 'and' on a definite NounPhrase (8.1).
-- Komparativ
-- För att uttrycka motsvarigheten till svenskans komparativ placerar man på somaliska helt enkelt prepositionen ká 'från, av, än' framför adjektivet i fråga. Adjektivet får ingen ändelse.
-- Shan waa ay ká yar tahay siddéed. Fem är mindre än åtta.
-- Superlativ
-- Motsvarigheten till svenskans superlativ bildas med prepositionsklustret ugú som till sin betydelse närmast motsvarar svenskans allra, t.ex.
-- ugu horrayntii (det att komma) allra först
Adjective : Type = {s : AForm => Str} ; Adjective : Type = {s : AForm => Str} ;
Adjective2 : Type = Adjective ** {c2 : Preposition} ; Adjective2 : Type = Adjective ** {c2 : Preposition} ;
duplA : Str -> Adjective = \yar -> duplA : Str -> Adjective = \yar ->
let yaryar = duplicate yar let yaryar = duplicate yar
in mkAdj yar yaryar ; in mkAdj yar yaryar ;
@@ -464,7 +462,7 @@ oper
=> q + a + y + b + sg ; --qayb+qaybsan, fiic+fiican => q + a + y + b + sg ; --qayb+qaybsan, fiic+fiican
_ => sg + sg } ; _ => sg + sg } ;
AdjPhrase : Type = Adjective ; AdjPhrase : Type = Adjective ** {compar : Str} ;
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
-- Verbs -- Verbs
@@ -728,13 +726,14 @@ oper
Complement : Type = { Complement : Type = {
aComp : Agreement => Str ; aComp : Agreement => Str ;
nComp : Str ; nComp : Str ;
compar : Str ; -- comparative is discontinuous
stm : STM ; -- to choose right sentence type marker stm : STM ; -- to choose right sentence type marker
} ; } ;
VerbPhrase : Type = BaseVerb ** Complement ** BaseAdv ** { VerbPhrase : Type = BaseVerb ** Complement ** BaseAdv ** {
c2 : PrepCombination ; -- Prepositions can combine together and with object pronoun. c2 : PrepCombination ; -- Prepositions can combine together and with object pronoun.
obj2 : NPLite ; -- {s : Str ; a : PrepAgr} obj : NPLite ; -- {s : Str ; a : PrepAgr}
secObj : Str ; -- if two overt pronoun objects obj2 : Str ; -- if two overt pronoun objects
vComp : {subjunc : Str ; -- "waa in" or subjunctive construction: "in" is placed here vComp : {subjunc : Str ; -- "waa in" or subjunctive construction: "in" is placed here
inf : Str ; -- auxiliary VV with infinitive argument inf : Str ; -- auxiliary VV with infinitive argument
subcl : Agreement => Str} -- VV complement if it's a subordinate clause subcl : Agreement => Str} -- VV complement if it's a subordinate clause
@@ -747,14 +746,15 @@ oper
True => Waa Copula ; True => Waa Copula ;
False => Waa NoPred False => Waa NoPred
} ; } ;
compar = [] ;
nComp = [] ; nComp = [] ;
aComp = \\_ => [] ; aComp = \\_ => [] ;
vComp = {subjunc, inf = [] ; vComp = {subjunc, inf = [] ;
subcl = \\_ => []} ; subcl = \\_ => []} ;
berri,miscAdv = [] ; berri,miscAdv = [] ;
c2 = Single NoPrep ; c2 = Single NoPrep ;
obj2 = {s = [] ; a = P3_Prep} ; obj = {s = [] ; a = P3_Prep} ;
secObj = [] obj2 = []
} ; } ;
useVc : Verb2 -> VPSlash = \v2 -> useV v2 ** { useVc : Verb2 -> VPSlash = \v2 -> useV v2 ** {
@@ -778,10 +778,10 @@ oper
} ; } ;
insertRefl : VPSlash -> VPSlash = \vps -> vps ** { insertRefl : VPSlash -> VPSlash = \vps -> vps ** {
obj2 = vps.obj2 ** {a = Reflexive_Prep} ; obj = vps.obj ** {a = Reflexive_Prep} ;
-- If old obj2 was something else than P3, it is now shown in secObj -- If old obj was something else than P3, it is now shown in obj2
secObj = vps.secObj ++ secondObject ! vps.obj2.a ; obj2 = vps.obj2 ++ secondObject ! vps.obj.a ;
} ; } ;
insertComp : VPSlash -> NounPhrase -> VerbPhrase = \vp,np -> insertComp : VPSlash -> NounPhrase -> VerbPhrase = \vp,np ->
@@ -799,25 +799,25 @@ oper
-- To generalise insertAdv and insertComp -- To generalise insertAdv and insertComp
VPLite : Type = { VPLite : Type = {
c2 : PrepCombination ; c2 : PrepCombination ;
obj2 : NPLite ; obj : NPLite ;
sii,dhex,berri,miscAdv,secObj : Str} ; sii,dhex,berri,miscAdv,obj2 : Str} ;
insertCompLite : VPLite -> NPLite -> VPLite = \vp,nplite -> insertCompLite : VPLite -> NPLite -> VPLite = \vp,nplite ->
case vp.obj2.a of { case vp.obj.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 obj.s.
P3_Prep => P3_Prep =>
vp ** {obj2 = nplite ** { vp ** {obj = nplite ** {
s = nplite.s ++ vp.obj2.s} s = nplite.s ++ vp.obj.s}
} ; -- no secObj, because there's ≤1 non-3rd-person pronoun. } ; -- no obj2, 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 ** {obj = vp.obj ** {
s = nplite.s ++ vp.obj2.s s = nplite.s ++ vp.obj.s
} ; } ;
secObj = vp.secObj ++ secondObject ! nplite.a} obj2 = vp.obj2 ++ secondObject ! nplite.a}
} ; } ;
insertAdvLite : VPLite -> Adverb -> VPLite = \vp,adv -> insertAdvLite : VPLite -> Adverb -> VPLite = \vp,adv ->
@@ -851,8 +851,8 @@ oper
ClSlash : Type = BaseAdv ** { ClSlash : Type = BaseAdv ** {
-- Fixed in Cl -- Fixed in Cl
subj : {noun, pron : Str ; isP3 : Bool} ; -- noun and subject pronoun if applicable subj : {noun, pron : Str ; isP3 : Bool} ; -- noun and subject pronoun if applicable
obj2 : NPLite ; obj : NPLite ;
secObj : Str ; obj2 : Str ;
c2 : PrepCombination ; -- NB. QuestIAdv can add more prepositions c2 : PrepCombination ; -- NB. QuestIAdv can add more prepositions
aComp : Str ; aComp : Str ;
nComp : Str ; nComp : Str ;
@@ -872,6 +872,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} ;
obj = vp.obj ** {s = vp.obj.s ++ vp.compar} ;
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 {
@@ -930,10 +931,10 @@ oper
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 ;
prepComb = prepCombTable ! cl.obj2.a ! cl.c2 ; prepComb = prepCombTable ! cl.obj.a ! cl.c2 ;
-- Contractions -- Contractions
bind : Str = case <isPassive cl, cl.obj2.a, cl.c2> of { bind : Str = case <isPassive cl, cl.obj.a, cl.c2> of {
<False,P3_Prep,Single NoPrep> => [] ; -- nothing to attach to the STM <False,P3_Prep,Single NoPrep> => [] ; -- nothing to attach to the STM
_ => BIND } ; -- something to attach, use BIND _ => BIND } ; -- something to attach, use BIND
prepCombNeg : Str = case <cltyp,p> of { prepCombNeg : Str = case <cltyp,p> of {
@@ -947,7 +948,7 @@ oper
-- Placement of object noun varies depending on type of clause -- Placement of object noun varies depending on type of clause
statementNounObj = case cltyp of { statementNounObj = case cltyp of {
Statement => cl.obj2.s ; Statement => cl.obj.s ;
_ => [] } ; _ => [] } ;
statementNounComp = case cltyp of { statementNounComp = case cltyp of {
Statement => cl.nComp ; Statement => cl.nComp ;
@@ -955,11 +956,11 @@ oper
-- for subord and question, NP predicatives and objects behave the same -- for subord and question, NP predicatives and objects behave the same
subordNounObj = case cltyp of { subordNounObj = case cltyp of {
Subord => cl.obj2.s ++ cl.nComp ; Subord => cl.obj.s ++ cl.nComp ;
_ => [] } ; _ => [] } ;
questionNounObj = case cltyp of { questionNounObj = case cltyp of {
PolarQuestion|WhQuestion PolarQuestion|WhQuestion
=> cl.obj2.s ++ cl.nComp ; => cl.obj.s ++ cl.nComp ;
_ => [] } ; _ => [] } ;
-- Control whether to include subject pronoun and STM -- Control whether to include subject pronoun and STM
@@ -989,7 +990,7 @@ oper
++ cl.sii -- restricted set of particles ++ cl.sii -- restricted set of particles
++ cl.dhex -- restricted set of nouns/adverbials ++ cl.dhex -- restricted set of nouns/adverbials
++ cl.secObj -- "second object" ++ cl.obj2 -- "second object"
++ cl.vComp.inf -- VV complement, if it's infinitive ++ cl.vComp.inf -- VV complement, if it's infinitive
++ cl.pred ! cltyp ! t ! a ! p -- the inflecting verb ++ cl.pred ! cltyp ! t ! a ! p -- the inflecting verb
++ questionNounObj -- noun object if it's a question ++ questionNounObj -- noun object if it's a question
@@ -1095,31 +1096,30 @@ oper
linVP : VForm -> ClType -> VerbPhrase -> Str = \vf,cltyp,vp -> linVP : VForm -> ClType -> VerbPhrase -> Str = \vf,cltyp,vp ->
let pred = vp.s ! vf ; let pred = vp.s ! vf ;
pr = prepCombTable ! vp.obj2.a ! vp.c2 ; pr = prepCombTable ! vp.obj.a ! vp.c2 ;
-- obj = {p1 = np.s ;
-- p2 = vp.aComp ! pagr2agr np.a ++ prepCombTable ! np.a ! vps.c2} ;
neg = case <cltyp,isNeg vf> of { neg = case <cltyp,isNeg vf> of {
<Subord,True> => "aan" ; <Subord,True> => "aan" ;
_ => [] _ => []
} ; } ;
in wordOrder cltyp neg pred pr vp ; in wordOrder cltyp neg pred pr vp ;
-- Light version of the word order complexity in mkClause.
wordOrder : ClType -> (neg,pred,prepcomb : Str) -> VerbPhrase -> Str = wordOrder : ClType -> (neg,pred,prepcomb : Str) -> VerbPhrase -> Str =
\cltyp,neg,pred,pr,vp -> \cltyp,neg,pred,pr,vp ->
vp.berri -- AdV vp.berri -- AdV
++ case cltyp of { ++ case cltyp of {
Subord => [] ; Subord => [] ;
_ => vp.obj2.s {-obj.p1-} } -- noun object if it's a statement _ => vp.obj.s } -- noun object if it's a statement
++ neg ++ neg
++ vp.vComp.subjunc -- "waa in" construction ++ vp.vComp.subjunc -- "waa in" construction
++ case cltyp of { ++ case cltyp of {
Subord => vp.obj2.s ; -- noun object if it's subordinate clause Subord => vp.obj.s ; -- noun object if it's subordinate clause
_ => [] } _ => [] }
++ vp.aComp ! pagr2agr vp.obj2.a -- AP complement agreeing with object ++ vp.aComp ! pagr2agr vp.obj.a -- AP complement agreeing with object
++ pr -- object if it's a pronoun ++ pr -- 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.obj2 -- "second object"
++ vp.vComp.inf -- VV complement, if it's infinitive ++ vp.vComp.inf -- VV complement, if it's infinitive
++ 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

View File

@@ -68,7 +68,8 @@ lin much_Det = R.indefDet "" sg ;
-} -}
lin somePl_Det = { lin somePl_Det = {
sp = \\_,_ => "qaar" ; sp = \\_,_ => "qaar" ;
isPoss, isNum = False ; isPoss = False ;
numtype = NoNum ;
st = Definite ; -- NB. Indefinite means actually only IndefArt. st = Definite ; -- NB. Indefinite means actually only IndefArt.
n = Pl ; n = Pl ;
s = \\x,_ => BIND ++ defStems ! x ++ BIND ++ "a qaarkood" ; s = \\x,_ => BIND ++ defStems ! x ++ BIND ++ "a qaarkood" ;

View File

@@ -18,8 +18,8 @@ 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: obj = vp.obj ** {s = []} ; -- word order hack to avoid more parameters:
miscAdv = vp.miscAdv ++ vp.obj2.s -- dump the object to miscAdv miscAdv = vp.miscAdv ++ vp.obj.s -- dump the object to miscAdv
} ; } ;
Subjunctive => useV vv ** { Subjunctive => useV vv ** {
@@ -46,7 +46,7 @@ lin
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 ** {obj = {s = subord.berri ; a = P3_Prep}} ;
{- {-
-- : VQ -> QS -> VP ; -- : VQ -> QS -> VP ;
@@ -137,6 +137,7 @@ lin
CompAP ap = { CompAP ap = {
aComp = \\a => ap.s ! AF (getNum a) Abs ; aComp = \\a => ap.s ! AF (getNum a) Abs ;
nComp = [] ; nComp = [] ;
compar = ap.compar ;
stm = Waa Copula ; stm = Waa Copula ;
} ; } ;
@@ -145,6 +146,7 @@ lin
-- I am [a house that sleeps here] vs. we are [houses that sleep here] -- I am [a house that sleeps here] vs. we are [houses that sleep here]
aComp = \\a => cn2str (getNum a) Abs cn ; aComp = \\a => cn2str (getNum a) Abs cn ;
nComp = [] ; nComp = [] ;
compar = [] ;
stm = Waa NoCopula ; stm = Waa NoCopula ;
} ; } ;
@@ -152,6 +154,7 @@ lin
CompNP np = { CompNP np = {
aComp = \\a => [] ; aComp = \\a => [] ;
nComp = np.s ! Abs ; nComp = np.s ! Abs ;
compar = [] ;
stm = Waa NoCopula ; stm = Waa NoCopula ;
} ; } ;
@@ -159,6 +162,7 @@ lin
CompAdv adv = { CompAdv adv = {
aComp = \\a => linAdv adv ; -- TODO check placement aComp = \\a => linAdv adv ; -- TODO check placement
nComp = [] ; nComp = [] ;
compar = [] ;
stm = Waa Copula ; stm = Waa Copula ;
} ; } ;

View File

@@ -1,3 +1,7 @@
------------------
-- Conjunctions --
------------------
-- LangEng: the big black bird -- LangEng: the big black bird
LangSom: shimbir BIND ta madow ee weyn LangSom: shimbir BIND ta madow ee weyn
Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant DefArt NumSg) (AdjCN (PositA big_A) (AdjCN (PositA black_A) (UseN bird_N))))) NoVoc Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant DefArt NumSg) (AdjCN (PositA big_A) (AdjCN (PositA black_A) (UseN bird_N))))) NoVoc
@@ -5,3 +9,24 @@ Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant DefArt NumSg) (AdjCN (PositA big_A)
-- LangEng: a big black bird -- LangEng: a big black bird
LangSom: shimbir madow oo weyn LangSom: shimbir madow oo weyn
Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant IndefArt NumSg) (AdjCN (PositA big_A) (AdjCN (PositA black_A) (UseN bird_N))))) NoVoc Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant IndefArt NumSg) (AdjCN (PositA big_A) (AdjCN (PositA black_A) (UseN bird_N))))) NoVoc
-----------------
-- Comparative --
-----------------
-- Examples from Saeed p. 107
-- LangEng: that cat is bigger
LangSom: bisad BIND daasi waa ka weyn tahay
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant that_Quant NumSg) (UseN cat_N)) (UseComp (CompAP (UseComparA big_A)))))) NoVoc
-- LangEng: that cat is bigger than this cat
LangSom: bisad BIND daasi bisad BIND dan waa ka weyn tahay
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant that_Quant NumSg) (UseN cat_N)) (UseComp (CompAP (ComparA big_A (DetCN (DetQuant this_Quant NumSg) (UseN cat_N)))))))) NoVoc
-- LangEng: that cat is biggest
LangSom: bisad BIND daasi waa ugu weyn tahay
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant that_Quant NumSg) (UseN cat_N)) (UseComp (CompAP (AdjOrd (OrdSuperl big_A))))))) NoVoc
-- LangEng: cat is the biggest animal that I saw
LangSom: bisadi waa xayawaan BIND ka ugu weyn aan arkay
Lang: UseCl (TTAnt TPres ASimul) PPos (PredVP (MassNP (UseN cat_N)) (UseComp (CompNP (DetCN (DetQuantOrd DefArt NumSg (OrdSuperl big_A)) (RelCN (UseN animal_N) (UseRCl (TTAnt TPast ASimul) PPos (RelSlash IdRP (SlashVP (UsePron i_Pron) (SlashV2a see_V2)))))))))

View File

@@ -1,8 +1,11 @@
-------------------------------
-- Numerals with determiners --
-------------------------------
-- LangEng: the two cats -- LangEng: the two cats
LangSom: laba BIND da bisadood LangSom: laba BIND da bisadood
Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant DefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n2)))))))) (UseN cat_N))) NoVoc Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant DefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n2)))))))) (UseN cat_N))) NoVoc
-- LangEng: those three men -- LangEng: those three men
LangSom: saddex BIND daas nin LangSom: saddex BIND daas nin
Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant that_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n3)))))))) (UseN man_N))) NoVoc Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant that_Quant (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n3)))))))) (UseN man_N))) NoVoc
@@ -25,4 +28,28 @@ Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_
-- LangEng: he is my first man -- LangEng: he is my first man
LangSom: waa nin BIND kayg BIND a kowaad LangSom: waa nin BIND kayg BIND a kowaad
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (UseComp (CompNP (DetCN (DetQuantOrd (PossPron i_Pron) NumSg (OrdNumeral (num (pot2as3 (pot1as2 (pot0as1 pot01)))))) (UseN man_N))))))) NoVoc Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron he_Pron) (UseComp (CompNP (DetCN (DetQuantOrd (PossPron i_Pron) NumSg (OrdNumeral (num (pot2as3 (pot1as2 (pot0as1 pot01)))))) (UseN man_N))))))) NoVoc
--------------------------------------
-- Numerals with multiple modifiers --
--------------------------------------
-- LangEng: two cats
LangSom: laba bisadood
Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n2)))))))) (UseN cat_N))) NoVoc
-- LangEng: two small cats
LangSom: laba bisadood oo yar
Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n2)))))))) (AdjCN (PositA small_A) (UseN cat_N)))) NoVoc
-- LangEng: two small cats that have meat
LangSom: laba bisadood oo yar oo hilib leh
Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot2as3 (pot1as2 (pot0as1 (pot0 n2)))))))) (RelCN (AdjCN (PositA small_A) (UseN cat_N)) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a have_V2) (MassNP (UseN meat_N)))))))) NoVoc
-- LangEng: two thousand cats
LangSom: laba kun oo bisadood
Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot3 (pot1as2 (pot0as1 (pot0 n2)))))))) (UseN cat_N))) NoVoc
-- LangEng: two thousand small cats
LangSom: laba kun oo bisadood oo yar
Lang: PhrUtt NoPConj (UttNP (DetCN (DetQuant IndefArt (NumCard (NumNumeral (num (pot3 (pot1as2 (pot0as1 (pot0 n2)))))))) (AdjCN (PositA small_A) (UseN cat_N)))) NoVoc