forked from GitHub/gf-rgl
(Ara) remove extra whitespace
This commit is contained in:
@@ -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
|
||||||
-- } ;
|
-- } ;
|
||||||
--
|
--
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|||||||
@@ -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 } ;
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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 "نفس") ;
|
||||||
|
|||||||
@@ -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 => "َ";
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|||||||
@@ -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 } ;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 ;
|
|||||||
"َ" => "أ";
|
"َ" => "أ";
|
||||||
"ْ"|"ا"|"و"|"ي" => "ء"
|
"ْ"|"ا"|"و"|"ي" => "ء"
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 [] ;
|
||||||
|
|||||||
@@ -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 = "" } ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
; ---- };
|
; ---- };
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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 => "عَشرَةَ"
|
||||||
|
|||||||
@@ -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} ;
|
||||||
|
|||||||
@@ -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 = \\_ => "العربية"} ;
|
||||||
|
|
||||||
|
|||||||
@@ -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 } ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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 ;
|
||||||
|
|||||||
Reference in New Issue
Block a user