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 ;
_ => a.s ! APosit g n d c
}
}
}
};
---- guessed by AR
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$.
@@ -25,12 +25,12 @@ concrete AdjectiveAra of Adjective = CatAra ** open ResAra, Prelude in {
} ;
--
-- ReflA2 a = {
-- s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ;
-- s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ;
-- isPre = False
-- } ;
--
-- SentAP ap sc = {
-- s = \\a => ap.s ! a ++ sc.s ;
-- s = \\a => ap.s ! a ++ sc.s ;
-- isPre = False
-- } ;
--

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -3,7 +3,7 @@ resource OrthoAra = open Prelude, Predef in {
flags coding=utf8 ;
oper
rectifyHmz: Str -> Str = \word ->
case word of {
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
_ => word
};
--hamza at beginning of word (head)
hHmz : Str -> Str = \d ->
case d of {
"ِ" => "إ";
_ => "أ"
};
--hamza in middle of word (body)
bHmz : Str -> Str -> Str = \d1,d2 ->
case <d1,d2> of {
@@ -28,7 +28,7 @@ flags coding=utf8 ;
<"َ",_> | <_,"َ"> => "أ";
_ => "ء"
};
--hamza carrier sequence
tHmz : Str -> Str = \d ->
case d of {
@@ -37,5 +37,5 @@ flags coding=utf8 ;
"َ" => "أ";
"ْ"|"ا"|"و"|"ي" => "ء"
};
}

View File

@@ -4,12 +4,12 @@
--
-- 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
-- expressions of open categories: nouns, adjectives, verbs.
--
--
-- 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
-- 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
-- regular cases. Then we give a worst-case function $mkC$, which serves as an
-- escape to construct the most irregular words of type $C$.
--
--
-- The following modules are presupposed:
resource ParadigmsAra = open
Predef,
Prelude,
resource ParadigmsAra = open
Predef,
Prelude,
MorphoAra,
OrthoAra,(ResAra=ResAra),
CatAra
@@ -34,7 +34,7 @@ resource ParadigmsAra = open
flags optimize = noexpand; coding=utf8 ;
oper
-- Prepositions are used in many-argument functions for rection.
Preposition : Type ;
@@ -49,11 +49,13 @@ resource ParadigmsAra = open
mkN : Species -> N -> N
= \p,n -> n ** {h = p} ;
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
= mkFullN ;
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
--- = sdfN ;
} ;
@@ -61,18 +63,18 @@ resource ParadigmsAra = open
--This is used for loan words or anything that has untreated irregularities
--in the interdigitization process of its words
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.
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.
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
sdmN : Str -> Str -> Gender -> Species -> N ;
sdmN : Str -> Str -> Gender -> Species -> N ;
--3 Proper names
@@ -88,7 +90,7 @@ resource ParadigmsAra = open
--3 Relational nouns
--3 Relational nouns
mkN2 : N -> Preposition -> N2 ;
@@ -111,7 +113,7 @@ resource ParadigmsAra = open
--Takes a root string and a pattern string
sndA : (root,patt : Str) -> A ;
--Takes a root string only
clrA : (root : Str) -> A ; -- forms adjectives of type aFCal
@@ -140,7 +142,7 @@ resource ParadigmsAra = open
mkPrep : Str -> Prep
= \s -> lin Prep {s = mkPreposition s} ; -- preposition in the sense of RGL abstract syntax
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
v1 : Str -> Vowel -> Vowel -> V ;
--Verb Form II : fa``ala
v2 : Str -> V ;
--Verb Form III : faa`ala
v3 : Str -> V ;
--Verb Form IV : 'af`ala
v4 : Str -> V ;
--Verb Form V : tafa``ala
--Verb Form V : tafa``ala
v5 : Str -> V ;
--Verb Form VI : tafaa`ala
--Verb Form VI : tafaa`ala
v6 : Str -> V ;
--Verb Form VIII 'ifta`ala
v8 : Str -> V ;
--3 Two-place verbs
@@ -236,7 +238,7 @@ resource ParadigmsAra = open
-- Notice: categories $AS, A2S, AV, A2V$ are just $A$,
-- and the second argument is given
-- as an adverb. Likewise
-- as an adverb. Likewise
-- $V0$ is just $V$.
V0 : Type ;
@@ -250,7 +252,7 @@ resource ParadigmsAra = open
-- hidden from the document.
regV : Str -> V = \wo ->
let rau : Str * Vowel * Vowel =
let rau : Str * Vowel * Vowel =
case wo of {
"يَ" + fc + "ُ" + l => <fc+l, a, u> ;
"يَ" + fc + "ِ" + l => <fc+l, a, i> ;
@@ -260,43 +262,43 @@ resource ParadigmsAra = open
}
in v1 rau.p1 rau.p2 rau.p3 ;
v1 = \rootStr,vPerf,vImpf ->
v1 = \rootStr,vPerf,vImpf ->
let { raw = v1' rootStr vPerf vImpf } in
{ s = \\vf =>
{ s = \\vf =>
case rootStr of {
_ + "؟" + _ => rectifyHmz(raw.s ! vf);
_ => raw.s ! vf
_ => raw.s ! vf
};
lock_V = <>
} ;
va : Vowel = ResAra.a ;
v1' : Str -> Vowel -> Vowel -> Verb =
v1' : Str -> Vowel -> Vowel -> Verb =
\rootStr,vPerf,vImpf ->
let { root = mkRoot3 rootStr ;
l = dp 2 rootStr } in --last rootStr
case <l, root.c> of {
<"ّ",_> => v1geminate rootStr vPerf vImpf ;
<"و"|"ي",_> => v1defective root vImpf ;
<"و"|"ي",_> => v1defective root vPerf vImpf ;
<_,"و"|"ي"> => v1hollow root vImpf ;
_ => v1sound root vPerf vImpf
_ => v1sound root vPerf vImpf
};
v2 =
v2 =
\rootStr ->
let {
root = mkRoot3 rootStr
root = mkRoot3 rootStr
} in {
s =
s =
case root.l of {
"و"|"ي" => (v2defective root).s;
_ => (v2sound root).s
};
lock_V = <>
};
v3 =
};
v3 =
\rootStr ->
let {
tbc = mkRoot3 rootStr ;
@@ -304,21 +306,21 @@ resource ParadigmsAra = open
s = (v3sound tbc).s ;
lock_V = <>
};
v4 =
v4 =
\rootStr ->
let {
root = mkRoot3 rootStr
root = mkRoot3 rootStr
} in {
s =
s =
case root.l of {
"و"|"ي" => (v4defective root).s;
_ => (v4sound root).s
};
};
lock_V = <>
};
v5 =
\rootStr ->
let { raw = v5' rootStr } in
@@ -329,16 +331,16 @@ resource ParadigmsAra = open
};
lock_V = <>
};
v5' : Str -> V =
v5' : Str -> V =
\rootStr ->
let {
nfs = mkRoot3 rootStr ;
} in {
s = (v5sound nfs).s ; lock_V = <>
};
v6 =
v6 =
\rootStr ->
let {
fqm = mkRoot3 rootStr ;
@@ -346,31 +348,31 @@ resource ParadigmsAra = open
s = (v6sound fqm).s ;
lock_V = <>
};
v8 =
v8 =
\rootStr ->
let {
rbT = mkRoot3 rootStr ;
} in {
s = (v8sound rbT).s ;
lock_V = <>
};
v8fun = case rbT.f of {
("و"|"ي"|"ّ") => v8assimilated ;
_ => v8sound }
} in lin V (v8fun rbT) ;
Preposition = Str ;
mkFullN nsc gen spec =
{ s = nsc; --NTable
g = gen;
g = gen;
h = spec;
lock_N = <>
};
brkN' : Str -> Str -> Str -> Gender -> Species -> N =
\root,sg,pl,gen,spec ->
let { kitAb = mkWord sg root;
kutub = mkWord pl root
} in mkFullN (reg kitAb kutub) gen spec;
brkN root sg pl gen spec =
let { raw = brkN' root sg pl gen spec} in
{ s = \\n,d,c =>
@@ -381,31 +383,31 @@ resource ParadigmsAra = open
g = gen;
h = spec ; lock_N = <>
};
sdfN =
\root,sg,gen,spec ->
let { kalima = mkWord sg root;
} in mkFullN (sndf kalima) gen spec;
sdmN =
\root,sg,gen,spec ->
let { mucallim = mkWord sg root;
} in mkFullN (sndm mucallim) gen spec;
mkFullPN = \str,gen,species ->
mkFullPN = \str,gen,species ->
{ s = \\c => str + indecl!c ;
g = gen;
h = species;
lock_PN = <>
};
mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ;
mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ;
mkPron : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn ->
{ s =
{ s =
table {
Nom => ana;
Acc => nI;
@@ -428,7 +430,7 @@ resource ParadigmsAra = open
a = {pgn = Per3 Masc n; isPron = False };
lock_NP = <>
};
mkQuant7 : (_,_,_,_,_,_,_ : Str) -> State -> Quant =
\hava,havihi,havAn,havayn,hAtAn,hAtayn,hA'ulA,det ->
{ s = \\n,s,g,c =>
@@ -447,7 +449,7 @@ resource ParadigmsAra = open
isNum = False;
lock_Quant = <>
};
mkQuant3 : (_,_,_ : Str) -> State -> Quant =
\dalika,tilka,ula'ika,det ->
{ s = \\n,s,g,c =>
@@ -465,9 +467,9 @@ resource ParadigmsAra = open
degrA : (posit,compar,plur : Str) -> A
= \posit,compar,plur -> lin A {s = clr posit compar plur} ;
sndA root pat =
let raw = sndA' root pat in {
let raw = sndA' root pat in {
s = \\af =>
case root of {
_ + "؟" + _ => rectifyHmz(raw.s ! af);
@@ -475,7 +477,7 @@ resource ParadigmsAra = open
};
lock_A = <>
};
sndA' : Str -> Str -> A =
\root,pat ->
let { kabIr = mkWord pat root;
@@ -487,7 +489,7 @@ resource ParadigmsAra = open
};
lock_A = <>
};
clrA root =
let { eaHmar = mkWord "أَفعَل" root;
HamrA' = mkWord "فَعلاء" root;
@@ -496,20 +498,20 @@ resource ParadigmsAra = open
s = clr eaHmar HamrA' Humr;
lock_A = <>
};
mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ;
mkAdv x = ss x ** {lock_Adv = <>} ;
mkAdV x = ss x ** {lock_AdV = <>} ;
mkAdA x = ss x ** {lock_AdA = <>} ;
mkPreposition p = p ;
prepV2 : V -> Preposition -> V2 = \v,p -> v ** {s = v.s ; c2 = p ; lock_V2 = <>} ;
strV2 : Str -> V2 = \str -> dirV2 (mkV str) ;
dirV2 v = prepV2 v [] ;
mkV3 v p q = v ** {s = v.s ; c2 = p ; c3 = q ; lock_V3 = <>} ;
dirV3 v p = mkV3 v [] p ;
dirdirV3 v = dirV3 v [] ;
@@ -560,6 +562,6 @@ formV : (root : Str) -> VerbForm -> V = \s,f -> case f of {
} ;
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 ;
oper
fA' = { h = "" ; m1 = ""; m2 = ""; t = "َاء"} ;
eafAcI = { 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 = "َ" } ;
fA' = { h = "" ; m1 = ""; m2 = ""; t = "َاء"} ;
eafAcil = { h = "أَ"; m1 = "َا" ; m2 = "ِ" ; t = "" } ;
eafAcIl = { h = "أَ"; m1 = "َا" ; m2 = "ِي" ; t = "" } ;
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
eufcil = { h = "أُ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
euftucil = { h = "أُ"; m1 = "ْتُ" ; m2 = "ِ" ; t = "" } ;
afcul = { h = "َ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
faccalo = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "ْ" } ;
facal = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "" } ;
facalo = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "ْ" } ;
facalp = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "َة" } ;
facA'il = { h = "" ; m1 = "َ" ; m2 = "َائِ"; t = "" } ;
facAl = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "" } ;
facAlI = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "ِي" } ;
facil = { 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 = "" } ;
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 = "" } ;
eafAcI = { 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 = "" } ;
eafAcIl = { h = "أَ"; m1 = "َا" ; m2 = "ِي" ; t = "" } ;
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
eufcil = { h = "أُ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
euftucil = { h = "أُ"; m1 = "ْتُ" ; m2 = "ِ" ; t = "" } ;
euttucil = euftucil ** { h = "تُّأُ" ; m1 = "" } ; ---- IL assimilated VIII
afcul = { h = "َ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
faccalo = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "ْ" } ;
facal = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "" } ;
facalo = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "ْ" } ;
facalp = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "َة" } ;
facA'il = { h = "" ; m1 = "َ" ; m2 = "َائِ"; t = "" } ;
facAl = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "" } ;
facAlI = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "ِي" } ;
facil = { 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 = "" } ;
mafcil = { h = "مَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
tafAcal = { h = "تَ"; m1 = "َا" ; m2 = "َ" ; t = "" } ;
tafaccal = { h = "تَ"; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
tufuccil = { h = "تُ"; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
tufUcil = { h = "تُ"; m1 = "ُو" ; m2 = "ِ" ; t = "" } ;
ufAcal = { h = "ُ" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;
ufAcil = { h = "ُ" ; m1 = "َا" ; m2 = "ِ" ; t = "" } ;
ufcal = { h = "ُ" ; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
ufcil = { h = "ُ" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
ufcul = { h = "ُ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
tafAcal = { h = "تَ"; m1 = "َا" ; m2 = "َ" ; t = "" } ;
tafaccal = { h = "تَ"; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
tufuccil = { h = "تُ"; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
tufUcil = { h = "تُ"; m1 = "ُو" ; m2 = "ِ" ; t = "" } ;
ufAcal = { h = "ُ" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;
ufAcil = { h = "ُ" ; m1 = "َا" ; m2 = "ِ" ; t = "" } ;
ufcal = { h = "ُ" ; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
ufcil = { h = "ُ" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
ufcul = { h = "ُ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
}

View File

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

View File

@@ -5,18 +5,18 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA
lin
QuestCl cl = {
s = \\t,p =>
s = \\t,p =>
table {
QIndir => "إِذا" ++ cl.s ! t ! p ! Verbal ;
QDir => "هَل" ++ cl.s ! t ! p ! Verbal
QDir => "هَل" ++ cl.s ! t ! p ! Verbal
}
};
-- ComplSlashIP vps ip = {} ;
-- AR copied from PredVP
QuestVP qp vp =
{ s =\\t,p,_ =>
QuestVP qp vp =
{ s =\\t,p,_ =>
let {
---- o = Verbal ; ---- AR
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 ;
yaktuba = vp.s ! pgn ! VPImpf Cnj ;
yaktub = vp.s ! pgn ! VPImpf Jus ;
vStr : ResAra.Tense -> Polarity -> Str =
vStr : ResAra.Tense -> Polarity -> Str =
\tn,pl -> case<vp.isPred,tn,pl> of {
<False, ResAra.Pres, Pos> => 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
<_, ResAra.Past, Pos> => kataba ;
<_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ;
<_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ;
<_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba
<_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ;
<_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba
};
pred : ResAra.Tense -> Polarity -> Str =
pred : ResAra.Tense -> Polarity -> Str =
\tn,pl -> case <vp.isPred,tn,pl> of {
<True, ResAra.Pres, Pos> => vp.pred.s ! gn ! Nom; --xabar marfooc
_ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob
} ;
} in
--- case o of {
---- _ =>
--- case o of {
---- _ =>
case <False, np.a.isPron> of {
---- AR workaround 18/12/2008 case <vp.obj.a.isPron, np.a.isPron> of {
-- ya2kuluhu
<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);
<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)
};
---- Nominal =>
---- 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
concrete SentenceAra of Sentence = CatAra ** open
concrete SentenceAra of Sentence = CatAra ** open
ResAra,
Prelude,
Prelude,
ResAra,
TenseX,
ParamX,
CommonX in {
flags optimize=all_subs ; coding=utf8 ;
lin
{-
PredVP np vp =
{ s = \\t,p,o =>
case o of {
Verbal =>
PredVP np vp =
{ s = \\t,p,o =>
case o of {
Verbal =>
case vp.comp.a.isPron of {
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 =>
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 =
{ s =\\t,p,o =>
{ s =\\t,p,o =>
let {
pgn =
pgn =
case <o,np.a.isPron> of {
<Verbal, False> => verbalAgr np.a.pgn;
_ => np.a.pgn
@@ -38,44 +39,44 @@ concrete SentenceAra of Sentence = CatAra ** open
yaktubu = vp.s ! pgn ! VPImpf Ind ;
yaktuba = vp.s ! pgn ! VPImpf Cnj ;
yaktub = vp.s ! pgn ! VPImpf Jus ;
vStr : ResAra.Tense -> Polarity -> Str =
vStr : ResAra.Tense -> Polarity -> Str =
\tn,pl -> case<vp.isPred,tn,pl> of {
<False, ResAra.Pres, Pos> => 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
<_, ResAra.Past, Pos> => kataba ;
<_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ;
<_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ;
<_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba
<_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ;
<_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba
};
pred : ResAra.Tense -> Polarity -> Str =
pred : ResAra.Tense -> Polarity -> Str =
\tn,pl -> case <vp.isPred,tn,pl> of {
<True, ResAra.Pres, Pos> => vp.pred.s ! gn ! Nom; --xabar marfooc
_ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob
};
} in
case o of {
Verbal =>
case o of {
Verbal =>
--case <False, np.a.isPron> of { ---- AR workaround 18/12/2008
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,
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"
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.
Original here:
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,
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"
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.
Original here:
<True,True> => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p) ;
-- ya2kuluhu
<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);
<True> => (vStr t p) ++ vp.obj.s ++ np.s ! Nom ++ vp.s2 ++ (pred t p)
};
Nominal =>
np.s ! Nom ++ (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p)
}
}
};
-- 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} ;
--
-- SlashVVV2 np vv v2 =
-- mkClause (np.s ! Nom) np.a
-- SlashVVV2 np vv v2 =
-- mkClause (np.s ! Nom) np.a
-- (insertObj (\\a => infVP vv.isAux (predV v2) a) (predVV vv)) **
-- {c2 = v2.c2} ;
@@ -111,31 +112,22 @@ concrete SentenceAra of Sentence = CatAra ** open
-- EmbedVP vp = {s = infVP False vp (agrP3 Sg)} ; --- agr
--
--FIXME, all tenses
UseCl t ap cl =
{s = cl.s ! ResAra.Pres ! ap.p ! Verbal
{- case t of {
TPres => cl.s ! ResAra.Pres ! 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
}
-} };
UseCl t p cl =
{s = case <t.t,t.a> of { --- IL guessed tenses
<(Pres|Cond),Simul> => cl.s ! ResAra.Pres ! p.p ! Verbal ;
<Fut ,_ > => cl.s ! ResAra.Fut ! p.p ! Verbal ;
<_ ,_ > => cl.s ! ResAra.Past ! p.p ! Verbal
}
};
--FIXME, all tenses
UseQCl t ap qcl = --{s = cl.s ! t ! p ! Verbal } ;
{s =
table {
QDir => qcl.s ! ResAra.Pres ! ap.p ! QDir;
QIndir => qcl.s ! ResAra.Pres ! ap.p ! QIndir
UseQCl t p qcl =
{s = \\q =>
case <t.t,t.a> of { --- IL guessed tenses
<(Pres|Cond),Simul> => qcl.s ! ResAra.Pres ! p.p ! q ;
<Fut ,_ > => qcl.s ! ResAra.Fut ! p.p ! q ;
<_ ,_ > => 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} ;

View File

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

View File

@@ -29,7 +29,7 @@ lin
SymbOrd n = {s = \\_,_,_ => n.s ; n = None } ;
SymbNum n = SymbOrd n ** { n = ThreeTen } ; ----IL
lincat
lincat
Symb, [Symb] = SS ;
@@ -46,4 +46,3 @@ oper
{ 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) ;
--
-- 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) ;
--
UseComp xabar = kaan xabar ;