1
0
forked from GitHub/gf-rgl

(Ara) remove extra whitespace

This commit is contained in:
Inari Listenmaa
2018-09-26 11:27:05 +02:00
parent 83793edc30
commit b945128a5b
18 changed files with 629 additions and 632 deletions

View File

@@ -11,11 +11,11 @@ concrete AdjectiveAra of Adjective = CatAra ** open ResAra, Prelude in {
Pl => a.s ! APosit Fem Sg d c ; Pl => a.s ! APosit Fem Sg d c ;
_ => a.s ! APosit g n d c _ => a.s ! APosit g n d c
} }
} }
}; };
---- guessed by AR ---- guessed by AR
ComparA a np = { ComparA a np = {
s = \\sp,g,n,st,c => a.s ! AComp st c ++ "مِنْ" ++ np.s ! Gen ; s = \\sp,g,n,st,c => a.s ! AComp st c ++ "مِنْ" ++ np.s ! Gen ;
} ; } ;
-- --
-- $SuperlA$ belongs to determiner syntax in $Noun$. -- $SuperlA$ belongs to determiner syntax in $Noun$.
@@ -25,12 +25,12 @@ concrete AdjectiveAra of Adjective = CatAra ** open ResAra, Prelude in {
} ; } ;
-- --
-- ReflA2 a = { -- ReflA2 a = {
-- s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ; -- s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ;
-- isPre = False -- isPre = False
-- } ; -- } ;
-- --
-- SentAP ap sc = { -- SentAP ap sc = {
-- s = \\a => ap.s ! a ++ sc.s ; -- s = \\a => ap.s ! a ++ sc.s ;
-- isPre = False -- isPre = False
-- } ; -- } ;
-- --

View File

@@ -38,7 +38,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
VP = ResAra.VP ; VP = ResAra.VP ;
VPSlash = ResAra.VPSlash ; -- VP ** {c2:Str} VPSlash = ResAra.VPSlash ; -- VP ** {c2:Str}
Comp = ResAra.Comp ; --{s : AAgr => Case => Str} ; Comp = ResAra.Comp ; --{s : AAgr => Case => Str} ;
-- SC = {s : Str} ; -- SC = {s : Str} ;
-- --
-- Adjective -- Adjective
@@ -55,18 +55,18 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
Predet = ResAra.Predet ; Predet = ResAra.Predet ;
Det = ResAra.Det ; Det = ResAra.Det ;
-- {s : Species => Gender => Case => Str ; -- {s : Species => Gender => Case => Str ;
-- d : State; n : Size; isNum : Bool } ; -- d : State; n : Size; isNum : Bool } ;
Quant = {s : ResAra.Number => Species => Gender => Case => Str; Quant = {s : ResAra.Number => Species => Gender => Case => Str;
d : State; d : State;
isNum : Bool; isNum : Bool;
isPron: Bool} ; isPron: Bool} ;
Art = {s : ResAra.Number => Species => Gender => Case => Str; Art = {s : ResAra.Number => Species => Gender => Case => Str;
d : State} ; d : State} ;
-- Numeral -- Numeral
Numeral = {s : CardOrd => Gender => State => Case => Str ; Numeral = {s : CardOrd => Gender => State => Case => Str ;
n : Size } ; n : Size } ;
Digits = {s : Str; Digits = {s : Str;
n : Size}; n : Size};
@@ -79,18 +79,17 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
Prep = {s : Str} ; Prep = {s : Str} ;
-- Open lexical classes, e.g. Lexicon -- Open lexical classes, e.g. Lexicon
V, VS, VQ, VA = ResAra.Verb ; -- = {s : VForm => Str} ; V, VS, VQ, VA = ResAra.Verb ; -- = {s : VForm => Str} ;
V2, V2A = ResAra.Verb ** {c2 : Str} ; V2, V2A = ResAra.Verb ** {c2 : Str} ;
V2V, V2S, V2Q = ResAra.Verb ** {c2 : Str} ; --- AR V2V, V2S, V2Q = ResAra.Verb ** {c2 : Str} ; --- AR
V3 = ResAra.Verb ** {c2, c3 : Str} ; V3 = ResAra.Verb ** {c2, c3 : Str} ;
VV = ResAra.Verb ** {c2 : Str ; isAux : Bool} ; --- IL VV = ResAra.Verb ** {c2 : Str ; isAux : Bool} ; --- IL
-- VV = {s : VVForm => Str ; isAux : Bool} ;
A = ResAra.Adj ; A = ResAra.Adj ;
A2 = ResAra.Adj ** {c2 : Str} ; A2 = ResAra.Adj ** {c2 : Str} ;
N, N2 = ResAra.Noun ; N, N2 = ResAra.Noun ;
--{s : ResAra.Number => State => Case => Str; g : Gender ; h = Species} ; --{s : ResAra.Number => State => Case => Str; g : Gender ; h = Species} ;
-- N2 = {s : ResAra.Number => Case => Str} ** {c2 : Str} ;?? -- N2 = {s : ResAra.Number => Case => Str} ** {c2 : Str} ;??
N3 = ResAra.Noun ** {c2,c3 : Str} ; N3 = ResAra.Noun ** {c2,c3 : Str} ;

View File

@@ -11,10 +11,9 @@ concrete ExtendAra of Extend =
Prelude, Prelude,
ResAra ResAra
in { in {
lin lin
GenNP np = { s = \\_,_,_,_ => np.s ! Gen ; d = Const ; isNum, isPron = False } ; GenNP np = { s = \\_,_,_,_ => np.s ! Gen ; d = Const ; isNum, isPron = False } ;
} ; } ;

View File

@@ -1,8 +1,8 @@
--# -path=.:../abstract:../common:prelude --# -path=.:../abstract:../common:prelude
concrete GrammarAra of Grammar = concrete GrammarAra of Grammar =
NounAra, NounAra,
VerbAra, VerbAra,
AdjectiveAra, AdjectiveAra,
AdverbAra, AdverbAra,
NumeralAra, NumeralAra,

View File

@@ -1,12 +1,12 @@
--# -path=.:prelude --# -path=.:prelude
-- --
concrete LexiconAra of Lexicon = CatAra ** open concrete LexiconAra of Lexicon = CatAra ** open
ParadigmsAra, ParadigmsAra,
ResAra, ResAra,
MorphoAra, --shouldn't open it here, only needed reg &sndf MorphoAra, --shouldn't open it here, only needed reg &sndf
Prelude in { Prelude in {
flags flags
optimize=values ; coding=utf8 ; optimize=values ; coding=utf8 ;
lin lin
@@ -27,7 +27,7 @@ flags
beg_V2V = dirV2 (v5 "وسل") ; beg_V2V = dirV2 (v5 "وسل") ;
big_A = sndA "كبر" "فَعِيل" ; big_A = sndA "كبر" "فَعِيل" ;
bike_N = sdfN "درج" "فَعّالة" Fem NoHum ; bike_N = sdfN "درج" "فَعّالة" Fem NoHum ;
bird_N = brkN "طير" "فَعل" "فُعُول" Masc NoHum; bird_N = brkN "طير" "فَعل" "فُعُول" Masc NoHum;
black_A = clrA "سود" ; black_A = clrA "سود" ;
blue_A = clrA "زرق" ; blue_A = clrA "زرق" ;
boat_N = brkN "قرب" "فاعِل" "فَواعِل" Masc NoHum ; boat_N = brkN "قرب" "فاعِل" "فَواعِل" Masc NoHum ;
@@ -62,7 +62,7 @@ flags
come_V = v1 "جي؟" a i ; --check come_V = v1 "جي؟" a i ; --check
computer_N = brkN "حسب" "فاعُول" "فَواعِيل" Masc NoHum ; computer_N = brkN "حسب" "فاعُول" "فَواعِيل" Masc NoHum ;
country_N = brkN "بلد" "فَعَل" "فِعال" Masc NoHum ; country_N = brkN "بلد" "فَعَل" "فِعال" Masc NoHum ;
cousin_N = brkN "قرب" "فَعِيل" "أَفعِلاء" Masc Hum ; -- (<bn / bnt) (cam[ö] / xAl[ö]) cousin_N = brkN "قرب" "فَعِيل" "أَفعِلاء" Masc Hum ; -- (<bn / bnt) (cam[ö] / xAl[ö])
cow_N = sdfN "بقر" "فَعلة" Fem NoHum ; cow_N = sdfN "بقر" "فَعلة" Fem NoHum ;
die_V = v1 "موت" a u ; --check die_V = v1 "موت" a u ; --check
dirty_A = sndA "وسخ" "فَعِل" ; dirty_A = sndA "وسخ" "فَعِل" ;
@@ -99,7 +99,7 @@ flags
harbour_N = brkN "رف؟" "مَفعَل" "مَفاعِل" Masc NoHum ; --mInA', marsaY harbour_N = brkN "رف؟" "مَفعَل" "مَفاعِل" Masc NoHum ; --mInA', marsaY
hate_V2 = dirV2 (regV "كَرِه") ; hate_V2 = dirV2 (regV "كَرِه") ;
hat_N = sdfN "قبع" "فُعَّلة" Fem NoHum ; hat_N = sdfN "قبع" "فُعَّلة" Fem NoHum ;
-- have_V2 = dirV2 (v1 "ملك" a i) ; -- have_V2 = dirV2 (v1 "ملك" a i) ;
hear_V2 = dirV2 (regV "سَمِع") ; hear_V2 = dirV2 (regV "سَمِع") ;
-- hear_V2 = dirV2 (v1 "سمع" i a) ; -- hear_V2 = dirV2 (v1 "سمع" i a) ;
hill_N = brkN "هضب" "فَعلة" "فِعال" Fem NoHum ; --tallö, rAbiyö hill_N = brkN "هضب" "فَعلة" "فِعال" Fem NoHum ; --tallö, rAbiyö
@@ -119,7 +119,7 @@ flags
leather_N = brkN "جلد" "فِعل" "فُعُول" Masc NoHum ; leather_N = brkN "جلد" "فِعل" "فُعُول" Masc NoHum ;
leave_V2 = dirV2 (regV "يَترُك") ; leave_V2 = dirV2 (regV "يَترُك") ;
-- leave_V2 = dirV2 (v1 "ترك" a u) ; -- leave_V2 = dirV2 (v1 "ترك" a u) ;
like_V2 = dirV2 (regV "هَوِي") ; like_V2 = dirV2 (regV "هَوِي") ;
-- like_V2 = dirV2 (v1 "هوي" i a) ; --check -- like_V2 = dirV2 (v1 "هوي" i a) ; --check
listen_V2 = mkV2 (v8 "سمع") "إِلَى" ; listen_V2 = mkV2 (v8 "سمع") "إِلَى" ;
live_V = v1 "عيش" a i ; --check live_V = v1 "عيش" a i ; --check
@@ -175,8 +175,8 @@ flags
school_N = brkN "درس" "مَفعَلة" "مَفاعِل" Fem NoHum ; school_N = brkN "درس" "مَفعَلة" "مَفاعِل" Fem NoHum ;
science_N = brkN "علم" "فِعل" "فُعُول" Masc NoHum ; science_N = brkN "علم" "فِعل" "فُعُول" Masc NoHum ;
sea_N = brkN "بحر" "فَعل" "فُعُول" Masc NoHum ; sea_N = brkN "بحر" "فَعل" "فُعُول" Masc NoHum ;
seek_V2 = dirV2 (regV "يَطلُب") ; seek_V2 = dirV2 (regV "يَطلُب") ;
-- seek_V2 = dirV2 (v1 "طلب" a u) ; -- seek_V2 = dirV2 (v1 "طلب" a u) ;
see_V2 = dirV2 (v1 "ر؟ي" a a) ; see_V2 = dirV2 (v1 "ر؟ي" a a) ;
sell_V3 = dirdirV3 (v1 "بيع" a i) ; --check sell_V3 = dirdirV3 (v1 "بيع" a i) ; --check
send_V3 = dirdirV3 (v4 "رسل") ; send_V3 = dirdirV3 (v4 "رسل") ;
@@ -239,7 +239,7 @@ flags
do_V2 = dirV2 (regV "يَفعَل") ; do_V2 = dirV2 (regV "يَفعَل") ;
-- do_V2 = dirV2 (v1 "فعل" a a ) ; -- do_V2 = dirV2 (v1 "فعل" a a ) ;
now_Adv = mkAdv "الآن" ; now_Adv = mkAdv "الآن" ;
already_Adv = mkAdv "سابِقاً" ; already_Adv = mkAdv "سابِقاً" ;
song_N = brkN "غني" "أَفعِلة" "أَفاعِي" Fem NoHum ; song_N = brkN "غني" "أَفعِلة" "أَفاعِي" Fem NoHum ;
add_V3 = dirV3 (regV "يَجمَع") "وَ" ; add_V3 = dirV3 (regV "يَجمَع") "وَ" ;
-- add_V3 = dirV3 (v1 "جمع" a a) "وَ" ; -- add_V3 = dirV3 (v1 "جمع" a a) "وَ" ;
@@ -268,69 +268,69 @@ flags
wide_A = sndA "وسع" "فاعِل" ; wide_A = sndA "وسع" "فاعِل" ;
animal_N = sdfN "حيّ" "فَعَوان" Masc NoHum ; animal_N = sdfN "حيّ" "فَعَوان" Masc NoHum ;
ashes_N = brkN "رمد" "فَعال" "أَفعِلة" Masc NoHum; ashes_N = brkN "رمد" "فَعال" "أَفعِلة" Masc NoHum;
back_N = brkN "ظهر" "فَعل" "فُعُول" Masc NoHum; back_N = brkN "ظهر" "فَعل" "فُعُول" Masc NoHum;
bark_N = brkN "نبح" "فَعل" "فُعال" Masc NoHum; bark_N = brkN "نبح" "فَعل" "فُعال" Masc NoHum;
belly_N = brkN "بطن" "فَعل" "فُعُول" Fem NoHum; belly_N = brkN "بطن" "فَعل" "فُعُول" Fem NoHum;
blood_N = brkN "دم" "فَع" "فِعاء" Masc NoHum; blood_N = brkN "دم" "فَع" "فِعاء" Masc NoHum;
bone_N = brkN "عظم" "فَعلة" "فِعال" Fem NoHum; bone_N = brkN "عظم" "فَعلة" "فِعال" Fem NoHum;
breast_N = brkN "صدر" "فَعل" "فُعُول" Masc NoHum; breast_N = brkN "صدر" "فَعل" "فُعُول" Masc NoHum;
cloud_N = brkN "غيم" "فَعلة" "فُعُول" Fem NoHum; cloud_N = brkN "غيم" "فَعلة" "فُعُول" Fem NoHum;
day_N = brkN "يوم" "فَعل" "أَفّاع" Masc NoHum; day_N = brkN "يوم" "فَعل" "أَفّاع" Masc NoHum;
dust_N = brkN "غبر" "فُعال" "أَفعِلة" Masc NoHum; dust_N = brkN "غبر" "فُعال" "أَفعِلة" Masc NoHum;
ear_N = brkN "؟ذن" "فُعل" "أَفعال" Fem NoHum; ear_N = brkN "؟ذن" "فُعل" "أَفعال" Fem NoHum;
earth_N = brkN "ترب" "فُعلة" "فُعَل" Fem NoHum; earth_N = brkN "ترب" "فُعلة" "فُعَل" Fem NoHum;
egg_N = sdfN "بيض" "فَعلة" Fem NoHum; egg_N = sdfN "بيض" "فَعلة" Fem NoHum;
eye_N = brkN "عين" "فَعل" "فُعُول" Fem NoHum; eye_N = brkN "عين" "فَعل" "فُعُول" Fem NoHum;
fat_N = brkN "دهن" "فُعل" "فُعُول" Masc NoHum ; fat_N = brkN "دهن" "فُعل" "فُعُول" Masc NoHum ;
feather_N = sdfN "ريش" "فِعلة" Fem NoHum; feather_N = sdfN "ريش" "فِعلة" Fem NoHum;
fingernail_N = brkN "ظفر" "فُعل" "أَفاعِل" Masc NoHum; fingernail_N = brkN "ظفر" "فُعل" "أَفاعِل" Masc NoHum;
fire_N = brkN "نور" "فاع" "فِيعان" Fem NoHum; fire_N = brkN "نور" "فاع" "فِيعان" Fem NoHum;
flower_N = brkN "زهر" "فَعلة" "فُعُول" Fem NoHum; flower_N = brkN "زهر" "فَعلة" "فُعُول" Fem NoHum;
fog_N = brkN "ضبّ" "فَعال" "فَعال" Masc NoHum; --no plural ? fog_N = brkN "ضبّ" "فَعال" "فَعال" Masc NoHum; --no plural ?
foot_N = brkN "قدم" "فَعَل" "أَفعال" Fem NoHum; foot_N = brkN "قدم" "فَعَل" "أَفعال" Fem NoHum;
forest_N = sdfN "غيب" "فاعة" Fem NoHum; forest_N = sdfN "غيب" "فاعة" Fem NoHum;
grass_N = brkN "عشب" "فُعلة" "أَفعال" Fem NoHum; grass_N = brkN "عشب" "فُعلة" "أَفعال" Fem NoHum;
guts_N = brkN "حشو" "فَعا" "أَفعاء" Fem NoHum; guts_N = brkN "حشو" "فَعا" "أَفعاء" Fem NoHum;
hair_N = sdfN "شعر" "فَعلة" Fem NoHum ; hair_N = sdfN "شعر" "فَعلة" Fem NoHum ;
hand_N = brkN "يد" "فَع" "أَفاعِي" Fem NoHum ; hand_N = brkN "يد" "فَع" "أَفاعِي" Fem NoHum ;
head_N = brkN "ر؟س" "فَعل" "فُعُول" Masc NoHum; head_N = brkN "ر؟س" "فَعل" "فُعُول" Masc NoHum;
heart_N = brkN "قلب" "فَعل" "فُعُول" Masc NoHum; heart_N = brkN "قلب" "فَعل" "فُعُول" Masc NoHum;
horn_N = brkN "قرن" "فَعل" "فُعُول" Masc NoHum; horn_N = brkN "قرن" "فَعل" "فُعُول" Masc NoHum;
husband_N = brkN "زوج" "فَعل" "أَفعال" Masc NoHum; husband_N = brkN "زوج" "فَعل" "أَفعال" Masc NoHum;
ice_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum; ice_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum;
knee_N = brkN "ركب" "فُعلة" "فُعَل" Fem NoHum; knee_N = brkN "ركب" "فُعلة" "فُعَل" Fem NoHum;
leaf_N = brkN "ورق" "فَعَلة" "أَفعال" Fem NoHum; leaf_N = brkN "ورق" "فَعَلة" "أَفعال" Fem NoHum;
leg_N = brkN "رجل" "فِعل" "أَفعُل" Fem NoHum; leg_N = brkN "رجل" "فِعل" "أَفعُل" Fem NoHum;
liver_N = brkN "كبد" "فَعِل" "أَفعال" Masc NoHum ; liver_N = brkN "كبد" "فَعِل" "أَفعال" Masc NoHum ;
louse_N = sdfN "قمل" "فَعلة" Fem NoHum; louse_N = sdfN "قمل" "فَعلة" Fem NoHum;
mouth_N = brkN "فوه" "فُعل" "أَفعال" Masc NoHum ; mouth_N = brkN "فوه" "فُعل" "أَفعال" Masc NoHum ;
name_N = brkN "؟سم" "فِعل" "فَعالِي" Masc NoHum; name_N = brkN "؟سم" "فِعل" "فَعالِي" Masc NoHum;
neck_N = brkN "رقب" "فَعَلة" "فِعال" Fem NoHum; neck_N = brkN "رقب" "فَعَلة" "فِعال" Fem NoHum;
night_N = brkN "ليل" "فَعلة" "فَعالِي" Fem NoHum; --plural? night_N = brkN "ليل" "فَعلة" "فَعالِي" Fem NoHum; --plural?
nose_N = brkN "؟نف" "فَعل" "فُعُول" Masc NoHum; nose_N = brkN "؟نف" "فَعل" "فُعُول" Masc NoHum;
person_N = brkN "شخص" "فَعل" "أَفعال" Masc Hum; person_N = brkN "شخص" "فَعل" "أَفعال" Masc Hum;
question_N = mkN "سؤال" ; ----IL question_N = mkN "سؤال" ; ----IL
rain_N = brkN "مطر" "فَعَل" "أَفعال" Masc NoHum; rain_N = brkN "مطر" "فَعَل" "أَفعال" Masc NoHum;
road_N = brkN "طرق" "فَعِيل" "فُعُل" Fem NoHum; road_N = brkN "طرق" "فَعِيل" "فُعُل" Fem NoHum;
root_N = brkN "جذر" "فَعل" "فُعُول" Masc NoHum ; root_N = brkN "جذر" "فَعل" "فُعُول" Masc NoHum ;
rope_N = brkN "حبل" "فَعل" "فِعال" Masc NoHum; rope_N = brkN "حبل" "فَعل" "فِعال" Masc NoHum;
salt_N = brkN "ملح" "فِعل" "أَفعال" Masc NoHum; salt_N = brkN "ملح" "فِعل" "أَفعال" Masc NoHum;
sand_N = brkN "رمل" "فَعل" "فِعال" Masc NoHum; sand_N = brkN "رمل" "فَعل" "فِعال" Masc NoHum;
seed_N = brkN "بذر" "فَعل" "فُعُول" Masc NoHum; seed_N = brkN "بذر" "فَعل" "فُعُول" Masc NoHum;
skin_N = brkN "جلد" "فِعل" "فُعُول" Masc NoHum; skin_N = brkN "جلد" "فِعل" "فُعُول" Masc NoHum;
sky_N = sdfN "سمو" "فَعاء" Fem NoHum; sky_N = sdfN "سمو" "فَعاء" Fem NoHum;
smoke_N = brkN "دخن" "فُعال" "أَفعِلة" Masc NoHum; smoke_N = brkN "دخن" "فُعال" "أَفعِلة" Masc NoHum;
snow_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum; snow_N = brkN "ثلج" "فَعل" "فُعُول" Masc NoHum;
stick_N = brkN "عصو" "فَعا" "فِعِي" Masc NoHum ; --"عصو" stick_N = brkN "عصو" "فَعا" "فِعِي" Masc NoHum ; --"عصو"
tail_N = brkN "ذنب" "فَعَل" "أَفعال" Masc NoHum; tail_N = brkN "ذنب" "فَعَل" "أَفعال" Masc NoHum;
tongue_N = brkN "لسن" "فِعال" "أَفعِلة" Masc NoHum; tongue_N = brkN "لسن" "فِعال" "أَفعِلة" Masc NoHum;
tooth_N = brkN "سنّ" "فِعل" "أَفعال" Masc NoHum ; tooth_N = brkN "سنّ" "فِعل" "أَفعال" Masc NoHum ;
wife_N = sdfN "زوج" "فَعلة" Fem Hum; wife_N = sdfN "زوج" "فَعلة" Fem Hum;
wind_N = brkN "ريح" "فِعل" "فِعال" Fem NoHum; wind_N = brkN "ريح" "فِعل" "فِعال" Fem NoHum;
wing_N = brkN "جنح" "فَعال" "أَفعِلة" Masc NoHum ; wing_N = brkN "جنح" "فَعال" "أَفعِلة" Masc NoHum ;
worm_N = brkN "دود" "فُعلة" "فِيعان" Fem NoHum ; worm_N = brkN "دود" "فُعلة" "فِيعان" Fem NoHum ;
year_N = sdfN "سن" "فَعة" Fem NoHum ; year_N = sdfN "سن" "فَعة" Fem NoHum ;
blow_V = regV "يَنفُخ" ; blow_V = regV "يَنفُخ" ;
breathe_V = dirV2 (v5 "نفس") ; breathe_V = dirV2 (v5 "نفس") ;

View File

@@ -1,22 +1,22 @@
resource MorphoAra = ResAra ** open Prelude in { resource MorphoAra = ResAra ** open Prelude in {
flags optimize = all ;--noexpand; flags optimize = all ;--noexpand;
coding=utf8 ; coding=utf8 ;
oper oper
mkDet : Str -> Number -> State -> Det mkDet : Str -> Number -> State -> Det
= \word,num,state -> = \word,num,state ->
{ s = \\_,_,c => word + vowel ! c ; { s = \\_,_,c => word + vowel ! c ;
n = numberToSize num; n = numberToSize num;
d = state; --only Const is used now. check StructuralAra d = state; --only Const is used now. check StructuralAra
isNum = False; isNum = False;
isPron = False isPron = False
}; };
mkPredet : Str -> Bool -> Predet mkPredet : Str -> Bool -> Predet
= \word,decl -> = \word,decl ->
{ s = \\c => { s = \\c =>
case decl of { case decl of {
True => word + vowel!c; True => word + vowel!c;
False => word False => word
@@ -24,23 +24,23 @@ flags optimize = all ;--noexpand;
isDecl = decl isDecl = decl
}; };
mkQuantNum : Str -> Number -> State -> { mkQuantNum : Str -> Number -> State -> {
s: Species => Gender => Case => Str; n: Number; d : State; isPron: Bool; isNum : Bool} = s: Species => Gender => Case => Str; n: Number; d : State; isPron: Bool; isNum : Bool} =
\waHid,num,state -> \waHid,num,state ->
let waHida = waHid + "َة" in let waHida = waHid + "َة" in
{ s = \\_,g,c => { s = \\_,g,c =>
let word = let word =
case g of { case g of {
Masc => waHid; Masc => waHid;
Fem => waHida Fem => waHida
} in Al ! state + word + dec1sg ! state ! c; } in defArt state waHid + word + dec1sg ! state ! c;
n = num; n = num;
d = state; d = state;
isPron = False; isPron = False;
isNum = True isNum = True
}; };
vowel : Case => Str = vowel : Case => Str =
table { table {
Nom => "ُ"; Nom => "ُ";
Acc => "َ"; Acc => "َ";

View File

@@ -6,30 +6,30 @@ lin
DetCN det cn = let { DetCN det cn = let {
number = sizeToNumber det.n; number = sizeToNumber det.n;
determiner : Case -> Str = \c -> determiner : Case -> Str = \c ->
det.s ! cn.h ! (detGender cn.g det.n) ! c; det.s ! cn.h ! (detGender cn.g det.n) ! c;
noun : Case -> NTable -> Str = \c,nt -> nt ! noun : Case -> NTable -> Str = \c,nt -> nt !
number ! (nounState det.d number) ! (nounCase c det.n det.d) number ! (nounState det.d number) ! (nounCase c det.n det.d)
} in { } in {
s = \\c => s = \\c =>
case cnB4det det.isPron det.isNum det.n det.d of { case cnB4det det.isPron det.isNum det.n det.d of {
False => determiner c ++ noun c cn.s ++ noun c cn.adj ; False => determiner c ++ noun c cn.s ++ noun c cn.adj ;
--FIXME use the adj -> cn -> cn rule from below instead of --FIXME use the adj -> cn -> cn rule from below instead of
--repeating code --repeating code
True => cn.s ! number ! det.d ! c ++ det.s ! cn.h ! cn.g ! c True => cn.s ! number ! det.d ! c ++ det.s ! cn.h ! cn.g ! c
++ cn.adj ! number ! det.d ! c ++ cn.adj ! number ! det.d ! c
}; };
a = { pgn = agrP3 cn.h cn.g number; a = { pgn = agrP3 cn.h cn.g number;
isPron = False } isPron = False }
}; };
UsePN pn = { UsePN pn = {
s = pn.s; s = pn.s;
a = {pgn = (Per3 pn.g Sg); isPron = False } a = {pgn = (Per3 pn.g Sg); isPron = False }
}; };
UsePron p = p ; UsePron p = p ;
PredetNP pred np = { PredetNP pred np = {
s = \\c => case pred.isDecl of { s = \\c => case pred.isDecl of {
True => pred.s!c ++ np.s ! Gen ; -- akvaru l-awlAdi True => pred.s!c ++ np.s ! Gen ; -- akvaru l-awlAdi
@@ -39,7 +39,7 @@ lin
} ; } ;
{- {-
--should compile.. not working :( wierd error message.. bug? --should compile.. not working :( wierd error message.. bug?
PPartNP np v2 = PPartNP np v2 =
let x = case np.a.pgn of { let x = case np.a.pgn of {
Per3 g n => ( positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ; Per3 g n => ( positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ;
_ => \\_ => [] -- not occuring anyway _ => \\_ => [] -- not occuring anyway
@@ -47,83 +47,83 @@ lin
s = \\c => np.s ! c ++ x ! c ; s = \\c => np.s ! c ++ x ! c ;
a = np.a a = np.a
}; };
-} -}
-- FIXME try parsing something like "this house now" and you'll get -- FIXME try parsing something like "this house now" and you'll get
-- an internal compiler error, but it still works.. wierd.. -- an internal compiler error, but it still works.. wierd..
AdvNP np adv = { AdvNP np adv = {
s = \\c => np.s ! c ++ adv.s; s = \\c => np.s ! c ++ adv.s;
a = np.a a = np.a
}; };
{- {-
DetSg quant ord = { DetSg quant ord = {
s = \\h,g,c => s = \\h,g,c =>
quant.s ! Sg ! h ! g ! c ++ ord.s ! g ! quant.d ! c ; quant.s ! Sg ! h ! g ! c ++ ord.s ! g ! quant.d ! c ;
n = One; n = One;
d = quant.d; d = quant.d;
isPron = quant.isPron; isPron = quant.isPron;
isNum = isNum =
case ord.n of { case ord.n of {
None => False; None => False;
_ => True _ => True
} }
} ; } ;
-} -}
DetQuantOrd quant num ord = { DetQuantOrd quant num ord = {
s = \\h,g,c => quant.s ! Pl ! h ! g ! c s = \\h,g,c => quant.s ! Pl ! h ! g ! c
++ num.s ! g ! (toDef quant.d num.n) ! c ++ num.s ! g ! (toDef quant.d num.n) ! c
--FIXME check this: --FIXME check this:
++ ord.s ! g ! (toDef quant.d num.n) ! c ; ++ ord.s ! g ! (toDef quant.d num.n) ! c ;
n = num.n; n = num.n;
d = quant.d; d = quant.d;
isPron = quant.isPron; isPron = quant.isPron;
isNum = isNum =
case num.n of { case num.n of {
None => False; None => False;
_ => True _ => True
} }
} ; } ;
DetQuant quant num = { DetQuant quant num = {
s = \\h,g,c => quant.s ! Pl ! h ! g ! c s = \\h,g,c => quant.s ! Pl ! h ! g ! c
++ num.s ! g ! (toDef quant.d num.n) ! c ; ++ num.s ! g ! (toDef quant.d num.n) ! c ;
n = num.n; n = num.n;
d = quant.d; d = quant.d;
isPron = quant.isPron; isPron = quant.isPron;
isNum = isNum =
case num.n of { case num.n of {
None => False; None => False;
_ => True _ => True
} }
} ; } ;
--DEPRECATED --DEPRECATED
-- SgQuant quant = {s = quant.s ! Sg ; d = quant.d; -- SgQuant quant = {s = quant.s ! Sg ; d = quant.d;
-- isPron = quant.isPron; isNum = False} ; -- isPron = quant.isPron; isNum = False} ;
-- PlQuant quant = {s = quant.s ! Pl ; d = quant.d; -- PlQuant quant = {s = quant.s ! Pl ; d = quant.d;
-- isPron = quant.isPron; isNum = False} ; -- isPron = quant.isPron; isNum = False} ;
PossPron p = { PossPron p = {
s = \\_,_,_,_ => p.s ! Gen; s = \\_,_,_,_ => p.s ! Gen;
d = Const; d = Const;
isPron = True; isPron = True;
isNum = False } ; isNum = False } ;
NumSg = { NumSg = {
s = \\_,_,_ => [] ; s = \\_,_,_ => [] ;
n = One } ; n = One } ;
NumPl = { NumPl = {
s = \\_,_,_ => [] ; s = \\_,_,_ => [] ;
n = None } ; n = None } ;
NumDigits digits = { NumDigits digits = {
s = \\_,_,_ => digits.s; s = \\_,_,_ => digits.s;
n = digits.n n = digits.n
}; };
NumNumeral numeral = { NumNumeral numeral = {
s = numeral.s ! NCard ; s = numeral.s ! NCard ;
n = numeral.n n = numeral.n
@@ -134,18 +134,18 @@ lin
AdNum adn num = { AdNum adn num = {
s = \\g,d,c => adn.s ++ num.s ! g ! d ! c ; s = \\g,d,c => adn.s ++ num.s ! g ! d ! c ;
n = num.n } ; n = num.n } ;
OrdDigits digits = { OrdDigits digits = {
s = \\_,d,_ => Al ! d ++ digits.s; s = \\_,d,_ => Al ! d ++ digits.s;
n = digits.n n = digits.n
}; };
-- OrdNumeral : Numeral -> Ord ; -- fifty-first -- OrdNumeral : Numeral -> Ord ; -- fifty-first
OrdNumeral numeral = { OrdNumeral numeral = {
s = numeral.s ! NOrd ; s = numeral.s ! NOrd ;
n = numeral.n n = numeral.n
}; };
-- FIXME, "the biggest house" would better translate into -- FIXME, "the biggest house" would better translate into
-- akbaru baytin rather than al-baytu l-2akbaru -- akbaru baytin rather than al-baytu l-2akbaru
-- DetCN (DetSg DefArt (OrdSuperl big_A)) (UseN house_N) -- DetCN (DetSg DefArt (OrdSuperl big_A)) (UseN house_N)
@@ -153,25 +153,25 @@ lin
s = \\_,d,c => a.s ! AComp d c; s = \\_,d,c => a.s ! AComp d c;
n = One n = One
} ; } ;
DefArt = { DefArt = {
s = \\_,_,_,_ => []; s = \\_,_,_,_ => [];
d = Def ; d = Def ;
isNum,isPron = False isNum,isPron = False
} ; } ;
IndefArt = { IndefArt = {
s = \\_,_,_,_ => []; s = \\_,_,_,_ => [];
d = Indef ; d = Indef ;
isNum,isPron = False isNum,isPron = False
} ; } ;
MassNP cn = ---- AR MassNP cn = ---- AR
{s = cn.s ! Sg ! Indef ; a = {pgn = Per3 cn.g Sg ; isPron = False}} ; {s = cn.s ! Sg ! Indef ; a = {pgn = Per3 cn.g Sg ; isPron = False}} ;
-- MassDet = {s = \\_,_,_,_ => [] ; d = Indef; -- MassDet = {s = \\_,_,_,_ => [] ; d = Indef;
-- isNum = False; isPron = False} ; -- isNum = False; isPron = False} ;
UseN n = n ** {adj = \\_,_,_ => []}; UseN n = n ** {adj = \\_,_,_ => []};
-- ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ; -- ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ;
-- ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ; -- ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ;

View File

@@ -3,75 +3,75 @@ concrete NumeralAra of Numeral = CatAra [Numeral,Digits] **
flags coding=utf8 ; flags coding=utf8 ;
lincat lincat
Digit = {s : DForm => CardOrd => Gender => State => Case => Str ; Digit = {s : DForm => CardOrd => Gender => State => Case => Str ;
n : Size } ; n : Size } ;
Sub10 = {s : DForm => CardOrd => Gender => State => Case => Str ; Sub10 = {s : DForm => CardOrd => Gender => State => Case => Str ;
n : Size } ; n : Size } ;
Sub100 = {s : CardOrd => Gender => State => Case => Str ; Sub100 = {s : CardOrd => Gender => State => Case => Str ;
n : Size} ; n : Size} ;
Sub1000 = {s : CardOrd => Gender => State => Case => Str ; Sub1000 = {s : CardOrd => Gender => State => Case => Str ;
n : Size } ; n : Size } ;
Sub1000000 = {s : CardOrd => Gender => State => Case => Str ; Sub1000000 = {s : CardOrd => Gender => State => Case => Str ;
n : Size} ; n : Size} ;
lin num x = x ; lin num x = x ;
lin n2 = num2 ** {n = Two }; lin n2 = num2 ** {n = Two };
lin n3 = num3_10 "ثَلاث" "ثالِث"; lin n3 = num3_10 "ثَلاث" "ثالِث";
lin n4 = num3_10 "أَربَع" "رابِع"; lin n4 = num3_10 "أَربَع" "رابِع";
lin n5 = num3_10 "خَمس" "خامِس"; lin n5 = num3_10 "خَمس" "خامِس";
lin n6 = num3_10 "سِتّ" "سادِس"; lin n6 = num3_10 "سِتّ" "سادِس";
lin n7 = num3_10 "سَبع" "سابِع"; lin n7 = num3_10 "سَبع" "سابِع";
lin n8 = num3_10 "ثَمانِي" "ثامِن"; lin n8 = num3_10 "ثَمانِي" "ثامِن";
lin n9 = num3_10 "تِسع" "تاسِع"; lin n9 = num3_10 "تِسع" "تاسِع";
lin pot01 = mkNum "واحِد" "أَوَّل" "أُولى" ** { n = One } ; lin pot01 = mkNum "واحِد" "أَوَّل" "أُولى" ** { n = One } ;
lin pot0 d = d ; lin pot0 d = d ;
lin pot110 = { lin pot110 = {
s= ((num3_10 "عَشر" "عاشِر").s ! unit ) ; s= ((num3_10 "عَشر" "عاشِر").s ! unit ) ;
n = ThreeTen n = ThreeTen
}; };
lin pot111 = { lin pot111 = {
s = \\_,g,d,_ => s = \\_,g,d,_ =>
case g of { case g of {
Masc => Al ! d + "أَحَدَ" ++ teen ! Masc ; Masc => Al ! d + "أَحَدَ" ++ teen ! Masc ;
Fem => Al ! d + "إِحدَى" ++ teen ! Fem Fem => Al ! d + "إِحدَى" ++ teen ! Fem
}; };
n = NonTeen n = NonTeen
}; };
lin pot1to19 dig = { lin pot1to19 dig = {
s = \\co,g,d,c => case dig.n of { s = \\co,g,d,c => case dig.n of {
Two => Al ! d + num2.s ! unit ! co ! g ! Const ! c ++ teen ! g ; Two => Al ! d + num2.s ! unit ! co ! g ! Const ! c ++ teen ! g ;
_ => dig.s ! unit ! co ! g ! (toDef d ThreeTen) ! Acc ++ _ => dig.s ! unit ! co ! g ! (toDef d ThreeTen) ! Acc ++
teen ! (genPolarity ! g) teen ! (genPolarity ! g)
}; };
n = case dig.n of { n = case dig.n of {
Two => NonTeen; Two => NonTeen;
_ => Teen _ => Teen
} }
}; };
lin pot0as1 num = { lin pot0as1 num = {
s= num.s ! unit; s= num.s ! unit;
n = num.n n = num.n
} ; } ;
lin pot1 dig = { lin pot1 dig = {
s = dig.s ! ten; s = dig.s ! ten;
n = NonTeen n = NonTeen
} ; } ;
lin pot1plus dig n = { lin pot1plus dig n = {
s = \\co,g,d,c => n.s ! unit ! co ! g ! d ! c s = \\co,g,d,c => n.s ! unit ! co ! g ! d ! c
++ "وَ" ++ dig.s ! ten ! co ! g ! d ! c ; ++ "وَ" ++ dig.s ! ten ! co ! g ! d ! c ;
n = NonTeen n = NonTeen
}; };
@@ -86,34 +86,34 @@ lincat
}; };
n = Hundreds n = Hundreds
}; };
lin pot2plus m e = { lin pot2plus m e = {
s = \\co,g,d,c => case m.n of { s = \\co,g,d,c => case m.n of {
One => num100 ! d ! c; One => num100 ! d ! c;
Two => num200 ! d ! c; Two => num200 ! d ! c;
_ => m.s ! unit ! co ! Masc ! (toDef d ThreeTen) ! c ++ "مِٱَةٌ" _ => m.s ! unit ! co ! Masc ! (toDef d ThreeTen) ! c ++ "مِٱَةٌ"
} ++ "وَ" ++ e.s ! co ! g ! d ! c ; } ++ "وَ" ++ e.s ! co ! g ! d ! c ;
n = e.n n = e.n
}; };
lin pot2as3 n = n ; lin pot2as3 n = n ;
lin pot3 m = { lin pot3 m = {
s = \\co,_,d,c => case m.n of { s = \\co,_,d,c => case m.n of {
One => num1000 ! (definite ! d) ! c; One => num1000 ! (definite ! d) ! c;
Two => num2000 ! (definite ! d) ! c; Two => num2000 ! (definite ! d) ! c;
_ => m.s ! co ! Fem ! (toDef d ThreeTen) ! c ++ "آلافٌ" _ => m.s ! co ! Fem ! (toDef d ThreeTen) ! c ++ "آلافٌ"
} ; } ;
n = m.n n = m.n
}; };
--lin pot3plus n m = { --lin pot3plus n m = {
-- s = \\c => n.s ! NCard ++ "تهُْسَند" ++ m.s ! c ; n = Pl} ; -- s = \\c => n.s ! NCard ++ "تهُْسَند" ++ m.s ! c ; n = Pl} ;
-- numerals as sequences of digits -- numerals as sequences of digits
lincat lincat
Dig = Digits ; Dig = Digits ;
-- Numeral,Digits = {s : Gender => State => Case => Str ; -- Numeral,Digits = {s : Gender => State => Case => Str ;
-- n : Size } ; -- n : Size } ;

View File

@@ -3,7 +3,7 @@ resource OrthoAra = open Prelude, Predef in {
flags coding=utf8 ; flags coding=utf8 ;
oper oper
rectifyHmz: Str -> Str = \word -> rectifyHmz: Str -> Str = \word ->
case word of { case word of {
l@(""|"ال") + "؟" + v@("َ"|"ُ") + tail => l + "أ" + v + tail; l@(""|"ال") + "؟" + v@("َ"|"ُ") + tail => l + "أ" + v + tail;
@@ -12,14 +12,14 @@ flags coding=utf8 ;
head + "؟" + tail => head + (bHmz (dp 2 head) (take 2 tail)) + tail; --last head , take 1 tail head + "؟" + tail => head + (bHmz (dp 2 head) (take 2 tail)) + tail; --last head , take 1 tail
_ => word _ => word
}; };
--hamza at beginning of word (head) --hamza at beginning of word (head)
hHmz : Str -> Str = \d -> hHmz : Str -> Str = \d ->
case d of { case d of {
"ِ" => "إ"; "ِ" => "إ";
_ => "أ" _ => "أ"
}; };
--hamza in middle of word (body) --hamza in middle of word (body)
bHmz : Str -> Str -> Str = \d1,d2 -> bHmz : Str -> Str -> Str = \d1,d2 ->
case <d1,d2> of { case <d1,d2> of {
@@ -28,7 +28,7 @@ flags coding=utf8 ;
<"َ",_> | <_,"َ"> => "أ"; <"َ",_> | <_,"َ"> => "أ";
_ => "ء" _ => "ء"
}; };
--hamza carrier sequence --hamza carrier sequence
tHmz : Str -> Str = \d -> tHmz : Str -> Str = \d ->
case d of { case d of {
@@ -37,5 +37,5 @@ flags coding=utf8 ;
"َ" => "أ"; "َ" => "أ";
"ْ"|"ا"|"و"|"ي" => "ء" "ْ"|"ا"|"و"|"ي" => "ء"
}; };
} }

View File

@@ -4,12 +4,12 @@
-- --
-- Ali El Dada 2005--2006 -- Ali El Dada 2005--2006
-- --
-- This is an API to the user of the resource grammar -- This is an API to the user of the resource grammar
-- for adding lexical items. It gives functions for forming -- for adding lexical items. It gives functions for forming
-- expressions of open categories: nouns, adjectives, verbs. -- expressions of open categories: nouns, adjectives, verbs.
-- --
-- Closed categories (determiners, pronouns, conjunctions) are -- Closed categories (determiners, pronouns, conjunctions) are
-- accessed through the resource syntax API, $Structural.gf$. -- accessed through the resource syntax API, $Structural.gf$.
-- --
-- The main difference with $MorphoAra.gf$ is that the types -- The main difference with $MorphoAra.gf$ is that the types
-- referred to are compiled resource grammar types. We have moreover -- referred to are compiled resource grammar types. We have moreover
@@ -20,12 +20,12 @@
-- first we give a handful of patterns that aim to cover all -- first we give a handful of patterns that aim to cover all
-- regular cases. Then we give a worst-case function $mkC$, which serves as an -- regular cases. Then we give a worst-case function $mkC$, which serves as an
-- escape to construct the most irregular words of type $C$. -- escape to construct the most irregular words of type $C$.
-- --
-- The following modules are presupposed: -- The following modules are presupposed:
resource ParadigmsAra = open resource ParadigmsAra = open
Predef, Predef,
Prelude, Prelude,
MorphoAra, MorphoAra,
OrthoAra,(ResAra=ResAra), OrthoAra,(ResAra=ResAra),
CatAra CatAra
@@ -34,7 +34,7 @@ resource ParadigmsAra = open
flags optimize = noexpand; coding=utf8 ; flags optimize = noexpand; coding=utf8 ;
oper oper
-- Prepositions are used in many-argument functions for rection. -- Prepositions are used in many-argument functions for rection.
Preposition : Type ; Preposition : Type ;
@@ -49,7 +49,7 @@ resource ParadigmsAra = open
mkN : Species -> N -> N mkN : Species -> N -> N
= \p,n -> n ** {h = p} ; = \p,n -> n ** {h = p} ;
mkN : (sg,pl : Str) -> Gender -> Species -> N mkN : (sg,pl : Str) -> Gender -> Species -> N
= \sg,pl -> mkFullN (reg sg pl) ; = \sg,pl -> mkFullN (reg sg pl) ;
mkN : NTable -> Gender -> Species -> N -- loan words, irregular mkN : NTable -> Gender -> Species -> N -- loan words, irregular
= mkFullN ; = mkFullN ;
mkN : (root,sgPatt,brokenPlPatt : Str) -> Gender -> Species -> N -- broken plural mkN : (root,sgPatt,brokenPlPatt : Str) -> Gender -> Species -> N -- broken plural
@@ -63,18 +63,18 @@ resource ParadigmsAra = open
--This is used for loan words or anything that has untreated irregularities --This is used for loan words or anything that has untreated irregularities
--in the interdigitization process of its words --in the interdigitization process of its words
mkFullN : NTable -> Gender -> Species -> N ; mkFullN : NTable -> Gender -> Species -> N ;
--Takes a root string, a singular pattern string, a broken plural --Takes a root string, a singular pattern string, a broken plural
--pattern string, a gender, and species. Gives a noun. --pattern string, a gender, and species. Gives a noun.
brkN : Str -> Str -> Str -> Gender -> Species -> N ; brkN : Str -> Str -> Str -> Gender -> Species -> N ;
--Takes a root string, a singular pattern string, a gender, --Takes a root string, a singular pattern string, a gender,
--and species. Gives a noun whose plural is sound feminine. --and species. Gives a noun whose plural is sound feminine.
sdfN : Str -> Str -> Gender -> Species -> N ; sdfN : Str -> Str -> Gender -> Species -> N ;
--takes a root string, a singular pattern string, a gender, --takes a root string, a singular pattern string, a gender,
--and species. Gives a noun whose plural is sound masculine --and species. Gives a noun whose plural is sound masculine
sdmN : Str -> Str -> Gender -> Species -> N ; sdmN : Str -> Str -> Gender -> Species -> N ;
--3 Proper names --3 Proper names
@@ -90,7 +90,7 @@ resource ParadigmsAra = open
--3 Relational nouns --3 Relational nouns
mkN2 : N -> Preposition -> N2 ; mkN2 : N -> Preposition -> N2 ;
@@ -113,7 +113,7 @@ resource ParadigmsAra = open
--Takes a root string and a pattern string --Takes a root string and a pattern string
sndA : (root,patt : Str) -> A ; sndA : (root,patt : Str) -> A ;
--Takes a root string only --Takes a root string only
clrA : (root : Str) -> A ; -- forms adjectives of type aFCal clrA : (root : Str) -> A ; -- forms adjectives of type aFCal
@@ -142,7 +142,7 @@ resource ParadigmsAra = open
mkPrep : Str -> Prep mkPrep : Str -> Prep
= \s -> lin Prep {s = mkPreposition s} ; -- preposition in the sense of RGL abstract syntax = \s -> lin Prep {s = mkPreposition s} ; -- preposition in the sense of RGL abstract syntax
mkPreposition : Str -> Preposition ; -- just a string, for internal use mkPreposition : Str -> Preposition ; -- just a string, for internal use
@@ -166,29 +166,29 @@ resource ParadigmsAra = open
--Verb Form I : fa`ala, fa`ila, fa`ula --Verb Form I : fa`ala, fa`ila, fa`ula
v1 : Str -> Vowel -> Vowel -> V ; v1 : Str -> Vowel -> Vowel -> V ;
--Verb Form II : fa``ala --Verb Form II : fa``ala
v2 : Str -> V ; v2 : Str -> V ;
--Verb Form III : faa`ala --Verb Form III : faa`ala
v3 : Str -> V ; v3 : Str -> V ;
--Verb Form IV : 'af`ala --Verb Form IV : 'af`ala
v4 : Str -> V ; v4 : Str -> V ;
--Verb Form V : tafa``ala --Verb Form V : tafa``ala
v5 : Str -> V ; v5 : Str -> V ;
--Verb Form VI : tafaa`ala --Verb Form VI : tafaa`ala
v6 : Str -> V ; v6 : Str -> V ;
--Verb Form VIII 'ifta`ala --Verb Form VIII 'ifta`ala
v8 : Str -> V ; v8 : Str -> V ;
--3 Two-place verbs --3 Two-place verbs
@@ -238,7 +238,7 @@ resource ParadigmsAra = open
-- Notice: categories $AS, A2S, AV, A2V$ are just $A$, -- Notice: categories $AS, A2S, AV, A2V$ are just $A$,
-- and the second argument is given -- and the second argument is given
-- as an adverb. Likewise -- as an adverb. Likewise
-- $V0$ is just $V$. -- $V0$ is just $V$.
V0 : Type ; V0 : Type ;
@@ -252,7 +252,7 @@ resource ParadigmsAra = open
-- hidden from the document. -- hidden from the document.
regV : Str -> V = \wo -> regV : Str -> V = \wo ->
let rau : Str * Vowel * Vowel = let rau : Str * Vowel * Vowel =
case wo of { case wo of {
"يَ" + fc + "ُ" + l => <fc+l, a, u> ; "يَ" + fc + "ُ" + l => <fc+l, a, u> ;
"يَ" + fc + "ِ" + l => <fc+l, a, i> ; "يَ" + fc + "ِ" + l => <fc+l, a, i> ;
@@ -262,19 +262,19 @@ resource ParadigmsAra = open
} }
in v1 rau.p1 rau.p2 rau.p3 ; in v1 rau.p1 rau.p2 rau.p3 ;
v1 = \rootStr,vPerf,vImpf -> v1 = \rootStr,vPerf,vImpf ->
let { raw = v1' rootStr vPerf vImpf } in let { raw = v1' rootStr vPerf vImpf } in
{ s = \\vf => { s = \\vf =>
case rootStr of { case rootStr of {
_ + "؟" + _ => rectifyHmz(raw.s ! vf); _ + "؟" + _ => rectifyHmz(raw.s ! vf);
_ => raw.s ! vf _ => raw.s ! vf
}; };
lock_V = <> lock_V = <>
} ; } ;
va : Vowel = ResAra.a ; va : Vowel = ResAra.a ;
v1' : Str -> Vowel -> Vowel -> Verb = v1' : Str -> Vowel -> Vowel -> Verb =
\rootStr,vPerf,vImpf -> \rootStr,vPerf,vImpf ->
let { root = mkRoot3 rootStr ; let { root = mkRoot3 rootStr ;
l = dp 2 rootStr } in --last rootStr l = dp 2 rootStr } in --last rootStr
@@ -282,23 +282,23 @@ resource ParadigmsAra = open
<"ّ",_> => v1geminate rootStr vPerf vImpf ; <"ّ",_> => v1geminate rootStr vPerf vImpf ;
<"و"|"ي",_> => v1defective root vPerf vImpf ; <"و"|"ي",_> => v1defective root vPerf vImpf ;
<_,"و"|"ي"> => v1hollow root vImpf ; <_,"و"|"ي"> => v1hollow root vImpf ;
_ => v1sound root vPerf vImpf _ => v1sound root vPerf vImpf
}; };
v2 = v2 =
\rootStr -> \rootStr ->
let { let {
root = mkRoot3 rootStr root = mkRoot3 rootStr
} in { } in {
s = s =
case root.l of { case root.l of {
"و"|"ي" => (v2defective root).s; "و"|"ي" => (v2defective root).s;
_ => (v2sound root).s _ => (v2sound root).s
}; };
lock_V = <> lock_V = <>
}; };
v3 = v3 =
\rootStr -> \rootStr ->
let { let {
tbc = mkRoot3 rootStr ; tbc = mkRoot3 rootStr ;
@@ -306,21 +306,21 @@ resource ParadigmsAra = open
s = (v3sound tbc).s ; s = (v3sound tbc).s ;
lock_V = <> lock_V = <>
}; };
v4 = v4 =
\rootStr -> \rootStr ->
let { let {
root = mkRoot3 rootStr root = mkRoot3 rootStr
} in { } in {
s = s =
case root.l of { case root.l of {
"و"|"ي" => (v4defective root).s; "و"|"ي" => (v4defective root).s;
_ => (v4sound root).s _ => (v4sound root).s
}; };
lock_V = <> lock_V = <>
}; };
v5 = v5 =
\rootStr -> \rootStr ->
let { raw = v5' rootStr } in let { raw = v5' rootStr } in
@@ -331,16 +331,16 @@ resource ParadigmsAra = open
}; };
lock_V = <> lock_V = <>
}; };
v5' : Str -> V = v5' : Str -> V =
\rootStr -> \rootStr ->
let { let {
nfs = mkRoot3 rootStr ; nfs = mkRoot3 rootStr ;
} in { } in {
s = (v5sound nfs).s ; lock_V = <> s = (v5sound nfs).s ; lock_V = <>
}; };
v6 = v6 =
\rootStr -> \rootStr ->
let { let {
fqm = mkRoot3 rootStr ; fqm = mkRoot3 rootStr ;
@@ -348,8 +348,8 @@ resource ParadigmsAra = open
s = (v6sound fqm).s ; s = (v6sound fqm).s ;
lock_V = <> lock_V = <>
}; };
v8 = v8 =
\rootStr -> \rootStr ->
let { let {
rbT = mkRoot3 rootStr ; rbT = mkRoot3 rootStr ;
@@ -357,22 +357,22 @@ resource ParadigmsAra = open
("و"|"ي"|"ّ") => v8assimilated ; ("و"|"ي"|"ّ") => v8assimilated ;
_ => v8sound } _ => v8sound }
} in lin V (v8fun rbT) ; } in lin V (v8fun rbT) ;
Preposition = Str ; Preposition = Str ;
mkFullN nsc gen spec = mkFullN nsc gen spec =
{ s = nsc; --NTable { s = nsc; --NTable
g = gen; g = gen;
h = spec; h = spec;
lock_N = <> lock_N = <>
}; };
brkN' : Str -> Str -> Str -> Gender -> Species -> N = brkN' : Str -> Str -> Str -> Gender -> Species -> N =
\root,sg,pl,gen,spec -> \root,sg,pl,gen,spec ->
let { kitAb = mkWord sg root; let { kitAb = mkWord sg root;
kutub = mkWord pl root kutub = mkWord pl root
} in mkFullN (reg kitAb kutub) gen spec; } in mkFullN (reg kitAb kutub) gen spec;
brkN root sg pl gen spec = brkN root sg pl gen spec =
let { raw = brkN' root sg pl gen spec} in let { raw = brkN' root sg pl gen spec} in
{ s = \\n,d,c => { s = \\n,d,c =>
@@ -383,31 +383,31 @@ resource ParadigmsAra = open
g = gen; g = gen;
h = spec ; lock_N = <> h = spec ; lock_N = <>
}; };
sdfN = sdfN =
\root,sg,gen,spec -> \root,sg,gen,spec ->
let { kalima = mkWord sg root; let { kalima = mkWord sg root;
} in mkFullN (sndf kalima) gen spec; } in mkFullN (sndf kalima) gen spec;
sdmN = sdmN =
\root,sg,gen,spec -> \root,sg,gen,spec ->
let { mucallim = mkWord sg root; let { mucallim = mkWord sg root;
} in mkFullN (sndm mucallim) gen spec; } in mkFullN (sndm mucallim) gen spec;
mkFullPN = \str,gen,species -> mkFullPN = \str,gen,species ->
{ s = \\c => str + indecl!c ; { s = \\c => str + indecl!c ;
g = gen; g = gen;
h = species; h = species;
lock_PN = <> lock_PN = <>
}; };
mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ; mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ;
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
mkPron : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn -> mkPron : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn ->
{ s = { s =
table { table {
Nom => ana; Nom => ana;
Acc => nI; Acc => nI;
@@ -430,7 +430,7 @@ resource ParadigmsAra = open
a = {pgn = Per3 Masc n; isPron = False }; a = {pgn = Per3 Masc n; isPron = False };
lock_NP = <> lock_NP = <>
}; };
mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant = mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant =
\hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det -> \hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det ->
{ s = \\n,s,g,c => { s = \\n,s,g,c =>
@@ -449,7 +449,7 @@ resource ParadigmsAra = open
isNum = False; isNum = False;
lock_Quant = <> lock_Quant = <>
}; };
mkQuant3 : (_,_,_ : Str) -> State -> Quant = mkQuant3 : (_,_,_ : Str) -> State -> Quant =
\dalika,tilka,ula'ika,det -> \dalika,tilka,ula'ika,det ->
{ s = \\n,s,g,c => { s = \\n,s,g,c =>
@@ -467,9 +467,9 @@ resource ParadigmsAra = open
degrA : (posit,compar,plur : Str) -> A degrA : (posit,compar,plur : Str) -> A
= \posit,compar,plur -> lin A {s = clr posit compar plur} ; = \posit,compar,plur -> lin A {s = clr posit compar plur} ;
sndA root pat = sndA root pat =
let raw = sndA' root pat in { let raw = sndA' root pat in {
s = \\af => s = \\af =>
case root of { case root of {
_ + "؟" + _ => rectifyHmz(raw.s ! af); _ + "؟" + _ => rectifyHmz(raw.s ! af);
@@ -477,7 +477,7 @@ resource ParadigmsAra = open
}; };
lock_A = <> lock_A = <>
}; };
sndA' : Str -> Str -> A = sndA' : Str -> Str -> A =
\root,pat -> \root,pat ->
let { kabIr = mkWord pat root; let { kabIr = mkWord pat root;
@@ -489,7 +489,7 @@ resource ParadigmsAra = open
}; };
lock_A = <> lock_A = <>
}; };
clrA root = clrA root =
let { eaHmar = mkWord "أَفعَل" root; let { eaHmar = mkWord "أَفعَل" root;
HamrA' = mkWord "فَعلاء" root; HamrA' = mkWord "فَعلاء" root;
@@ -498,20 +498,20 @@ resource ParadigmsAra = open
s = clr eaHmar HamrA' Humr; s = clr eaHmar HamrA' Humr;
lock_A = <> lock_A = <>
}; };
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
mkAdv x = ss x ** {lock_Adv = <>} ; mkAdv x = ss x ** {lock_Adv = <>} ;
mkAdV x = ss x ** {lock_AdV = <>} ; mkAdV x = ss x ** {lock_AdV = <>} ;
mkAdA x = ss x ** {lock_AdA = <>} ; mkAdA x = ss x ** {lock_AdA = <>} ;
mkPreposition p = p ; mkPreposition p = p ;
prepV2 : V -> Preposition -> V2 = \v,p -> v ** {s = v.s ; c2 = p ; lock_V2 = <>} ; prepV2 : V -> Preposition -> V2 = \v,p -> v ** {s = v.s ; c2 = p ; lock_V2 = <>} ;
strV2 : Str -> V2 = \str -> dirV2 (mkV str) ; strV2 : Str -> V2 = \str -> dirV2 (mkV str) ;
dirV2 v = prepV2 v [] ; dirV2 v = prepV2 v [] ;
mkV3 v p q = v ** {s = v.s ; c2 = p ; c3 = q ; lock_V3 = <>} ; mkV3 v p q = v ** {s = v.s ; c2 = p ; c3 = q ; lock_V3 = <>} ;
dirV3 v p = mkV3 v [] p ; dirV3 v p = mkV3 v [] p ;
dirdirV3 v = dirV3 v [] ; dirdirV3 v = dirV3 v [] ;

View File

@@ -3,107 +3,107 @@ resource PatternsAra = {
flags coding=utf8 ; flags coding=utf8 ;
oper oper
fA' = { h = "" ; m1 = ""; m2 = ""; t = "َاء"} ;
eafAcI = { h = "أَ"; m1 = "َا"; m2 = ""; t = "ِي" } ; fA' = { h = "" ; m1 = ""; m2 = ""; t = "َاء"} ;
eafcA' = { h = "أَ"; m1 = "ْ" ; m2 = ""; t = "َاء"} ;
eafcI = { h = "أَ"; m1 = "ْ" ; m2 = ""; t = "ِي" } ;
fac = { h = "" ; m1 = "َ" ; m2 = ""; t = "" } ;
facc = { h = "" ; m1 = "َ" ; m2 = ""; t = "ّ" } ;
facca = { h = "" ; m1 = "َ" ; m2 = ""; t = "َّ" } ;
facci = { h = "" ; m1 = "َ" ; m2 = ""; t = "ِّ" } ;
faccu = { h = "" ; m1 = "َ" ; m2 = ""; t = "ُّ" } ;
facp = { h = "" ; m1 = "َ" ; m2 = ""; t = "َة" } ;
faca = { h = "" ; m1 = "َ" ; m2 = ""; t = "َ" } ;
facA = { h = "" ; m1 = "َ" ; m2 = ""; t = "َا" } ;
facA' = { h = "" ; m1 = "َ" ; m2 = ""; t = "َاء"} ;
fAc = { h = "" ; m1 = "َا"; m2 = ""; t = "" } ;
fAcp = { h = "" ; m1 = "َا"; m2 = ""; t = "َة" } ;
fic = { h = "" ; m1 = "ِ" ; m2 = ""; t = "" } ;
ficc = { h = "" ; m1 = "ِ" ; m2 = ""; t = "ّ" } ;
ficA' = { h = "" ; m1 = "ِ" ; m2 = ""; t = "َاء"} ;
fIc = { h = "" ; m1 = "ِي"; m2 = ""; t = "" } ;
fIcAn = { h = "" ; m1 = "ِي"; m2 = ""; t = "َان"} ;
fca = { h = "" ; m1 = "ْ" ; m2 = ""; t = "َ" } ;
fci = { h = "" ; m1 = "ْ" ; m2 = ""; t = "ِ" } ;
fcu = { h = "" ; m1 = "ْ" ; m2 = ""; t = "ُ" } ;
fuc = { h = "" ; m1 = "ُ" ; m2 = ""; t = "" } ;
fucc = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ّ" } ;
fucci = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ِّ" } ;
fuccu = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ُّ" } ;
fuci = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ِ" } ;
fucu = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ُ" } ;
fUc = { h = "" ; m1 = "ُو"; m2 = ""; t = "" } ;
ufAc = { h = "ُ" ; m1 = "َا"; m2 = ""; t = "" } ;
ufca = { h = "ُ" ; m1 = "ْ" ; m2 = ""; t = "َ" } ;
eafAcil = { h = "أَ"; m1 = "َا" ; m2 = "ِ" ; t = "" } ; eafAcI = { h = "أَ"; m1 = "َا"; m2 = ""; t = "ِي" } ;
eafAcIl = { h = "أَ"; m1 = "َا" ; m2 = "ِي" ; t = "" } ; eafcA' = { h = "أَ"; m1 = "ْ" ; m2 = ""; t = "َاء"} ;
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ; eafcI = { h = "أَ"; m1 = "ْ" ; m2 = ""; t = "ِي" } ;
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ; fac = { h = "" ; m1 = "َ" ; m2 = ""; t = "" } ;
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ; facc = { h = "" ; m1 = "َ" ; m2 = ""; t = "ّ" } ;
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ; facca = { h = "" ; m1 = "َ" ; m2 = ""; t = "َّ" } ;
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ; facci = { h = "" ; m1 = "َ" ; m2 = ""; t = "ِّ" } ;
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ; faccu = { h = "" ; m1 = "َ" ; m2 = ""; t = "ُّ" } ;
eufcil = { h = "أُ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ; facp = { h = "" ; m1 = "َ" ; m2 = ""; t = "َة" } ;
euftucil = { h = "أُ"; m1 = "ْتُ" ; m2 = "ِ" ; t = "" } ; faca = { h = "" ; m1 = "َ" ; m2 = ""; t = "َ" } ;
euttucil = euftucil ** { h = "تُّأُ" ; m1 = "" } ; ---- IL assimilated VIII facA = { h = "" ; m1 = "َ" ; m2 = ""; t = "َا" } ;
afcul = { h = "َ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ; facA' = { h = "" ; m1 = "َ" ; m2 = ""; t = "َاء"} ;
faccalo = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "ْ" } ; fAc = { h = "" ; m1 = "َا"; m2 = ""; t = "" } ;
facal = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "" } ; fAcp = { h = "" ; m1 = "َا"; m2 = ""; t = "َة" } ;
facalo = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "ْ" } ; fic = { h = "" ; m1 = "ِ" ; m2 = ""; t = "" } ;
facalp = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "َة" } ; ficc = { h = "" ; m1 = "ِ" ; m2 = ""; t = "ّ" } ;
facA'il = { h = "" ; m1 = "َ" ; m2 = "َائِ"; t = "" } ; ficA' = { h = "" ; m1 = "ِ" ; m2 = ""; t = "َاء"} ;
facAl = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "" } ; fIc = { h = "" ; m1 = "ِي"; m2 = ""; t = "" } ;
facAlI = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "ِي" } ; fIcAn = { h = "" ; m1 = "ِي"; m2 = ""; t = "َان"} ;
facil = { h = "" ; m1 = "َ" ; m2 = "ِ" ; t = "" } ; fca = { h = "" ; m1 = "ْ" ; m2 = ""; t = "َ" } ;
facIl = { h = "" ; m1 = "َ" ; m2 = "ِي" ; t = "" } ; fci = { h = "" ; m1 = "ْ" ; m2 = ""; t = "ِ" } ;
facl = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "" } ; fcu = { h = "" ; m1 = "ْ" ; m2 = ""; t = "ُ" } ;
faclp = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "َة" } ; fuc = { h = "" ; m1 = "ُ" ; m2 = ""; t = "" } ;
facul = { h = "" ; m1 = "َ" ; m2 = "ُ" ; t = "" } ; fucc = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ّ" } ;
fAcal = { h = "" ; m1 = "َا" ; m2 = "َ" ; t = "" } ; fucci = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ِّ" } ;
fAcil = { h = "" ; m1 = "َا" ; m2 = "ِ" ; t = "" } ; fuccu = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ُّ" } ;
faccal = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "" } ; fuci = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ِ" } ;
faccil = { h = "" ; m1 = "َ" ; m2 = "ِّ" ; t = "" } ; fucu = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ُ" } ;
faclA' = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "َاء"} ; fUc = { h = "" ; m1 = "ُو"; m2 = ""; t = "" } ;
fAcilp = { h = "" ; m1 = "َا" ; m2 = "ِ" ; t = "َة" } ; ufAc = { h = "ُ" ; m1 = "َا"; m2 = ""; t = "" } ;
fawAcil = { h = "" ; m1 = "َوَا"; m2 = "ِ" ; t = "" } ; ufca = { h = "ُ" ; m1 = "ْ" ; m2 = ""; t = "َ" } ;
ficAlp = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "َة" } ;
fcal = { h = "" ; m1 = "ْ" ; m2 = "َ" ; t = "" } ; eafAcil = { h = "أَ"; m1 = "َا" ; m2 = "ِ" ; t = "" } ;
fcil = { h = "" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ; eafAcIl = { h = "أَ"; m1 = "َا" ; m2 = "ِي" ; t = "" } ;
fcul = { h = "" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ; eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
ficl = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "" } ; eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ; eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ; eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ; eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
ftacil = { h = "" ; m1 = "ْتَ" ; m2 = "ِ" ; t = "" } ; eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII eufcil = { h = "أُ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII euftucil = { h = "أُ"; m1 = "ْتُ" ; m2 = "ِ" ; t = "" } ;
fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ; euttucil = euftucil ** { h = "تُّأُ" ; m1 = "" } ; ---- IL assimilated VIII
fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ; afcul = { h = "َ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ; faccalo = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "ْ" } ;
fucal = { h = "" ; m1 = "ُ" ; m2 = "َ" ; t = "" } ; facal = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "" } ;
fucaylp = { h = "" ; m1 = "ُ" ; m2 = "َيْ" ; t = "َة" } ; facalo = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "ْ" } ;
fucAl = { h = "" ; m1 = "ُ" ; m2 = "َا" ; t = "" } ; facalp = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "َة" } ;
fucl = { h = "" ; m1 = "ُ" ; m2 = "ْ" ; t = "" } ; facA'il = { h = "" ; m1 = "َ" ; m2 = "َائِ"; t = "" } ;
fucil = { h = "" ; m1 = "ُ" ; m2 = "ِ" ; t = "" } ; facAl = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "" } ;
fuclp = { h = "" ; m1 = "ُ" ; m2 = "ْ" ; t = "َة" } ; facAlI = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "ِي" } ;
fucilo = { h = "" ; m1 = "ُ" ; m2 = "ِ" ; t = "ْ" } ; facil = { h = "" ; m1 = "َ" ; m2 = "ِ" ; t = "" } ;
fucul = { h = "" ; m1 = "ُ" ; m2 = "ُ" ; t = "" } ; facIl = { h = "" ; m1 = "َ" ; m2 = "ِي" ; t = "" } ;
fuculo = { h = "" ; m1 = "ُ" ; m2 = "ُ" ; t = "ْ" } ; facl = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "" } ;
fucUl = { h = "" ; m1 = "ُ" ; m2 = "ُو" ; t = "" } ; faclp = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "َة" } ;
fUcil = { h = "" ; m1 = "ُو" ; m2 = "ِ" ; t = "" } ; facul = { h = "" ; m1 = "َ" ; m2 = "ُ" ; t = "" } ;
fAcal = { h = "" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;
fAcil = { h = "" ; m1 = "َا" ; m2 = "ِ" ; t = "" } ;
faccal = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
faccil = { h = "" ; m1 = "َ" ; m2 = "ِّ" ; t = "" } ;
faclA' = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "َاء"} ;
fAcilp = { h = "" ; m1 = "َا" ; m2 = "ِ" ; t = "َة" } ;
fawAcil = { h = "" ; m1 = "َوَا"; m2 = "ِ" ; t = "" } ;
ficAlp = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "َة" } ;
fcal = { h = "" ; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
fcil = { h = "" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
fcul = { h = "" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
ficl = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "" } ;
ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ;
ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ;
ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
ftacil = { h = "" ; m1 = "ْتَ" ; m2 = "ِ" ; t = "" } ;
ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ;
fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ;
fucal = { h = "" ; m1 = "ُ" ; m2 = "َ" ; t = "" } ;
fucaylp = { h = "" ; m1 = "ُ" ; m2 = "َيْ" ; t = "َة" } ;
fucAl = { h = "" ; m1 = "ُ" ; m2 = "َا" ; t = "" } ;
fucl = { h = "" ; m1 = "ُ" ; m2 = "ْ" ; t = "" } ;
fucil = { h = "" ; m1 = "ُ" ; m2 = "ِ" ; t = "" } ;
fuclp = { h = "" ; m1 = "ُ" ; m2 = "ْ" ; t = "َة" } ;
fucilo = { h = "" ; m1 = "ُ" ; m2 = "ِ" ; t = "ْ" } ;
fucul = { h = "" ; m1 = "ُ" ; m2 = "ُ" ; t = "" } ;
fuculo = { h = "" ; m1 = "ُ" ; m2 = "ُ" ; t = "ْ" } ;
fucUl = { h = "" ; m1 = "ُ" ; m2 = "ُو" ; t = "" } ;
fUcil = { h = "" ; m1 = "ُو" ; m2 = "ِ" ; t = "" } ;
mafcUl = { h = "مَ"; m1 = "ْ" ; m2 = "ُو" ; t = "" } ; mafcUl = { h = "مَ"; m1 = "ْ" ; m2 = "ُو" ; t = "" } ;
mafcil = { h = "مَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ; mafcil = { h = "مَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
tafAcal = { h = "تَ"; m1 = "َا" ; m2 = "َ" ; t = "" } ; tafAcal = { h = "تَ"; m1 = "َا" ; m2 = "َ" ; t = "" } ;
tafaccal = { h = "تَ"; m1 = "َ" ; m2 = "َّ" ; t = "" } ; tafaccal = { h = "تَ"; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
tufuccil = { h = "تُ"; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ; tufuccil = { h = "تُ"; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
tufUcil = { h = "تُ"; m1 = "ُو" ; m2 = "ِ" ; t = "" } ; tufUcil = { h = "تُ"; m1 = "ُو" ; m2 = "ِ" ; t = "" } ;
ufAcal = { h = "ُ" ; m1 = "َا" ; m2 = "َ" ; t = "" } ; ufAcal = { h = "ُ" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;
ufAcil = { h = "ُ" ; m1 = "َا" ; m2 = "ِ" ; t = "" } ; ufAcil = { h = "ُ" ; m1 = "َا" ; m2 = "ِ" ; t = "" } ;
ufcal = { h = "ُ" ; m1 = "ْ" ; m2 = "َ" ; t = "" } ; ufcal = { h = "ُ" ; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
ufcil = { h = "ُ" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ; ufcil = { h = "ُ" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
ufcul = { h = "ُ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ; ufcul = { h = "ُ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
} }

View File

@@ -1,6 +1,6 @@
concrete PhraseAra of Phrase = CatAra ** open concrete PhraseAra of Phrase = CatAra ** open
ParamX, ParamX,
Prelude, Prelude,
ResAra in { ResAra in {
flags coding=utf8; flags coding=utf8;

View File

@@ -5,18 +5,18 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA
lin lin
QuestCl cl = { QuestCl cl = {
s = \\t,p => s = \\t,p =>
table { table {
QIndir => "إِذا" ++ cl.s ! t ! p ! Verbal ; QIndir => "إِذا" ++ cl.s ! t ! p ! Verbal ;
QDir => "هَل" ++ cl.s ! t ! p ! Verbal QDir => "هَل" ++ cl.s ! t ! p ! Verbal
} }
}; };
-- ComplSlashIP vps ip = {} ; -- ComplSlashIP vps ip = {} ;
-- AR copied from PredVP -- AR copied from PredVP
QuestVP qp vp = QuestVP qp vp =
{ s =\\t,p,_ => { s =\\t,p,_ =>
let { let {
---- o = Verbal ; ---- AR ---- o = Verbal ; ---- AR
objgn = pgn2gn vp.obj.a.pgn ; objgn = pgn2gn vp.obj.a.pgn ;
@@ -28,38 +28,38 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA
yaktubu = vp.s ! pgn ! VPImpf Ind ; yaktubu = vp.s ! pgn ! VPImpf Ind ;
yaktuba = vp.s ! pgn ! VPImpf Cnj ; yaktuba = vp.s ! pgn ! VPImpf Cnj ;
yaktub = vp.s ! pgn ! VPImpf Jus ; yaktub = vp.s ! pgn ! VPImpf Jus ;
vStr : ResAra.Tense -> Polarity -> Str = vStr : ResAra.Tense -> Polarity -> Str =
\tn,pl -> case<vp.isPred,tn,pl> of { \tn,pl -> case<vp.isPred,tn,pl> of {
<False, ResAra.Pres, Pos> => yaktubu ; <False, ResAra.Pres, Pos> => yaktubu ;
<False, ResAra.Pres, Neg> => "لَا" ++ yaktubu ; <False, ResAra.Pres, Neg> => "لَا" ++ yaktubu ;
<True, ResAra.Pres, Pos> => "" ; --no verb "to be" in present <True, ResAra.Pres, Pos> => "" ; --no verb "to be" in present
<True, ResAra.Pres, Neg> => "لَيسَ" ;--same here, just add negation particle <True, ResAra.Pres, Neg> => "لَيسَ" ;--same here, just add negation particle
<_, ResAra.Past, Pos> => kataba ; <_, ResAra.Past, Pos> => kataba ;
<_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ; <_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ;
<_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ; <_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ;
<_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba <_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba
}; };
pred : ResAra.Tense -> Polarity -> Str = pred : ResAra.Tense -> Polarity -> Str =
\tn,pl -> case <vp.isPred,tn,pl> of { \tn,pl -> case <vp.isPred,tn,pl> of {
<True, ResAra.Pres, Pos> => vp.pred.s ! gn ! Nom; --xabar marfooc <True, ResAra.Pres, Pos> => vp.pred.s ! gn ! Nom; --xabar marfooc
_ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob _ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob
} ; } ;
} in } in
--- case o of { --- case o of {
---- _ => ---- _ =>
case <False, np.a.isPron> of { case <False, np.a.isPron> of {
---- AR workaround 18/12/2008 case <vp.obj.a.isPron, np.a.isPron> of { ---- AR workaround 18/12/2008 case <vp.obj.a.isPron, np.a.isPron> of {
-- ya2kuluhu -- ya2kuluhu
<False,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p); <False,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p);
-- ya2kuluhu al-waladu, yakuluhu al-2awlaadu -- ya2kuluhu al-waladu, yakuluhu al-2awlaadu
<False,False> => (vStr t p) ++ np.s ! Nom ++ vp.obj.s ++ vp.s2 ++ (pred t p); <False,False> => (vStr t p) ++ np.s ! Nom ++ vp.obj.s ++ vp.s2 ++ (pred t p);
<True,False> => (vStr t p) ++ vp.obj.s ++ np.s ! Nom ++ vp.s2 ++ (pred t p); <True,False> => (vStr t p) ++ vp.obj.s ++ np.s ! Nom ++ vp.s2 ++ (pred t p);
<True,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p) <True,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p)
}; };
---- Nominal => ---- Nominal =>
---- np.s ! Nom ++ (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p) ---- np.s ! Nom ++ (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p)
} }
; ---- }; ; ---- };

View File

@@ -12,8 +12,8 @@ resource ResAra = PatternsAra ** open Prelude, Predef, ParamX in {
flags optimize=noexpand ; coding=utf8 ; flags optimize=noexpand ; coding=utf8 ;
param param
Vowel = u | a | i ; Vowel = u | a | i ;
Number = Sg | Dl | Pl; Number = Sg | Dl | Pl;
Gender = Masc | Fem ; Gender = Masc | Fem ;
@@ -26,10 +26,10 @@ resource ResAra = PatternsAra ** open Prelude, Predef, ParamX in {
Tense = Pres | Past | Fut ; Tense = Pres | Past | Fut ;
Order = Verbal | Nominal ; Order = Verbal | Nominal ;
oper oper
--roots, patterns, and making words: --roots, patterns, and making words:
Pattern : Type = {h, m1, m2, t : Str}; Pattern : Type = {h, m1, m2, t : Str};
Root : Type = {f : Str}; Root : Type = {f : Str};
Root2 : Type = Root ** {c : Str} ; Root2 : Type = Root ** {c : Str} ;
@@ -51,21 +51,21 @@ resource ResAra = PatternsAra ** open Prelude, Predef, ParamX in {
} }
}; };
-} -}
--for roots with 2 consonants (works also for assimilated strs, like fc~, --for roots with 2 consonants (works also for assimilated strs, like fc~,
--because the function discards anything after the first two characters --because the function discards anything after the first two characters
mkRoot2 : Str -> Root2 = \fcl -> mkRoot2 : Str -> Root2 = \fcl ->
let { cl = drop 2 fcl} in --drop 1 fcl let { cl = drop 2 fcl} in --drop 1 fcl
{f = take 2 fcl; c = take 2 cl}; --take 1 {f = take 2 fcl; c = take 2 cl}; --take 1
--opers to interdigitize (make words out of roots and patterns: --opers to interdigitize (make words out of roots and patterns:
oper oper
--regular case, 3 non-weak consonants --regular case, 3 non-weak consonants
mkStrong : Pattern -> Root3 -> Str = \p,fcl -> mkStrong : Pattern -> Root3 -> Str = \p,fcl ->
p.h + fcl.f + p.m1 + fcl.c + p.m2 + fcl.l + p.t; p.h + fcl.f + p.m1 + fcl.c + p.m2 + fcl.l + p.t;
mkDefective: Pattern -> Root3 -> Str = \p,fcl -> mkDefective: Pattern -> Root3 -> Str = \p,fcl ->
p.h + fcl.f + p.m1 + fcl.c + p.t; p.h + fcl.f + p.m1 + fcl.c + p.t;
mkHollow: Pattern -> Root3 -> Str = \p,fcl -> mkHollow: Pattern -> Root3 -> Str = \p,fcl ->
@@ -89,14 +89,14 @@ resource ResAra = PatternsAra ** open Prelude, Predef, ParamX in {
--takes a pattern string and root string and makes a word --takes a pattern string and root string and makes a word
mkWord : Str -> Str -> Str =\pS, rS -> mkWord : Str -> Str -> Str =\pS, rS ->
case pS of { case pS of {
w@_ + "ف" + x@_ + "ع" + y@_ + "ل" + z@_ => w@_ + "ف" + x@_ + "ع" + y@_ + "ل" + z@_ =>
mkStrong { h = w ; m1 = x; m2 = y; t = z} (mkRoot3 rS); mkStrong { h = w ; m1 = x; m2 = y; t = z} (mkRoot3 rS);
w@_ + "ف" + x@_ + "ع" + y@_ => w@_ + "ف" + x@_ + "ع" + y@_ =>
let pat = { h = w ; m1 = x; m2 = ""; t = y} in let pat = { h = w ; m1 = x; m2 = ""; t = y} in
case <length rS : Ints 100> of { case <length rS : Ints 100> of {
6 | 5 => mkWeak pat (mkRoot3 rS) ; --3=> 6 | 5 => mkWeak pat (mkRoot3 rS) ; --3=>
4 | 3 => mkBilit pat (mkRoot2 rS) ; --2=> 4 | 3 => mkBilit pat (mkRoot2 rS) ; --2=>
_ => rS ---- AR error "expected 3--6" _ => rS ---- AR error "expected 3--6"
} }
}; };
@@ -120,33 +120,33 @@ resource ResAra = PatternsAra ** open Prelude, Predef, ParamX in {
uttNum : NumOrdCard -> (Gender => Str) ; uttNum : NumOrdCard -> (Gender => Str) ;
uttNum n = \\g => n.s ! g ! Def ! Nom ; ----IL uttNum n = \\g => n.s ! g ! Def ! Nom ; ----IL
param param
VForm = VForm =
VPerf Voice PerGenNum VPerf Voice PerGenNum
| VImpf Mood Voice PerGenNum | VImpf Mood Voice PerGenNum
| VImp Gender Number | VImp Gender Number
| VPPart ; | VPPart ;
PerGenNum = PerGenNum =
Per3 Gender Number Per3 Gender Number
| Per2 Gender Number | Per2 Gender Number
| Per1 SgPl; | Per1 SgPl;
SgPl = Sing | Plur; SgPl = Sing | Plur;
AForm = AForm =
APosit Gender Number State Case APosit Gender Number State Case
| AComp State Case ; | AComp State Case ;
--verbal morphology --verbal morphology
oper oper
--macro for sound verb --macro for sound verb
--PerfAct, PerfPas, ImpfAct, ImpfPas, Imp, PPart --PerfAct, PerfPas, ImpfAct, ImpfPas, Imp, PPart
verb : (_,_,_,_,_,_ : Str) -> Verb = verb : (_,_,_,_,_,_ : Str) -> Verb =
\katab,kutib,aktub,uktab,euktub,maktUb -> { \katab,kutib,aktub,uktab,euktub,maktUb -> {
s = table { s = table {
VPerf Act pgn => katab + suffixPerf ! pgn ; VPerf Act pgn => katab + suffixPerf ! pgn ;
VPerf Pas pgn => kutib + suffixPerf ! pgn ; VPerf Pas pgn => kutib + suffixPerf ! pgn ;
@@ -156,63 +156,63 @@ oper
VImpf m Pas pgn => prefixImpf !pgn + uktab + suffixImpfCJ m !pgn; VImpf m Pas pgn => prefixImpf !pgn + uktab + suffixImpfCJ m !pgn;
VImp g n => euktub + suffixImpfCJ Jus ! (Per2 g n); VImp g n => euktub + suffixImpfCJ Jus ! (Per2 g n);
VPPart => maktUb VPPart => maktUb
} }
} ; } ;
--affixes of sound verbs --affixes of sound verbs
suffixPerf : PerGenNum => Str = suffixPerf : PerGenNum => Str =
table { table {
Per3 Masc Sg => "َ" ; Per3 Masc Sg => "َ" ;
Per3 Masc Dl => "َا" ; Per3 Masc Dl => "َا" ;
Per3 Masc Pl => "ُوا" ; Per3 Masc Pl => "ُوا" ;
Per3 Fem Sg => "َتْ" ; Per3 Fem Sg => "َتْ" ;
Per3 Fem Dl => "َتَا" ; Per3 Fem Dl => "َتَا" ;
Per3 Fem Pl => "ْنَ" ; Per3 Fem Pl => "ْنَ" ;
Per2 Masc Sg => "ْتَ" ; Per2 Masc Sg => "ْتَ" ;
Per2 _ Dl => "ْتُمَا" ; Per2 _ Dl => "ْتُمَا" ;
Per2 Masc Pl => "ْتُمْ" ; Per2 Masc Pl => "ْتُمْ" ;
Per2 Fem Sg => "ْتِ" ; Per2 Fem Sg => "ْتِ" ;
Per2 Fem Pl => "ْتُنَّ" ; Per2 Fem Pl => "ْتُنَّ" ;
Per1 Sing => "ْتُ" ; Per1 Sing => "ْتُ" ;
Per1 Plur => "ْنَا" Per1 Plur => "ْنَا"
} ; } ;
prefixImpf : PerGenNum => Str = prefixImpf : PerGenNum => Str =
table { table {
Per1 Sing => "أ" ; Per1 Sing => "أ" ;
Per1 Plur => "ن" ; Per1 Plur => "ن" ;
Per3 Masc _ => "ي" ; Per3 Masc _ => "ي" ;
Per3 Fem Pl => "ي" ; Per3 Fem Pl => "ي" ;
_ => "ت" _ => "ت"
} ; } ;
suffixImpfInd : PerGenNum => Str = suffixImpfInd : PerGenNum => Str =
table { table {
Per3 Masc Pl => "ُونَ" ; Per3 Masc Pl => "ُونَ" ;
Per3 Fem Pl => "ْنَ" ; Per3 Fem Pl => "ْنَ" ;
Per3 g Dl => "َانِ" ; Per3 g Dl => "َانِ" ;
Per2 Masc Pl => "ُونَ" ; Per2 Masc Pl => "ُونَ" ;
Per2 Fem Sg => "ِينَ" ; Per2 Fem Sg => "ِينَ" ;
Per2 g Dl => "َانِ" ; Per2 g Dl => "َانِ" ;
Per2 Fem Pl => "ْنَ" ; Per2 Fem Pl => "ْنَ" ;
_ => "ُ" _ => "ُ"
} ; } ;
suffixImpfCJ : Mood -> PerGenNum => Str = \m -> suffixImpfCJ : Mood -> PerGenNum => Str = \m ->
table { table {
Per3 Masc Pl => "ُوا" ; Per3 Masc Pl => "ُوا" ;
Per3 Fem Pl => "ْنَ" ; Per3 Fem Pl => "ْنَ" ;
Per3 g Dl => "َا" ; Per3 g Dl => "َا" ;
Per2 Masc Pl => "ُوا" ; Per2 Masc Pl => "ُوا" ;
Per2 Fem Sg => "ِي" ; Per2 Fem Sg => "ِي" ;
Per2 g Dl => "َا" ; Per2 g Dl => "َا" ;
Per2 Fem Pl => "ْنَ" ; Per2 Fem Pl => "ْنَ" ;
_ => endVowel ! m _ => endVowel ! m
} ; } ;
--macro for geminate verbs: FIXME, change the misleading variable names --macro for geminate verbs: FIXME, change the misleading variable names
verbGeminate : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = verbGeminate : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\xAf,xif,xyf,xuf,axAf,axaf,uxAf,uxaf,xaf,xAf',ppart -> \xAf,xif,xyf,xuf,axAf,axaf,uxAf,uxaf,xaf,xAf',ppart ->
let { perfPattern = patHollowPerf xAf xif xyf xuf ; let { perfPattern = patHollowPerf xAf xif xyf xuf ;
impfPattern = patHollowImpf axAf axaf uxAf uxaf ; impfPattern = patHollowImpf axAf axaf uxAf uxaf ;
@@ -226,9 +226,9 @@ oper
VPPart => ppart VPPart => ppart
} }
} ; } ;
--macro for hollow verbs: --macro for hollow verbs:
verbHollow : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = verbHollow : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\xAf,xif,xyf,xuf,axAf,axaf,uxAf,uxaf,xaf,xAf',ppart -> \xAf,xif,xyf,xuf,axAf,axaf,uxAf,uxaf,xaf,xAf',ppart ->
let { perfPattern = patHollowPerf xAf xif xyf xuf ; let { perfPattern = patHollowPerf xAf xif xyf xuf ;
impfPattern = patHollowImpf axAf axaf uxAf uxaf ; impfPattern = patHollowImpf axAf axaf uxAf uxaf ;
@@ -244,7 +244,7 @@ oper
VPPart => ppart VPPart => ppart
} }
} ; } ;
--macro for defective verbs: --macro for defective verbs:
verbDef : DefForms -> Vowel -> Verb = verbDef : DefForms -> Vowel -> Verb =
\vforms,vImpf -> \vforms,vImpf ->
@@ -273,10 +273,10 @@ oper
VPPart => ppart VPPart => ppart
} }
} ; } ;
patDefPerf : (_,_,_,_,_ :Str) -> Voice => PerGenNum => Str = \rama,ramay,rumi,rumu,rumy -> patDefPerf : (_,_,_,_,_ :Str) -> Voice => PerGenNum => Str = \rama,ramay,rumi,rumu,rumy ->
table { table {
Act => Act =>
table { table {
Per3 Fem Pl => ramay ; Per3 Fem Pl => ramay ;
Per3 _ _ => rama ; Per3 _ _ => rama ;
@@ -290,7 +290,7 @@ oper
_ => rumy _ => rumy
} }
} ; } ;
--ignores the vowel=u case, eg "دعو" --ignores the vowel=u case, eg "دعو"
patDefImpfAct : (_,_ : Str) -> PerGenNum => Str = \rmi,rmu -> patDefImpfAct : (_,_ : Str) -> PerGenNum => Str = \rmi,rmu ->
table { table {
@@ -298,47 +298,47 @@ oper
Per2 Masc Pl => rmu ; Per2 Masc Pl => rmu ;
_ => rmi _ => rmi
} ; } ;
patDefImp : (_,_ : Str) -> Gender => Number => Str = \rmi, rmu -> patDefImp : (_,_ : Str) -> Gender => Number => Str = \rmi, rmu ->
table { table {
Masc => table {Pl => rmu ; _ => rmi} ; Masc => table {Pl => rmu ; _ => rmi} ;
_ => table {_ => rmi} _ => table {_ => rmi}
} ; } ;
suffixPerfDef : Voice -> PerGenNum => Str = \v -> suffixPerfDef : Voice -> PerGenNum => Str = \v ->
let {p3ms = let {p3ms =
case v of { case v of {
Act => "ى" ; Act => "ى" ;
Pas => "يَ" Pas => "يَ"
} ; } ;
ya = ya =
case v of { case v of {
Act => "" ; Act => "" ;
Pas => "يَ" Pas => "يَ"
} }
} in } in
table { table {
Per3 Masc Sg => p3ms ; Per3 Masc Sg => p3ms ;
Per3 Masc Dl => "يَا" ; Per3 Masc Dl => "يَا" ;
Per3 Masc Pl => "وْا" ; Per3 Masc Pl => "وْا" ;
Per3 Fem Sg => ya + "تْ" ; Per3 Fem Sg => ya + "تْ" ;
Per3 Fem Dl => ya + "تَا" ; Per3 Fem Dl => ya + "تَا" ;
Per3 Fem Pl => "نَ" ; Per3 Fem Pl => "نَ" ;
Per2 Masc Sg => "تَ" ; Per2 Masc Sg => "تَ" ;
Per2 _ Dl => "تُمَا" ; Per2 _ Dl => "تُمَا" ;
Per2 Masc Pl => "تُمْ" ; Per2 Masc Pl => "تُمْ" ;
Per2 Fem Sg => "تِ" ; Per2 Fem Sg => "تِ" ;
Per2 Fem Pl => "تُنَّ" ; Per2 Fem Pl => "تُنَّ" ;
Per1 Sing => "تُ" ; Per1 Sing => "تُ" ;
Per1 Plur => "نَا" Per1 Plur => "نَا"
} ; } ;
suffixImpfDef : Voice -> Vowel -> Mood => PerGenNum => Str = \vc,vw -> suffixImpfDef : Voice -> Vowel -> Mood => PerGenNum => Str = \vc,vw ->
let { let {
default : Mood -> Str = \m -> default : Mood -> Str = \m ->
case vc of { case vc of {
Pas => case m of {Jus => "" ; _ => "ى"} ; Pas => case m of {Jus => "" ; _ => "ى"} ;
Act => case vw of { Act => case vw of {
@@ -346,35 +346,35 @@ oper
i => case m of {Ind => "ي" ; Cnj => "يَ" ; Jus => ""} ; i => case m of {Ind => "ي" ; Cnj => "يَ" ; Jus => ""} ;
a => case m of {Ind => "ى" ; Cnj => "ى" ; Jus => ""} a => case m of {Ind => "ى" ; Cnj => "ى" ; Jus => ""}
} }
} }
} in } in
table { table {
Ind => Ind =>
table { table {
Per3 Masc Pl => "وْنَ" ; Per3 Masc Pl => "وْنَ" ;
Per2 Masc Pl => "وْنَ" ; Per2 Masc Pl => "وْنَ" ;
Per3 g Dl => "يَانِ" ; Per3 g Dl => "يَانِ" ;
Per2 g Dl => "يَانِ" ; Per2 g Dl => "يَانِ" ;
Per3 Fem Pl => "يْنَ" ; Per3 Fem Pl => "يْنَ" ;
Per2 Fem _ => "يْنَ" ; Per2 Fem _ => "يْنَ" ;
_ => default Ind _ => default Ind
} ; } ;
m => m =>
table { table {
Per3 Masc Pl => "وْا" ; Per3 Masc Pl => "وْا" ;
Per2 Masc Pl => "وْا" ; Per2 Masc Pl => "وْا" ;
Per3 g Dl => "يَا" ; Per3 g Dl => "يَا" ;
Per2 g Dl => "يَا" ; Per2 g Dl => "يَا" ;
Per3 Fem Pl => "يْنَ" ; Per3 Fem Pl => "يْنَ" ;
Per2 Fem Pl => "يْنَ" ; Per2 Fem Pl => "يْنَ" ;
Per2 Fem Sg => "ي" ; Per2 Fem Sg => "ي" ;
_ => default m _ => default m
} }
} ; } ;
--now is used for the sound, assimilated (weak C1), and when C1 = hamza: --now is used for the sound, assimilated (weak C1), and when C1 = hamza:
v1sound : Root3 -> Vowel -> Vowel -> Verb = v1sound : Root3 -> Vowel -> Vowel -> Verb =
\fcl,vPerf,vImpf -> \fcl,vPerf,vImpf ->
let { let {
qf = {f = fcl.c ; c = fcl.l} ; qf = {f = fcl.c ; c = fcl.l} ;
@@ -382,7 +382,7 @@ v1sound : Root3 -> Vowel -> Vowel -> Verb =
katab = mkStrong (patV1Perf ! vPerf) fcl ; katab = mkStrong (patV1Perf ! vPerf) fcl ;
kutib = mkStrong fucil fcl ; --FIXME no passive if vPerf == u kutib = mkStrong fucil fcl ; --FIXME no passive if vPerf == u
ktub = mkStrong (patV1Impf ! vImpf) fcl ; ktub = mkStrong (patV1Impf ! vImpf) fcl ;
aktub = "َ" + aktub = "َ" +
case fcl.f of { case fcl.f of {
"و"|"ي" => qif ; "و"|"ي" => qif ;
_ => ktub _ => ktub
@@ -392,24 +392,24 @@ v1sound : Root3 -> Vowel -> Vowel -> Verb =
"؟"|"و"|"ي" => qif ; "؟"|"و"|"ي" => qif ;
_ => prefixImp ! vImpf + ktub _ => prefixImp ! vImpf + ktub
}; };
maktUb = mkStrong mafcUl fcl maktUb = mkStrong mafcUl fcl
} in } in
verb katab kutib aktub uktab euktub maktUb ; verb katab kutib aktub uktab euktub maktUb ;
v1hollow : Root3 -> Vowel -> Verb = v1hollow : Root3 -> Vowel -> Verb =
\xwf,vowel -> \xwf,vowel ->
let { let {
xAf = mkHollow fAc xwf ; xAf = mkHollow fAc xwf ;
xif = mkHollow (patHol1 ! vowel) xwf ; xif = mkHollow (patHol1 ! vowel) xwf ;
xyf = mkHollow fIc xwf ; xyf = mkHollow fIc xwf ;
xuf = mkHollow (patHol2 ! vowel) xwf ; xuf = mkHollow (patHol2 ! vowel) xwf ;
xaf = mkHollow (fvc ! vowel) xwf ; xaf = mkHollow (fvc ! vowel) xwf ;
axaf= "َ" + xaf ; axaf= "َ" + xaf ;
uxAf= mkHollow ufAc xwf ; uxAf= mkHollow ufAc xwf ;
uxaf= "ُ" + xaf ; uxaf= "ُ" + xaf ;
xAf'= mkHollow (patHol3 ! vowel) xwf ; xAf'= mkHollow (patHol3 ! vowel) xwf ;
axAf= "َ" + xAf'; axAf= "َ" + xAf';
ppart = "مَ" + xAf' -- FIXME actually wierd anomalies happen with the a vowel.. ppart = "مَ" + xAf' -- FIXME actually wierd anomalies happen with the a vowel..
} in verbHollow xAf xif xyf xuf axAf axaf uxAf uxaf xaf xAf' ppart ; } in verbHollow xAf xif xyf xuf axAf axaf uxAf uxaf xaf xAf' ppart ;
@@ -436,7 +436,7 @@ fvc : Vowel => Pattern =
v1geminate : Str -> Vowel -> Vowel -> Verb = v1geminate : Str -> Vowel -> Vowel -> Verb =
\rootStr,vPerf,vImpf -> \rootStr,vPerf,vImpf ->
let { let {
mdd = mkRoot3 rootStr ; --fcc mdd = mkRoot3 rootStr ; --fcc
md = mkRoot2 rootStr ; --fc md = mkRoot2 rootStr ; --fc
@@ -525,7 +525,7 @@ v1defective_i : Root3 -> Vowel -> Verb = \bqy,vImpf -> -- IL (conjugation 1d4)
baqI = mkDefective facIl bqy ; baqI = mkDefective facIl bqy ;
baqiy = mkDefective facil bqy ; baqiy = mkDefective facil bqy ;
vforms_i = table { 0 => baqI ; vforms_i = table { 0 => baqI ;
1 => baqiy ; 1 => baqiy ;
x => vforms_a ! x } ; x => vforms_a ! x } ;
in verbDef vforms_i vImpf ; in verbDef vforms_i vImpf ;
@@ -568,7 +568,7 @@ v2defective : Root3 -> Verb = \gny ->
mugannaY = "مُ" + ganna + "ى" mugannaY = "مُ" + ganna + "ى"
} in verbDef (toDefForms ganna gannay gunni gunnu gunniy uganni ugannu uganna ganni gannu mugannaY) i; } in verbDef (toDefForms ganna gannay gunni gunnu gunniy uganni ugannu uganna ganni gannu mugannaY) i;
v3sound : Root3 -> Verb = v3sound : Root3 -> Verb =
\tbc -> \tbc ->
let { let {
tAbac = mkStrong fAcal tbc ; tAbac = mkStrong fAcal tbc ;
@@ -576,7 +576,7 @@ v3sound : Root3 -> Verb =
tAbic = mkStrong fAcil tbc ; tAbic = mkStrong fAcil tbc ;
utAbic = "ُ" + tAbic ; utAbic = "ُ" + tAbic ;
utAbac = mkStrong ufAcal tbc ; utAbac = mkStrong ufAcal tbc ;
mutAbac = "م" + utAbac mutAbac = "م" + utAbac
} in verb tAbac twbic utAbic utAbac tAbic mutAbac; } in verb tAbac twbic utAbic utAbac tAbic mutAbac;
v4sound : Root3 -> Verb = v4sound : Root3 -> Verb =
@@ -588,7 +588,7 @@ v4sound : Root3 -> Verb =
uqnac = mkStrong ufcal qnc; uqnac = mkStrong ufcal qnc;
eaqnic = mkStrong eafcil qnc; eaqnic = mkStrong eafcil qnc;
muqnac = "م" + uqnac muqnac = "م" + uqnac
} in } in
verb eaqnac euqnic uqnic uqnac eaqnic muqnac; verb eaqnac euqnic uqnic uqnac eaqnic muqnac;
@@ -610,7 +610,7 @@ v4defective : Root3 -> Verb = \cTy ->
mucTaY = "م" + ucTa +"ى" mucTaY = "م" + ucTa +"ى"
} in verbDef (toDefForms eacTa eacTay eucTi eucTu eucTiy ucTi ucTu ucTa eacTi eacTu mucTaY) i; } in verbDef (toDefForms eacTa eacTay eucTi eucTu eucTiy ucTi ucTu ucTa eacTi eacTu mucTaY) i;
v5sound : Root3 -> Verb = v5sound : Root3 -> Verb =
\nfs -> \nfs ->
let { let {
tanaffas = mkStrong tafaccal nfs ; tanaffas = mkStrong tafaccal nfs ;
@@ -620,7 +620,7 @@ v5sound : Root3 -> Verb =
mutanaffas = "م" + tanaffas mutanaffas = "م" + tanaffas
} in verb tanaffas tunuffis atanaffas utanaffas tanaffas mutanaffas; } in verb tanaffas tunuffis atanaffas utanaffas tanaffas mutanaffas;
v6sound : Root3 -> Verb = v6sound : Root3 -> Verb =
\fqm -> \fqm ->
let { let {
tafAqam = mkStrong tafAcal fqm ; tafAqam = mkStrong tafAcal fqm ;
@@ -630,7 +630,7 @@ v6sound : Root3 -> Verb =
mutafAqam = "م" + utafAqam mutafAqam = "م" + utafAqam
} in verb tafAqam tufUqim atafAqam utafAqam tafAqam mutafAqam; } in verb tafAqam tufUqim atafAqam utafAqam tafAqam mutafAqam;
v8sound : Root3 -> Verb = v8sound : Root3 -> Verb =
\rbT -> \rbT ->
let { let {
rtabiT = mkStrong ftacil rbT ; rtabiT = mkStrong ftacil rbT ;
@@ -678,7 +678,7 @@ endVowel : Mood => Str =
Ind => "" Ind => ""
} ; } ;
prefixImp : Vowel => Str = prefixImp : Vowel => Str =
table { table {
u => "أُ" ; u => "أُ" ;
_ => "إِ" _ => "إِ"
@@ -686,7 +686,7 @@ prefixImp : Vowel => Str =
patHollowPerf : (_,_,_,_ :Str) -> Voice => PerGenNum => Str = \xAf,xif,xyf,xuf -> patHollowPerf : (_,_,_,_ :Str) -> Voice => PerGenNum => Str = \xAf,xif,xyf,xuf ->
table { table {
Act => Act =>
table { table {
Per3 Fem Pl => xif ; Per3 Fem Pl => xif ;
Per3 _ _ => xAf ; Per3 _ _ => xAf ;
@@ -703,7 +703,7 @@ patHollowPerf : (_,_,_,_ :Str) -> Voice => PerGenNum => Str = \xAf,xif,xyf,xuf -
--this is the pattern of imperfect hollow (ind & conj) and geminate verbs (all) --this is the pattern of imperfect hollow (ind & conj) and geminate verbs (all)
patHollowImpf : (_,_,_,_ :Str) -> Voice => PerGenNum => Str = \axAf,axaf,uxAf,uxaf -> patHollowImpf : (_,_,_,_ :Str) -> Voice => PerGenNum => Str = \axAf,axaf,uxAf,uxaf ->
table { table {
Act => Act =>
table { table {
Per3 Fem Pl => axaf ; Per3 Fem Pl => axaf ;
Per2 Fem Pl => axaf ; Per2 Fem Pl => axaf ;
@@ -719,7 +719,7 @@ patHollowImpf : (_,_,_,_ :Str) -> Voice => PerGenNum => Str = \axAf,axaf,uxAf,ux
patHollowJus : (_,_,_,_ : Str) -> Voice => PerGenNum => Str =\axaf,axAf,uxaf,uxAf-> patHollowJus : (_,_,_,_ : Str) -> Voice => PerGenNum => Str =\axaf,axAf,uxaf,uxAf->
table { table {
Act => Act =>
table { table {
Per3 g Sg => axaf ; Per3 g Sg => axaf ;
Per3 Fem Pl => axaf; Per3 Fem Pl => axaf;
@@ -728,7 +728,7 @@ patHollowJus : (_,_,_,_ : Str) -> Voice => PerGenNum => Str =\axaf,axAf,uxaf,uxA
Per1 _ => axaf; Per1 _ => axaf;
_ => axAf _ => axAf
} ; } ;
Pas => Pas =>
table { table {
Per3 g Sg => uxaf ; Per3 g Sg => uxaf ;
Per3 Fem Pl => uxaf; Per3 Fem Pl => uxaf;
@@ -736,9 +736,9 @@ patHollowJus : (_,_,_,_ : Str) -> Voice => PerGenNum => Str =\axaf,axAf,uxaf,uxA
Per2 Masc Sg => uxaf; Per2 Masc Sg => uxaf;
Per1 _ => uxaf; Per1 _ => uxaf;
_ => uxAf _ => uxAf
} }
} ; } ;
patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
@@ -752,12 +752,12 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
--takes the adjective lemma and gives the Posit table --takes the adjective lemma and gives the Posit table
positAdj : Str -> Gender => NTable = positAdj : Str -> Gender => NTable =
\kabIr -> \kabIr ->
let kabIra = kabIr + "َة" in let kabIra = kabIr + "َة" in
table { table {
Masc => sndm kabIr; Masc => sndm kabIr;
Fem => sndf kabIra Fem => sndf kabIra
}; };
clr : Str -> Str -> Str -> AForm => Str = clr : Str -> Str -> Str -> AForm => Str =
\aHmar,HamrA',Humr -> \aHmar,HamrA',Humr ->
table { table {
@@ -885,43 +885,43 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
} }
}; };
--indeclinables (mamnuu3 mina S-Sarf) --indeclinables (mamnuu3 mina S-Sarf)
indecl : Case => Str = indecl : Case => Str =
table { table {
Nom => "ُ"; Nom => "ُ";
_ => "َ" _ => "َ"
}; };
--declection 2 (ends in yaa')
dec2sg : State => Case => Str = --declection 2 (ends in yaa')
dec2sg : State => Case => Str =
table { table {
Indef => Indef =>
table { table {
Acc => "ِياً"; Acc => "ِياً";
_ => "ٍ" _ => "ٍ"
}; };
_ => _ =>
table { table {
Acc => "ِيَ"; Acc => "ِيَ";
_ => "ِي" _ => "ِي"
} }
}; };
--declention 3 (ending in alif) --declention 3 (ending in alif)
dec3sg : State => Case => Str = dec3sg : State => Case => Str =
table { table {
Indef => Indef =>
table { table {
_ => "ً" _ => "ً"
}; };
_ => _ =>
table { table {
_ => "" _ => ""
} }
}; };
--dual suffixes --dual suffixes
dl : State => Case => Str = dl : State => Case => Str =
table { table {
@@ -967,7 +967,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
} }
}; };
mkAt : Str -> Str = \bayDo -> mkAt : Str -> Str = \bayDo ->
case bayDo of { case bayDo of {
bayD + "ة" => bayD + "ات"; bayD + "ة" => bayD + "ات";
@@ -975,10 +975,10 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
bayD + "ى" => bayD + "يَات"; bayD + "ى" => bayD + "يَات";
_ => bayDo + "ات" _ => bayDo + "ات"
}; };
oper oper
sizeToNumber : Size -> Number = \s -> sizeToNumber : Size -> Number = \s ->
case s of { case s of {
ThreeTen | None => Pl; ThreeTen | None => Pl;
@@ -1011,8 +1011,8 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
--FIXME needs testing --FIXME needs testing
nounCase : Case -> Size -> State -> Case = nounCase : Case -> Size -> State -> Case =
\c,size,s -> \c,size,s ->
case <size,s> of { case <size,s> of {
<Teen,_> => Acc; <Teen,_> => Acc;
<NonTeen,_> => Acc; <NonTeen,_> => Acc;
@@ -1021,7 +1021,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
<_,Const> => Gen; <_,Const> => Gen;
_ => c _ => c
}; };
definite : State => State = definite : State => State =
table { table {
Indef => Indef; Indef => Indef;
@@ -1035,7 +1035,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
case <s,n> of { case <s,n> of {
<Indef,Hundreds> => Const; <Indef,Hundreds> => Const;
<Indef,ThreeTen> => Const; <Indef,ThreeTen> => Const;
_ => s _ => s
}; };
-- in a NP, sometimes the common noun preceedes the determiner -- in a NP, sometimes the common noun preceedes the determiner
@@ -1049,9 +1049,9 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
<_,True,_,Def> => True; --definite numbers act as adjectives <_,True,_,Def> => True; --definite numbers act as adjectives
<_,True,Two,_> => True; --numerals one and two always adjectives <_,True,Two,_> => True; --numerals one and two always adjectives
<_,True,One,_> => True; --numerals one and two always adjectives <_,True,One,_> => True; --numerals one and two always adjectives
_ => False _ => False
}; };
agrP3 : Species -> Gender -> Number -> PerGenNum= \h,g,n -> agrP3 : Species -> Gender -> Number -> PerGenNum= \h,g,n ->
case <h,n> of { case <h,n> of {
<NoHum,Pl> => Per3 Fem Sg; <NoHum,Pl> => Per3 Fem Sg;
@@ -1064,13 +1064,13 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
Per2 gn nm => {g = gn; n = nm}; Per2 gn nm => {g = gn; n = nm};
_ => {g = Masc; n = Sg} --randomly _ => {g = Masc; n = Sg} --randomly
}; };
mkIP : Str -> Number -> IP = mkIP : Str -> Number -> IP =
\s,n -> {s = \\_g,_s,_c => s ; n = n} ; \s,n -> {s = \\_g,_s,_c => s ; n = n} ;
mkOrd : (_,_ : Str) -> NumOrdCard = mkOrd : (_,_ : Str) -> NumOrdCard =
\aysar,yusra -> \aysar,yusra ->
{ s = \\g,s,c => { s = \\g,s,c =>
case g of { case g of {
Masc => (sing aysar) ! s ! c; Masc => (sing aysar) ! s ! c;
@@ -1078,23 +1078,23 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
}; };
n = None n = None
}; };
oper oper
Det : Type = { Det : Type = {
s : Species => Gender => Case => Str ; s : Species => Gender => Case => Str ;
d : State; d : State;
n : Size; n : Size;
isNum : Bool; isNum : Bool;
-- for genitive pronouns (suffixes). if true, then "cn ++ det" -- for genitive pronouns (suffixes). if true, then "cn ++ det"
--should be used instead of "det ++ cn" when constructing the NP --should be used instead of "det ++ cn" when constructing the NP
isPron : Bool isPron : Bool
} ; } ;
Predet : Type = { Predet : Type = {
s : Case => Str; s : Case => Str;
isDecl : Bool isDecl : Bool
}; };
Agr = { pgn : PerGenNum; isPron : Bool} ; Agr = { pgn : PerGenNum; isPron : Bool} ;
@@ -1102,16 +1102,16 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
Comp : Type = { Comp : Type = {
s : AAgr => Case => Str s : AAgr => Case => Str
} ; } ;
Obj : Type = { Obj : Type = {
s : Str ; s : Str ;
a : Agr a : Agr
}; };
NP : Type = { NP : Type = {
s : Case => Str ; s : Case => Str ;
a : Agr a : Agr
} ; } ;
IP : Type = { IP : Type = {
@@ -1122,19 +1122,19 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
} ; } ;
param VPForm = param VPForm =
VPPerf VPPerf
| VPImpf Mood | VPImpf Mood
| VPImp ; | VPImp ;
oper oper
VP : Type = { VP : Type = {
s : PerGenNum => VPForm => Str; s : PerGenNum => VPForm => Str;
obj : Obj; obj : Obj;
pred : Comp; pred : Comp;
isPred : Bool; --indicates if there is a predicate (xabar) isPred : Bool; --indicates if there is a predicate (xabar)
s2 : Str s2 : Str
}; };
-- For complements of VV. -- For complements of VV.
-- TODO: does verbal complement agree with the noun -- TODO: does verbal complement agree with the noun
@@ -1148,7 +1148,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
} ; } ;
predV : Verb -> VP = \v -> predV : Verb -> VP = \v ->
{ s = \\pgn,vf => { s = \\pgn,vf =>
let gn = pgn2gn pgn in let gn = pgn2gn pgn in
case vf of { case vf of {
VPPerf => v.s ! (VPerf Act pgn); VPPerf => v.s ! (VPerf Act pgn);
@@ -1156,16 +1156,16 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
VPImp => v.s ! (VImp Masc Sg)--gn.g gn.n) VPImp => v.s ! (VImp Masc Sg)--gn.g gn.n)
}; };
obj = { obj = {
s = [] ; s = [] ;
a = {pgn = Per3 Masc Sg ; isPron = False} a = {pgn = Per3 Masc Sg ; isPron = False}
}; --or anything! }; --or anything!
s2 = []; s2 = [];
pred = { s = \\_,_ => []}; pred = { s = \\_,_ => []};
isPred = False isPred = False
}; };
-- in verbal sentences, the verb agrees with the subject -- in verbal sentences, the verb agrees with the subject
-- in Gender but not in number -- in Gender but not in number
verbalAgr : PerGenNum -> PerGenNum = \pgn -> verbalAgr : PerGenNum -> PerGenNum = \pgn ->
case pgn of { case pgn of {
@@ -1184,7 +1184,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
insertStr : Str -> VP -> VP = \str,vp -> vp ** insertStr : Str -> VP -> VP = \str,vp -> vp **
{ s2 = vp.s2 ++ str }; { s2 = vp.s2 ++ str };
kaan : {s : AAgr => Case => Str} -> VP = \xabar -> kaan : {s : AAgr => Case => Str} -> VP = \xabar ->
insertPred xabar (predV (v1hollow {f = "ك"; c = "و" ; l = "ن"} u) ); insertPred xabar (predV (v1hollow {f = "ك"; c = "و" ; l = "ن"} u) );
-- Slash categories -- Slash categories
@@ -1195,7 +1195,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
QCl : Type = {s : Tense => Polarity => QForm => Str} ; QCl : Type = {s : Tense => Polarity => QForm => Str} ;
--TODO: slashRCl : ClSlash -> RP -> RCl ; --TODO: slashRCl : ClSlash -> RP -> RCl ;
param param
Size = One | Two | ThreeTen | Teen | NonTeen | Hundreds | None ; Size = One | Two | ThreeTen | Teen | NonTeen | Hundreds | None ;
@@ -1203,18 +1203,18 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
CardOrd = NCard | NOrd ; CardOrd = NCard | NOrd ;
oper oper
--digits 1, 3 - 10: take the lemmas of the card ords & in masculine --digits 1, 3 - 10: take the lemmas of the card ords & in masculine
--form and calculates the whole table --form and calculates the whole table
regNum : Str -> Str -> regNum : Str -> Str ->
{s : DForm => CardOrd => Gender => State => Case => Str} = {s : DForm => CardOrd => Gender => State => Case => Str} =
\xams,xAmis -> \xams,xAmis ->
let { xamsa = xams + "َة"; let { xamsa = xams + "َة";
xAmisa = xAmis + "َة"} in xAmisa = xAmis + "َة"} in
mkNum xamsa xAmis xAmisa; mkNum xamsa xAmis xAmisa;
mkNum : Str -> Str -> Str -> mkNum : Str -> Str -> Str ->
{s : DForm => CardOrd => Gender => State => Case => Str} = {s : DForm => CardOrd => Gender => State => Case => Str} =
\wAhid,awwal,Ula -> \wAhid,awwal,Ula ->
let { wAhida = wAhid + "َة"} in let { wAhida = wAhid + "َة"} in
{ s= table { { s= table {
@@ -1222,21 +1222,21 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
NCard => table { NCard => table {
Masc => \\s,c => (sing wAhid) ! s ! c ; Masc => \\s,c => (sing wAhid) ! s ! c ;
--all fem are first declension: --all fem are first declension:
Fem => \\s,c => Al ! s + wAhida + dec1sg ! s ! c Fem => \\s,c => defArt s wAhida + dec1sg ! s ! c
}; };
NOrd => table { NOrd => table {
Masc => \\s,c => Al ! s + awwal + dec1sg ! s ! c; Masc => \\s,c => defArt s awwal + dec1sg ! s ! c;
Fem => \\s,c => (sing Ula) ! s ! c Fem => \\s,c => (sing Ula) ! s ! c
} }
}; };
ten => table { ten => table {
NCard => \\_,s,c => Al ! s + wAhid + m_pl ! Indef ! c; NCard => \\_,s,c => defArt s wAhid + m_pl ! Indef ! c;
NOrd => \\_,s,c => Al ! s + awwal + m_pl ! Indef ! c NOrd => \\_,s,c => defArt s awwal + m_pl ! Indef ! c
} }
} }
}; };
num3_10 : Str -> Str -> { s : DForm => CardOrd => Gender num3_10 : Str -> Str -> { s : DForm => CardOrd => Gender
=> State => Case => Str ; n : Size } = => State => Case => Str ; n : Size } =
\xams,xAmis -> \xams,xAmis ->
regNum xams xAmis ** { n = ThreeTen }; regNum xams xAmis ** { n = ThreeTen };
@@ -1246,11 +1246,11 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
unit => table { unit => table {
NCard => table { NCard => table {
Masc => \\s,c => Al ! s + "ٱِثن" + dl ! s ! c ; Masc => \\s,c => Al ! s + "ٱِثن" + dl ! s ! c ;
Fem => \\s,c => Al ! s + "ٱِثنَت" + dl ! s ! c Fem => \\s,c => Al ! s + "ٱِثنَت" + dl ! s ! c
}; };
NOrd => table { NOrd => table {
Masc => \\s,c => Al ! s + "ثان" + dec2sg ! s ! c ; Masc => \\s,c => Al ! s + "ثان" + dec2sg ! s ! c ;
Fem => \\s,c => Al ! s + "ثانِيَة" + dec1sg ! s ! c Fem => \\s,c => Al ! s + "ثانِيَة" + dec1sg ! s ! c
} }
}; };
ten => \\_,_,s,c => Al ! s + "عِشر" + m_pl ! Indef ! c ten => \\_,_,s,c => Al ! s + "عِشر" + m_pl ! Indef ! c
@@ -1269,7 +1269,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
num2000 : State => Case => Str = num2000 : State => Case => Str =
\\s,c => Al ! s + "أَلف" + dl ! s ! c ; \\s,c => Al ! s + "أَلف" + dl ! s ! c ;
teen : Gender => Str = teen : Gender => Str =
table { table {
Masc => "عَشَرَ"; Masc => "عَشَرَ";
Fem => "عَشرَةَ" Fem => "عَشرَةَ"

View File

@@ -1,8 +1,8 @@
--# -path=.:abstract:common:prelude --# -path=.:abstract:common:prelude
concrete SentenceAra of Sentence = CatAra ** open concrete SentenceAra of Sentence = CatAra ** open
ResAra, ResAra,
Prelude, Prelude,
ResAra, ResAra,
TenseX, TenseX,
ParamX, ParamX,
@@ -10,26 +10,26 @@ concrete SentenceAra of Sentence = CatAra ** open
flags optimize=all_subs ; coding=utf8 ; flags optimize=all_subs ; coding=utf8 ;
lin lin
{- {-
PredVP np vp = PredVP np vp =
{ s = \\t,p,o => { s = \\t,p,o =>
case o of { case o of {
Verbal => Verbal =>
case vp.comp.a.isPron of { case vp.comp.a.isPron of {
False => vp.s ! t ! p ! Verbal ! np.a ++ np.s ! Nom ++ vp.comp.s ! Acc ; False => vp.s ! t ! p ! Verbal ! np.a ++ np.s ! Nom ++ vp.comp.s ! Acc ;
True => vp.s ! t ! p ! Verbal ! np.a ++ vp.comp.s ! Acc ++ np.s ! Nom True => vp.s ! t ! p ! Verbal ! np.a ++ vp.comp.s ! Acc ++ np.s ! Nom
}; };
Nominal => Nominal =>
np.s ! Nom ++ vp.s ! t ! p ! Nominal ! np.a ++ vp.comp.s ! Acc np.s ! Nom ++ vp.s ! t ! p ! Nominal ! np.a ++ vp.comp.s ! Acc
} }
}; };
-} -}
PredVP np vp = PredVP np vp =
{ s =\\t,p,o => { s =\\t,p,o =>
let { let {
pgn = pgn =
case <o,np.a.isPron> of { case <o,np.a.isPron> of {
<Verbal, False> => verbalAgr np.a.pgn; <Verbal, False> => verbalAgr np.a.pgn;
_ => np.a.pgn _ => np.a.pgn
@@ -39,44 +39,44 @@ concrete SentenceAra of Sentence = CatAra ** open
yaktubu = vp.s ! pgn ! VPImpf Ind ; yaktubu = vp.s ! pgn ! VPImpf Ind ;
yaktuba = vp.s ! pgn ! VPImpf Cnj ; yaktuba = vp.s ! pgn ! VPImpf Cnj ;
yaktub = vp.s ! pgn ! VPImpf Jus ; yaktub = vp.s ! pgn ! VPImpf Jus ;
vStr : ResAra.Tense -> Polarity -> Str = vStr : ResAra.Tense -> Polarity -> Str =
\tn,pl -> case<vp.isPred,tn,pl> of { \tn,pl -> case<vp.isPred,tn,pl> of {
<False, ResAra.Pres, Pos> => yaktubu ; <False, ResAra.Pres, Pos> => yaktubu ;
<False, ResAra.Pres, Neg> => "لَا" ++ yaktubu ; <False, ResAra.Pres, Neg> => "لَا" ++ yaktubu ;
<True, ResAra.Pres, Pos> => "" ; --no verb "to be" in present <True, ResAra.Pres, Pos> => "" ; --no verb "to be" in present
<True, ResAra.Pres, Neg> => "لَيسَ" ;--same here, just add negation particle <True, ResAra.Pres, Neg> => "لَيسَ" ;--same here, just add negation particle
<_, ResAra.Past, Pos> => kataba ; <_, ResAra.Past, Pos> => kataba ;
<_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ; <_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ;
<_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ; <_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ;
<_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba <_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba
}; };
pred : ResAra.Tense -> Polarity -> Str = pred : ResAra.Tense -> Polarity -> Str =
\tn,pl -> case <vp.isPred,tn,pl> of { \tn,pl -> case <vp.isPred,tn,pl> of {
<True, ResAra.Pres, Pos> => vp.pred.s ! gn ! Nom; --xabar marfooc <True, ResAra.Pres, Pos> => vp.pred.s ! gn ! Nom; --xabar marfooc
_ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob _ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob
}; };
} in } in
case o of { case o of {
Verbal => Verbal =>
--case <False, np.a.isPron> of { ---- AR workaround 18/12/2008 --case <False, np.a.isPron> of { ---- AR workaround 18/12/2008
case <vp.obj.a.isPron, np.a.isPron> of { case <vp.obj.a.isPron, np.a.isPron> of {
{- IL: I don't think we should do prodrop here. vStr drops the copula in present tense, {- IL: I don't think we should do prodrop here. vStr drops the copula in present tense,
so there's hardly anything left for a predicative clause: e.g. so there's hardly anything left for a predicative clause: e.g.
PredVP (UsePron i_Pron) (UseComp (CompCN (UseN car_N))) "I am a car" PredVP (UsePron i_Pron) (UseComp (CompCN (UseN car_N))) "I am a car"
would be linearised just as "car", if we have both prodrop and copula drop. would be linearised just as "car", if we have both prodrop and copula drop.
Leaving it up to someone who knows Arabic to decide what is better. Leaving it up to someone who knows Arabic to decide what is better.
Original here: Original here:
<True,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p) ; <True,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p) ;
-- ya2kuluhu -- ya2kuluhu
<False,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p); -} <False,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p); -}
-- ya2kuluhu al-waladu, yakuluhu al-2awlaadu -- ya2kuluhu al-waladu, yakuluhu al-2awlaadu
<False> => (vStr t p) ++ np.s ! Nom ++ vp.obj.s ++ vp.s2 ++ (pred t p); <False> => (vStr t p) ++ np.s ! Nom ++ vp.obj.s ++ vp.s2 ++ (pred t p);
<True> => (vStr t p) ++ vp.obj.s ++ np.s ! Nom ++ vp.s2 ++ (pred t p) <True> => (vStr t p) ++ vp.obj.s ++ np.s ! Nom ++ vp.s2 ++ (pred t p)
}; };
Nominal => Nominal =>
np.s ! Nom ++ (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p) np.s ! Nom ++ (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p)
} }
}; };
-- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ; -- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
@@ -90,11 +90,11 @@ concrete SentenceAra of Sentence = CatAra ** open
}; };
-- --
-- SlashV2 np v2 = -- SlashV2 np v2 =
-- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ; -- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
-- --
-- SlashVVV2 np vv v2 = -- SlashVVV2 np vv v2 =
-- mkClause (np.s ! Nom) np.a -- mkClause (np.s ! Nom) np.a
-- (insertObj (\\a => infVP vv.isAux (predV v2) a) (predVV vv)) ** -- (insertObj (\\a => infVP vv.isAux (predV v2) a) (predVV vv)) **
-- {c2 = v2.c2} ; -- {c2 = v2.c2} ;
@@ -122,11 +122,11 @@ concrete SentenceAra of Sentence = CatAra ** open
UseQCl t p qcl = UseQCl t p qcl =
{s = \\q => {s = \\q =>
case <t.t,t.a> of { --- IL guessed tenses case <t.t,t.a> of { --- IL guessed tenses
<(Pres|Cond),Simul> => qcl.s ! ResAra.Pres ! p.p ! q ; <(Pres|Cond),Simul> => qcl.s ! ResAra.Pres ! p.p ! q ;
<Fut ,_ > => qcl.s ! ResAra.Fut ! p.p ! q ; <Fut ,_ > => qcl.s ! ResAra.Fut ! p.p ! q ;
<_ ,_ > => qcl.s ! ResAra.Past ! p.p ! q <_ ,_ > => qcl.s ! ResAra.Past ! p.p ! q
} }
}; };
-- UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ; -- UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ;

View File

@@ -1,4 +1,4 @@
concrete StructuralAra of Structural = CatAra ** concrete StructuralAra of Structural = CatAra **
open MorphoAra, ResAra, ParadigmsAra, Prelude in { open MorphoAra, ResAra, ParadigmsAra, Prelude in {
flags optimize=all ; coding=utf8 ; flags optimize=all ; coding=utf8 ;
@@ -21,8 +21,8 @@ concrete StructuralAra of Structural = CatAra **
by8agent_Prep = ss "بِ" ; by8agent_Prep = ss "بِ" ;
by8means_Prep = ss "بِ" ; by8means_Prep = ss "بِ" ;
-- can8know_VV, can_VV = { -- can8know_VV, can_VV = {
-- s = table VVForm [["بي َبلي تْ"] ; "عَن" ; "عُْلد" ; -- s = table VVForm [["بي َبلي تْ"] ; "عَن" ; "عُْلد" ;
-- ["بّن َبلي تْ"] ; ["بِنغ َبلي تْ"] ; "عَنءت" ; "عُْلدنءت"] ; -- ["بّن َبلي تْ"] ; ["بِنغ َبلي تْ"] ; "عَنءت" ; "عُْلدنءت"] ;
-- isAux = True -- isAux = True
-- } ; -- } ;
during_Prep = ss "خِلَالَ" ; during_Prep = ss "خِلَالَ" ;
@@ -51,8 +51,8 @@ concrete StructuralAra of Structural = CatAra **
most_Predet = mkPredet "أَكثَر" True ; most_Predet = mkPredet "أَكثَر" True ;
much_Det = mkDet "الكَثِير مِنَ" Pl Const ; much_Det = mkDet "الكَثِير مِنَ" Pl Const ;
must_VV = mkVV (v1 "وجب" a i) "أن" ; must_VV = mkVV (v1 "وجب" a i) "أن" ;
-- s = table VVForm [["بي هَثي تْ"] ; "مُست" ; ["هَد تْ"] ; -- s = table VVForm [["بي هَثي تْ"] ; "مُست" ; ["هَد تْ"] ;
-- ["هَد تْ"] ; ["هَثِنغ تْ"] ; "مُستنءت" ; ["هَدنءت تْ"]] ; ---- -- ["هَد تْ"] ; ["هَثِنغ تْ"] ; "مُستنءت" ; ["هَدنءت تْ"]] ; ----
-- isAux = True -- isAux = True
-- } ; -- } ;
no_Utt = {s = \\_ => "لا"} ; no_Utt = {s = \\_ => "لا"} ;
@@ -79,7 +79,7 @@ concrete StructuralAra of Structural = CatAra **
-- there7from_Adv = ss ["فرْم تهري"] ; -- there7from_Adv = ss ["فرْم تهري"] ;
-- therefore_PConj = ss "تهرفْري" ; -- therefore_PConj = ss "تهرفْري" ;
----b these_NP = indeclNP "هَؤُلَاء" Pl ; ----b these_NP = indeclNP "هَؤُلَاء" Pl ;
they_Pron = mkPron "هُمْ" "هُمْ" "هُمْ" (Per3 Masc Pl) ; they_Pron = mkPron "هُمْ" "هُمْ" "هُمْ" (Per3 Masc Pl) ;
this_Quant = mkQuant7 "هَذا" "هَذِهِ" "هَذَان" "هَذَيْن" "هَاتَان" "هَاتَيْن" "هَؤُلَاء" Def; this_Quant = mkQuant7 "هَذا" "هَذِهِ" "هَذَان" "هَذَيْن" "هَاتَان" "هَاتَيْن" "هَؤُلَاء" Def;
----b this_NP = indeclNP "هَذا" Sg ; ----b this_NP = indeclNP "هَذا" Sg ;
----b those_NP = indeclNP "هَؤُلَاءكَ" Pl ; ----b those_NP = indeclNP "هَؤُلَاءكَ" Pl ;
@@ -97,13 +97,13 @@ concrete StructuralAra of Structural = CatAra **
where_IAdv = ss "أَينَ" ; where_IAdv = ss "أَينَ" ;
which_IQuant = { which_IQuant = {
s = \\s,c => case <c,s> of { s = \\s,c => case <c,s> of {
<Nom,Indef> => "أيٌّ" ; <Nom,Indef> => "أيٌّ" ;
<Nom,_> => "أيُّ" ; <Nom,_> => "أيُّ" ;
<Acc,Indef> => "أيّاً" ; <Acc,Indef> => "أيّاً" ;
<Acc,_> => "أيَّ" ; <Acc,_> => "أيَّ" ;
<Gen,Indef> => "أيٍّ" ; <Gen,Indef> => "أيٍّ" ;
<Gen,_> => "أيِّ" <Gen,_> => "أيِّ"
} }
} ; } ;
whoSg_IP = mkIP "مَنْ" Sg ; whoSg_IP = mkIP "مَنْ" Sg ;
whoPl_IP = mkIP "مَنْ" Pl ; whoPl_IP = mkIP "مَنْ" Pl ;
@@ -115,7 +115,7 @@ concrete StructuralAra of Structural = CatAra **
youPl_Pron = mkPron "أَنتُمْ" "كُمْ" "كُمْ" (Per2 Masc Sg) ; youPl_Pron = mkPron "أَنتُمْ" "كُمْ" "كُمْ" (Per2 Masc Sg) ;
youPol_Pron = mkPron "أَنتِ" "كِ" "كِ" (Per2 Fem Sg) ; youPol_Pron = mkPron "أَنتِ" "كِ" "كِ" (Per2 Fem Sg) ;
have_V2 = dirV2 (regV "يَملِك") ; have_V2 = dirV2 (regV "يَملِك") ;
lin language_title_Utt = {s = \\_ => "العربية"} ; lin language_title_Utt = {s = \\_ => "العربية"} ;

View File

@@ -29,7 +29,7 @@ lin
SymbOrd n = {s = \\_,_,_ => n.s ; n = None } ; SymbOrd n = {s = \\_,_,_ => n.s ; n = None } ;
SymbNum n = SymbOrd n ** { n = ThreeTen } ; ----IL SymbNum n = SymbOrd n ** { n = ThreeTen } ; ----IL
lincat lincat
Symb, [Symb] = SS ; Symb, [Symb] = SS ;
@@ -46,4 +46,3 @@ oper
{ pgn = Per3 Masc n ; isPron = False } ; { pgn = Per3 Masc n ; isPron = False } ;
} }

View File

@@ -28,7 +28,7 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra in {
-- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ; -- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
-- --
-- ComplVA v ap = insertObj (ap.s) (predV v) ; -- ComplVA v ap = insertObj (ap.s) (predV v) ;
-- ComplV2A v np ap = -- ComplV2A v np ap =
-- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ; -- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ;
-- --
UseComp xabar = kaan xabar ; UseComp xabar = kaan xabar ;