mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-28 09:28:54 -06:00
@@ -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.
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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,12 +30,23 @@ 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.
|
||||||
|
<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}
|
_ => {pref = [] ; s = det.s ! art ! nfc.c}
|
||||||
} ;
|
} ;
|
||||||
in dt.pref -- if det is numeral
|
in dt.pref -- if det is numeral
|
||||||
@@ -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" ;
|
||||||
_ => []
|
_ => []
|
||||||
} ;
|
} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|||||||
@@ -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,11 +46,15 @@ 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 {
|
||||||
|
_ + #c => wiil+"i" ;
|
||||||
|
_ => wiil } ;
|
||||||
Masc => wiil } ;
|
Masc => wiil } ;
|
||||||
bisadood : Str = case gender of
|
bisadood : Str = case gender of {
|
||||||
{ Fem => case wiilal of {_ + "o" => wiilal+"od" ; _ => wiil} ;
|
Fem => case wiilal of {
|
||||||
|
_ + "o" => wiilal+"od" ;
|
||||||
|
_ => wiil } ;
|
||||||
Masc => 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
|
||||||
|
|||||||
@@ -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" ;
|
||||||
|
|||||||
@@ -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 ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -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)))))))))
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -26,3 +29,27 @@ 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
|
||||||
|
|||||||
Reference in New Issue
Block a user