1
0
forked from GitHub/gf-rgl

Merge pull request #26 from inariksit/arabic

Arabic: compound nouns, verb paradigms, assimilations, whitespace
This commit is contained in:
Inari Listenmaa
2018-09-26 11:50:04 +02:00
committed by GitHub
18 changed files with 848 additions and 772 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -4,12 +4,12 @@
-- --
-- Ali El Dada 2005--2006 -- Ali El Dada 2005--2006
-- --
-- This is an API to the user of the resource grammar -- This is an API to the user of the resource grammar
-- for adding lexical items. It gives functions for forming -- for adding lexical items. It gives functions for forming
-- expressions of open categories: nouns, adjectives, verbs. -- expressions of open categories: nouns, adjectives, verbs.
-- --
-- Closed categories (determiners, pronouns, conjunctions) are -- Closed categories (determiners, pronouns, conjunctions) are
-- accessed through the resource syntax API, $Structural.gf$. -- accessed through the resource syntax API, $Structural.gf$.
-- --
-- The main difference with $MorphoAra.gf$ is that the types -- The main difference with $MorphoAra.gf$ is that the types
-- referred to are compiled resource grammar types. We have moreover -- referred to are compiled resource grammar types. We have moreover
@@ -20,12 +20,12 @@
-- first we give a handful of patterns that aim to cover all -- first we give a handful of patterns that aim to cover all
-- regular cases. Then we give a worst-case function $mkC$, which serves as an -- regular cases. Then we give a worst-case function $mkC$, which serves as an
-- escape to construct the most irregular words of type $C$. -- escape to construct the most irregular words of type $C$.
-- --
-- The following modules are presupposed: -- The following modules are presupposed:
resource ParadigmsAra = open resource ParadigmsAra = open
Predef, Predef,
Prelude, Prelude,
MorphoAra, MorphoAra,
OrthoAra,(ResAra=ResAra), OrthoAra,(ResAra=ResAra),
CatAra CatAra
@@ -34,7 +34,7 @@ resource ParadigmsAra = open
flags optimize = noexpand; coding=utf8 ; flags optimize = noexpand; coding=utf8 ;
oper oper
-- Prepositions are used in many-argument functions for rection. -- Prepositions are used in many-argument functions for rection.
Preposition : Type ; Preposition : Type ;
@@ -49,11 +49,13 @@ 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
= brkN ; = brkN ;
mkN : N -> (attr : Str) -> N -- Compound nouns
= \n,attr -> n ** { s = \\num,s,c => n.s ! num ! s ! c ++ attr } ; --- IL (TODO: all kinds of compounds)
--- mkN : (root,sgPatt : Str) -> Gender -> Species -> N -- sound feminine plural --- mkN : (root,sgPatt : Str) -> Gender -> Species -> N -- sound feminine plural
--- = sdfN ; --- = sdfN ;
} ; } ;
@@ -61,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
@@ -88,7 +90,7 @@ resource ParadigmsAra = open
--3 Relational nouns --3 Relational nouns
mkN2 : N -> Preposition -> N2 ; mkN2 : N -> Preposition -> N2 ;
@@ -111,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
@@ -140,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
@@ -164,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
@@ -236,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 ;
@@ -250,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> ;
@@ -260,43 +262,43 @@ 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
case <l, root.c> of { case <l, root.c> of {
<"ّ",_> => v1geminate rootStr vPerf vImpf ; <"ّ",_> => v1geminate rootStr vPerf vImpf ;
<"و"|"ي",_> => v1defective root 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 ;
@@ -304,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
@@ -329,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 ;
@@ -346,31 +348,31 @@ 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 ;
} in { v8fun = case rbT.f of {
s = (v8sound rbT).s ; ("و"|"ي"|"ّ") => v8assimilated ;
lock_V = <> _ => v8sound }
}; } 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 =>
@@ -381,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;
@@ -428,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 =>
@@ -447,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 =>
@@ -465,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);
@@ -475,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;
@@ -487,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;
@@ -496,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 [] ;
@@ -560,6 +562,6 @@ formV : (root : Str) -> VerbForm -> V = \s,f -> case f of {
} ; } ;
param VerbForm = param VerbForm =
FormI | FormIII | FormIII | FormIV | FormV | FormVI | FormVIII ; FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVIII ;
} ; } ;

View File

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

View File

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

View File

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

File diff suppressed because it is too large Load Diff

View File

@@ -1,34 +1,35 @@
--# -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,
ParamX, ParamX,
CommonX in { CommonX in {
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
@@ -38,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 ;
@@ -89,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} ;
@@ -111,31 +112,22 @@ concrete SentenceAra of Sentence = CatAra ** open
-- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr -- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr
-- --
--FIXME, all tenses UseCl t p cl =
UseCl t ap cl = {s = case <t.t,t.a> of { --- IL guessed tenses
{s = cl.s ! ResAra.Pres ! ap.p ! Verbal <(Pres|Cond),Simul> => cl.s ! ResAra.Pres ! p.p ! Verbal ;
{- case t of { <Fut ,_ > => cl.s ! ResAra.Fut ! p.p ! Verbal ;
TPres => cl.s ! ResAra.Pres ! p.p ! Verbal ; <_ ,_ > => cl.s ! ResAra.Past ! p.p ! Verbal
TCond => cl.s ! ResAra.Pres ! p.p ! Verbal ; }
TPast => cl.s ! ResAra.Past ! p.p ! Verbal ; };
TFut => cl.s ! ResAra.Fut ! p.p ! Verbal
}
-} };
--FIXME, all tenses UseQCl t p qcl =
UseQCl t ap qcl = --{s = cl.s ! t ! p ! Verbal } ; {s = \\q =>
{s = case <t.t,t.a> of { --- IL guessed tenses
table { <(Pres|Cond),Simul> => qcl.s ! ResAra.Pres ! p.p ! q ;
QDir => qcl.s ! ResAra.Pres ! ap.p ! QDir; <Fut ,_ > => qcl.s ! ResAra.Fut ! p.p ! q ;
QIndir => qcl.s ! ResAra.Pres ! ap.p ! QIndir <_ ,_ > => qcl.s ! ResAra.Past ! p.p ! q
} }
{- case t of { };
TPres => "هَل" ++ qcl.s ! ResAra.Pres ! p.p ! q ;
TCond => "هَل" ++ qcl.s ! ResAra.Pres ! p.p ! q ;
TPast => "هَل" ++ qcl.s ! ResAra.Past ! p.p ! q ;
TFut => "هَل" ++ qcl.s ! ResAra.Fut ! p.p ! q
}
-} };
-- UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ; -- UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ;

View File

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

View File

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

View File

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