1
0
forked from GitHub/gf-rgl

Merge pull request #141 from inariksit/arabic

Arabic
This commit is contained in:
Inari Listenmaa
2019-01-14 21:30:44 +01:00
committed by GitHub
7 changed files with 184 additions and 134 deletions

View File

@@ -96,6 +96,6 @@ linref
CN = \cn -> uttCN cn ! Masc ;
N = \n -> uttCN (useN n) ! Masc ;
VP = \vp -> uttVP vp ! Masc ;
VP = \vp -> uttVP VPPerf vp ! Masc ;
}

View File

@@ -204,7 +204,7 @@ lin
AdvCN,
SentCN = \cn,ss -> cn ** {
s2 = \\n,d,c => cn.s2 ! n ! d ! c ++ ss.s ;
np = \\c => cn.np ! c ++ ss.s ;
isHeavy = True
} ;

View File

@@ -201,16 +201,20 @@ resource ParadigmsAra = open
mkV : overload {
mkV : (imperfect : Str) -> V ; -- The verb in Per3 Sg Masc imperfect tense gives the most information
mkV : (root : Str) -> (perf,impf : Vowel) -> V ; -- verb form I ; vowel = a|i|u
mkV : (root : Str) -> VerbForm -> V ; -- FormI .. FormX (no VII, IX) ; default vowels a u for I
mkV : (root : Str) -> (perf,impf : Vowel) -> (masdar : Str) -> V ; -- verb form I ; vowel = a|i|u ; unpredictable masdar given as an argument.
mkV : (root : Str) -> (perf,impf : Vowel) -> V ; -- verb form I ; vowel = a|i|u ; dummy masdar inserted. This function is here only to keep compatibility for the old API; for new grammars, use the constructor with masdar as an argument.
mkV : (root : Str) -> VerbForm -> V ; -- FormI .. FormX (no IX) ; default vowels a u for I, and dummy masdar. Forms II-X have predictable masdar.
mkV : V -> (particle : Str) -> V -- V with a non-inflecting particle/phrasal verb
} ;
-- regV : Str -> V ;
reflV : V -> V ; -- نَفْس in the proper case and with possessive suffix, e.g. نَفْسَكِ
v1 : Str -> Vowel -> Vowel -> V ; -- Verb Form I : fa`ala, fa`ila, fa`ula
v1 = overload {
v1 : Str -> (perf,impf : Vowel) -> (masdar : Str) -> V -- Verb Form I : fa`ala, fa`ila, fa`ula. Verbal noun (masdar) given as the third argument.
= v1masdar ;
v1 : Str -> (perf,impf : Vowel) -> V -- To keep compatibility for the old API; dummy masdar inserted.
= v1dummymasdar ;
} ;
v2 : Str -> V ; -- Verb Form II : fa``ala
@@ -401,8 +405,10 @@ resource ParadigmsAra = open
mkV = overload {
mkV : (imperfect : Str) -> V
= regV ;
mkV : (root : Str) -> (perf,impf : Vowel) -> V -- verb form I ; vowel = a|i|u
= v1 ;
mkV : (root : Str) -> (perf,impf : Vowel) -> (masdar : Str) -> V -- verb form I ; vowel = a|i|u
= v1masdar ;
mkV : (root : Str) -> (perf,impf : Vowel) -> V -- verb form I ; vowel = a|i|u ; dummy masdar
= v1dummymasdar ;
mkV : (root : Str) -> VerbForm -> V -- FormI .. FormX (no VII, IX) ; default vowels a u for I
= formV ;
mkV : V -> (particle : Str) -> V = \v,p ->
@@ -418,46 +424,50 @@ resource ParadigmsAra = open
f@? + "َ" + c@? + "ِ" + l => <f+c+l, i, a> ;
_ => Predef.error ("regV not applicable to" ++ wo)
}
in v1 rau.p1 rau.p2 rau.p3 ;
in v1dummymasdar rau.p1 rau.p2 rau.p3 ;
v1 = \rootStr,vPerf,vImpf ->
let { raw = v1' rootStr vPerf vImpf } in
lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
v1masdar : Str -> (perf,impf : Vowel) -> (masdar : Str) -> V =
\rootStr,vPerf,vImpf,msdr ->
let { raw = v1' rootStr vPerf vImpf msdr }
in lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
v1' : Str -> Vowel -> Vowel -> Verb =
\rootStr,vPerf,vImpf ->
v1dummymasdar : Str -> (p,i : Vowel) -> V = \rootStr,vPerf,vImpf ->
let { dummyMasdar = mkStrong facl (mkRoot3 rootStr) ;
raw = v1' rootStr vPerf vImpf dummyMasdar }
in lin V { s = \\vf =>rectifyHmz (raw.s ! vf) } ;
v1' : Str -> (p,i : Vowel) -> (masdar : Str) -> Verb =
\rootStr,vPerf,vImpf,masdar ->
let root = mkRoot3 rootStr
in case rootStr of {
f@? + c@? + "ّ" => v1geminate (f+c+c) vPerf vImpf ;
? + #hamza + #weak => v1doubleweak root ;
#weak + ? + #weak => v1assimilated_defective root vPerf vImpf ;
f@? + c@? + "ّ" => v1geminate (f+c+c) vPerf vImpf masdar ;
? + #hamza + #weak => v1doubleweak root masdar ;
#weak + ? + #weak => v1assimilated_defective root vPerf vImpf masdar ;
? + ? + #weak => case vPerf of {
i => v1defective_i root vImpf ;
_ => v1defective_a root vImpf } ;
? + #weak + ? => v1hollow root vImpf ;
_ => v1sound root vPerf vImpf } ;
i => v1defective_i root vImpf masdar ;
_ => v1defective_a root vImpf masdar } ;
? + #weak + ? => v1hollow root vImpf masdar ;
_ => v1sound root vPerf vImpf masdar } ;
v2 =
\rootStr ->
let {
root = mkRoot3 rootStr
} in {
} in lin V {
s =
case rootStr of {
-- #weak + ? + ? =>
? + ? + #weak => (v2defective root).s;
_ => (v2sound root).s
};
lock_V = <>
}
};
v3 =
\rootStr ->
let {
tbc = mkRoot3 rootStr ;
} in {
s = (v3sound tbc).s ;
lock_V = <>
} in lin V {
s = (v3sound tbc).s
};
v4 =
@@ -473,30 +483,28 @@ resource ParadigmsAra = open
v5 =
\rootStr ->
let { raw = v5' rootStr } in
let { raw = v5' rootStr } in raw **
{ s = \\vf =>
case rootStr of {
_ + #hamza + _ => rectifyHmz(raw.s ! vf);
_ => raw.s ! vf
};
lock_V = <>
}
};
v5' : Str -> V =
\rootStr ->
let {
nfs = mkRoot3 rootStr ;
} in {
s = (v5sound nfs).s ; lock_V = <>
} in lin V {
s = (v5sound nfs).s
};
v6 =
\rootStr ->
let {
fqm = mkRoot3 rootStr ;
} in {
s = (v6sound fqm).s ;
lock_V = <>
} in lin V {
s = (v6sound fqm).s
};
v7 =

View File

@@ -47,6 +47,7 @@ flags coding=utf8 ;
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
eifcAl = { h = "إِ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
@@ -82,11 +83,14 @@ flags coding=utf8 ;
fcil = { h = "" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
fcul = { h = "" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
ficl = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "" } ;
fcIl = fcil ** {m2 = "ِي"} ;
fcAl = fcal ** {m2 = "َا"} ;
ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ;
ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ;
ftacc = facc ** {m1 = "ْتَ"} ;
ftucc = facc ** {m1 = "ْتُ"} ;
ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
fticAl = ficAl ** { m1 = "ْتِ" } ; -- IL hollow VIII
ftical = ftacal ** { m1 = "ْتِ" } ; -- IL hollow VIII
ftAcal = ftacal ** { m1 = "ْتَا" } ; -- IL hollow VIII
ftIcal = ftacal ** { m1 = "ْتِي" } ; -- IL hollow VIII
@@ -95,6 +99,7 @@ flags coding=utf8 ;
euttucil = { h = "اُتُّ" ; m1 = "ِ" ; m2 = "" ; t = "" } ; ---- IL assimilated VIII
ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
tticAl = ficAl ** { h = "تِّ" } ; ---- IL assimilated VIII
fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ;
fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ;
@@ -112,7 +117,9 @@ flags coding=utf8 ;
mafcUl = { h = "مَ"; m1 = "ْ" ; m2 = "ُو" ; t = "" } ;
mafcil = { h = "مَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
tafAcal = { h = "تَ"; m1 = "َا" ; m2 = "َ" ; t = "" } ;
tafAcul = { h = "تَ"; m1 = "َا" ; m2 = "ُ" ; t = "" } ;
tafaccal = { h = "تَ"; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
tafaccul = { h = "تَ"; m1 = "َ" ; m2 = "ُّ" ; t = "" } ;
tufuccil = { h = "تُ"; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
tufUcil = { h = "تُ"; m1 = "ُو" ; m2 = "ِ" ; t = "" } ;
ufAcal = { h = "ُ" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;

View File

@@ -18,7 +18,7 @@ concrete PhraseAra of Phrase = CatAra ** open
UttCN cn = {s = ResAra.uttCN cn } ; --IL
UttNP np = {s = \\_ => np.s ! Nom} ;
UttVP vp = {s = uttVP vp} ; --IL
UttVP vp = {s = uttVP VPPerf vp} ; --IL
UttS s = {s = \\_ => s.s ! Verbal} ;
UttAdv,
UttIAdv = \s -> {s = \\_ => s.s} ; ---- OK? AR

View File

@@ -202,7 +202,8 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in {
VPerf Voice PerGenNum
| VImpf Mood Voice PerGenNum
| VImp Gender Number
| VPPart ; -- TODO: add gender and number (or check if easy to use BIND)
| VPPart -- TODO: add gender and number (or check if easy to use BIND)
| Masdar ; -- verbal noun
PerGenNum =
Per3 Gender Number
@@ -221,8 +222,8 @@ oper
--macro for sound verb
--PerfAct, PerfPas, ImpfAct, ImpfPas, Imp, PPart
verb : (x1,_,_,_,_,x6 : Str) -> Verb =
\katab,kutib,aktub,uktab,euktub,maktUb -> {
verb : (x1,_,_,_,_,_,x7 : Str) -> Verb =
\katab,kutib,aktub,uktab,euktub,maktUb,katb -> {
s = \\vf => rectifyHmz (case vf of {
VPerf Act pgn => katab + suffixPerf ! pgn ;
VPerf Pas pgn => kutib + suffixPerf ! pgn ;
@@ -231,7 +232,8 @@ oper
VImpf m Act pgn => prefixImpf!pgn + aktub + suffixImpfCJ m ! pgn;
VImpf m Pas pgn => prefixImpf !pgn + uktab + suffixImpfCJ m !pgn;
VImp g n => euktub + suffixImpfCJ Jus ! (Per2 g n);
VPPart => maktUb
VPPart => maktUb ;
Masdar => katb
})
} ;
verb' : SoundForms -> Verb = \vforms ->
@@ -241,7 +243,8 @@ oper
uktab = vforms ! 3 ;
euktub = vforms ! 4 ;
maktUb = vforms ! 5 ;
in verb katab kutib aktub uktab euktub maktUb ;
katb = vforms ! 6 ;
in verb katab kutib aktub uktab euktub maktUb katb ;
--affixes of sound verbs
suffixPerf : PerGenNum => Str =
@@ -309,6 +312,7 @@ oper
impSg = vforms ! 8 ; -- VImp (Sg Masc / Pl Fem)
impPl = vforms ! 9 ; -- VImp (Pl Masc / Sg Fem)
ppart = vforms ! 10 ; -- VPPart
masdar = vforms ! 11 ; -- verbal noun
patPerf = patHollowPerf xAf xif xIf xuf ;
patImpf = patHollowImpf axAf axaf uxAf uxaf ;
@@ -321,7 +325,8 @@ oper
VImpf Cnj v pgn => prefixImpf ! pgn + patImpf ! v ! pgn + suffixImpfCJ Cnj ! pgn ;
VImpf Jus v pgn => prefixImpf ! pgn + patJus ! v ! pgn + suffixImpfCJ Jus ! pgn ;
VImp g n => patImp ! g ! n + suffixImpfCJ Jus ! Per2 g n ;
VPPart => ppart
VPPart => ppart ;
Masdar => masdar
}
} ;
@@ -355,6 +360,7 @@ oper
Irmi = vforms ! 8 ; -- VImp Masc Sg | VImp Fem _
Irmu = vforms ! 9 ; -- VImp Masc Pl
ppart = vforms ! 10 ; -- VPPart
masdar = vforms ! 11 ; -- verbal noun
patPerf = patDefPerf rama ramay rumi rumu rumiy ;
patImpfAct = patDefImpfAct armi armu ;
@@ -366,7 +372,8 @@ oper
VImpf m Act pgn => prefixImpf ! pgn + patImpfAct ! pgn + suffixImpf Act vowImpf ! m ! pgn ;
VImpf m Pas pgn => prefixImpf ! pgn + urma + suffixImpf Pas vowImpf ! m ! pgn ;
VImp g n => patImp ! g ! n + suffixImpf Act vowImpf ! Jus ! Per2 g n ;
VPPart => ppart
VPPart => ppart ;
Masdar => masdar
}
} ;
@@ -473,8 +480,8 @@ oper
--now is used for the sound, assimilated (weak C1), and when C1 = hamza:
v1soundForms : Root3 -> Vowel -> Vowel -> SoundForms =
\fcl,vowPerf,vowImpf ->
v1soundForms : Root3 -> Vowel -> Vowel -> (masdar:Str) -> SoundForms =
\fcl,vowPerf,vowImpf,masdar ->
let {
qf = {f = fcl.c ; c = fcl.l} ;
qif = mkBilit (fvc ! vowImpf) qf;
@@ -493,13 +500,13 @@ v1soundForms : Root3 -> Vowel -> Vowel -> SoundForms =
};
maktUb = mkStrong mafcUl fcl
} in
toSoundForms katab kutib aktub uktab euktub maktUb ;
toSoundForms katab kutib aktub uktab euktub maktUb masdar ;
v1sound : Root3 -> Vowel -> Vowel -> Verb = \fcl,vp,vi ->
verb' (v1soundForms fcl vp vi) ;
v1sound : Root3 -> Vowel -> Vowel -> (masdar:Str) -> Verb = \fcl,vp,vi,masdar ->
verb' (v1soundForms fcl vp vi masdar) ;
v1hollow : Root3 -> Vowel -> Verb =
\xwf,vowImpf ->
v1hollow : Root3 -> Vowel -> (masdar:Str) -> Verb =
\xwf,vowImpf,masdar ->
let {
xif = mkHollow (patHol1 ! vowImpf) xwf ; -- VPerf Act (Per3 Fem Pl)
xAf = mkHollow fAc xwf ; -- VPerf Act _
@@ -513,7 +520,7 @@ v1hollow : Root3 -> Vowel -> Verb =
uxAf= mkHollow ufAc xwf ; -- VImpf Pas _
ppart = "مَ" + xAf' -- FIXME actually wierd anomalies happen with the a vowel..
} in verbHollow (toDefForms xAf xif xIf xuf axAf axaf uxAf uxaf xaf xAf' ppart) ;
} in verbHollow (toDefForms xAf xif xIf xuf axAf axaf uxAf uxaf xaf xAf' ppart masdar) ;
patHol1 : Vowel => Pattern =
table { u => fuc ; _ => fic} ;
@@ -536,12 +543,12 @@ fvc : Vowel => Pattern =
a => fac
} ;
v1geminate : Str -> Vowel -> Vowel -> Verb =
\r,vp,vi ->
verbGeminate (v1geminateForms r vp vi) ;
v1geminate : Str -> Vowel -> Vowel -> (masdar:Str) -> Verb =
\r,vp,vi,masdar ->
verbGeminate (v1geminateForms r vp vi masdar) ;
v1geminateForms : Str -> Vowel -> Vowel -> DefForms =
\rootStr,vowPerf,vowImpf ->
v1geminateForms : Str -> Vowel -> Vowel -> (masdar:Str) -> DefForms =
\rootStr,vowPerf,vowImpf,masdar ->
let {
mdd = mkRoot3 rootStr ; --fcc
md = mkRoot2 rootStr ; --fc
@@ -560,7 +567,7 @@ v1geminateForms : Str -> Vowel -> Vowel -> DefForms =
} in toDefForms
madd madad mudd mudid -- VPerf
amudd amdud umadd umdad -- VImpf
Umdud mudd' mamdUd ;
Umdud mudd' mamdUd masdar ;
patGem1 : Vowel => Pattern =
table {
@@ -586,23 +593,23 @@ patGem3 : Vowel => Pattern =
-- IL -- Defective, hollow and geminate verbs all need 11 forms.
{- NB. the numbers don't always refer to the same forms!
The verb(Def|Hollow|Geminate) constructors pick the right forms. -}
SoundForms : Type = Predef.Ints 5 => Str ;
DefForms : Type = Predef.Ints 10 => Str ;
SoundForms : Type = Predef.Ints 6 => Str ;
DefForms : Type = Predef.Ints 11 => Str ;
toSoundForms : (x1,_,_,_,_,x6 : Str) -> SoundForms =
\a,b,c,d,e,f ->
toSoundForms : (x1,_,_,_,_,_,x7 : Str) -> SoundForms =
\a,b,c,d,e,f,g ->
table {
0 => a ; 1 => b ; 2 => c ; 3 => d ; 4 => e ; 5 => f
0 => a ; 1 => b ; 2 => c ; 3 => d ; 4 => e ; 5 => f ; 6 => g
} ;
toDefForms : (x1,_,_,_,_,_,_,_,_,_,x11 : Str) -> DefForms =
\a,b,c,d,e,f,g,h,i,j,k ->
toDefForms : (x1,_,_,_,_,_,_,_,_,_,_,x12 : Str) -> DefForms =
\a,b,c,d,e,f,g,h,i,j,k,l ->
table {
0 => a ; 1 => b ; 2 => c ; 3 => d ; 4 => e ; 5 => f ;
6 => g ; 7 => h ; 8 => i ; 9 => j ; 10 => k
6 => g ; 7 => h ; 8 => i ; 9 => j ; 10 => k ; 11 => l
} ;
v1defForms_perfA : Root3 -> Vowel -> DefForms = \rmy,vowImpf ->
v1defForms_perfA : Root3 -> Vowel -> (masdar:Str) -> DefForms = \rmy,vowImpf,masdar ->
let {
_rmi = mkDefective (patDef1 ! vowImpf) rmy ;
_rmu = mkDefective (patDef2 ! vowImpf) rmy ;
@@ -620,28 +627,28 @@ v1defForms_perfA : Root3 -> Vowel -> DefForms = \rmy,vowImpf ->
} in toDefForms
rama ramay rumi rumu rumiy -- VPerf
armi armu urma -- VImpf
eirmi eirmu marmiy ;
eirmi eirmu marmiy masdar ;
v1defForms_perfI : Root3 -> Vowel -> DefForms = \bqy,vowImpf ->
let vforms_a = v1defForms_perfA bqy vowImpf ;
v1defForms_perfI : Root3 -> Vowel -> (masdar:Str) -> DefForms = \bqy,vowImpf,masdar ->
let vforms_a = v1defForms_perfA bqy vowImpf masdar ;
baqI = mkDefective facIl bqy ;
baqiy = mkDefective facil bqy ;
in table { 0 => baqI ;
1 => baqiy ;
x => vforms_a ! x } ;
v1defective_a : Root3 -> Vowel -> Verb = \rmy,vowImpf ->
let vforms = v1defForms_perfA rmy vowImpf
v1defective_a : Root3 -> Vowel -> (masdar:Str) -> Verb = \rmy,vowImpf,masdar ->
let vforms = v1defForms_perfA rmy vowImpf masdar
in verbDef vforms vowImpf ;
v1defective_i : Root3 -> Vowel -> Verb = \bqy,vowImpf -> -- IL (conjugation 1d4)
let vforms_i = v1defForms_perfI bqy vowImpf ;
v1defective_i : Root3 -> Vowel -> (masdar:Str) -> Verb = \bqy,vowImpf,masdar -> -- IL (conjugation 1d4)
let vforms_i = v1defForms_perfI bqy vowImpf masdar ;
in verbDef vforms_i vowImpf ;
v1doubleweak : Root3 -> Verb = \r'y ->
v1doubleweak : Root3 -> (masdar:Str) -> Verb = \r'y,masdar ->
let ry = r'y ** {c = ""} ;
vforms_doubleweak : DefForms = \\x => rmSukun (v1defForms_perfA ry a ! x) ; -- only remove the first sukun
vforms_weak : DefForms = v1defForms_perfA r'y a ;
vforms_doubleweak : DefForms = \\x => rmSukun (v1defForms_perfA ry a masdar ! x) ; -- only remove the first sukun
vforms_weak : DefForms = v1defForms_perfA r'y a masdar ;
vforms = table { 0 => vforms_weak ! 0 ; -- all perfect forms
1 => vforms_weak ! 1 ;
2 => vforms_weak ! 2 ;
@@ -650,10 +657,10 @@ v1doubleweak : Root3 -> Verb = \r'y ->
x => vforms_doubleweak ! x } ;
in verbDoubleDef vforms a ; -- sukun in suffixes is removed in verbDoubleDef
v1assimilated_defective : Root3 -> Vowel -> Vowel -> Verb = \root,vPerf,vImpf ->
let vffun = case vPerf of {i => v1defForms_perfI ; _ => v1defForms_perfA} ;
vforms_def : DefForms = vffun root vImpf ;
vforms_ass : DefForms = \\x => rmSukun (vffun (root ** {f = ""}) vImpf ! x) ;
v1assimilated_defective : Root3 -> Vowel -> Vowel -> (masdar:Str) -> Verb = \root,vPerf,vImpf,msdr ->
let vffun = case vPerf of {i => v1defForms_perfI ; _ => v1defForms_perfA } ;
vforms_def : DefForms = vffun root vImpf msdr ;
vforms_ass : DefForms = \\x => rmSukun (vffun (root ** {f = ""}) vImpf msdr ! x) ;
vforms : DefForms =
table { 4 => vforms_ass ! 4 ;
5 => vforms_ass ! 5 ;
@@ -684,9 +691,10 @@ v2sound : Root3 -> Verb = \qsm ->
qassim = mkStrong faccil qsm ;
uqassim = "ُ" + qassim ;
uqassam = "ُ" + qassam ;
muqassam = "مُ" + qassam
muqassam = "مُ" + qassam ;
taqsIm = "تَ" + mkStrong fcIl qsm ;
} in
verb qassam qussim uqassim uqassam qassim muqassam ;
verb qassam qussim uqassim uqassam qassim muqassam taqsIm ;
v2defective : Root3 -> Verb = \gny ->
let {
@@ -700,11 +708,12 @@ v2defective : Root3 -> Verb = \gny ->
gannu = mkDefective faccu gny;
ugannu = "ُ" + gannu;
uganna = "ُ" + ganna;
mugannaY = "مُ" + ganna + "ى"
mugannaY = "مُ" + ganna + "ى";
tagniya = "TODO" ;
} in verbDef (toDefForms
ganna gannay gunni gunnu gunniy -- VPerf
uganni ugannu uganna -- VImpf
ganni gannu mugannaY) i ;
ganni gannu mugannaY tagniya) i ;
v3sound : Root3 -> Verb =
\tbc ->
@@ -714,8 +723,9 @@ v3sound : Root3 -> Verb =
tAbic = mkStrong fAcil tbc ;
utAbic = "ُ" + tAbic ;
utAbac = mkStrong ufAcal tbc ;
mutAbac = "م" + utAbac
} in verb tAbac twbic utAbic utAbac tAbic mutAbac;
mutAbac = "م" + utAbac ;
mutAbacAt = mutAbac + "َاَة"
} in verb tAbac twbic utAbic utAbac tAbic mutAbac mutAbacAt ;
v4sound : Root3 -> Verb =
\qnc ->
@@ -725,9 +735,10 @@ v4sound : Root3 -> Verb =
uqnic = mkStrong ufcil qnc;
uqnac = mkStrong ufcal qnc;
eaqnic = mkStrong eafcil qnc;
muqnac = "م" + uqnac
muqnac = "م" + uqnac;
eiqnAc = mkStrong eifcAl qnc
} in
verb eaqnac euqnic uqnic uqnac eaqnic muqnac;
verb eaqnac euqnic uqnic uqnac eaqnic muqnac eiqnAc;
v4hollow : Root3 -> Verb =
\rwd ->
@@ -746,11 +757,12 @@ v4hollow : Root3 -> Verb =
earId = mkHollow eafIc rwd ; -- VImp (Pl Masc / Sg Fem)
ppart = "م" + urAd ;
eirAdat = mkWeak eifcAl rwd + "َة" ;
} in verbHollow (toDefForms
earAd earad eurId eurid -- VPerf
urId urid urAd urad -- VImpf
earId earid ppart) ;
earId earid ppart eirAdat) ;
v4DefForms : Root3 -> DefForms = \cTy ->
let {
@@ -767,10 +779,11 @@ v4hollow : Root3 -> Verb =
ucTa = "ُ" + _cTa; -- VImpf Pas
eacTi = "أَ" + _cTi; -- VImp (Masc Sg / Fem _)
eacTu = "أَ" + _cTu; -- VImp Masc Pl
mucTaY = "م" + ucTa +"ى"
mucTaY = "م" + ucTa +"ى" ;
eicTA' = "TODO" ;
} in toDefForms eacTa eacTay eucTi eucTu eucTiy -- VPerf
ucTi ucTu ucTa -- VImpf
eacTi eacTu mucTaY ;
eacTi eacTu mucTaY eicTA' ;
v4defective : Root3 -> Verb = \cTy ->
verbDef (v4DefForms cTy) i ;
@@ -787,8 +800,9 @@ v5sound : Root3 -> Verb =
tunuffis = mkStrong tufuccil nfs ;
atanaffas = "َ" + tanaffas ;
utanaffas = "ُ" + tanaffas ;
mutanaffas = "م" + tanaffas
} in verb tanaffas tunuffis atanaffas utanaffas tanaffas mutanaffas;
mutanaffas = "م" + tanaffas ;
tanaffus = mkStrong tafaccul nfs
} in verb tanaffas tunuffis atanaffas utanaffas tanaffas mutanaffas tanaffus;
v6sound : Root3 -> Verb =
\fqm ->
@@ -797,11 +811,13 @@ v6sound : Root3 -> Verb =
tufUqim = mkStrong tufUcil fqm ;
atafAqam = "َ" + tafAqam ;
utafAqam = "ُ" + tafAqam ;
mutafAqam = "م" + utafAqam
} in verb tafAqam tufUqim atafAqam utafAqam tafAqam mutafAqam;
mutafAqam = "م" + utafAqam ;
tafAqum = mkStrong tafAcul fqm ;
} in verb tafAqam tufUqim atafAqam utafAqam tafAqam mutafAqam tafAqum;
v7sound : Root3 -> Verb = \fcl ->
let vforms = v1soundForms fcl a i ;
let inficAl = "اِ" + mkStrong ficAl fcl ;
vforms = v1soundForms fcl a i inficAl ;
_nfacil = "نْ" + mkStrong facil fcl ;
infacal = "اِنْ" + vforms ! 0 ;
anfacil = "َ" + _nfacil ;
@@ -816,7 +832,8 @@ v7sound : Root3 -> Verb = \fcl ->
}) ;
v7geminate : Str -> Verb = \fcl ->
let vforms = v1geminateForms fcl a i ;
let inficAc = "اِنْ" + mkStrong ficAl (mkRoot3 fcl) ;
vforms = v1geminateForms fcl a i inficAc ;
_nfacc = "نْ" + vforms ! 0 ;
_nfacic = "نْ" + mkStrong facil (mkRoot3 fcl) ;
infacc = "اِ" + _nfacc ; -- VPerf Act
@@ -836,6 +853,21 @@ v7geminate : Str -> Verb = \fcl ->
n => "ُنْ" + vforms ! n -- doesn't exist for form 7
}) ;
v8sound : Root3 -> Verb =
\rbT ->
let {
rtabiT = mkStrong ftacil rbT ;
rtabaT = mkStrong ftacal rbT ;
rtibAT = mkStrong fticAl rbT ;
eirtabaT = "إِ" + rtabaT ;
eurtubiT = "أُ" + mkStrong ftucil rbT ;
artabiT = "َ" + rtabiT ;
urtabaT = "ُ" + rtabaT ;
eirtabiT = "إِ" + rtabiT ;
murtabaT = "م" + urtabaT ;
irtibAT = "اِ" + rtibAT ;
} in verb eirtabaT eurtubiT artabiT urtabaT eirtabiT murtabaT irtibAT;
v8geminate : Str -> Verb =
\rootStr ->
let {
@@ -846,6 +878,7 @@ v8geminate : Str -> Verb =
_mtadid = mkStrong ftacil mdd ;
_mtudd = mkBilit ftucc md ;
_mtudid = mkStrong ftucil mdd ;
_mtidAd = mkStrong fticAl mdd ;
imtadd = "اِ" + _mtadd ;
imtadad = "اِ" + _mtadad ;
umtudd = "اُ" + _mtudd ;
@@ -856,37 +889,26 @@ v8geminate : Str -> Verb =
umtadad = "ُ" + _mtadad ;
imtadid = "اِ" + _mtadid ;
mumtadd = "مُ" + _mtadd ;
imtidAd = "اِ" + _mtidAd ;
} in verbGeminate (toDefForms
imtadd imtadad umtudd umtudid -- VPerf
amtadd amtadid umtadd umtadad -- VPres
imtadd imtadid mumtadd) ;
v8sound : Root3 -> Verb =
\rbT ->
let {
rtabiT = mkStrong ftacil rbT ;
rtabaT = mkStrong ftacal rbT ;
eirtabaT = "إِ" + rtabaT ;
eurtubiT = "أُ" + mkStrong ftucil rbT ;
artabiT = "َ" + rtabiT ;
urtabaT = "ُ" + rtabaT ;
eirtabiT = "إِ" + rtabiT ;
murtabaT = "م" + urtabaT
} in verb eirtabaT eurtubiT artabiT urtabaT eirtabiT murtabaT;
imtadd imtadid mumtadd imtidAd) ;
v8assimilated : Root3 -> Verb = --- IL 8a1
\wfq ->
let {
ttafiq = mkWeak ttacil wfq ;
ttafaq = mkWeak ttacal wfq ;
eittafaq = "إِ" + ttafaq ;
ttifAq = mkWeak tticAl wfq ;
ittafaq = "اِ" + ttafaq ;
euttufiq = mkWeak euttucil wfq ; -- TODO check
attafiq = "َ" + ttafiq ;
uttafaq = "ُ" + ttafaq ;
eittafiq = "إِ" + ttafiq ;
muttafaq = "م" + uttafaq
} in verb eittafaq euttufiq attafiq uttafaq eittafiq muttafaq;
ittafiq = "اِ" + ttafiq ;
muttafaq = "م" + uttafaq ;
ittifAq = "اِ" + ttifAq ;
} in verb ittafaq euttufiq attafiq uttafaq ittafiq muttafaq ittifAq;
v8hollow : Root3 -> Verb = -- IL
\Hwj ->
@@ -905,25 +927,28 @@ v8hollow : Root3 -> Verb = -- IL
uHtAj = "ُ" + _Htaj ; -- VImpf Pas _
-- iHtaj again -- VImp Sg Masc / Pl Fem
-- iHtAj again -- VImp Pl Masc / Sg Fem
ppart = "مُ" + _HtAj -- PPart
ppart = "مُ" + _HtAj ; -- PPart
iHtiyAj = "TODO" ;
} in verbHollow (toDefForms
iHtAj iHtaj uHtIj uHtij aHtAj aHtaj
uHtAj uHtaj iHtAj iHtaj ppart) ;
uHtAj uHtaj iHtAj iHtaj ppart iHtiyAj) ;
v10sound : Root3 -> Verb = -- IL 10s -- to be checked
\qtl ->
let {
_staqtal = "ستَ" + mkStrong fcal qtl ;
_staqtil = "ستَ" + mkStrong fcil qtl;
_staqtil = "ستَ" + mkStrong fcil qtl ;
_stiqtAl = "ستِ" + mkStrong fcAl qtl ;
istaqtal = "اِ" + _staqtal ; -- VPerf Act
ustuqtil = "اُسْتُ" + mkStrong fcil qtl; -- VPerf Pas
astaqtil = "َ" + _staqtil ; -- VImpf _ Act
astaqtal = "َ" + _staqtal ; -- VImpf _ Pas
istaqtil = "اِ" + _staqtil ; -- VImp
mustaqtal = "مُ" + _staqtal -- VPPart
mustaqtal = "مُ" + _staqtal ; -- VPPart
istiqtAl = "اِ" + _stiqtAl ;
} in
verb istaqtal ustuqtil astaqtil astaqtal istaqtil mustaqtal ;
verb istaqtal ustuqtil astaqtil astaqtal istaqtil mustaqtal istiqtAl ;
v10hollow : Root3 -> Verb = -- IL 10h -- to be checked
\xwf ->
@@ -942,11 +967,12 @@ v10hollow : Root3 -> Verb = -- IL 10h -- to be checked
astaxIf = "َ" + _staxIf ; -- VImpf Act _
ustaxaf = "ُ" + _staxaf ; -- VImpf Pas (Per2/Per3 Fem Pl)
ustaxAf = "ُ" + _staxAf ; -- VImpf Pas _
ppart = "مُ" + _staxIf -- PPart ("weird anomalies" here too?)
ppart = "مُ" + _staxIf ; -- PPart ("weird anomalies" here too?)
istixAfat = "TODO ficAlp" ;
} in verbHollow (toDefForms
istaxAf istaxaf ustuxIf ustuxif astaxIf astaxif
ustaxAf ustaxaf istaxif istaxIf ppart) ;
ustaxAf ustaxaf istaxif istaxIf ppart istixAfat) ;
v10defective : Root3 -> Verb = -- IL
\lqy ->
@@ -967,12 +993,16 @@ v10defective : Root3 -> Verb = -- IL
istalqu = "اِ" + _stalqu; -- VImp Masc Pl
mustalqin = "مُ" + _stalqi + "ت" ;
lq' = lqy ** {l = "ء"} ;
istilqA' = "اِسْتِ" + mkStrong fcAl lq' ;
} in verbDef (toDefForms
istalqa istalqay ustulqi ustulqi ustulqi
astalqi astalqu ustalqa istalqi istalqu mustalqin) i ;
astalqi astalqu ustalqa
istalqi istalqu mustalqin istilqA') i ;
v10geminate : Str -> Verb = \fcl ->
let vforms = v1geminateForms fcl a i ;
let vforms = v1geminateForms fcl a i "dummy masdar" ;
_stafacc = "سْتَ" + vforms ! 0 ;
_stafcac = "سْتَ" + mkStrong fcal (mkRoot3 fcl) ;
_staficc = "سْت" + vforms ! 4 ; -- vowel is in the stem from vforms
@@ -984,6 +1014,7 @@ v10geminate : Str -> Verb = \fcl ->
istaficc = "اِ" + _staficc ; -- VImp
istafcic = "اِ" + _stafcic ; -- VImp PlF
mustafacc = "مُ" + _stafacc ; -- VPPart
istifcAc = "اِسْتِ" + mkStrong fcAl (mkRoot3 fcl) ;
in verbGeminate (table {
0 => istafacc ;
1 => istafcac ;
@@ -992,6 +1023,7 @@ v10geminate : Str -> Verb = \fcl ->
8 => istaficc ;
9 => istafcic ;
10 => mustafacc ;
11 => istifcAc ;
n@(2|3) => "ُسْتُ" + vforms ! n ; -- ???
n@(6|7) => "ُسْتَ" + vforms ! n -- ???
}) ;
@@ -1629,7 +1661,7 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
VPerf _ pgn => v.s ! vf ++ reflPron Acc pgn ;
VImpf _ _ pgn => v.s ! vf ++ reflPron Acc pgn ;
VImp g n => v.s ! vf ++ reflPron Acc (Per2 g n) ;
VPPart => v.s ! vf ++ reflPron Acc (Per3 Masc Sg) ----
_ => v.s ! vf ++ reflPron Acc (Per3 Masc Sg) ----
}
} ;
@@ -1647,7 +1679,8 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
vf@(VImpf _ _ pgn) => copula.s ! vf ++ laday pgn ;
vf@(VPerf _ pgn) => copula.s ! vf ++ laday pgn ;
vf@(VImp g n) => copula.s ! vf ++ laday (Per2 g n) ;
VPPart => copula.s ! VPPart ++ "لَدَى" }
x => copula.s ! x ++ "لَدَى" }
} ;
-----------------------------------------------------------------------------
-- IP, questions
@@ -1699,7 +1732,8 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
param VPForm =
VPPerf
| VPImpf Mood
| VPImp ;
| VPImp
| VPGer ;
oper
@@ -1715,8 +1749,8 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
s : PerGenNum => VPForm => Str ;
} ;
uttVP : VP -> (Gender=>Str) = \vp ->
\\g => vp.s ! Per3 g Sg ! VPPerf
uttVP : VPForm -> VP -> (Gender=>Str) = \vpf,vp ->
\\g => vp.s ! Per3 g Sg ! vpf
++ vp.obj.s ++ vp.pred.s ! {n = Sg ; g = g} ! Nom
++ vp.s2 ;
@@ -1726,7 +1760,8 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
case vf of {
VPPerf => v.s ! VPerf Act pgn ;
VPImpf m => v.s ! VImpf m Act pgn ;
VPImp => v.s ! VImp gn.g gn.n
VPImp => v.s ! VImp gn.g gn.n ;
VPGer => v.s ! Masdar
};
sc = noPrep ;
obj = emptyObj ;
@@ -1895,7 +1930,7 @@ patGeminateImp : (_,_ :Str) -> Gender => Number => Str = \facc,facic ->
kaan : {s : AAgr => Case => Str} -> VP = \xabar ->
insertPred xabar (predV copula);
copula : Verb = v1hollow {f = "ك"; c = "و" ; l = "ن"} u ;
copula : Verb = v1hollow {f = "ك"; c = "و" ; l = "ن"} u "كَوْن" ;
-----------------------------------------------------------------------------
-- Slash categories

View File

@@ -44,7 +44,7 @@ concrete SentenceAra of Sentence = CatAra ** open
EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ;
EmbedQS qs = {s = qs.s ! QIndir} ;
EmbedVP vp = {s = uttVP vp ! Masc} ;
EmbedVP vp = {s = uttVP VPPerf vp ! Masc} ; -- TODO: use VPGer once it's more stable
UseCl t p cl =
{s = \\o => t.s ++ p.s ++