Merge branch 'GrammaticalFramework:master' into master

This commit is contained in:
Meowyam
2023-07-14 11:19:08 +08:00
committed by GitHub
22 changed files with 761 additions and 565 deletions

View File

@@ -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

View File

@@ -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" ;

View File

@@ -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

View File

@@ -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} ;

View File

@@ -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 } ;

View File

@@ -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 ;
}

View File

@@ -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

View File

@@ -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: 제가 고양이 &+ 보다 더 작은 여자 &+ 입니다

View File

@@ -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: 고양이가 집 뒤에 있습니다

View 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: 무엇을 보지 마새요

View File

@@ -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 ㅘ요

View File

@@ -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: 저는 저를 좋아하는 고양이 &+ 들을 좋아합니다

View File

@@ -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: 저는 고양이 &+ 들을 좋아합니다

View File

@@ -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 ;
}

View File

@@ -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 [] ;
}

View File

@@ -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})
} ;

View File

@@ -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
} ;

View File

@@ -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 ;

View File

@@ -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

View File

@@ -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' ;

View File

@@ -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

View File

@@ -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