forked from GitHub/gf-rgl
@@ -201,36 +201,39 @@ resource ParadigmsAra = open
|
|||||||
|
|
||||||
mkV : overload {
|
mkV : overload {
|
||||||
mkV : (imperfect : Str) -> V ; -- The verb in Per3 Sg Masc imperfect tense gives the most information
|
mkV : (imperfect : Str) -> V ; -- The verb in Per3 Sg Masc imperfect tense gives the most information
|
||||||
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) -> (masdar : Str) -> V ; -- Verb form I. Vowel is one of {va,vi,vu}. 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) -> (perf,impf : Vowel) -> V ; -- Like above, but 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 : (root,masdar : Str) -> VerbForm -> V ; -- FormI…FormXI (no IX). XI is quadriliteral. For FormI, default vowels are va and vu, and dummy masdar is inserted. Forms II-XI have predictable masdar, so this constructor works fine.
|
||||||
|
mkV : (root : Str) -> VerbForm -> V ; -- Like above, but dummy masdar inserted for FormI verbs. No difference for FormII-FormXI, because they have predictable masdar.
|
||||||
mkV : V -> (particle : Str) -> V -- V with a non-inflecting particle/phrasal verb
|
mkV : V -> (particle : Str) -> V -- V with a non-inflecting particle/phrasal verb
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
reflV : V -> V ; -- نَفْس in the proper case and with possessive suffix, e.g. نَفْسَكِ
|
reflV : V -> V ; -- نَفْس in the proper case and with possessive suffix, e.g. نَفْسَكِ
|
||||||
|
|
||||||
v1 = overload {
|
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.
|
v1 : (root : 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 ;
|
= v1masdar ;
|
||||||
v1 : Str -> (perf,impf : Vowel) -> V -- To keep compatibility for the old API; dummy masdar inserted.
|
v1 : (root : Str) -> (perf,impf : Vowel) -> V -- To keep compatibility for the old API; dummy masdar inserted.
|
||||||
= v1dummymasdar ;
|
= v1dummymasdar ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
v2 : Str -> V ; -- Verb Form II : fa``ala
|
v2 : Str -> V ; -- Verb Form II: fa``ala
|
||||||
|
|
||||||
v3 : Str -> V ; -- Verb Form III : faa`ala
|
v3 : Str -> V ; -- Verb Form III: faa`ala
|
||||||
|
|
||||||
v4 : Str -> V ; -- Verb Form IV : 'af`ala
|
v4 : Str -> V ; -- Verb Form IV: 'af`ala
|
||||||
|
|
||||||
v5 : Str -> V ; -- Verb Form V : tafa``ala
|
v5 : Str -> V ; -- Verb Form V: tafa``ala
|
||||||
|
|
||||||
v6 : Str -> V ; -- Verb Form VI : tafaa`ala
|
v6 : Str -> V ; -- Verb Form VI: tafaa`ala
|
||||||
|
|
||||||
v7 : Str -> V ; -- Verb Form VII : infa`ala
|
v7 : Str -> V ; -- Verb Form VII: infa`ala
|
||||||
|
|
||||||
v8 : Str -> V ; -- Verb Form VIII ifta`ala
|
v8 : Str -> V ; -- Verb Form VIII: ifta`ala
|
||||||
|
|
||||||
v10 : Str -> V ; -- Verb Form X 'istaf`ala
|
v10 : Str -> V ; -- Verb Form X: 'istaf`ala
|
||||||
|
|
||||||
|
v11 : Str -> V ; -- Verb Form XI (quadriliteral): fa`laba
|
||||||
|
|
||||||
--3 Two-place verbs
|
--3 Two-place verbs
|
||||||
|
|
||||||
@@ -474,6 +477,7 @@ resource ParadigmsAra = open
|
|||||||
\rootStr ->
|
\rootStr ->
|
||||||
let root : Root3 = mkRoot3 rootStr ;
|
let root : Root3 = mkRoot3 rootStr ;
|
||||||
verb : Verb = case rootStr of {
|
verb : Verb = case rootStr of {
|
||||||
|
#weak + ? + ? => v4assimilated root ;
|
||||||
? + #hamza + #weak => v4doubleweak root ;
|
? + #hamza + #weak => v4doubleweak root ;
|
||||||
? + #weak + ? => v4hollow root ;
|
? + #weak + ? => v4hollow root ;
|
||||||
_ + #weak => v4defective root ;
|
_ + #weak => v4defective root ;
|
||||||
@@ -538,6 +542,17 @@ resource ParadigmsAra = open
|
|||||||
_ => v10sound fcl }
|
_ => v10sound fcl }
|
||||||
} in lin V verb ;
|
} in lin V verb ;
|
||||||
|
|
||||||
|
v11 =
|
||||||
|
\rootStr ->
|
||||||
|
let fcl : Root3 = case rootStr of {
|
||||||
|
f@? + c@? + l@? + b@? => {f=f ; c=c+"ْ"+l ; l=b} ;
|
||||||
|
_ => Predef.error "v11: implement quadriliterals properly"
|
||||||
|
} ;
|
||||||
|
verb : Verb = case rootStr of {
|
||||||
|
_ => v11sound fcl -- TODO more cases?
|
||||||
|
} ;
|
||||||
|
in lin V verb ;
|
||||||
|
|
||||||
reflV v = lin V (ResAra.reflV v) ;
|
reflV v = lin V (ResAra.reflV v) ;
|
||||||
|
|
||||||
mkFullN nsc gen spec = lin N
|
mkFullN nsc gen spec = lin N
|
||||||
@@ -823,10 +838,11 @@ formV : (root : Str) -> VerbForm -> V = \s,f -> case f of {
|
|||||||
FormVI => v6 s ;
|
FormVI => v6 s ;
|
||||||
FormVII => v7 s ;
|
FormVII => v7 s ;
|
||||||
FormVIII => v8 s ;
|
FormVIII => v8 s ;
|
||||||
FormX => v10 s
|
FormX => v10 s ;
|
||||||
|
FormXI => v11 s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
param VerbForm =
|
param VerbForm =
|
||||||
FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX ;
|
FormI | FormII | FormIII | FormIV | FormV | FormVI | FormVII | FormVIII | FormX | FormXI ;
|
||||||
|
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ flags coding=utf8 ;
|
|||||||
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
|
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
|
||||||
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
||||||
eifcAl = { h = "إِ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
eifcAl = { h = "إِ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
|
||||||
|
eIfcAl = eifcAl ** {h = "إِي"} ;
|
||||||
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
eafcil = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
|
||||||
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
eafcul = { h = "أَ"; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
|
||||||
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
eiftacal = { h = "إِ"; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
|
||||||
|
|||||||
@@ -41,7 +41,6 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in {
|
|||||||
Root2 : Type = Root ** {c : Str} ;
|
Root2 : Type = Root ** {c : Str} ;
|
||||||
Root3 : Type = Root2 ** {l : Str} ;
|
Root3 : Type = Root2 ** {l : Str} ;
|
||||||
|
|
||||||
-- AR 7/12/2009 changed this to avoid duplication of consonants
|
|
||||||
mkRoot3 : Str -> Root3 = \fcl -> case fcl of {
|
mkRoot3 : Str -> Root3 = \fcl -> case fcl of {
|
||||||
f@? + c@? + l => {f = f ; c = c ; l = l} ;
|
f@? + c@? + l => {f = f ; c = c ; l = l} ;
|
||||||
_ => error ("mkRoot3: too short root" ++ fcl)
|
_ => error ("mkRoot3: too short root" ++ fcl)
|
||||||
@@ -237,13 +236,13 @@ oper
|
|||||||
})
|
})
|
||||||
} ;
|
} ;
|
||||||
verb' : SoundForms -> Verb = \vforms ->
|
verb' : SoundForms -> Verb = \vforms ->
|
||||||
let katab = vforms ! 0 ;
|
let katab = vforms ! 0 ; -- VPerf Act
|
||||||
kutib = vforms ! 1 ;
|
kutib = vforms ! 1 ; -- VPerf Pas
|
||||||
aktub = vforms ! 2 ;
|
aktub = vforms ! 2 ; -- VImpf _ Act
|
||||||
uktab = vforms ! 3 ;
|
uktab = vforms ! 3 ; -- VImpf _ Pas
|
||||||
euktub = vforms ! 4 ;
|
euktub = vforms ! 4 ; -- VImp
|
||||||
maktUb = vforms ! 5 ;
|
maktUb = vforms ! 5 ; -- VPPart
|
||||||
katb = vforms ! 6 ;
|
katb = vforms ! 6 ; -- Masdar
|
||||||
in verb katab kutib aktub uktab euktub maktUb katb ;
|
in verb katab kutib aktub uktab euktub maktUb katb ;
|
||||||
--affixes of sound verbs
|
--affixes of sound verbs
|
||||||
|
|
||||||
@@ -709,11 +708,11 @@ v2defective : Root3 -> Verb = \gny ->
|
|||||||
ugannu = "ُ" + gannu;
|
ugannu = "ُ" + gannu;
|
||||||
uganna = "ُ" + ganna;
|
uganna = "ُ" + ganna;
|
||||||
mugannaY = "مُ" + ganna + "ى";
|
mugannaY = "مُ" + ganna + "ى";
|
||||||
tagniya = "TODO" ;
|
tagniyat = "تَ" + mkStrong fcil (gny ** {l="ي"}) + "َة" ;
|
||||||
} in verbDef (toDefForms
|
} in verbDef (toDefForms
|
||||||
ganna gannay gunni gunnu gunniy -- VPerf
|
ganna gannay gunni gunnu gunniy -- VPerf
|
||||||
uganni ugannu uganna -- VImpf
|
uganni ugannu uganna -- VImpf
|
||||||
ganni gannu mugannaY tagniya) i ;
|
ganni gannu mugannaY tagniyat) i ;
|
||||||
|
|
||||||
v3sound : Root3 -> Verb =
|
v3sound : Root3 -> Verb =
|
||||||
\tbc ->
|
\tbc ->
|
||||||
@@ -727,8 +726,7 @@ v3sound : Root3 -> Verb =
|
|||||||
mutAbacAt = mutAbac + "َاَة"
|
mutAbacAt = mutAbac + "َاَة"
|
||||||
} in verb tAbac twbic utAbic utAbac tAbic mutAbac mutAbacAt ;
|
} in verb tAbac twbic utAbic utAbac tAbic mutAbac mutAbacAt ;
|
||||||
|
|
||||||
v4sound : Root3 -> Verb =
|
v4soundForms : Root3 -> SoundForms = \qnc ->
|
||||||
\qnc ->
|
|
||||||
let {
|
let {
|
||||||
eaqnac = mkStrong eafcal qnc;
|
eaqnac = mkStrong eafcal qnc;
|
||||||
euqnic = mkStrong eufcil qnc;
|
euqnic = mkStrong eufcil qnc;
|
||||||
@@ -738,7 +736,17 @@ v4sound : Root3 -> Verb =
|
|||||||
muqnac = "م" + uqnac;
|
muqnac = "م" + uqnac;
|
||||||
eiqnAc = mkStrong eifcAl qnc
|
eiqnAc = mkStrong eifcAl qnc
|
||||||
} in
|
} in
|
||||||
verb eaqnac euqnic uqnic uqnac eaqnic muqnac eiqnAc;
|
toSoundForms eaqnac euqnic uqnic uqnac eaqnic muqnac eiqnAc;
|
||||||
|
|
||||||
|
v4sound : Root3 -> Verb = \qnc ->
|
||||||
|
verb' (v4soundForms qnc) ;
|
||||||
|
|
||||||
|
-- TODO: other differences
|
||||||
|
v4assimilated : Root3 -> Verb = \wqf ->
|
||||||
|
let eIqAf = mkStrong eIfcAl (wqf ** {f=""}) ;
|
||||||
|
vforms_snd = v4soundForms wqf ;
|
||||||
|
vforms_ass = table {6 => eIqAf ; n => vforms_snd ! n}
|
||||||
|
in verb' vforms_ass ;
|
||||||
|
|
||||||
v4hollow : Root3 -> Verb =
|
v4hollow : Root3 -> Verb =
|
||||||
\rwd ->
|
\rwd ->
|
||||||
@@ -757,7 +765,7 @@ v4hollow : Root3 -> Verb =
|
|||||||
earId = mkHollow eafIc rwd ; -- VImp (Pl Masc / Sg Fem)
|
earId = mkHollow eafIc rwd ; -- VImp (Pl Masc / Sg Fem)
|
||||||
|
|
||||||
ppart = "م" + urAd ;
|
ppart = "م" + urAd ;
|
||||||
eirAdat = mkWeak eifcAl rwd + "َة" ;
|
eirAdat = mkHollow eifcAl rwd + "َة" ;
|
||||||
|
|
||||||
} in verbHollow (toDefForms
|
} in verbHollow (toDefForms
|
||||||
earAd earad eurId eurid -- VPerf
|
earAd earad eurId eurid -- VPerf
|
||||||
@@ -780,7 +788,7 @@ v4hollow : Root3 -> Verb =
|
|||||||
eacTi = "أَ" + _cTi; -- VImp (Masc Sg / Fem _)
|
eacTi = "أَ" + _cTi; -- VImp (Masc Sg / Fem _)
|
||||||
eacTu = "أَ" + _cTu; -- VImp Masc Pl
|
eacTu = "أَ" + _cTu; -- VImp Masc Pl
|
||||||
mucTaY = "م" + ucTa +"ى" ;
|
mucTaY = "م" + ucTa +"ى" ;
|
||||||
eicTA' = "TODO" ;
|
eicTA' = mkStrong eifcAl (cTy ** {l="ء"}) ;
|
||||||
} in toDefForms eacTa eacTay eucTi eucTu eucTiy -- VPerf
|
} in toDefForms eacTa eacTay eucTi eucTu eucTiy -- VPerf
|
||||||
ucTi ucTu ucTa -- VImpf
|
ucTi ucTu ucTa -- VImpf
|
||||||
eacTi eacTu mucTaY eicTA' ;
|
eacTi eacTu mucTaY eicTA' ;
|
||||||
@@ -790,7 +798,12 @@ v4defective : Root3 -> Verb = \cTy ->
|
|||||||
|
|
||||||
v4doubleweak : Root3 -> Verb = \r'y ->
|
v4doubleweak : Root3 -> Verb = \r'y ->
|
||||||
let ry = r'y ** {c = ""} ;
|
let ry = r'y ** {c = ""} ;
|
||||||
vforms : DefForms = \\x => rmSukun (v4DefForms ry ! x) ; -- only remove the first sukun
|
r' = ry ** {l = "ء"} ;
|
||||||
|
eirA'at = mkStrong eifcAl r' + "َة" ;
|
||||||
|
vforms : DefForms = table {
|
||||||
|
11 => rmSukun eirA'at ;
|
||||||
|
n => rmSukun (v4DefForms ry ! n) -- only remove the first sukun
|
||||||
|
} ;
|
||||||
in verbDoubleDef vforms i ; -- sukun in suffixes is removed in verbDoubleDef
|
in verbDoubleDef vforms i ; -- sukun in suffixes is removed in verbDoubleDef
|
||||||
|
|
||||||
v5sound : Root3 -> Verb =
|
v5sound : Root3 -> Verb =
|
||||||
@@ -928,7 +941,7 @@ v8hollow : Root3 -> Verb = -- IL
|
|||||||
-- iHtaj again -- VImp Sg Masc / Pl Fem
|
-- iHtaj again -- VImp Sg Masc / Pl Fem
|
||||||
-- iHtAj again -- VImp Pl Masc / Sg Fem
|
-- iHtAj again -- VImp Pl Masc / Sg Fem
|
||||||
ppart = "مُ" + _HtAj ; -- PPart
|
ppart = "مُ" + _HtAj ; -- PPart
|
||||||
iHtiyAj = "TODO" ;
|
iHtiyAj = "اِ" + mkStrong fticAl (Hwj ** {c="ي"}) ;
|
||||||
|
|
||||||
} in verbHollow (toDefForms
|
} in verbHollow (toDefForms
|
||||||
iHtAj iHtaj uHtIj uHtij aHtAj aHtaj
|
iHtAj iHtaj uHtIj uHtij aHtAj aHtaj
|
||||||
@@ -968,7 +981,7 @@ v10hollow : Root3 -> Verb = -- IL 10h -- to be checked
|
|||||||
ustaxaf = "ُ" + _staxaf ; -- VImpf Pas (Per2/Per3 Fem Pl)
|
ustaxaf = "ُ" + _staxaf ; -- VImpf Pas (Per2/Per3 Fem Pl)
|
||||||
ustaxAf = "ُ" + _staxAf ; -- VImpf Pas _
|
ustaxAf = "ُ" + _staxAf ; -- VImpf Pas _
|
||||||
ppart = "مُ" + _staxIf ; -- PPart ("weird anomalies" here too?)
|
ppart = "مُ" + _staxIf ; -- PPart ("weird anomalies" here too?)
|
||||||
istixAfat = "TODO ficAlp" ;
|
istixAfat = "اِسْتِ" + mkHollow fAc xwf + "َة" ;
|
||||||
|
|
||||||
} in verbHollow (toDefForms
|
} in verbHollow (toDefForms
|
||||||
istaxAf istaxaf ustuxIf ustuxif astaxIf astaxif
|
istaxAf istaxaf ustuxIf ustuxif astaxIf astaxif
|
||||||
@@ -1028,6 +1041,18 @@ v10geminate : Str -> Verb = \fcl ->
|
|||||||
n@(6|7) => "ُسْتَ" + vforms ! n -- ???
|
n@(6|7) => "ُسْتَ" + vforms ! n -- ???
|
||||||
}) ;
|
}) ;
|
||||||
|
|
||||||
|
v11sound : Root3 -> Verb = \fclb ->
|
||||||
|
let faclabat = mkStrong facalp fclb ;
|
||||||
|
faclib = mkStrong facil fclb ;
|
||||||
|
faclab = mkStrong facal fclb ;
|
||||||
|
vforms = table {
|
||||||
|
2 => "ُ" + faclib ; -- VImpf Act
|
||||||
|
3 => "ُ" + faclab ; -- VImpf Pas
|
||||||
|
5 => "مُ" + faclab ; -- VPPart
|
||||||
|
n => v1soundForms fclb a i faclabat ! n
|
||||||
|
} ;
|
||||||
|
in verb' vforms ;
|
||||||
|
|
||||||
patV1Perf : Vowel => Pattern =
|
patV1Perf : Vowel => Pattern =
|
||||||
table {
|
table {
|
||||||
a => facal ; --katab
|
a => facal ; --katab
|
||||||
|
|||||||
Reference in New Issue
Block a user