forked from GitHub/gf-rgl
Merge branch 'GrammaticalFramework:master' into master
This commit is contained in:
@@ -16,7 +16,7 @@ concrete CatKor of Cat = CommonX ** open ResKor, Prelude in {
|
||||
Cl = ResKor.ClSlash ;
|
||||
ClSlash = ResKor.ClSlash ;
|
||||
SSlash = ResKor.Sentence ; -- sentence missing NP; e.g. "she has looked at"
|
||||
Imp = {s : Number => Polarity => Str} ; -- imperative e.g. "look at this"
|
||||
Imp = {s : Polarity => Str} ; -- imperative e.g. "look at this"
|
||||
|
||||
--2 Questions and interrogatives
|
||||
|
||||
|
||||
@@ -53,7 +53,6 @@ oper IdetIP : IDet -> IP = notYet "IdetIP" ;
|
||||
oper IdetQuant : IQuant -> Num -> IDet = notYet "IdetQuant" ;
|
||||
oper ImpP3 : NP -> VP -> Utt = notYet "ImpP3" ;
|
||||
oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ;
|
||||
oper ImpVP : VP -> Imp = notYet "ImpVP" ;
|
||||
oper ImpersCl : VP -> Cl = notYet "ImpersCl" ;
|
||||
oper OrdDigits : Digits -> Ord = notYet "OrdDigits" ;
|
||||
oper OrdNumeral : Numeral -> Ord = notYet "OrdNumeral" ;
|
||||
@@ -101,9 +100,6 @@ oper UseQCl : Temp -> Pol -> QCl -> QS = notYet "UseQCl" ;
|
||||
oper UseSlash : Temp -> Pol -> ClSlash -> SSlash = notYet "UseSlash" ;
|
||||
oper UttIAdv : IAdv -> Utt = notYet "UttIAdv" ;
|
||||
oper UttIP : IP -> Utt = notYet "UttIP" ;
|
||||
oper UttImpPl : Pol -> Imp -> Utt = notYet "UttImpPl" ;
|
||||
oper UttImpPol : Pol -> Imp -> Utt = notYet "UttImpPol" ;
|
||||
oper UttImpSg : Pol -> Imp -> Utt = notYet "UttImpSg" ;
|
||||
oper UttInterj : Interj -> Utt = notYet "UttInterj" ;
|
||||
oper UttQS : QS -> Utt = notYet "UttQS" ;
|
||||
oper VPSlashPrep : VP -> Prep -> VPSlash = notYet "VPSlashPrep" ;
|
||||
|
||||
@@ -108,6 +108,9 @@ param
|
||||
| Imperative
|
||||
| Propositive ;
|
||||
|
||||
ObjectForm = -- sometimes need to override V2's object case for Imp
|
||||
DeclObj
|
||||
| ImpObj ;
|
||||
|
||||
-- TODO: include Aspect and SentenceType.
|
||||
-- These are all Generic and Declarative.
|
||||
@@ -115,7 +118,8 @@ param
|
||||
VForm =
|
||||
VStem Polarity -- for adding conjunctions
|
||||
| VAttr Polarity -- for subordinate clauses
|
||||
| VF Style Polarity ;
|
||||
| VF Style Polarity
|
||||
| VImpNeg ;
|
||||
|
||||
oper
|
||||
-- Default style used in the whole grammar. Change here for another style.
|
||||
@@ -141,7 +145,8 @@ oper
|
||||
VF Polite Pos => "s (VF Polite Pos)" ;
|
||||
VF Polite Neg => "s (VF Polite Neg)" ;
|
||||
VF Plain Pos => "s (VF Plain Pos)" ;
|
||||
VF Plain Neg => "s (VF Plain Neg)" } ;
|
||||
VF Plain Neg => "s (VF Plain Neg)" ;
|
||||
VImpNeg => "s VImpNeg" } ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Clauses
|
||||
|
||||
@@ -8,11 +8,11 @@ concrete PhraseKor of Phrase = CatKor ** open Prelude, ResKor in {
|
||||
UttIAdv iadv = iadv ;
|
||||
UttAdv adv = adv ;
|
||||
UttInterj i = i ;
|
||||
{-
|
||||
UttImpSg pol imp =
|
||||
UttImpPl pol imp =
|
||||
|
||||
UttImpSg pol imp = {s = imp.s ! pol.p} ;
|
||||
UttImpPl,
|
||||
UttImpPol = UttImpSg ;
|
||||
-}
|
||||
|
||||
UttIP ip = {s = ip.s ! Bare} ;
|
||||
|
||||
UttNP np = {s = np.s ! Bare} ;
|
||||
|
||||
@@ -8,7 +8,7 @@ lin
|
||||
-- : RP -> VP -> RCl ;
|
||||
RelVP rp vp = vp ** { -- TODO no tenses yet in the grammar
|
||||
s = \\t,a,p,cltyp =>
|
||||
rp.s ++ vp.adv ++ vp.nObj ++
|
||||
rp.s ++ vp.adv ++ vp.nObj ! DeclObj ++
|
||||
case cltyp of {
|
||||
WithConj => vp.s ! VStem p ;
|
||||
_ => vp.s ! VAttr p } ;
|
||||
|
||||
@@ -206,10 +206,11 @@ oper
|
||||
planeg = neg ++ negForms ! Plain ;
|
||||
polneg = neg ++ negForms ! Polite ;
|
||||
formneg = neg ++ negForms ! Formal ;
|
||||
in mkVerbFull stem attrpos attrneg plain polite formal planeg polneg formneg ;
|
||||
impneg = neg ++ "마새요" ;
|
||||
in mkVerbFull stem attrpos attrneg plain polite formal planeg polneg formneg impneg ;
|
||||
|
||||
mkVerbFull : (x1,_,_,_,_,_,_,_,x9 : Str) -> Verb =
|
||||
\stem,attrpos,attrneg,plain,polite,formal,planeg,polneg,formneg -> {
|
||||
mkVerbFull : (x1,_,_,_,_,_,_,_,_,x10 : Str) -> Verb =
|
||||
\stem,attrpos,attrneg,plain,polite,formal,planeg,polneg,formneg,impneg -> {
|
||||
s = table {
|
||||
VStem Pos => stem ;
|
||||
VStem Neg => init planeg ;
|
||||
@@ -220,7 +221,8 @@ oper
|
||||
VF Polite Pos => polite ;
|
||||
VF Polite Neg => polneg ;
|
||||
VF Formal Pos => formal ;
|
||||
VF Formal Neg => formneg
|
||||
VF Formal Neg => formneg ;
|
||||
VImpNeg => impneg
|
||||
} ;
|
||||
sc = Subject ;
|
||||
p = if_then_else Phono (vowFinal stem) Vowel Consonant ;
|
||||
@@ -236,7 +238,8 @@ oper
|
||||
"입니다"
|
||||
"아니다"
|
||||
"아니에요"
|
||||
"아닙니다" ;
|
||||
"아닙니다"
|
||||
"있지마세요" ;
|
||||
|
||||
copulaAfterVowel : Verb = copula ** {
|
||||
s = \\vf => case vf of {
|
||||
@@ -255,7 +258,8 @@ oper
|
||||
"있습니다"
|
||||
"없다"
|
||||
"없어요"
|
||||
"없습니다" ;
|
||||
"없습니다"
|
||||
"없지 마새요" ;
|
||||
|
||||
-- For building an adjective. Different attr from do_V.
|
||||
do_A : Verb = mkVerbReg
|
||||
@@ -316,17 +320,14 @@ oper
|
||||
|
||||
BaseVP : Type = {
|
||||
adv,
|
||||
nObj,
|
||||
vComp : Str
|
||||
-- {subjunc : Str ; -- inflected verb complement
|
||||
-- inf : Str ; -- infinitive verb complement
|
||||
-- subcl : Str} -- clause complement
|
||||
vComp : Str ;
|
||||
nObj : ObjectForm => Str ; -- may need diff form for imperative vs. declarative sentences
|
||||
} ;
|
||||
|
||||
baseVP : BaseVP = {
|
||||
adv,
|
||||
nObj,
|
||||
vComp = [] ;
|
||||
nObj = \\_ => []
|
||||
} ;
|
||||
|
||||
VerbPhrase : Type = BaseVerb ** Complement ** BaseVP ;
|
||||
@@ -338,7 +339,9 @@ oper
|
||||
useVc : Verb2 -> VPSlash = \v2 -> baseVP ** v2 ;
|
||||
|
||||
insertComp : VPSlash -> NounPhrase -> VerbPhrase = \v2,np -> useV v2 ** {
|
||||
nObj = np.s ! v2.c2 ++ v2.p2.s ! np.p
|
||||
nObj = table {
|
||||
DeclObj => np.s ! v2.c2 ++ v2.p2.s ! np.p ;
|
||||
ImpObj => np.s ! Object ++ v2.p2.s ! np.p } -- use 을/를 always for imperative
|
||||
} ;
|
||||
|
||||
insertAdv : VerbPhrase -> SS -> VerbPhrase = \vp,adv -> vp ** {adv = adv.s ++ vp.adv} ;
|
||||
@@ -374,7 +377,7 @@ oper
|
||||
WithConj => VStem p ;
|
||||
Statement st => VF st p } -- TODO: more tenses
|
||||
in np
|
||||
++ vp.nObj -- an object, not copula complement
|
||||
++ vp.nObj ! DeclObj -- an object, not copula complement
|
||||
++ vp.adv
|
||||
++ vp.s ! vf
|
||||
} ;
|
||||
@@ -382,7 +385,12 @@ oper
|
||||
--------------------------------------------------------------------------------
|
||||
-- linrefs
|
||||
|
||||
linVerb : Verb -> Str = \v -> v.s ! linVF ;
|
||||
linVP : VForm -> VerbPhrase -> Str = \vf,vp -> vp.nObj ++ vp.adv ++ vp.s ! vf ;
|
||||
linVerb : Verb -> Str = \v -> v.s ! VF Polite Pos ;
|
||||
linVP : VForm -> VerbPhrase -> Str = \vf,vp -> vp.nObj ! DeclObj ++ vp.adv ++ vp.s ! vf ;
|
||||
linImp : Polarity -> VerbPhrase -> Str = \pol,vp ->
|
||||
let vf : VForm = case pol of {
|
||||
Pos => VF Polite Pos ;
|
||||
Neg => VImpNeg }
|
||||
in vp.nObj ! ImpObj ++ vp.adv ++ vp.s ! vf ;
|
||||
linAP : AdjPhrase -> Str = \ap -> ap.compar ++ ap.s ! linVF ;
|
||||
}
|
||||
|
||||
@@ -29,13 +29,13 @@ lin
|
||||
-- : Temp -> Pol -> ClSlash -> SSlash ; -- (that) she had not seen
|
||||
UseSlash t p cls = {
|
||||
} ;
|
||||
|
||||
-}
|
||||
--2 Imperatives
|
||||
-- : VP -> Imp ;
|
||||
ImpVP vp = {s = \\num,pol => linVP (VImp num pol) Statement vp} ;
|
||||
ImpVP vp = {s = \\pol => linImp pol vp} ;
|
||||
|
||||
--2 Embedded sentences
|
||||
-}
|
||||
|
||||
-- : S -> SC ;
|
||||
EmbedS s = {s = s.s ! Subord ++ "것이"} ; -- TODO check subject case
|
||||
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
|
||||
-- LangEng: I am smaller than a cat
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (UseComp (CompAP (ComparA small_A (DetCN (DetQuant IndefArt NumSg) (UseN cat_N)))))))) NoVoc
|
||||
LangKor: 제가 고양이 &+ 보다 더 작아요
|
||||
LangKor: 제가 고양이 &+ 보다 더 작습니다
|
||||
|
||||
-- LangEng: I am a woman smaller than a cat
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (UseComp (CompCN (AdjCN (ComparA small_A (DetCN (DetQuant IndefArt NumSg) (UseN cat_N))) (UseN woman_N))))))) NoVoc
|
||||
LangKor: 제가 고양이 &+ 보다 더 작은 여자 &+ 예요
|
||||
LangKor: 제가 고양이 &+ 보다 더 작은 여자 &+ 입니다
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN cat_N)) (UseComp (CompAdv (PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN house_N)))))))) NoVoc
|
||||
LangEng: the cat is in the house
|
||||
LangKor: 고양이가 집 &+ 에서 있어요
|
||||
LangKor: 고양이가 집 &+ 에서 있습니다
|
||||
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN cat_N)) (UseComp (CompAdv (PrepNP behind_Prep (DetCN (DetQuant DefArt NumSg) (UseN house_N)))))))) NoVoc
|
||||
LangEng: the cat is behind the house
|
||||
LangKor: 고양이가 집 뒤에 있어요
|
||||
LangKor: 고양이가 집 뒤에 있습니다
|
||||
|
||||
86
src/korean/unittest/imperative.gftest
Normal file
86
src/korean/unittest/imperative.gftest
Normal file
@@ -0,0 +1,86 @@
|
||||
-- Imperative forms, positive and negative
|
||||
|
||||
-- Intransitive verbs, positive
|
||||
Lang: UttImpSg PPos (ImpVP (UseV come_V))
|
||||
LangEng: come
|
||||
LangKor: 와요
|
||||
|
||||
Lang: UttImpSg PPos (ImpVP (UseV go_V))
|
||||
LangEng: go
|
||||
LangKor: 가요
|
||||
|
||||
Lang: UttImpSg PPos (ImpVP (UseV laugh_V))
|
||||
LangEng: laugh
|
||||
LangKor: 웃어요
|
||||
|
||||
Lang: UttImpSg PPos (ImpVP (UseV sing_V))
|
||||
LangEng: sing
|
||||
LangKor: 노래해요
|
||||
|
||||
-- Intransitive verbs, negative
|
||||
Lang: UttImpSg PNeg (ImpVP (UseV come_V))
|
||||
LangEng: don't come
|
||||
LangKor: 오지 마새요
|
||||
|
||||
Lang: UttImpSg PNeg (ImpVP (UseV go_V))
|
||||
LangEng: don't go
|
||||
LangKor: 가지 마새요
|
||||
|
||||
Lang: UttImpSg PNeg (ImpVP (UseV laugh_V))
|
||||
LangEng: don't laugh
|
||||
LangKor: 웃지 마새요
|
||||
|
||||
Lang: UttImpSg PNeg (ImpVP (UseV sing_V))
|
||||
LangEng: don't sing
|
||||
LangKor: 노래하지 마새요
|
||||
|
||||
|
||||
-- Transitive verbs, positive
|
||||
Lang: UttImpSg PPos (ImpVP (ComplSlash (SlashV2a do_V2) something_NP))
|
||||
LangEng: do something
|
||||
LangKor: 무엇을 해요
|
||||
|
||||
Lang: UttImpSg PPos (ImpVP (ComplSlash (SlashV2a drink_V2) something_NP))
|
||||
LangEng: drink something
|
||||
LangKor: 무엇을 마셔요
|
||||
|
||||
Lang: UttImpSg PPos (ImpVP (ComplSlash (SlashV2a eat_V2) something_NP))
|
||||
LangEng: eat something
|
||||
LangKor: 무엇을 먹어요
|
||||
|
||||
Lang: UttImpSg PPos (ImpVP (ComplSlash (SlashV2a have_V2) something_NP))
|
||||
LangEng: have something
|
||||
LangKor: 무엇을 있어요
|
||||
|
||||
Lang: UttImpSg PPos (ImpVP (ComplSlash (SlashV2a like_V2) something_NP))
|
||||
LangEng: like something
|
||||
LangKor: 무엇을 좋아해요
|
||||
|
||||
Lang: UttImpSg PPos (ImpVP (ComplSlash (SlashV2a see_V2) something_NP))
|
||||
LangEng: see something
|
||||
LangKor: 무엇을 봐요
|
||||
|
||||
-- Transitive verbs, negative
|
||||
Lang: UttImpSg PNeg (ImpVP (ComplSlash (SlashV2a do_V2) something_NP))
|
||||
LangEng: don't do something
|
||||
LangKor: 무엇을 하지 마새요
|
||||
|
||||
Lang: UttImpSg PNeg (ImpVP (ComplSlash (SlashV2a drink_V2) something_NP))
|
||||
LangEng: don't drink something
|
||||
LangKor: 무엇을 마시지 마새요
|
||||
|
||||
Lang: UttImpSg PNeg (ImpVP (ComplSlash (SlashV2a eat_V2) something_NP))
|
||||
LangEng: don't eat something
|
||||
LangKor: 무엇을 먹지 마새요
|
||||
|
||||
Lang: UttImpSg PNeg (ImpVP (ComplSlash (SlashV2a have_V2) something_NP))
|
||||
LangEng: don't have something
|
||||
LangKor: 무엇을 없지 마새요
|
||||
|
||||
Lang: UttImpSg PNeg (ImpVP (ComplSlash (SlashV2a like_V2) something_NP))
|
||||
LangEng: don't like something
|
||||
LangKor: 무엇을 좋아하지 마새요
|
||||
|
||||
Lang: UttImpSg PNeg (ImpVP (ComplSlash (SlashV2a see_V2) something_NP))
|
||||
LangEng: don't see something
|
||||
LangKor: 무엇을 보지 마새요
|
||||
@@ -8,7 +8,7 @@
|
||||
Lang: eat_V2
|
||||
LangKor: 먹어요
|
||||
|
||||
Lang: UseComp (CompAP (PositA good_A))
|
||||
Lang: ImpVP (UseComp (CompAP (PositA good_A)))
|
||||
LangKor: 좋아요
|
||||
|
||||
-- Final ㅏ or ㅓ does not repeat itself
|
||||
@@ -16,7 +16,7 @@ Lang: go_V
|
||||
LangKor: 가요
|
||||
|
||||
-- Monosyllabic 으-final is dropped
|
||||
Lang: UseComp (CompAP (PositA big_A))
|
||||
Lang: ImpVP (UseComp (CompAP (PositA big_A)))
|
||||
LangKor: 커요
|
||||
|
||||
-- Final ㅗ + -아요 becomes ㅘ요
|
||||
|
||||
@@ -9,8 +9,8 @@ LangKor: 지금 우유를 마시는 고양이
|
||||
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a like_V2) (DetCN (DetQuant IndefArt NumPl) (RelCN (UseN cat_N) (ConjRS and_Conj (BaseRS (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (UseV laugh_V))) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a drink_V2) (MassNP (UseN milk_N))))))))))))) NoVoc
|
||||
LangEng: I like cats that laugh and that drink milk
|
||||
LangKor: 저는 웃 &+ 고 우유를 마시는 고양이를 좋아해요
|
||||
LangKor: 저는 웃 &+ 고 우유를 마시는 고양이 &+ 들을 좋아합니다
|
||||
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a like_V2) (DetCN (DetQuant IndefArt NumPl) (RelCN (UseN cat_N) (UseRCl (TTAnt TPres ASimul) PPos (RelVP IdRP (ComplSlash (SlashV2a like_V2) (UsePron i_Pron)))))))))) NoVoc
|
||||
LangEng: I like cats that like me
|
||||
LangKor: 저는 저를 좋아하는 고양이가 좋아요
|
||||
LangKor: 저는 저를 좋아하는 고양이 &+ 들을 좋아합니다
|
||||
|
||||
@@ -2,21 +2,21 @@
|
||||
|
||||
-- LangEng: I see a cat
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a see_V2) (DetCN (DetQuant IndefArt NumSg) (UseN cat_N)))))) NoVoc
|
||||
LangKor: 제가 고양이를 봐요
|
||||
LangKor: 제가 고양이를 봅니다
|
||||
|
||||
-- Double subject case
|
||||
-- LangEng: the cat is short
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN cat_N)) (UseComp (CompAP (PositA short_A)))))) NoVoc
|
||||
LangKor: 고양이가 키가 작아요
|
||||
LangKor: 고양이가 키가 작습니다
|
||||
|
||||
-- Topic as subject case
|
||||
|
||||
-- LangEng: I have a cat
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a have_V2) (DetCN (DetQuant IndefArt NumSg) (UseN cat_N)))))) NoVoc
|
||||
LangKor: 저는 고양이가 있어요
|
||||
LangKor: 저는 고양이가 있습니다
|
||||
|
||||
-- Topic + object
|
||||
|
||||
-- LangEng: I like cats
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron i_Pron) (ComplSlash (SlashV2a like_V2) (DetCN (DetQuant IndefArt NumPl) (UseN cat_N)))))) NoVoc
|
||||
LangKor: 저는 고양이를 좋아해요
|
||||
LangKor: 저는 고양이 &+ 들을 좋아합니다
|
||||
|
||||
@@ -120,11 +120,11 @@ concrete CatSom of Cat = CommonX - [Adv,IAdv] ** open ResSom, Prelude in {
|
||||
N3 = ResSom.Noun3 ;
|
||||
GN, SN, PN = ResSom.PNoun ;
|
||||
|
||||
Adv = ResSom.Adverb ; -- Preposition of an adverbial can merge with obligatory complements of the verb.
|
||||
Adv = ResSom.Adverb ; -- Adposition of an adverbial can merge with obligatory complements of the verb.
|
||||
|
||||
linref
|
||||
-- Cl = linCl ;
|
||||
VP = infVP ;
|
||||
CN = linCN ;
|
||||
Prep = \prep -> prep.s ! P3_Prep ++ prep.sii ++ prep.dhex ++ prep.hoostiisa ! Sg3 Masc ;
|
||||
Prep = \prep -> prep.s ! ZeroObj ++ prep.sii ++ prep.dhex ++ prep.hoostiisa ! Sg3 Masc ;
|
||||
}
|
||||
|
||||
@@ -4,415 +4,415 @@ concrete LexiconSom of Lexicon = CatSom **
|
||||
----
|
||||
-- A
|
||||
|
||||
lin add_V3 = mkV3 "dar" ku NoPrep ;
|
||||
-- lin airplane_N = mkN "" ;
|
||||
-- lin alas_Interj = mkInterj "" ;
|
||||
-- lin already_Adv = mkA "" ;
|
||||
lin add_V3 = mkV3 "dar" ku noPrep ;
|
||||
-- lin airplane_N = mkN [] ;
|
||||
-- lin alas_Interj = mkInterj [] ;
|
||||
-- lin already_Adv = mkA [] ;
|
||||
lin animal_N = mkN "xayawaan" ;
|
||||
lin answer_V2S = mkV2S "jawaab" ku ;
|
||||
-- lin apartment_N = mkN "" ;
|
||||
-- lin apple_N = mkN "" ;
|
||||
-- lin art_N = mkN "" ;
|
||||
-- lin ashes_N = mkN "" ;
|
||||
-- lin ask_V2Q = mkV2 "" ;
|
||||
-- lin apartment_N = mkN [] ;
|
||||
-- lin apple_N = mkN [] ;
|
||||
-- lin art_N = mkN [] ;
|
||||
-- lin ashes_N = mkN [] ;
|
||||
-- lin ask_V2Q = mkV2 [] ;
|
||||
|
||||
----
|
||||
-- B
|
||||
|
||||
-- lin baby_N = mkN "" ;
|
||||
-- lin back_N = mkN "" ;
|
||||
-- lin bad_A = mkA "" ;
|
||||
-- lin bank_N = mkN "" ;
|
||||
-- lin bark_N = mkN "" ;
|
||||
-- lin beautiful_A = mkA "" ;
|
||||
-- lin become_VA = mkVA "" ;
|
||||
-- lin beer_N = mkN "" ;
|
||||
-- lin beg_V2V = mkV2 "" ;
|
||||
-- lin belly_N = mkN "" ;
|
||||
-- lin baby_N = mkN [] ;
|
||||
-- lin back_N = mkN [] ;
|
||||
-- lin bad_A = mkA [] ;
|
||||
-- lin bank_N = mkN [] ;
|
||||
-- lin bark_N = mkN [] ;
|
||||
-- lin beautiful_A = mkA [] ;
|
||||
-- lin become_VA = mkVA [] ;
|
||||
-- lin beer_N = mkN [] ;
|
||||
-- lin beg_V2V = mkV2 [] ;
|
||||
-- lin belly_N = mkN [] ;
|
||||
lin big_A = mkA "weyn" ;
|
||||
-- lin bike_N = mkN "" ;
|
||||
-- lin bike_N = mkN [] ;
|
||||
lin bird_N = mkN "shimbir" fem ;
|
||||
-- lin bite_V2 = mkV2 "" ;
|
||||
-- lin bite_V2 = mkV2 [] ;
|
||||
lin black_A = mkA "madow" ;
|
||||
-- lin blood_N = mkN "" ;
|
||||
-- lin blow_V = mkV "" ;
|
||||
-- lin blue_A = mkA "" ;
|
||||
-- lin boat_N = mkN "" ;
|
||||
-- lin bone_N = mkN "" ;
|
||||
-- lin boot_N = mkN "" ;
|
||||
-- lin boss_N = mkN "" ;
|
||||
-- lin blood_N = mkN [] ;
|
||||
-- lin blow_V = mkV [] ;
|
||||
-- lin blue_A = mkA [] ;
|
||||
-- lin boat_N = mkN [] ;
|
||||
-- lin bone_N = mkN [] ;
|
||||
-- lin boot_N = mkN [] ;
|
||||
-- lin boss_N = mkN [] ;
|
||||
lin book_N = (mk2N "buug" "buugaag") ** {gda = MF GA TA} ;
|
||||
lin boy_N = mk2N "wiil" "wiilal" ;
|
||||
lin bread_N = mkN "rooti" ; --masc/fem
|
||||
-- lin break_V2 = mkV2 "" ;
|
||||
-- lin breast_N = mkN "" ;
|
||||
-- lin breathe_V = mkV "" ;
|
||||
-- lin broad_A = mkA "" ;
|
||||
-- lin brother_N2 = mkN "" ;
|
||||
-- lin brown_A = mkA "" ;
|
||||
-- lin burn_V = mkV "" ;
|
||||
-- lin butter_N = mkN "" ;
|
||||
-- lin break_V2 = mkV2 [] ;
|
||||
-- lin breast_N = mkN [] ;
|
||||
-- lin breathe_V = mkV [] ;
|
||||
-- lin broad_A = mkA [] ;
|
||||
-- lin brother_N2 = mkN [] ;
|
||||
-- lin brown_A = mkA [] ;
|
||||
-- lin burn_V = mkV [] ;
|
||||
-- lin butter_N = mkN [] ;
|
||||
lin buy_V2 = mkV2 "iibso" ;
|
||||
|
||||
----
|
||||
-- C
|
||||
|
||||
-- lin camera_N = mkN "" ;
|
||||
-- lin cap_N = mkN "" ;
|
||||
-- lin camera_N = mkN [] ;
|
||||
-- lin cap_N = mkN [] ;
|
||||
lin car_N = mkN "baabuur" masc ;
|
||||
-- lin carpet_N = mkN "" ;
|
||||
-- lin carpet_N = mkN [] ;
|
||||
lin cat_N = mkN "bisad" ;
|
||||
-- lin ceiling_N = mkN "" ;
|
||||
-- lin ceiling_N = mkN [] ;
|
||||
lin chair_N = mkN "kursi" ;
|
||||
-- lin cheese_N = mkN "" ;
|
||||
-- lin child_N = mkN "" ;
|
||||
-- lin church_N = mkN "" ;
|
||||
-- lin cheese_N = mkN [] ;
|
||||
-- lin child_N = mkN [] ;
|
||||
-- lin church_N = mkN [] ;
|
||||
lin city_N = mkN "magaalo" ;
|
||||
-- lin clean_A = mkA "" ;
|
||||
-- lin clever_A = mkA "" ;
|
||||
-- lin close_V2 = mkV2 "" ;
|
||||
-- lin cloud_N = mkN "" ;
|
||||
-- lin coat_N = mkN "" ;
|
||||
-- lin cold_A = mkA "" ;
|
||||
-- lin clean_A = mkA [] ;
|
||||
-- lin clever_A = mkA [] ;
|
||||
-- lin close_V2 = mkV2 [] ;
|
||||
-- lin cloud_N = mkN [] ;
|
||||
-- lin coat_N = mkN [] ;
|
||||
-- lin cold_A = mkA [] ;
|
||||
lin come_V = mkV "iman" ;
|
||||
-- lin computer_N = mkN "" ;
|
||||
-- lin correct_A = mkA "" ;
|
||||
-- lin count_V2 = mkV2 "" ;
|
||||
-- lin country_N = mkN "" ;
|
||||
-- lin cousin_N = mkN "" ;
|
||||
-- lin cow_N = mkN "" ;
|
||||
-- lin cut_V2 = mkV2 "" ;
|
||||
-- lin computer_N = mkN [] ;
|
||||
-- lin correct_A = mkA [] ;
|
||||
-- lin count_V2 = mkV2 [] ;
|
||||
-- lin country_N = mkN [] ;
|
||||
-- lin cousin_N = mkN [] ;
|
||||
-- lin cow_N = mkN [] ;
|
||||
-- lin cut_V2 = mkV2 [] ;
|
||||
--
|
||||
-- ----
|
||||
-- -- D
|
||||
--
|
||||
-- lin day_N = mkN "" ;
|
||||
-- lin die_V = mkV "" ;
|
||||
-- lin dig_V = mkV "" ;
|
||||
-- lin dirty_A = mkA "" ;
|
||||
-- lin distance_N3 = mkN "" ;
|
||||
-- lin day_N = mkN [] ;
|
||||
-- lin die_V = mkV [] ;
|
||||
-- lin dig_V = mkV [] ;
|
||||
-- lin dirty_A = mkA [] ;
|
||||
-- lin distance_N3 = mkN [] ;
|
||||
-- lin do_V2 = lin V2 egin_V ;
|
||||
-- lin doctor_N = mkN "" ;
|
||||
-- lin dog_N = mkN "" ;
|
||||
-- lin door_N = mkN "" ;
|
||||
-- lin doctor_N = mkN [] ;
|
||||
-- lin dog_N = mkN [] ;
|
||||
-- lin door_N = mkN [] ;
|
||||
lin drink_V2 = mkV2 "cab" ;
|
||||
-- lin dry_A = mkA "" ;
|
||||
-- lin dull_A = mkA "" ;
|
||||
-- lin dust_N = mkN "" ;
|
||||
-- lin dry_A = mkA [] ;
|
||||
-- lin dull_A = mkA [] ;
|
||||
-- lin dust_N = mkN [] ;
|
||||
|
||||
----
|
||||
-- E
|
||||
|
||||
-- lin ear_N = mkN "" ;
|
||||
-- lin earth_N = mkN "" ;
|
||||
-- lin ear_N = mkN [] ;
|
||||
-- lin earth_N = mkN [] ;
|
||||
lin eat_V2 = mkV2 "cun" ;
|
||||
-- lin egg_N = mkN "" ;
|
||||
-- lin empty_A = mkA "" ;
|
||||
-- lin enemy_N = mkN "" ;
|
||||
-- lin eye_N = mkN "" ;
|
||||
-- lin egg_N = mkN [] ;
|
||||
-- lin empty_A = mkA [] ;
|
||||
-- lin enemy_N = mkN [] ;
|
||||
-- lin eye_N = mkN [] ;
|
||||
|
||||
----
|
||||
-- F
|
||||
|
||||
-- lin factory_N = mkN "" ;
|
||||
-- lin fall_V = mkV "" ;
|
||||
-- lin far_Adv = mkA "" ;
|
||||
-- lin fat_N = mkN "" ;
|
||||
-- lin factory_N = mkN [] ;
|
||||
-- lin fall_V = mkV [] ;
|
||||
-- lin far_Adv = mkA [] ;
|
||||
-- lin fat_N = mkN [] ;
|
||||
lin father_N2 = mkN2 (shortPossN (mkN "aabbe")) ;
|
||||
-- lin fear_V2 = mkV2 "" ;
|
||||
-- lin fear_VS = mkVS "" ;
|
||||
-- lin feather_N = mkN "" ;
|
||||
-- lin fight_V2 = mkV2 "" ;
|
||||
-- lin find_V2 = mkV2 "" ;
|
||||
-- lin fingernail_N = mkN "" ;
|
||||
-- lin fire_N = mkN "" ;
|
||||
-- lin fish_N = mkN "" ;
|
||||
-- lin float_V = mkV "" ;
|
||||
-- lin floor_N = mkN "" ;
|
||||
-- lin flow_V = mkV "" ;
|
||||
-- lin flower_N = mkN "" ;
|
||||
-- lin fly_V = mkV "" ;
|
||||
-- lin fog_N = mkN "" ;
|
||||
-- lin foot_N = mkN "" ;
|
||||
-- lin forest_N = mkN "" ;
|
||||
-- lin forget_V2 = mkV2 "" ;
|
||||
-- lin freeze_V = mkV "" ;
|
||||
-- lin fridge_N = mkN "" ;
|
||||
-- lin friend_N = mkN "" ;
|
||||
-- lin fruit_N = mkN "" ;
|
||||
-- lin full_A = mkA "" ;
|
||||
-- lin fear_V2 = mkV2 [] ;
|
||||
-- lin fear_VS = mkVS [] ;
|
||||
-- lin feather_N = mkN [] ;
|
||||
-- lin fight_V2 = mkV2 [] ;
|
||||
-- lin find_V2 = mkV2 [] ;
|
||||
-- lin fingernail_N = mkN [] ;
|
||||
-- lin fire_N = mkN [] ;
|
||||
-- lin fish_N = mkN [] ;
|
||||
-- lin float_V = mkV [] ;
|
||||
-- lin floor_N = mkN [] ;
|
||||
-- lin flow_V = mkV [] ;
|
||||
-- lin flower_N = mkN [] ;
|
||||
-- lin fly_V = mkV [] ;
|
||||
-- lin fog_N = mkN [] ;
|
||||
-- lin foot_N = mkN [] ;
|
||||
-- lin forest_N = mkN [] ;
|
||||
-- lin forget_V2 = mkV2 [] ;
|
||||
-- lin freeze_V = mkV [] ;
|
||||
-- lin fridge_N = mkN [] ;
|
||||
-- lin friend_N = mkN [] ;
|
||||
-- lin fruit_N = mkN [] ;
|
||||
-- lin full_A = mkA [] ;
|
||||
-- --lin fun_AV
|
||||
|
||||
----
|
||||
-- G
|
||||
|
||||
-- lin garden_N = mkN "" ;
|
||||
-- lin garden_N = mkN [] ;
|
||||
lin girl_N = mkN "gabadh" "gabdho" fem ;
|
||||
lin give_V3 = mkV3 "sii" ;
|
||||
-- lin glove_N = mkN "" ;
|
||||
-- lin glove_N = mkN [] ;
|
||||
lin go_V = mkV "tag" ;
|
||||
-- lin gold_N = mkN "" ;
|
||||
-- lin good_A = mkA "" ;
|
||||
-- lin grammar_N = mkN "" ;
|
||||
-- lin grass_N = mkN "" ;
|
||||
-- lin green_A = mkA "" ;
|
||||
-- lin gold_N = mkN [] ;
|
||||
-- lin good_A = mkA [] ;
|
||||
-- lin grammar_N = mkN [] ;
|
||||
-- lin grass_N = mkN [] ;
|
||||
-- lin green_A = mkA [] ;
|
||||
|
||||
----
|
||||
-- H
|
||||
|
||||
-- lin hair_N = mkN "" ;
|
||||
-- lin hand_N = mkN "" ;
|
||||
-- lin harbour_N = mkN "" ;
|
||||
-- lin hat_N = mkN "" ;
|
||||
-- lin hate_V2 = mkV2 "" ;
|
||||
-- lin head_N = mkN "" ;
|
||||
-- lin hear_V2 = mkV2 "" ;
|
||||
-- lin heart_N = mkN "" ;
|
||||
-- lin heavy_A = mkA "" ;
|
||||
-- lin hill_N = mkN "" ;
|
||||
-- lin hit_V2 = mkV2 "" ;
|
||||
-- lin hold_V2 = mkV2 "" ;
|
||||
-- lin hope_VS = mkV "" ;
|
||||
-- lin horn_N = mkN "" ;
|
||||
-- lin horse_N = mkN "" ;
|
||||
-- lin hot_A = mkA "" ;
|
||||
-- lin hair_N = mkN [] ;
|
||||
-- lin hand_N = mkN [] ;
|
||||
-- lin harbour_N = mkN [] ;
|
||||
-- lin hat_N = mkN [] ;
|
||||
-- lin hate_V2 = mkV2 [] ;
|
||||
-- lin head_N = mkN [] ;
|
||||
-- lin hear_V2 = mkV2 [] ;
|
||||
-- lin heart_N = mkN [] ;
|
||||
-- lin heavy_A = mkA [] ;
|
||||
-- lin hill_N = mkN [] ;
|
||||
-- lin hit_V2 = mkV2 [] ;
|
||||
-- lin hold_V2 = mkV2 [] ;
|
||||
-- lin hope_VS = mkV [] ;
|
||||
-- lin horn_N = mkN [] ;
|
||||
-- lin horse_N = mkN [] ;
|
||||
-- lin hot_A = mkA [] ;
|
||||
lin house_N = mkN "guri" ;
|
||||
-- lin hunt_V2 = mkV2 "" ;
|
||||
-- lin husband_N = mkN "" ;
|
||||
-- lin hunt_V2 = mkV2 [] ;
|
||||
-- lin husband_N = mkN [] ;
|
||||
|
||||
--------
|
||||
-- I - K
|
||||
|
||||
-- lin ice_N = mkN "" ;
|
||||
-- lin industry_N = mkN "" ;
|
||||
-- lin iron_N = mkN "" ;
|
||||
-- lin ice_N = mkN [] ;
|
||||
-- lin industry_N = mkN [] ;
|
||||
-- lin iron_N = mkN [] ;
|
||||
-- lin john_PN = mkPN "Jon" ;
|
||||
lin jump_V = mkV "bood" ;
|
||||
-- lin kill_V2 = mkV2 "" ;
|
||||
-- lin king_N = mkN "" ;
|
||||
-- lin knee_N = mkN "" ;
|
||||
-- lin know_V2 = mkV2 "" ;
|
||||
-- lin know_VQ = mkVQ "" ;
|
||||
-- lin kill_V2 = mkV2 [] ;
|
||||
-- lin king_N = mkN [] ;
|
||||
-- lin knee_N = mkN [] ;
|
||||
-- lin know_V2 = mkV2 [] ;
|
||||
-- lin know_VQ = mkVQ [] ;
|
||||
lin know_VS = mkV "ogaan" ; -- copula ** {sii = "og"} ;
|
||||
|
||||
|
||||
----
|
||||
-- L
|
||||
|
||||
-- lin lake_N = mkN "" ;
|
||||
-- lin lamp_N = mkN "" ;
|
||||
-- lin lake_N = mkN [] ;
|
||||
-- lin lamp_N = mkN [] ;
|
||||
lin language_N = mkN "af" ;
|
||||
-- lin laugh_V = mkV "" ;
|
||||
-- lin leaf_N = mkN "" ;
|
||||
-- lin learn_V2 = mkV2 "" ;
|
||||
-- lin leather_N = mkN "" ;
|
||||
-- lin leave_V2 = mkV2 "" ;
|
||||
-- lin leg_N = mkN "" ;
|
||||
-- lin lie_V = mkV "" ;
|
||||
-- lin like_V2 = mkV2 "" ;
|
||||
-- lin listen_V2 = mkV2 "" ;
|
||||
-- lin laugh_V = mkV [] ;
|
||||
-- lin leaf_N = mkN [] ;
|
||||
-- lin learn_V2 = mkV2 [] ;
|
||||
-- lin leather_N = mkN [] ;
|
||||
-- lin leave_V2 = mkV2 [] ;
|
||||
-- lin leg_N = mkN [] ;
|
||||
-- lin lie_V = mkV [] ;
|
||||
-- lin like_V2 = mkV2 [] ;
|
||||
-- lin listen_V2 = mkV2 [] ;
|
||||
lin live_V = copula ** {sii = "nool"} ;
|
||||
-- lin liver_N = mkN "" ;
|
||||
-- lin long_A = mkA "" ;
|
||||
-- lin lose_V2 = mkV2 "" ;
|
||||
-- lin louse_N = mkN "" ;
|
||||
-- lin love_N = mkN "" ;
|
||||
-- lin love_V2 = mkV2 "" ;
|
||||
-- lin liver_N = mkN [] ;
|
||||
-- lin long_A = mkA [] ;
|
||||
-- lin lose_V2 = mkV2 [] ;
|
||||
-- lin louse_N = mkN [] ;
|
||||
-- lin love_N = mkN [] ;
|
||||
-- lin love_V2 = mkV2 [] ;
|
||||
|
||||
----
|
||||
-- M
|
||||
|
||||
lin man_N = (mk2N "nin" "niman") ** {gda = MM KA KA} ;
|
||||
-- lin married_A2 = mkA "" ;
|
||||
-- lin married_A2 = mkA [] ;
|
||||
lin meat_N = mkN "hilib" "hilbo" masc ;
|
||||
-- lin milk_N = mkN "" ;
|
||||
-- lin moon_N = mkN "" ;
|
||||
-- lin milk_N = mkN [] ;
|
||||
-- lin moon_N = mkN [] ;
|
||||
lin mother_N2 = mkN2 (shortPossN (mkN "hooyo")) ;
|
||||
-- lin mountain_N = mkN "" ;
|
||||
-- lin mouth_N = mkN "" ;
|
||||
-- lin music_N = mkN "" ;
|
||||
-- lin mountain_N = mkN [] ;
|
||||
-- lin mouth_N = mkN [] ;
|
||||
-- lin music_N = mkN [] ;
|
||||
|
||||
----
|
||||
-- N
|
||||
|
||||
lin name_N = mkN "magac" ;
|
||||
-- lin narrow_A = mkA "" ;
|
||||
-- lin near_A = mkA "" ;
|
||||
-- lin neck_N = mkN "" ;
|
||||
-- lin new_A = mkA "" ;
|
||||
-- lin newspaper_N = mkN "" ;
|
||||
-- lin night_N = mkN "" ;
|
||||
-- lin nose_N = mkN "" ;
|
||||
-- lin now_Adv = mkA "" ;
|
||||
-- lin number_N = mkN "" ;
|
||||
-- lin narrow_A = mkA [] ;
|
||||
-- lin near_A = mkA [] ;
|
||||
-- lin neck_N = mkN [] ;
|
||||
-- lin new_A = mkA [] ;
|
||||
-- lin newspaper_N = mkN [] ;
|
||||
-- lin night_N = mkN [] ;
|
||||
-- lin nose_N = mkN [] ;
|
||||
-- lin now_Adv = mkA [] ;
|
||||
-- lin number_N = mkN [] ;
|
||||
--
|
||||
-- --------
|
||||
-- -- O - P
|
||||
--
|
||||
--
|
||||
-- lin oil_N = mkN "" ;
|
||||
-- lin old_A = mkA "" ;
|
||||
-- lin oil_N = mkN [] ;
|
||||
-- lin old_A = mkA [] ;
|
||||
lin open_V2 = mkV2 "fur" ;
|
||||
lin paint_V2A = mkV2A "rinjiyee" ;
|
||||
-- lin paper_N = mkN "" ;
|
||||
-- lin paper_N = mkN [] ;
|
||||
-- lin paris_PN = mkPN "Paris" ;
|
||||
-- lin peace_N = mkN "" ;
|
||||
-- lin pen_N = mkN "" ;
|
||||
-- lin peace_N = mkN [] ;
|
||||
-- lin pen_N = mkN [] ;
|
||||
lin person_N = mkNoun "dad" "dadka" "dad" "dadka" Masc ;
|
||||
-- lin planet_N = mkN "" ;
|
||||
-- lin plastic_N = mkN "" ;
|
||||
-- lin play_V = mkV "" ;
|
||||
-- lin policeman_N = mkN "" ;
|
||||
-- lin priest_N = mkN "" ;
|
||||
-- lin pull_V2 = mkV2 "" ;
|
||||
-- lin push_V2 = mkV2 "" ;
|
||||
-- lin put_V2 = mkV2 "" ;
|
||||
-- lin planet_N = mkN [] ;
|
||||
-- lin plastic_N = mkN [] ;
|
||||
-- lin play_V = mkV [] ;
|
||||
-- lin policeman_N = mkN [] ;
|
||||
-- lin priest_N = mkN [] ;
|
||||
-- lin pull_V2 = mkV2 [] ;
|
||||
-- lin push_V2 = mkV2 [] ;
|
||||
-- lin put_V2 = mkV2 [] ;
|
||||
--
|
||||
-- --------
|
||||
-- -- Q - R
|
||||
--
|
||||
-- lin queen_N = mkN "" ;
|
||||
-- lin question_N = mkN "" ;
|
||||
-- lin radio_N = mkN "" ;
|
||||
-- lin rain_N = mkN "" ;
|
||||
-- lin rain_V0 = mkV "" ;
|
||||
-- lin queen_N = mkN [] ;
|
||||
-- lin question_N = mkN [] ;
|
||||
-- lin radio_N = mkN [] ;
|
||||
-- lin rain_N = mkN [] ;
|
||||
-- lin rain_V0 = mkV [] ;
|
||||
lin read_V2 = mkV2 "akhri" ;
|
||||
-- lin ready_A = mkA "" ;
|
||||
-- lin reason_N = mkN "" ;
|
||||
-- lin red_A = mkA "" ;
|
||||
-- lin religion_N = mkN "" ;
|
||||
-- lin restaurant_N = mkN "" ;
|
||||
-- lin river_N = mkN "" ;
|
||||
-- lin road_N = mkN "" ;
|
||||
-- lin rock_N = mkN "" ;
|
||||
-- lin roof_N = mkN "" ;
|
||||
-- lin root_N = mkN "" ;
|
||||
-- lin rope_N = mkN "" ;
|
||||
-- lin rotten_A = mkA "" ;
|
||||
-- lin round_A = mkA "" ;
|
||||
-- lin rub_V2 = mkV2 "" ;
|
||||
-- lin rubber_N = mkN "" ;
|
||||
-- lin rule_N = mkN "" ;
|
||||
-- lin run_V = mkV "" ;
|
||||
-- lin ready_A = mkA [] ;
|
||||
-- lin reason_N = mkN [] ;
|
||||
-- lin red_A = mkA [] ;
|
||||
-- lin religion_N = mkN [] ;
|
||||
-- lin restaurant_N = mkN [] ;
|
||||
-- lin river_N = mkN [] ;
|
||||
-- lin road_N = mkN [] ;
|
||||
-- lin rock_N = mkN [] ;
|
||||
-- lin roof_N = mkN [] ;
|
||||
-- lin root_N = mkN [] ;
|
||||
-- lin rope_N = mkN [] ;
|
||||
-- lin rotten_A = mkA [] ;
|
||||
-- lin round_A = mkA [] ;
|
||||
-- lin rub_V2 = mkV2 [] ;
|
||||
-- lin rubber_N = mkN [] ;
|
||||
-- lin rule_N = mkN [] ;
|
||||
-- lin run_V = mkV [] ;
|
||||
|
||||
----
|
||||
-- S
|
||||
|
||||
lin salt_N = mkN "cusbo" ;
|
||||
-- lin sand_N = mkN "" ;
|
||||
-- lin say_VS = mkVS "" ;
|
||||
-- lin school_N = mkN "" ;
|
||||
-- lin science_N = mkN "" ;
|
||||
-- lin scratch_V2 = mkV2 "" ;
|
||||
-- lin sand_N = mkN [] ;
|
||||
-- lin say_VS = mkVS [] ;
|
||||
-- lin school_N = mkN [] ;
|
||||
-- lin science_N = mkN [] ;
|
||||
-- lin scratch_V2 = mkV2 [] ;
|
||||
lin sea_N = mkN "bad" fem ;
|
||||
lin see_V2 = mkV2 "ark" ;
|
||||
-- lin seed_N = mkN "" ;
|
||||
-- lin seek_V2 = mkV2 "" ;
|
||||
-- lin sell_V3 = mkV3 "" ;
|
||||
-- lin send_V3 = mkV3 "" ;
|
||||
-- lin sew_V = mkV "" ;
|
||||
-- lin sharp_A = mkA "" ;
|
||||
lin see_V2 = mkV2 (mkV "arag" "arkaa") noPrep ;
|
||||
-- lin seed_N = mkN [] ;
|
||||
-- lin seek_V2 = mkV2 [] ;
|
||||
-- lin sell_V3 = mkV3 [] ;
|
||||
-- lin send_V3 = mkV3 [] ;
|
||||
-- lin sew_V = mkV [] ;
|
||||
-- lin sharp_A = mkA [] ;
|
||||
lin sheep_N = mkN "lax" fem ;
|
||||
-- lin ship_N = mkN "" ;
|
||||
-- lin shirt_N = mkN "" ;
|
||||
-- lin shoe_N = mkN "" ;
|
||||
-- lin shop_N = mkN "" ;
|
||||
-- lin short_A = mkA "" ;
|
||||
-- lin silver_N = mkN "" ;
|
||||
-- lin sing_V = mkV "" ;
|
||||
-- lin sister_N = mkN "" ;
|
||||
-- lin sit_V = mkV "" ;
|
||||
-- lin skin_N = mkN "" ;
|
||||
-- lin sky_N = mkN "" ;
|
||||
-- lin sleep_V = mkV "" ;
|
||||
-- lin ship_N = mkN [] ;
|
||||
-- lin shirt_N = mkN [] ;
|
||||
-- lin shoe_N = mkN [] ;
|
||||
-- lin shop_N = mkN [] ;
|
||||
-- lin short_A = mkA [] ;
|
||||
-- lin silver_N = mkN [] ;
|
||||
-- lin sing_V = mkV [] ;
|
||||
-- lin sister_N = mkN [] ;
|
||||
-- lin sit_V = mkV [] ;
|
||||
-- lin skin_N = mkN [] ;
|
||||
-- lin sky_N = mkN [] ;
|
||||
-- lin sleep_V = mkV [] ;
|
||||
lin small_A = mkA "yar" ;
|
||||
-- lin smell_V = mkV "" ;
|
||||
-- lin smoke_N = mkN "" ;
|
||||
-- lin smooth_A = mkA "" ;
|
||||
-- lin snake_N = mkN "" ;
|
||||
-- lin snow_N = mkN "" ;
|
||||
-- lin sock_N = mkN "" ;
|
||||
-- lin song_N = mkN "" ;
|
||||
-- lin smell_V = mkV [] ;
|
||||
-- lin smoke_N = mkN [] ;
|
||||
-- lin smooth_A = mkA [] ;
|
||||
-- lin snake_N = mkN [] ;
|
||||
-- lin snow_N = mkN [] ;
|
||||
-- lin sock_N = mkN [] ;
|
||||
-- lin song_N = mkN [] ;
|
||||
lin speak_V2 = mkV2 "hadlo" ;
|
||||
-- lin spit_V = mkV "" ;
|
||||
-- lin split_V2 = mkV2 "" ;
|
||||
-- lin squeeze_V2 = mkV2 "" ;
|
||||
-- lin stab_V2 = mkV2 "" ;
|
||||
-- lin stand_V = mkV "" ;
|
||||
-- lin star_N = mkN "" ;
|
||||
-- lin steel_N = mkN "" ;
|
||||
-- lin stick_N = mkN "" ;
|
||||
-- lin stone_N = mkN "" ;
|
||||
-- lin stop_V = mkV "" ;
|
||||
-- lin stove_N = mkN "" ;
|
||||
-- lin straight_A = mkA "" ;
|
||||
-- lin student_N = mkN "" ;
|
||||
-- lin stupid_A = mkA "" ;
|
||||
-- lin suck_V2 = mkV2 "" ;
|
||||
-- lin sun_N = mkN "" ;
|
||||
-- lin swell_V = mkV "" ;
|
||||
-- lin swim_V = mkV "" ;
|
||||
-- lin spit_V = mkV [] ;
|
||||
-- lin split_V2 = mkV2 [] ;
|
||||
-- lin squeeze_V2 = mkV2 [] ;
|
||||
-- lin stab_V2 = mkV2 [] ;
|
||||
-- lin stand_V = mkV [] ;
|
||||
-- lin star_N = mkN [] ;
|
||||
-- lin steel_N = mkN [] ;
|
||||
-- lin stick_N = mkN [] ;
|
||||
-- lin stone_N = mkN [] ;
|
||||
-- lin stop_V = mkV [] ;
|
||||
-- lin stove_N = mkN [] ;
|
||||
-- lin straight_A = mkA [] ;
|
||||
-- lin student_N = mkN [] ;
|
||||
-- lin stupid_A = mkA [] ;
|
||||
-- lin suck_V2 = mkV2 [] ;
|
||||
-- lin sun_N = mkN [] ;
|
||||
-- lin swell_V = mkV [] ;
|
||||
-- lin swim_V = mkV [] ;
|
||||
|
||||
----
|
||||
-- T
|
||||
|
||||
|
||||
-- lin table_N = mkN "" ;
|
||||
-- lin tail_N = mkN "" ;
|
||||
-- lin talk_V3 = mkV3 "" ;
|
||||
-- lin table_N = mkN [] ;
|
||||
-- lin tail_N = mkN [] ;
|
||||
-- lin talk_V3 = mkV3 [] ;
|
||||
lin teach_V2 = mkV2 "bar" ku ;
|
||||
lin teacher_N = mkN "macallin" ;
|
||||
-- lin television_N = mkN "" ;
|
||||
-- lin thick_A = mkA "" ;
|
||||
-- lin thin_A = mkA "" ;
|
||||
-- lin think_V = mkV "" ;
|
||||
-- lin throw_V2 = mkV2 "" ;
|
||||
-- lin tie_V2 = mkV2 "" ;
|
||||
-- lin today_Adv = mkA "" ;
|
||||
-- lin tongue_N = mkN "" ;
|
||||
-- lin tooth_N = mkN "" ;
|
||||
-- lin train_N = mkN "" ;
|
||||
-- lin travel_V = mkV "" ;
|
||||
-- lin tree_N = mkN "" ;
|
||||
-- lin turn_V = mkV "" ;
|
||||
-- lin television_N = mkN [] ;
|
||||
-- lin thick_A = mkA [] ;
|
||||
-- lin thin_A = mkA [] ;
|
||||
-- lin think_V = mkV [] ;
|
||||
-- lin throw_V2 = mkV2 [] ;
|
||||
-- lin tie_V2 = mkV2 [] ;
|
||||
-- lin today_Adv = mkA [] ;
|
||||
-- lin tongue_N = mkN [] ;
|
||||
-- lin tooth_N = mkN [] ;
|
||||
-- lin train_N = mkN [] ;
|
||||
-- lin travel_V = mkV [] ;
|
||||
-- lin tree_N = mkN [] ;
|
||||
-- lin turn_V = mkV [] ;
|
||||
|
||||
--------
|
||||
-- U - V
|
||||
|
||||
-- lin ugly_A = mkA "" ;
|
||||
-- lin uncertain_A = mkA "" ;
|
||||
-- lin understand_V2 = mkV2 "" ;
|
||||
-- lin university_N = mkN "" ;
|
||||
-- lin village_N = mkN "" ;
|
||||
-- lin vomit_V = mkV2 "" ;
|
||||
-- lin ugly_A = mkA [] ;
|
||||
-- lin uncertain_A = mkA [] ;
|
||||
-- lin understand_V2 = mkV2 [] ;
|
||||
-- lin university_N = mkN [] ;
|
||||
-- lin village_N = mkN [] ;
|
||||
-- lin vomit_V = mkV2 [] ;
|
||||
|
||||
--------
|
||||
-- W - Y
|
||||
|
||||
lin wait_V2 = mkV2 "sug" ;
|
||||
-- lin walk_V = mkV "" ;
|
||||
-- lin war_N = mkN "" ;
|
||||
-- lin warm_A = mkA "" ;
|
||||
-- lin wash_V2 = mkV2 "" ;
|
||||
-- lin watch_V2 = mkV2 "" ;
|
||||
lin walk_V = mkV "soco" "socday" ;
|
||||
-- lin war_N = mkN [] ;
|
||||
-- lin warm_A = mkA [] ;
|
||||
-- lin wash_V2 = mkV2 [] ;
|
||||
-- lin watch_V2 = mkV2 [] ;
|
||||
lin water_N = mkNoun "biyo" "biyaha" "biyo" "biyaha" Masc ; -- ?? gender
|
||||
-- lin wet_A = mkA "" ;
|
||||
-- lin wet_A = mkA [] ;
|
||||
lin white_A = mkA "cad" ;
|
||||
-- lin wide_A = mkA "" ;
|
||||
-- lin wife_N = mkN "" ;
|
||||
-- lin win_V2 = mkV2 "" ;
|
||||
-- lin wind_N = mkN "" ;
|
||||
-- lin window_N = mkN "" ;
|
||||
-- lin wine_N = mkN "" ;
|
||||
-- lin wing_N = mkN "" ;
|
||||
-- lin wipe_V2 = mkV2 "" ;
|
||||
-- lin wide_A = mkA [] ;
|
||||
-- lin wife_N = mkN [] ;
|
||||
-- lin win_V2 = mkV2 [] ;
|
||||
-- lin wind_N = mkN [] ;
|
||||
-- lin window_N = mkN [] ;
|
||||
-- lin wine_N = mkN [] ;
|
||||
-- lin wing_N = mkN [] ;
|
||||
-- lin wipe_V2 = mkV2 [] ;
|
||||
lin woman_N = mkN "naag" fem ;
|
||||
-- lin wonder_VQ = mkVQ "" ;
|
||||
-- lin wood_N = mkN "" ;
|
||||
-- lin worm_N = mkN "" ;
|
||||
-- lin write_V2 = mkV2 "" ;
|
||||
-- lin year_N = mkN "" ;
|
||||
-- lin yellow_A = mkA "" ;
|
||||
-- lin young_A = mkA "" ;
|
||||
-- lin wonder_VQ = mkVQ [] ;
|
||||
-- lin wood_N = mkN [] ;
|
||||
-- lin worm_N = mkN [] ;
|
||||
-- lin write_V2 = mkV2 [] ;
|
||||
-- lin year_N = mkN [] ;
|
||||
-- lin yellow_A = mkA [] ;
|
||||
-- lin young_A = mkA [] ;
|
||||
|
||||
}
|
||||
|
||||
@@ -25,6 +25,7 @@ oper
|
||||
masc : Gender ;
|
||||
fem : Gender ;
|
||||
|
||||
-- Export the adposition type with the more usual/mainstream name Preposition
|
||||
Preposition : Type ;
|
||||
ka : Preposition ;
|
||||
ku : Preposition ;
|
||||
@@ -141,7 +142,7 @@ oper
|
||||
mkAdv : Str -> Adv = \s -> lin Adv {
|
||||
berri = s ;
|
||||
c2 = noPrep ;
|
||||
np = {s = [] ; a = P3_Prep} ;
|
||||
np = {s = [] ; a = ZeroObj} ;
|
||||
sii,dhex,miscAdv = []
|
||||
} ;
|
||||
|
||||
@@ -172,12 +173,12 @@ oper
|
||||
masc = Masc ;
|
||||
fem = Fem ;
|
||||
|
||||
Preposition = ResSom.Preposition ;
|
||||
Preposition = ResSom.Adposition ;
|
||||
ka = ResSom.Ka ;
|
||||
ku = ResSom.Ku ;
|
||||
la = ResSom.La ;
|
||||
u = ResSom.U ;
|
||||
noPrep = ResSom.NoPrep ;
|
||||
noPrep = ResSom.NoAdp ;
|
||||
|
||||
VVForm = ResSom.VVForm ;
|
||||
infinitive = Infinitive ;
|
||||
@@ -213,30 +214,36 @@ oper
|
||||
|
||||
mkV = overload {
|
||||
mkV : (imp : Str) -> V = \v -> lin V (regV v) ;
|
||||
mkV : (imp,pl2,sg1 : Str) -> V = \i,p,s -> lin V (mkVerb i p s) ;
|
||||
mkV : (imp, sg1 : Str) -> V = \i,s1 -> lin V (reg2V i s1) ;
|
||||
mkV : (imp,sg1,sg2,pl2 : Str) -> V = \i,s1,_,_ -> lin V (reg2V i s1) ; -- TODO: 4-place constructor
|
||||
mkV : Str -> V -> V = \s,v -> lin V (prefixV s v)
|
||||
} ;
|
||||
|
||||
copula = ResSom.copula ;
|
||||
|
||||
regV : Str -> Verb = \s -> case s of {
|
||||
_ + #c + #c + "o" => cJoogso s ;
|
||||
_ + "o" => cQaado s ; ----
|
||||
_ + "i" => cKari s ;
|
||||
_ + "ee" => cYaree s ;
|
||||
_ => cSug s
|
||||
_ + #c + #c + "o" => mkVerb (cJoogso s) ;
|
||||
_ + "o" => mkVerb (cQaado s) ; ----
|
||||
_ + "i" => mkVerb (cKari s) ;
|
||||
_ + "ee" => mkVerb (cYaree s) ;
|
||||
_ => mkVerb (cSug s)
|
||||
} ;
|
||||
|
||||
reg2V : Str -> Str -> Verb = \arag,arkaa -> case arag of {
|
||||
_ + #c => mkVerb (cArag arag arkaa) ;
|
||||
_ => regV arag
|
||||
} ;
|
||||
|
||||
mkV2 = overload {
|
||||
mkV2 : Str -> V2 = \s -> lin V2 (regV s ** {c2 = noPrep}) ;
|
||||
mkV2 : Str -> Preposition -> V2 = \s,p -> lin V2 (regV s ** {c2 = p}) ;
|
||||
mkV2 : V -> Preposition -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
|
||||
mkV2 : Str -> Adposition -> V2 = \s,p -> lin V2 (regV s ** {c2 = p}) ;
|
||||
mkV2 : V -> Adposition -> V2 = \v,p -> lin V2 (v ** {c2 = p}) ;
|
||||
} ;
|
||||
|
||||
mkV3 = overload {
|
||||
mkV3 : (sug : Str) -> V3 = \s -> lin V3 (regV s ** {c2,c3 = noPrep}) ;
|
||||
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}) ;
|
||||
mkV3 : (sug : Str) -> (_,_ : Adposition) -> V3 = \s,p,q -> lin V3 (regV s ** {c2 = p ; c3 = q}) ;
|
||||
mkV3 : V -> (_,_ : Adposition) -> V2 = \v,p,q -> lin V3 (v ** {c2 = p ; c3 = q}) ;
|
||||
} ;
|
||||
|
||||
mkVV = overload {
|
||||
@@ -252,11 +259,11 @@ oper
|
||||
} ;
|
||||
|
||||
mkV2S = overload {
|
||||
mkV2S : Str -> V2S -- Predictable verb, no preposition.
|
||||
mkV2S : Str -> V2S -- Predictable verb, no Adposition.
|
||||
= \s -> lin V2S (regV s ** {c2 = noPrep}) ;
|
||||
mkV2S : Str -> Preposition -> V2S -- Predictable verb, preposition given as second argument.
|
||||
mkV2S : Str -> Adposition -> V2S -- Predictable verb, Adposition given as second argument.
|
||||
= \s,pr -> lin V2S (regV s ** {c2 = pr}) ;
|
||||
mkV2S : V -> Preposition -> V2S -- Unpredictable verb, preposition.
|
||||
mkV2S : V -> Adposition -> V2S -- Unpredictable verb, Adposition.
|
||||
= \v,pr -> lin V2S (v ** {c2 = pr})
|
||||
} ;
|
||||
|
||||
|
||||
@@ -136,15 +136,15 @@ param
|
||||
| Pl1 Inclusion
|
||||
| Pl2
|
||||
| Pl3
|
||||
| Impers ; -- Verb agrees with Sg3, but needed for preposition contraction
|
||||
| Impers ; -- Verb agrees with Sg3, but needed for contractions
|
||||
|
||||
PrepAgr =
|
||||
Sg1_Prep
|
||||
| Sg2_Prep
|
||||
| Pl1_Prep Inclusion
|
||||
| Pl2_Prep
|
||||
| Reflexive_Prep
|
||||
| P3_Prep ;
|
||||
AdpObjAgr =
|
||||
Sg1Obj
|
||||
| Sg2Obj
|
||||
| Pl1Obj Inclusion
|
||||
| Pl2Obj
|
||||
| ReflexiveObj
|
||||
| ZeroObj ;
|
||||
|
||||
State = Definite | Indefinite ;
|
||||
|
||||
@@ -164,27 +164,27 @@ oper
|
||||
Sg3 _ => Pl3 ;
|
||||
agr => agr } ;
|
||||
|
||||
agr2pagr : Agreement -> PrepAgr = \a -> case a of {
|
||||
Sg1 => Sg1_Prep ;
|
||||
Sg2 => Sg2_Prep ;
|
||||
Pl1 i => Pl1_Prep i ;
|
||||
Pl2 => Pl2_Prep ;
|
||||
_ => P3_Prep
|
||||
agr2objAgr : Agreement -> AdpObjAgr = \a -> case a of {
|
||||
Sg1 => Sg1Obj ;
|
||||
Sg2 => Sg2Obj ;
|
||||
Pl1 i => Pl1Obj i ;
|
||||
Pl2 => Pl2Obj ;
|
||||
_ => ZeroObj
|
||||
} ;
|
||||
|
||||
pagr2agr : PrepAgr -> Agreement = \a -> case a of {
|
||||
Sg1_Prep => Sg1 ;
|
||||
Sg2_Prep => Sg2 ;
|
||||
Pl1_Prep i => Pl1 i ;
|
||||
Pl2_Prep => Pl2 ;
|
||||
objAgr2agr : AdpObjAgr -> Agreement = \a -> case a of {
|
||||
Sg1Obj => Sg1 ;
|
||||
Sg2Obj => Sg2 ;
|
||||
Pl1Obj i => Pl1 i ;
|
||||
Pl2Obj => Pl2 ;
|
||||
_ => Sg3 Masc
|
||||
} ;
|
||||
|
||||
isP3 = overload {
|
||||
isP3 : Agreement -> Bool = \agr ->
|
||||
case agr of {Sg3 _ | Pl3 => True ; _ => False} ;
|
||||
isP3 : PrepAgr -> Bool = \agr ->
|
||||
case agr of {P3_Prep => True ; _ => False} ;
|
||||
isP3 : AdpObjAgr -> Bool = \agr ->
|
||||
case agr of {ZeroObj => True ; _ => False} ;
|
||||
} ;
|
||||
|
||||
|
||||
@@ -234,18 +234,20 @@ oper
|
||||
} ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Prepositions
|
||||
-- Adpositions
|
||||
|
||||
param
|
||||
Preposition = U | Ku | Ka | La | NoPrep ;
|
||||
Adposition = U | Ku | Ka | La | NoAdp ;
|
||||
|
||||
PrepCombination = Ugu | Uga | Ula | Kaga | Kula | Kala
|
||||
| Passive | Loo | Lagu | Laga | Lala -- TODO all combinations with impersonal la: Loogu, Looga, Loola, Lagaga, Lagula, Lagala
|
||||
| Single Preposition ;
|
||||
AdpCombination =
|
||||
Single Adposition -- 0-1 adpositions (0 = NoAdp)
|
||||
| ImpersSubj Adposition -- impersonal subject + 0-1 adpositions
|
||||
| Ugu | Uga | Ula
|
||||
| Kaga | Kula | Kala ;
|
||||
|
||||
oper
|
||||
combine : Preposition -> Preposition -> PrepCombination = \p1,p2 ->
|
||||
let oneWay : Preposition => Preposition => PrepCombination = \\x,y =>
|
||||
combine : Adposition -> Adposition -> AdpCombination = \p1,p2 ->
|
||||
let oneWay : Adposition => Adposition => AdpCombination = \\x,y =>
|
||||
case <x,y> of {
|
||||
<U,U|Ku> => Ugu ;
|
||||
<U,Ka> => Uga ;
|
||||
@@ -254,25 +256,16 @@ oper
|
||||
Ku|Ka> => Kaga ;
|
||||
<Ku,La> => Kula ;
|
||||
<Ka,La> => Kala ;
|
||||
<NoPrep,p> => Single p ;
|
||||
<p,NoPrep> => Single x ;
|
||||
<NoAdp,p> => Single p ;
|
||||
<p,NoAdp> => Single x ;
|
||||
<p,_> => Single x } -- for trying both ways
|
||||
in case oneWay ! p2 ! p1 of {
|
||||
Single _ => oneWay ! p1 ! p2 ;
|
||||
z => z } ;
|
||||
|
||||
combinePassive : Preposition -> PrepCombination = \p ->
|
||||
case p of {
|
||||
U => Loo ;
|
||||
Ku => Lagu ;
|
||||
Ka => Laga ;
|
||||
La => Lala ;
|
||||
_ => Passive
|
||||
} ;
|
||||
|
||||
isPassive : {c2 : PrepCombination} -> Bool = \vp ->
|
||||
isPassive : {c2 : AdpCombination} -> Bool = \vp ->
|
||||
case vp.c2 of {
|
||||
Passive | Lagu | Laga | Loo | Lala => True ;
|
||||
ImpersSubj _ => True ;
|
||||
_ => False
|
||||
} ;
|
||||
|
||||
|
||||
@@ -10,9 +10,9 @@ concrete QuestionSom of Question = CatSom ** open
|
||||
|
||||
-- : IP -> VP -> QCl ;
|
||||
QuestVP ip vp = -- TODO: if we want to contract baa + subj. pronoun, change ResSom.predVP
|
||||
let cls : ClSlash = predVP ip vp ;
|
||||
let cls : ResSom.ClSlash = predVP ip vp ;
|
||||
baan : Str = case ip.contractSTM of {True => "aan" ; _ => "baa aan"} ;
|
||||
cl : ClSlash = cls ** {
|
||||
cl : ResSom.ClSlash = cls ** {
|
||||
stm = modSTM "baa" baan cls.stm
|
||||
} ;
|
||||
in cl2qcl PolarQuestion (notB ip.contractSTM) cl ;
|
||||
@@ -33,9 +33,9 @@ concrete QuestionSom of Question = CatSom ** open
|
||||
|
||||
-- : IAdv -> Cl -> QCl ; -- why does John walk
|
||||
QuestIAdv iadv cls =
|
||||
let clRaw : ClSlash = insertIAdv iadv cls ;
|
||||
let clRaw : ResSom.ClSlash = insertIAdv iadv cls ;
|
||||
sbj = clRaw.subj ;
|
||||
cl : ClSlash = clRaw ** {
|
||||
cl : ResSom.ClSlash = clRaw ** {
|
||||
stm = \\clt,p => case <clt,p> of {
|
||||
-- IAdv is focused with baa, and subject comes after
|
||||
<_,Pos> => case iadv.contractSTM of {
|
||||
@@ -81,7 +81,7 @@ concrete QuestionSom of Question = CatSom ** open
|
||||
-- They can be modified with other adverbs.
|
||||
|
||||
-- : IAdv -> Adv -> IAdv ; -- where in Paris
|
||||
-- AdvIAdv iadv adv = iadv ** {s = iadv.s ++ adv.berri} ; -- TODO do we need PrepCombination in IAdv?
|
||||
-- AdvIAdv iadv adv = iadv ** {s = iadv.s ++ adv.berri} ; -- TODO do we need AdpCombination in IAdv?
|
||||
|
||||
-- Interrogative complements to copulas can be both adverbs and
|
||||
-- pronouns.
|
||||
@@ -117,13 +117,13 @@ oper
|
||||
} ;
|
||||
|
||||
-- Question clauses: subject pronoun not included, STM is
|
||||
cl2qcl : ClType -> Bool -> ClSlash -> Clause = \cltyp ->
|
||||
cl2qcl : ClType -> Bool -> ResSom.ClSlash -> Clause = \cltyp ->
|
||||
let hasSubjPron : Bool = False ;
|
||||
isRel : Bool = False ;
|
||||
in mkClause cltyp isRel hasSubjPron ;
|
||||
|
||||
-- Question clause with wh-word as object: subject pronoun is included
|
||||
cl2qclslash : Bool -> ClSlash -> Clause =
|
||||
cl2qclslash : Bool -> ResSom.ClSlash -> Clause =
|
||||
let hasSubjPron : Bool = True ;
|
||||
isRel : Bool = False ;
|
||||
in mkClause PolarQuestion isRel hasSubjPron ;
|
||||
|
||||
@@ -145,14 +145,14 @@ oper
|
||||
|
||||
NounPhrase : Type = BaseNP ** {s : Case => Str} ;
|
||||
|
||||
NPLite : Type = {s : Str ; a : PrepAgr} ; -- Used in Adv and as an object in VP
|
||||
NPLite : Type = {s : Str ; a : AdpObjAgr} ; -- Used in Adv and as an object in VP
|
||||
|
||||
nplite : NounPhrase -> NPLite = \np ->
|
||||
let pagr : PrepAgr = agr2pagr np.a in
|
||||
let objAgr : AdpObjAgr = agr2objAgr np.a in
|
||||
case <np.isPron,isP3 np.a> of {
|
||||
<False,_> => {s = np.s ! Abs ; a = pagr} ;
|
||||
-- <True,True> => {s = objpron np ! Abs ; a = pagr} ; -- uncomment if you want to add long object pronoun for 3rd person object
|
||||
_ => {s = np.empty ; a = pagr} } ; -- no long object for other pronouns
|
||||
<False,_> => {s = np.s ! Abs ; a = objAgr} ;
|
||||
-- <True,True> => {s = objpron np ! Abs ; a = objAgr} ; -- uncomment if you want to add long object pronoun for 3rd person object
|
||||
_ => {s = np.empty ; a = objAgr} } ; -- no long object for other pronouns
|
||||
|
||||
objpron : NounPhrase -> Case => Str = \np -> case np.isPron of {
|
||||
True => \\c => np.empty ++ (pronTable ! np.a).sp ! c ;
|
||||
@@ -250,19 +250,19 @@ oper
|
||||
poss = {s, short = quantTable "ood" ; sp = gnTable "ood" "ood" "uwood"}
|
||||
} ;
|
||||
Impers => {
|
||||
s = \\_ => [] ; -- the string `la' comes from Passive (: PrepCombination)
|
||||
s = \\_ => [] ; -- the string `la' comes from the AdpCombination value `ImpersSubj Adposition`
|
||||
a = Impers ; isPron = True ; sp = \\_ => "" ;
|
||||
empty = [] ; st = Definite ;
|
||||
poss = {s, short = quantTable "iis" ; sp = gnTable "iis" "iis" "uwiis"}
|
||||
}
|
||||
} ;
|
||||
|
||||
secondObject : PrepAgr => Str = table {
|
||||
Sg1_Prep => "kay" ;
|
||||
Sg2_Prep => "kaa" ;
|
||||
Pl1_Prep Excl => "kayo" ;
|
||||
Pl1_Prep Incl => "keen" ;
|
||||
Pl2_Prep => "kiin" ;
|
||||
secondObject : AdpObjAgr => Str = table {
|
||||
Sg1Obj => "kay" ;
|
||||
Sg2Obj => "kaa" ;
|
||||
Pl1Obj Excl => "kayo" ;
|
||||
Pl1Obj Incl => "keen" ;
|
||||
Pl2Obj => "kiin" ;
|
||||
_ => []
|
||||
} ;
|
||||
|
||||
@@ -350,30 +350,30 @@ oper
|
||||
} ;
|
||||
|
||||
--------------------------------------------------------------------------------
|
||||
-- Prepositions
|
||||
-- Adpositions
|
||||
|
||||
Prep : Type = {
|
||||
s : PrepAgr => Str ;
|
||||
c2 : Preposition ;
|
||||
s : AdpObjAgr => Str ;
|
||||
c2 : Adposition ;
|
||||
isPoss : Bool ;
|
||||
berri, sii, dhex : Str ;
|
||||
hoostiisa : Agreement => Str } ;
|
||||
|
||||
mkPrep : (x1,_,_,_,_,x6 : Str) -> {s : PrepAgr => Str} = \ku,ii,kuu,noo,idiin,isku -> {
|
||||
mkPrep : (x1,_,_,_,_,x6 : Str) -> {s : AdpObjAgr => Str} = \ku,ii,kuu,noo,idiin,isku -> {
|
||||
s = table {
|
||||
P3_Prep => ku ;
|
||||
Sg1_Prep => ii ;
|
||||
Sg2_Prep => kuu ;
|
||||
Pl2_Prep => idiin ;
|
||||
Pl1_Prep Excl => noo ;
|
||||
Pl1_Prep Incl => "i" + noo ;
|
||||
Reflexive_Prep => isku
|
||||
ZeroObj => ku ;
|
||||
Sg1Obj => ii ;
|
||||
Sg2Obj => kuu ;
|
||||
Pl2Obj => idiin ;
|
||||
Pl1Obj Excl => noo ;
|
||||
Pl1Obj Incl => "i" + noo ;
|
||||
ReflexiveObj => isku
|
||||
}
|
||||
} ;
|
||||
prep : Preposition -> {s : PrepAgr => Str ; c2 : Preposition} = \p ->
|
||||
prep : Adposition -> {s : AdpObjAgr => Str ; c2 : Adposition} = \p ->
|
||||
prepTable ! p ** {c2 = p} ;
|
||||
|
||||
prepTable : Preposition => {s : PrepAgr => Str} = table {
|
||||
prepTable : Adposition => {s : AdpObjAgr => Str} = table {
|
||||
Ku => mkPrep "ku" "igu" "kugu" "nagu" "idinku" "isku" ;
|
||||
Ka => mkPrep "ka" "iga" "kaa" "naga" "idinka" "iska" ;
|
||||
La => mkPrep "la" "ila" "kula" "nala" "idinla" "isla" ;
|
||||
@@ -381,45 +381,68 @@ oper
|
||||
_ => mkPrep [] "i" "ku" "na" "idin" "is"
|
||||
} ;
|
||||
|
||||
prepCombTable : PrepAgr => PrepCombination => Str = table {
|
||||
Sg1_Prep => table {
|
||||
allContractions : AdpObjAgr => AdpCombination => Str = table {
|
||||
Sg1Obj => table {
|
||||
Ugu => "iigu" ; Uga => "iiga" ; Ula => "iila" ;
|
||||
Kaga => "igaga" ; Kula => "igula" ; Kala => "igala" ;
|
||||
Passive => "la i" ; Loo => "la ii" ; Lala => "la ila" ;
|
||||
Lagu => "laygu" ; Laga => "layga" ;
|
||||
Single p => (prepTable ! p).s ! Sg1_Prep } ;
|
||||
Sg2_Prep => table { Ugu => "kuugu" ; Uga => "kaaga" ; Ula => "kuula" ;
|
||||
ImpersSubj NoAdp => "lay" ; -- alt. "la i"
|
||||
ImpersSubj U => "la ii" ;
|
||||
ImpersSubj La => "layla" ; -- alt. "la ila"
|
||||
ImpersSubj Ku => "laygu" ; -- alt. "la igu"
|
||||
ImpersSubj Ka => "layga" ; -- alt. "la iga"
|
||||
Single p => (prepTable ! p).s ! Sg1Obj } ;
|
||||
Sg2Obj => table {
|
||||
Ugu => "kuugu" ; Uga => "kaaga" ; Ula => "kuula" ;
|
||||
Kaga => "kaaga" ; Kula => "kugula" ; Kala => "kaala" ;
|
||||
Passive => "lagu" ; Loo => "laguu" ; Lala => "lagula" ;
|
||||
Lagu => "lagugu" ; Laga => "lagaa" ;
|
||||
Single p => (prepTable ! p).s ! Sg2_Prep } ;
|
||||
Pl1_Prep Excl =>
|
||||
ImpersSubj NoAdp => "lagu" ; -- Lagu 1: ku = Sg2Obj
|
||||
ImpersSubj U => "laguu" ;
|
||||
ImpersSubj La => "lagula" ;
|
||||
ImpersSubj Ku => "lagugu" ;
|
||||
ImpersSubj Ka => "lagaa" ;
|
||||
Single p => (prepTable ! p).s ! Sg2Obj } ;
|
||||
Pl1Obj Excl =>
|
||||
table { Ugu => "noogu" ; Uga => "nooga" ; Ula => "noola" ;
|
||||
Kaga => "nagaga" ; Kula => "nagula" ; Kala => "nagala" ;
|
||||
Passive => "nala" ; Loo => "???" ; Lala => "???" ;
|
||||
Lagu => "nalagu" ; Laga => "nalaga" ;
|
||||
Single p => (prepTable ! p).s ! Pl1_Prep Excl } ;
|
||||
Pl1_Prep Incl =>
|
||||
ImpersSubj NoAdp => "nala" ;
|
||||
ImpersSubj U => "naloo" ; -- alt. "lanoo"
|
||||
ImpersSubj La => "nalala" ; -- alt. "lanala"
|
||||
ImpersSubj Ku => "nalagu" ; -- alt. "lanagu"
|
||||
ImpersSubj Ka => "nalaga" ; -- alt. "lanaga"
|
||||
Single p => (prepTable ! p).s ! Pl1Obj Excl } ;
|
||||
Pl1Obj Incl =>
|
||||
table { Ugu => "inoogu" ; Uga => "inooga" ; Ula => "inoola" ;
|
||||
Kaga => "inagaga" ; Kula => "inagula" ; Kala => "inagala" ;
|
||||
Passive => "inala" ; Loo => "???" ; Lala => "???" ;
|
||||
Lagu => "inalagu" ; Laga => "inalaga" ;
|
||||
Single p => (prepTable ! p).s ! Pl1_Prep Incl } ;
|
||||
Pl2_Prep => table { Ugu => "idiinku" ; Uga => "idiinka" ; Ula => "idiinla" ;
|
||||
ImpersSubj NoAdp => "inala" ;
|
||||
ImpersSubj U => "laynoo" ; -- alt. "la inoo" ;
|
||||
ImpersSubj La => "laynala" ; -- alt. "la inala" ;
|
||||
ImpersSubj Ku => "laynagu" ; -- alt. "la inagu" ;
|
||||
ImpersSubj Ka => "laynaga" ; -- alt. "la inaga" ;
|
||||
Single p => (prepTable ! p).s ! Pl1Obj Incl } ;
|
||||
Pl2Obj =>
|
||||
table { Ugu => "idiinku" ; Uga => "idiinka" ; Ula => "idiinla" ;
|
||||
Kaga => "idinkaga" ; Kula => "idinkula" ; Kala => "idinkala" ;
|
||||
Passive => "laydin" ; Loo => "laydiin" ; Lala => "laydinla" ;
|
||||
Lagu => "laydinku" ; Laga => "laydinka" ;
|
||||
Single p => (prepTable ! p).s ! Pl2_Prep } ;
|
||||
Reflexive_Prep => -- TODO check every form
|
||||
table { Ugu => "isugu" ; Uga => "isuga" ; Ula => "isula" ;
|
||||
Kaga => "iskaga" ; Kula => "iskula" ; Kala => "iskala" ;
|
||||
Passive => "lays" ; Loo => "???" ; Lala => "???" ;
|
||||
Lagu => "laysku" ; Laga => "layska" ;
|
||||
Single p => (prepTable ! p).s ! Reflexive_Prep } ;
|
||||
ImpersSubj NoAdp => "laydin" ;
|
||||
ImpersSubj U => "laydiin" ; -- alt. "la idiin"
|
||||
ImpersSubj La => "laydinla" ; -- alt. "la idinla"
|
||||
ImpersSubj Ku => "laydinku" ; -- alt. "la idinku"
|
||||
ImpersSubj Ka => "laydinka" ; -- alt. "la idinka"
|
||||
Single p => (prepTable ! p).s ! Pl2Obj } ;
|
||||
ReflexiveObj =>
|
||||
table { Ugu => "isugu" ; Uga => "isaga" ;
|
||||
Ula => "isula" ; Kaga => "iskaga" ; Kula => "iskula" ; Kala => "iskala" ;
|
||||
ImpersSubj NoAdp => "lays" ;
|
||||
ImpersSubj U => "laysu" ; -- alt. "la isu"
|
||||
ImpersSubj La => "laysla" ; -- alt. "la isla"
|
||||
ImpersSubj Ku => "laysku" ; -- alt. "la isku"
|
||||
ImpersSubj Ka => "layska" ; -- alt. "la iska"
|
||||
Single p => (prepTable ! p).s ! ReflexiveObj } ;
|
||||
a => table { Ugu => "ugu" ; Uga => "uga" ; Ula => "ula" ;
|
||||
Kaga => "kaga" ; Kula => "kula" ; Kala => "kala" ;
|
||||
Passive => "la" ; Loo => "loo" ; Lala => "lala" ;
|
||||
Lagu => "lagu" ; Laga => "laga" ;
|
||||
ImpersSubj NoAdp => "la" ;
|
||||
ImpersSubj U => "loo" ;
|
||||
ImpersSubj La => "lala" ;
|
||||
ImpersSubj Ku => "lagu" ; -- Lagu 2: ku = Adp
|
||||
ImpersSubj Ka => "laga" ;
|
||||
Single p => (prepTable ! p).s ! a }
|
||||
} ;
|
||||
|
||||
@@ -429,7 +452,7 @@ 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).
|
||||
|
||||
Adjective : Type = {s : AForm => Str} ;
|
||||
Adjective2 : Type = Adjective ** {c2 : Preposition} ;
|
||||
Adjective2 : Type = Adjective ** {c2 : Adposition} ;
|
||||
|
||||
duplA : Str -> Adjective = \yar ->
|
||||
let yaryar = duplicate yar
|
||||
@@ -474,107 +497,80 @@ oper
|
||||
dhex : Str ; -- closed class of adverbials: hoos, kor, dul, dhex, …
|
||||
isCopula : Bool ;
|
||||
} ;
|
||||
Verb2 : Type = Verb ** {c2 : Preposition} ;
|
||||
Verb3 : Type = Verb2 ** {c3 : Preposition} ;
|
||||
Verb2 : Type = Verb ** {c2 : Adposition} ;
|
||||
Verb3 : Type = Verb2 ** {c3 : Adposition} ;
|
||||
|
||||
VV : Type = Verb ** {vvtype : VVForm} ;
|
||||
|
||||
-- Saeed page 79:
|
||||
-- "… the reference form is the imperative singular form
|
||||
-- since it corresponds to the form of the basic root."
|
||||
mkVerb : (imperative,sg1,pl2 : Str) -> Verb = \qaado,qaat,ark ->
|
||||
let stems : {p1 : Str ; p2 : Str} = case ark of {
|
||||
a + r@#c + k@#c -- two consonants need a vowel in between
|
||||
=> <ark + "i", a + r + a + voiced k> ;
|
||||
_ + #c -- if the pl2 root ends in consonant, infinitive needs a vowel
|
||||
=> <ark + "i", ark> ;
|
||||
yar + "ee" -- double e turns into ey
|
||||
=> <ark + "n", yar + "ey"> ;
|
||||
_ => <ark + "n", ark> -- no changes, just add n for infinitive
|
||||
} ;
|
||||
arki = stems.p1 ;
|
||||
arag = stems.p2 ;
|
||||
arkin = case last arki of { -- The negative past tense ends in n:
|
||||
"n" => arki ; -- if infinitive ends in n, no change;
|
||||
_ => arki + "n" } ; -- otherwise add n.
|
||||
|
||||
VerbRoots8 : Type = {imper,sg1stem,sg2stem,pl1stem,progr,inf,negpast,impernegpl : Str} ;
|
||||
|
||||
progr : Str = case qaat of { -- Progressive
|
||||
_ + "eey" => stems.p2 + "nay" ; -- bireey -> bireynay
|
||||
_ + ("y"|"n") => init qaat + "nay" ; -- akhriy -> akhrinay ; gashad -> gashanay
|
||||
_ + #v + "t" => qaat + "ay" ;
|
||||
_ + #c + "t" => init qaat + "anay" ;
|
||||
_ => qaat + "ay" } ;
|
||||
|
||||
-- Some predictable sound changes
|
||||
t : Str = case arag of { -- kari+seen, bixi noq+deen, (sug|joogsa|qaada)+teen,
|
||||
_ + ("i"|"y") => "s" ; -- t changes into s in front of i/y
|
||||
_ + ("x"|"q"|"c") => "d" ; -- t changes into d in front of x/q/c
|
||||
_ => "t" } ;
|
||||
ay : Str = case ark of {
|
||||
_ + ("i"|"e") => "ey" ;
|
||||
_ => "ay" } ;
|
||||
n : Str = case arag of {
|
||||
_ + #v => "nn" ; -- n duplicates after vowel
|
||||
_ + "r" => "r" ; -- Saeed p. 35: agreement marker n (1PL)
|
||||
_ + "l" => "l" ; -- assimilates to stem final r or.
|
||||
_ => "n" } ;
|
||||
an : Str = case qaado of {
|
||||
_ + "o" => "an" ; -- Allomorph for imperatives
|
||||
_ => "in" } ;
|
||||
|
||||
in { s = table {
|
||||
mkVerb : VerbRoots8 -> Verb = \vr ->
|
||||
let arag : Str = vr.imper ;
|
||||
qaat : Str = vr.sg1stem ; -- +aa -- hayst, boogd, joogsad, bilaab, ark, akhriy,
|
||||
hadash : Str = vr.sg2stem ; -- +aa -- haysat, booqat, joogsat, bilowd, aragt, akhris,
|
||||
qaadann : Str = vr.pl1stem ; -- +aa --
|
||||
arki : Str = vr.inf ;
|
||||
arkin : Str = vr.negpast ;
|
||||
qaada : Str = init vr.negpast ; -- TODO: is this correct? is 2sg neg imperative same as negative past root?
|
||||
ay : Str = case arag of {
|
||||
_ + ("i"|"e") => "ey" ;
|
||||
_ => "ay" } ;
|
||||
in {
|
||||
s = table {
|
||||
VPres Simple Sg1_Sg3Masc pol
|
||||
=> qaat + if_then_Pol pol "aa" "o" ;
|
||||
VPres Simple Sg2_Sg3Fem pol
|
||||
=> arag + t + if_then_Pol pol "aa" "o" ;
|
||||
VPres Simple Pl1_ pol => arag + n + if_then_Pol pol "aa" "o" ;
|
||||
VPres Simple Pl2_ pol => arag + t + "aan" ;
|
||||
VPres Simple Pl3_ pol => qaat + "aan" ;
|
||||
=> hadash + if_then_Pol pol "aa" "o" ;
|
||||
VPres Simple Pl1_ pol => qaadann + if_then_Pol pol "aa" "o" ;
|
||||
VPres Simple Pl2_ pol => hadash + "aan" ;
|
||||
VPres Simple Pl3_ pol => qaat + "aan" ;
|
||||
|
||||
VPres Progressive Sg1_Sg3Masc pol
|
||||
=> progr + if_then_Pol pol "aa" "o" ;
|
||||
=> vr.progr + if_then_Pol pol "aa" "o" ;
|
||||
VPres Progressive Sg2_Sg3Fem pol
|
||||
=> progr + if_then_Pol pol "saa" "so" ;
|
||||
=> vr.progr + if_then_Pol pol "saa" "so" ;
|
||||
VPres Progressive Pl1_ pol
|
||||
=> progr + if_then_Pol pol "naa" "no" ;
|
||||
VPres Progressive Pl2_ pol => progr + "saan" ;
|
||||
VPres Progressive Pl3_ pol => progr + "aan" ;
|
||||
=> vr.progr + if_then_Pol pol "naa" "no" ;
|
||||
VPres Progressive Pl2_ pol => vr.progr + "saan" ;
|
||||
VPres Progressive Pl3_ pol => vr.progr + "aan" ;
|
||||
|
||||
VPast Simple Sg1_Sg3Masc
|
||||
=> qaat + ay ;
|
||||
VPast Simple Sg2_Sg3Fem => arag + t + ay ; -- t, d or s
|
||||
VPast Simple Pl1_ => arag + n + ay ;
|
||||
VPast Simple Pl2_ => arag + t + "een" ; -- t, d or s
|
||||
VPast Simple Pl3_ => qaat + "een" ;
|
||||
=> qaat + ay ;
|
||||
VPast Simple Sg2_Sg3Fem => hadash + ay ;
|
||||
VPast Simple Pl1_ => qaadann + ay ;
|
||||
VPast Simple Pl2_ => hadash + "een" ;
|
||||
VPast Simple Pl3_ => qaat + "een" ;
|
||||
|
||||
VPast Progressive Sg1_Sg3Masc
|
||||
=> progr + "ey" ;
|
||||
VPast Progressive Sg2_Sg3Fem => progr + "sey" ;
|
||||
VPast Progressive Pl1_ => progr + "ney" ;
|
||||
VPast Progressive Pl2_ => progr + "seen" ;
|
||||
VPast Progressive Pl3_ => progr + "een" ;
|
||||
VPast Progressive Sg1_Sg3Masc => vr.progr + "ey" ;
|
||||
VPast Progressive Sg2_Sg3Fem => vr.progr + "sey" ;
|
||||
VPast Progressive Pl1_ => vr.progr + "ney" ;
|
||||
VPast Progressive Pl2_ => vr.progr + "seen" ;
|
||||
VPast Progressive Pl3_ => vr.progr + "een" ;
|
||||
|
||||
VNegPast Simple => arkin ;
|
||||
VNegPast Progressive => progr + "n" ;
|
||||
VNegPast Progressive => vr.progr + "n" ;
|
||||
|
||||
-- TODO check conjugations 2 and 3
|
||||
VNegCond PlInv => arag + n + "een" ;
|
||||
VNegCond SgMasc => qaat + "een" ; -- for most verbs same as VPast Simple Pl3_
|
||||
VNegCond SgFem => arag + t + "een" ; -- for most verbs same as VPast Simple Pl2_
|
||||
VNegCond SgMasc => qaat + "een" ; -- for most verbs same as VPast Simple Pl3_
|
||||
VNegCond SgFem => hadash + "een" ; -- for most verbs same as VPast Simple Pl2_
|
||||
VNegCond PlInv => qaadann + "een" ; --
|
||||
|
||||
VImp Sg Pos => arag ;
|
||||
VImp Pl Pos => qaat + "a" ;
|
||||
VImp Sg Neg => arag + an ;
|
||||
VImp Pl Neg => qaat + "ina" ;
|
||||
VImp Sg Neg => qaada + "n" ;
|
||||
VImp Pl Neg => vr.impernegpl ;
|
||||
|
||||
VInf => arki ;
|
||||
VRel SgMasc => qaat + "a" ;
|
||||
VRel SgFem => arag + t + "a" ;
|
||||
VRel PlInv => arag + "na" ;
|
||||
VRel SgFem => hadash + "a" ;
|
||||
VRel PlInv => qaadann + "a" ;
|
||||
VRelNeg => qaat + "o" -- TODO check
|
||||
|
||||
} ;
|
||||
} ;
|
||||
sii, dhex = [] ;
|
||||
isCopula = False ;
|
||||
} ;
|
||||
@@ -582,33 +578,101 @@ oper
|
||||
-------------------------
|
||||
-- Regular verb paradigms
|
||||
|
||||
cSug, cKari, cYaree, cJoogso, cQaado : Str -> Verb ;
|
||||
cSug, cBilaab, cKari, cYaree, cHayso, cJoogso, cQaado : Str -> VerbRoots8 ;
|
||||
cArag : (arag,arkaa : Str) -> VerbRoots8 ;
|
||||
|
||||
-- 1: Root verbs with no lexical affixes, e.g. sug TR 'wait for', kar INTR 'boil, cook';
|
||||
-- NB. imperative unable to distinguish whether stem consonant is K or G: sug~sugaa vs. bug~bukaa
|
||||
cSug sug =
|
||||
let cabb : Str = case sug of {
|
||||
_ + "b" => sug + "b" ; -- TODO: more duplication patterns
|
||||
_ => sug }
|
||||
in mkVerb sug cabb sug ;
|
||||
ca + "b" => ca + "bb" ; -- TODO: more duplication patterns
|
||||
_ => sug } ;
|
||||
in cArag sug (cabb+"aa") ;
|
||||
|
||||
-- Imperative only cannot distinguish whether the vowel is epenthetic, and whether stem consonant is G/K or N/M
|
||||
cArag arag arkaa = -- analogously: bug~bukaa, tartan~tartamaa
|
||||
let ark : Str = init (init arkaa) ;
|
||||
n : Str = case arag of {
|
||||
_ + #v => "nn" ; -- n duplicates after vowel
|
||||
_ + "r" => "r" ; -- Saeed p. 35: agreement marker n (1PL)
|
||||
_ + "l" => "l" ; -- assimilates to stem final r or.
|
||||
_ => "n" } ;
|
||||
t : Str = case arag of { -- kari+saa, noq+daa, (sug|joogsa|qaada)+taa, hadh+aa
|
||||
_ + ("x"|"q"|"c") => "d" ; -- t changes into d after x/q/c
|
||||
_ + "dh" => [] ; -- duplicates after dh, but not written
|
||||
_ => "t" } ;
|
||||
hadash : Str = case arag of {
|
||||
hada + "l" => hada + "sh" ;
|
||||
_ => arag + t
|
||||
} ;
|
||||
|
||||
in { imper = arag ;
|
||||
sg1stem = ark ;
|
||||
sg2stem = hadash ;
|
||||
pl1stem = arag + n ;
|
||||
inf = ark + "i" ;
|
||||
progr = ark + "ay" ;
|
||||
negpast = ark + "in" ;
|
||||
impernegpl = ark + "ina" } ;
|
||||
|
||||
|
||||
|
||||
-- Predictable stem alterations: aab->ow
|
||||
cBilaab bilaab =
|
||||
let bilow : Str = init (init (init bilaab)) + "ow" ;
|
||||
in cArag bilaab (bilaab + "aa") ** {
|
||||
sg2stem = bilow + "d" ;
|
||||
pl1stem = bilow + "n" } ;
|
||||
|
||||
|
||||
-- 2A: Verbs derived from root verbs by the causative affix -i/-is, e.g. kari TR 'cook' (from conjugation 1 kar INTR 'boil, cook');
|
||||
-- 2B: Verbs derived from nouns and adjectives by the causative/factitive affix -eel-ayn, e.g. yaree 'make small' (from yar ADJ 'small');
|
||||
cKari, cYaree = \kari -> mkVerb kari (kari+"y") kari ;
|
||||
cKari kari = { imper = kari ;
|
||||
sg1stem = kari + "y" ;
|
||||
sg2stem = kari + "s" ;
|
||||
pl1stem = kari + "nn" ;
|
||||
inf, negpast = kari + "n" ;
|
||||
progr = kari + "nay" ;
|
||||
impernegpl = kari + "nina" } ;
|
||||
|
||||
cYaree yaree =
|
||||
let yar : Str = init (init yaree) ;
|
||||
yarey : Str = case yaree of {
|
||||
yar + "ee" => yar + "ey" ;
|
||||
_ => yaree + "n" -- ideally shouldn't happen; this constructor should only be applied to imperatives that end in ee
|
||||
} ;
|
||||
in { imper = yaree ;
|
||||
sg1stem = yaree + "y" ;
|
||||
sg2stem = yarey + "s" ;
|
||||
pl1stem = yarey + "n" ;
|
||||
inf, negpast = yarey + "n" ;
|
||||
progr = yarey + "nay" ;
|
||||
impernegpl = yar + "aynina" } ;
|
||||
|
||||
|
||||
-- 3A: Verbs derived from verbal stems by the middle voice affix -ol/at
|
||||
-- e.g. karsó 'cook for oneself (from conjugation 2 kâri TR 'cook');
|
||||
cJoogso joogso =
|
||||
let joogsa = init joogso + "a" ;
|
||||
in mkVerb joogso (joogsa + "d") joogsa ;
|
||||
in { imper = joogso ;
|
||||
sg1stem = joogsa + "d" ;
|
||||
sg2stem = joogsa + "t" ;
|
||||
pl1stem = joogsa + "nn" ;
|
||||
inf, negpast = joogsa + "n" ;
|
||||
progr = joogsa + "nay" ;
|
||||
impernegpl = joogsa + "nina" } ;
|
||||
|
||||
cHayso hayso = -- otherwise like joogso, but sg1 is different
|
||||
let hays : Str = init hayso ;
|
||||
in cJoogso hayso ** {sg1stem = hays + "t"} ;
|
||||
|
||||
|
||||
-- 3B: As conjugation 3A but verbs whose syllable structure triggers
|
||||
-- stem contraction and subsequent sandhi rules, e.g. qaadó 'take for oneself
|
||||
-- (from conjugation 1 qàad TR 'take').
|
||||
cQaado qaado =
|
||||
let qaa = init (init qaado)
|
||||
in mkVerb qaado -- Imperative sg, with the vowel
|
||||
(qaa + "t") -- Per1 Sg, Per3 Pl and Per3 Sg Masc
|
||||
(qaa + "da") ; -- Per2 Pl and others
|
||||
in cJoogso qaado ** { sg1stem = qaa + "t" } ;
|
||||
|
||||
-- Constructs verbs like u baahan+ahay
|
||||
prefixV : Str -> Verb -> Verb = \s,v -> v ** {
|
||||
@@ -653,7 +717,7 @@ oper
|
||||
} ;
|
||||
|
||||
have_V : Verb =
|
||||
let hold_V = mkVerb "hayso" "haysat" "haysa" in hold_V ** {
|
||||
let hold_V = mkVerb (cHayso "hayso") in hold_V ** {
|
||||
s = table {
|
||||
VPres _ Sg1_Sg3Masc Pos => "leeyahay" ;
|
||||
VPres _ Sg2_Sg3Fem Pos => "leedahay" ;
|
||||
@@ -677,7 +741,7 @@ oper
|
||||
} ;
|
||||
|
||||
fail_V : Verb =
|
||||
let waa_V : Verb = cSug "waay" in waa_V ** {
|
||||
let waa_V : Verb = mkVerb (cSug "waay") in waa_V ** {
|
||||
s = table {
|
||||
VPres _ Sg2_Sg3Fem _
|
||||
=> "waayday" ;
|
||||
@@ -704,7 +768,7 @@ oper
|
||||
} ;
|
||||
|
||||
Adverb : Type = BaseAdv ** {
|
||||
c2 : Preposition ; -- adverbs can contribute to preposition contraction.
|
||||
c2 : Adposition ; -- adverbs can contribute to Adposition contraction.
|
||||
np : NPLite ; -- NP from PrepNP can be promoted into a core argument.
|
||||
} ;
|
||||
|
||||
@@ -733,8 +797,8 @@ oper
|
||||
} ;
|
||||
|
||||
VerbPhrase : Type = BaseVerb ** Complement ** BaseAdv ** {
|
||||
c2 : PrepCombination ; -- Prepositions can combine together and with object pronoun.
|
||||
obj : NPLite ; -- {s : Str ; a : PrepAgr}
|
||||
c2 : AdpCombination ; -- Adpositions can combine together and with object pronoun.
|
||||
obj : NPLite ; -- {s : Str ; a : AdpObjAgr}
|
||||
obj2 : Str ; -- if two overt pronoun objects
|
||||
vComp : {subjunc : Str ; -- "waa in" or subjunctive construction: "in" is placed here
|
||||
inf : Str ; -- auxiliary VV with infinitive argument
|
||||
@@ -754,8 +818,8 @@ oper
|
||||
vComp = {subjunc, inf = [] ;
|
||||
subcl = \\_ => []} ;
|
||||
berri,miscAdv = [] ;
|
||||
c2 = Single NoPrep ;
|
||||
obj = {s = [] ; a = P3_Prep} ;
|
||||
c2 = Single NoAdp ;
|
||||
obj = {s = [] ; a = ZeroObj} ;
|
||||
obj2 = []
|
||||
} ;
|
||||
|
||||
@@ -771,12 +835,12 @@ oper
|
||||
|
||||
passVP : VerbPhrase -> VerbPhrase = \vp -> vp ** {
|
||||
c2 = case vp.c2 of {
|
||||
Single p => combinePassive p ;
|
||||
_ => vp.c2 }
|
||||
Single p => ImpersSubj p ;
|
||||
_ => vp.c2 } -- TODO: do combinations of La + 2 adpositions exist?
|
||||
} ;
|
||||
|
||||
insertRefl : VPSlash -> VPSlash = \vps -> vps ** {
|
||||
obj = vps.obj ** {a = Reflexive_Prep} ;
|
||||
obj = vps.obj ** {a = ReflexiveObj} ;
|
||||
|
||||
-- If old obj was something else than P3, it is now shown in obj2
|
||||
obj2 = vps.obj2 ++ secondObject ! vps.obj.a ;
|
||||
@@ -796,7 +860,7 @@ oper
|
||||
|
||||
-- To generalise insertAdv and insertComp
|
||||
VPLite : Type = {
|
||||
c2 : PrepCombination ;
|
||||
c2 : AdpCombination ;
|
||||
obj : NPLite ;
|
||||
sii,dhex,berri,miscAdv,obj2 : Str} ;
|
||||
|
||||
@@ -804,7 +868,7 @@ oper
|
||||
case vp.obj.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 obj.s.
|
||||
P3_Prep =>
|
||||
ZeroObj =>
|
||||
vp ** {obj = nplite ** {
|
||||
s = nplite.s ++ vp.obj.s}
|
||||
} ; -- no obj2, because there's ≤1 non-3rd-person pronoun.
|
||||
@@ -820,12 +884,13 @@ oper
|
||||
|
||||
insertAdvLite : VPLite -> Adverb -> VPLite = \vp,adv ->
|
||||
case adv.c2 of {
|
||||
NoPrep => vp ** adv'' ; -- the adverb is not formed with PrepNP, e.g. "tomorrow"
|
||||
NoAdp => 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 => insertCompLite (vp ** {c2 = Single adv.c2}) adv.np ** adv' ;
|
||||
Single NoAdp => insertCompLite (vp ** {c2 = Single adv.c2}) adv.np ** adv' ;
|
||||
Single p => insertCompLite (vp ** {c2 = combine p adv.c2}) adv.np ** adv' ;
|
||||
Passive => insertCompLite (vp ** {c2 = combinePassive adv.c2}) adv.np ** adv' ;
|
||||
ImpersSubj NoAdp => insertCompLite (vp ** {c2 = ImpersSubj adv.c2}) adv.np ** adv' ;
|
||||
-- ImpersSubj p => insertCompLite (vp ** {c2 = ??? }) adv.np ** adv' ; -- TODO: is this allowed?
|
||||
|
||||
-- if complement slots are full, just insert strings.
|
||||
_ => vp ** adv''
|
||||
@@ -852,7 +917,7 @@ oper
|
||||
subj : {noun, pron : Str ; isP3 : Bool} ; -- noun and subject pronoun if applicable
|
||||
obj : NPLite ;
|
||||
obj2 : Str ;
|
||||
c2 : PrepCombination ; -- NB. QuestIAdv can add more prepositions
|
||||
c2 : AdpCombination ; -- NB. QuestIAdv can add more Adpositions
|
||||
aComp : Str ;
|
||||
nComp : Str ;
|
||||
vComp : {inf,subcl,subjunc : Str} ;
|
||||
@@ -930,12 +995,12 @@ oper
|
||||
s = \\t,a,p =>
|
||||
let -- Put all arguments in their right place
|
||||
--cl : ClSlash = complCl incomplCl ;
|
||||
prepComb = prepCombTable ! cl.obj.a ! cl.c2 ;
|
||||
prepComb = allContractions ! cl.obj.a ! cl.c2 ;
|
||||
|
||||
-- Contractions
|
||||
bind : Str = case <isPassive cl, cl.obj.a, cl.c2> of {
|
||||
<False,P3_Prep,Single NoPrep> => [] ; -- nothing to attach to the STM
|
||||
_ => BIND } ; -- something to attach, use BIND
|
||||
<False,ZeroObj,Single NoAdp> => [] ; -- nothing to attach to the STM
|
||||
_ => BIND } ; -- something to attach, use BIND
|
||||
prepCombNeg : Str = case <cltyp,p> of {
|
||||
<Statement,Neg> => prepComb ++ bind ;
|
||||
_ => []
|
||||
@@ -975,7 +1040,7 @@ oper
|
||||
++ cl.subj.noun -- subject if it's a noun
|
||||
++ statementNounObj -- noun object if it's a statement
|
||||
|
||||
++ prepCombNeg -- prepositions and pron. objects in negative statement
|
||||
++ prepCombNeg -- Adpositions and pron. objects in negative statement
|
||||
++ stm
|
||||
|
||||
++ cl.vComp.subjunc -- "waa in" construction /
|
||||
@@ -985,7 +1050,7 @@ oper
|
||||
++ cl.aComp -- AP complement, regardless of cltype
|
||||
++ statementNounComp -- NP complement if it's direct statement
|
||||
|
||||
++ prepCombPos -- prepositions + pron. objects in positive sentence
|
||||
++ prepCombPos -- Adpositions + pron. objects in positive sentence
|
||||
|
||||
++ cl.sii -- restricted set of particles
|
||||
++ cl.dhex -- restricted set of nouns/adverbials
|
||||
@@ -1013,9 +1078,9 @@ oper
|
||||
<Pres,Simul> => presV vp ;
|
||||
<Past,Simul> => pastV vp ;
|
||||
<Pres,Anter> => vp.s ! VInf ++ presCopula ! agrPol ; ---- just guessing
|
||||
<Past,Anter> => vp.s ! VInf ++ pastV (cSug "jir") ;
|
||||
<Fut,Simul> => vp.s ! VInf ++ presV (cSug "doon") ;
|
||||
<Fut,Anter> => vp.s ! VInf ++ pastV (cSug "doon")
|
||||
<Past,Anter> => vp.s ! VInf ++ pastV (mkVerb (cSug "jir")) ;
|
||||
<Fut,Simul> => vp.s ! VInf ++ presV (mkVerb (cSug "doon")) ;
|
||||
<Fut,Anter> => vp.s ! VInf ++ pastV (mkVerb (cSug "doon"))
|
||||
}
|
||||
where {
|
||||
agrPol : {agr:Agreement ; pol:Polarity} = {agr=agr; pol=p} ;
|
||||
@@ -1095,7 +1160,7 @@ oper
|
||||
|
||||
linVP : VForm -> ClType -> VerbPhrase -> Str = \vf,cltyp,vp ->
|
||||
let pred = vp.s ! vf ;
|
||||
pr = prepCombTable ! vp.obj.a ! vp.c2 ;
|
||||
pr = allContractions ! vp.obj.a ! vp.c2 ;
|
||||
neg = case <cltyp,isNeg vf> of {
|
||||
<Subord,True> => "aan" ;
|
||||
_ => []
|
||||
@@ -1114,7 +1179,7 @@ oper
|
||||
++ case cltyp of {
|
||||
Subord => vp.obj.s ; -- noun object if it's subordinate clause
|
||||
_ => [] }
|
||||
++ vp.aComp ! pagr2agr vp.obj.a -- AP complement agreeing with object
|
||||
++ vp.aComp ! objAgr2agr vp.obj.a -- AP complement agreeing with object
|
||||
++ pr -- object if it's a pronoun
|
||||
++ vp.sii -- restricted set of particles
|
||||
++ vp.dhex -- restricted set of nouns/adverbials
|
||||
|
||||
@@ -180,7 +180,7 @@ lin have_V2 = mkV2 have_V noPrep ; -- TODO: check if {sii = "l" ++ BIND ; isCopu
|
||||
lin can8know_VV = can_VV ; -- can (capacity)
|
||||
lin can_VV = mkVV "kar" ; -- can (possibility)
|
||||
lin must_VV = mkVV waa_in ;
|
||||
lin want_VV = mkVV (mkV "rabid" "rab" "rab") subjunctive ;
|
||||
lin want_VV = mkVV (mkV "rab" "rabaa") subjunctive ;
|
||||
|
||||
|
||||
------
|
||||
@@ -189,7 +189,7 @@ lin want_VV = mkVV (mkV "rabid" "rab" "rab") subjunctive ;
|
||||
lin please_Voc = ss "" ;
|
||||
-}
|
||||
oper
|
||||
mkIAdv : Preposition -> Str -> Bool -> ResSom.IAdv = \pr ->
|
||||
mkIAdv : Adposition -> Str -> Bool -> ResSom.IAdv = \pr ->
|
||||
let pr' : Prep = ParadigmsSom.mkPrep pr ;
|
||||
in prepIP pr' ;
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ lin
|
||||
ComplVS vs s =
|
||||
let vps = useV vs ;
|
||||
subord = SubjS {s="in"} s ;
|
||||
in vps ** {obj = {s = subord.berri ; a = P3_Prep}} ;
|
||||
in vps ** {obj = {s = subord.berri ; a = ZeroObj}} ;
|
||||
|
||||
{-
|
||||
-- : VQ -> QS -> VP ;
|
||||
@@ -71,7 +71,7 @@ lin
|
||||
SlashV2S v2s s =
|
||||
let vps = useVc v2s ;
|
||||
subord = SubjS {s="in"} s ;
|
||||
in vps ** {obj = {s = subord.berri ; a = P3_Prep}} ;
|
||||
in vps ** {obj = {s = subord.berri ; a = ZeroObj}} ;
|
||||
|
||||
{-
|
||||
-- : V2V -> VP -> VPSlash ; -- beg (her) to go
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePron it_Pron) (ComplSlash (SlashV2a wait_V2) (UsePron it_Pron))))) NoVoc
|
||||
LangSom: waa sugaa
|
||||
|
||||
-- LangEng: I/he waited (for him/her/it)
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron it_Pron) (ComplSlash (SlashV2a wait_V2) (UsePron it_Pron))))) NoVoc
|
||||
LangSom: waa sugay
|
||||
|
||||
-- Interrogative
|
||||
-- LangEng: does he/she/it wait (for him/her/it)
|
||||
Lang: PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestCl (PredVP (UsePron it_Pron) (ComplSlash (SlashV2a wait_V2) (UsePron it_Pron)))))) NoVoc
|
||||
@@ -30,6 +34,26 @@ LangSom: waa sugi lahaa
|
||||
-- Optative and potential not implemented (yet?)
|
||||
|
||||
|
||||
-- Imperatives
|
||||
-- LangEng: buy it (sg)
|
||||
Lang: PhrUtt NoPConj (UttImpSg PPos (ImpVP (ComplSlash (SlashV2a buy_V2) (UsePron it_Pron)))) NoVoc
|
||||
LangSom: iibso
|
||||
|
||||
Lang: PhrUtt NoPConj (UttImpPl PPos (ImpVP (ComplSlash (SlashV2a buy_V2) (UsePron it_Pron)))) NoVoc
|
||||
LangSom: iibsada
|
||||
|
||||
|
||||
-- LangEng: see it (sg)
|
||||
Lang: PhrUtt NoPConj (UttImpSg PPos (ImpVP (ComplSlash (SlashV2a see_V2) (UsePron it_Pron)))) NoVoc
|
||||
LangSom: arag
|
||||
|
||||
Lang: PhrUtt NoPConj (UttImpPl PPos (ImpVP (ComplSlash (SlashV2a see_V2) (UsePron it_Pron)))) NoVoc
|
||||
LangSom: arka
|
||||
|
||||
-- LangEng: I/he bought it
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron it_Pron) (ComplSlash (SlashV2a buy_V2) (UsePron it_Pron))))) NoVoc
|
||||
LangSom: waa iibsaday
|
||||
|
||||
--------------
|
||||
-- Negative --
|
||||
--------------
|
||||
@@ -56,6 +80,18 @@ LangSom: ha sugin
|
||||
Lang: PhrUtt NoPConj (UttImpPl PNeg (ImpVP (ComplSlash (SlashV2a wait_V2) (UsePron it_Pron)))) NoVoc
|
||||
LangSom: ha sugina
|
||||
|
||||
Lang: PhrUtt NoPConj (UttImpSg PNeg (ImpVP (ComplSlash (SlashV2a buy_V2) (UsePron it_Pron)))) NoVoc
|
||||
LangSom: ha iibsan
|
||||
|
||||
Lang: PhrUtt NoPConj (UttImpPl PNeg (ImpVP (ComplSlash (SlashV2a buy_V2) (UsePron it_Pron)))) NoVoc
|
||||
LangSom: ha iibsanina
|
||||
|
||||
Lang: PhrUtt NoPConj (UttImpSg PNeg (ImpVP (ComplSlash (SlashV2a see_V2) (UsePron it_Pron)))) NoVoc
|
||||
LangSom: ha arkin
|
||||
|
||||
Lang: PhrUtt NoPConj (UttImpPl PNeg (ImpVP (ComplSlash (SlashV2a see_V2) (UsePron it_Pron)))) NoVoc
|
||||
LangSom: ha arkina
|
||||
|
||||
-- Conditional
|
||||
-- LangEng: he/she/it wouldn't wait (for him/her/it)
|
||||
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TCond ASimul) PNeg (PredVP (UsePron it_Pron) (ComplSlash (SlashV2a wait_V2) (UsePron it_Pron))))) NoVoc
|
||||
|
||||
Reference in New Issue
Block a user