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

@@ -85,7 +85,6 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in {
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} ;

View File

@@ -16,5 +16,4 @@ concrete ExtendAra of Extend =
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

@@ -33,7 +33,7 @@ flags optimize = all ;--noexpand;
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;

View File

@@ -53,7 +53,9 @@ resource ParadigmsAra = open
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 ;
} ; } ;
@@ -278,7 +280,7 @@ resource ParadigmsAra = open
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
}; };
@@ -351,10 +353,10 @@ resource ParadigmsAra = open
\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 ;
@@ -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

@@ -4,103 +4,106 @@ flags coding=utf8 ;
oper oper
fA' = { h = "" ; m1 = ""; m2 = ""; t = "َاء"} ; fA' = { h = "" ; m1 = ""; m2 = ""; t = "َاء"} ;
eafAcI = { h = "أَ"; m1 = "َا"; m2 = ""; t = "ِي" } ; eafAcI = { h = "أَ"; m1 = "َا"; m2 = ""; t = "ِي" } ;
eafcA' = { h = "أَ"; m1 = "ْ" ; m2 = ""; t = "َاء"} ; eafcA' = { h = "أَ"; m1 = "ْ" ; m2 = ""; t = "َاء"} ;
eafcI = { h = "أَ"; m1 = "ْ" ; m2 = ""; t = "ِي" } ; eafcI = { h = "أَ"; m1 = "ْ" ; m2 = ""; t = "ِي" } ;
fac = { h = "" ; m1 = "َ" ; m2 = ""; t = "" } ; fac = { h = "" ; m1 = "َ" ; m2 = ""; t = "" } ;
facc = { h = "" ; m1 = "َ" ; m2 = ""; t = "ّ" } ; facc = { h = "" ; m1 = "َ" ; m2 = ""; t = "ّ" } ;
facca = { h = "" ; m1 = "َ" ; m2 = ""; t = "َّ" } ; facca = { h = "" ; m1 = "َ" ; m2 = ""; t = "َّ" } ;
facci = { h = "" ; m1 = "َ" ; m2 = ""; t = "ِّ" } ; facci = { h = "" ; m1 = "َ" ; m2 = ""; t = "ِّ" } ;
faccu = { h = "" ; m1 = "َ" ; m2 = ""; t = "ُّ" } ; faccu = { h = "" ; m1 = "َ" ; m2 = ""; t = "ُّ" } ;
facp = { h = "" ; m1 = "َ" ; m2 = ""; t = "َة" } ; facp = { h = "" ; m1 = "َ" ; m2 = ""; t = "َة" } ;
faca = { h = "" ; m1 = "َ" ; m2 = ""; t = "َ" } ; faca = { h = "" ; m1 = "َ" ; m2 = ""; t = "َ" } ;
facA = { h = "" ; m1 = "َ" ; m2 = ""; t = "َا" } ; facA = { h = "" ; m1 = "َ" ; m2 = ""; t = "َا" } ;
facA' = { h = "" ; m1 = "َ" ; m2 = ""; t = "َاء"} ; facA' = { h = "" ; m1 = "َ" ; m2 = ""; t = "َاء"} ;
fAc = { h = "" ; m1 = "َا"; m2 = ""; t = "" } ; fAc = { h = "" ; m1 = "َا"; m2 = ""; t = "" } ;
fAcp = { h = "" ; m1 = "َا"; m2 = ""; t = "َة" } ; fAcp = { h = "" ; m1 = "َا"; m2 = ""; t = "َة" } ;
fic = { h = "" ; m1 = "ِ" ; m2 = ""; t = "" } ; fic = { h = "" ; m1 = "ِ" ; m2 = ""; t = "" } ;
ficc = { h = "" ; m1 = "ِ" ; m2 = ""; t = "ّ" } ; ficc = { h = "" ; m1 = "ِ" ; m2 = ""; t = "ّ" } ;
ficA' = { h = "" ; m1 = "ِ" ; m2 = ""; t = "َاء"} ; ficA' = { h = "" ; m1 = "ِ" ; m2 = ""; t = "َاء"} ;
fIc = { h = "" ; m1 = "ِي"; m2 = ""; t = "" } ; fIc = { h = "" ; m1 = "ِي"; m2 = ""; t = "" } ;
fIcAn = { h = "" ; m1 = "ِي"; m2 = ""; t = "َان"} ; fIcAn = { h = "" ; m1 = "ِي"; m2 = ""; t = "َان"} ;
fca = { h = "" ; m1 = "ْ" ; m2 = ""; t = "َ" } ; fca = { h = "" ; m1 = "ْ" ; m2 = ""; t = "َ" } ;
fci = { h = "" ; m1 = "ْ" ; m2 = ""; t = "ِ" } ; fci = { h = "" ; m1 = "ْ" ; m2 = ""; t = "ِ" } ;
fcu = { h = "" ; m1 = "ْ" ; m2 = ""; t = "ُ" } ; fcu = { h = "" ; m1 = "ْ" ; m2 = ""; t = "ُ" } ;
fuc = { h = "" ; m1 = "ُ" ; m2 = ""; t = "" } ; fuc = { h = "" ; m1 = "ُ" ; m2 = ""; t = "" } ;
fucc = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ّ" } ; fucc = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ّ" } ;
fucci = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ِّ" } ; fucci = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ِّ" } ;
fuccu = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ُّ" } ; fuccu = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ُّ" } ;
fuci = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ِ" } ; fuci = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ِ" } ;
fucu = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ُ" } ; fucu = { h = "" ; m1 = "ُ" ; m2 = ""; t = "ُ" } ;
fUc = { h = "" ; m1 = "ُو"; m2 = ""; t = "" } ; fUc = { h = "" ; m1 = "ُو"; m2 = ""; t = "" } ;
ufAc = { h = "ُ" ; m1 = "َا"; m2 = ""; t = "" } ; ufAc = { h = "ُ" ; m1 = "َا"; m2 = ""; t = "" } ;
ufca = { h = "ُ" ; m1 = "ْ" ; m2 = ""; t = "َ" } ; ufca = { h = "ُ" ; m1 = "ْ" ; m2 = ""; t = "َ" } ;
eafAcil = { h = "أَ"; m1 = "َا" ; m2 = "ِ" ; t = "" } ; eafAcil = { h = "أَ"; m1 = "َا" ; m2 = "ِ" ; t = "" } ;
eafAcIl = { h = "أَ"; m1 = "َا" ; m2 = "ِي" ; t = "" } ; eafAcIl = { h = "أَ"; m1 = "َا" ; m2 = "ِي" ; t = "" } ;
eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ; eafcilp = { h = "أَ"; m1 = "ْ" ; m2 = "ِ" ; t = "َة" } ;
eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ; eafcal = { h = "أَ"; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ; eafcAl = { h = "أَ"; m1 = "ْ" ; m2 = "َا" ; t = "" } ;
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 = "" } ;
eufcil = { h = "أُ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ; eufcil = { h = "أُ"; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
euftucil = { h = "أُ"; m1 = "ْتُ" ; m2 = "ِ" ; t = "" } ; euftucil = { h = "أُ"; m1 = "ْتُ" ; m2 = "ِ" ; t = "" } ;
afcul = { h = "َ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ; euttucil = euftucil ** { h = "تُّأُ" ; m1 = "" } ; ---- IL assimilated VIII
faccalo = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "ْ" } ; afcul = { h = "َ" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
facal = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "" } ; faccalo = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "ْ" } ;
facalo = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "ْ" } ; facal = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "" } ;
facalp = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "َة" } ; facalo = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "ْ" } ;
facA'il = { h = "" ; m1 = "َ" ; m2 = "َائِ"; t = "" } ; facalp = { h = "" ; m1 = "َ" ; m2 = "َ" ; t = "َة" } ;
facAl = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "" } ; facA'il = { h = "" ; m1 = "َ" ; m2 = "َائِ"; t = "" } ;
facAlI = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "ِي" } ; facAl = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "" } ;
facil = { h = "" ; m1 = "َ" ; m2 = "ِ" ; t = "" } ; facAlI = { h = "" ; m1 = "َ" ; m2 = "َا" ; t = "ِي" } ;
facIl = { h = "" ; m1 = "َ" ; m2 = "ِي" ; t = "" } ; facil = { h = "" ; m1 = "َ" ; m2 = "ِ" ; t = "" } ;
facl = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "" } ; facIl = { h = "" ; m1 = "َ" ; m2 = "ِي" ; t = "" } ;
faclp = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "َة" } ; facl = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "" } ;
facul = { h = "" ; m1 = "َ" ; m2 = "ُ" ; t = "" } ; faclp = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "َة" } ;
fAcal = { h = "" ; m1 = "َا" ; m2 = "َ" ; t = "" } ; facul = { h = "" ; m1 = "َ" ; m2 = "ُ" ; t = "" } ;
fAcil = { h = "" ; m1 = "َا" ; m2 = "ِ" ; t = "" } ; fAcal = { h = "" ; m1 = "َا" ; m2 = "َ" ; t = "" } ;
faccal = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "" } ; fAcil = { h = "" ; m1 = "َا" ; m2 = "ِ" ; t = "" } ;
faccil = { h = "" ; m1 = "َ" ; m2 = "ِّ" ; t = "" } ; faccal = { h = "" ; m1 = "َ" ; m2 = "َّ" ; t = "" } ;
faclA' = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "َاء"} ; faccil = { h = "" ; m1 = "َ" ; m2 = "ِّ" ; t = "" } ;
fAcilp = { h = "" ; m1 = "َا" ; m2 = "ِ" ; t = "َة" } ; faclA' = { h = "" ; m1 = "َ" ; m2 = "ْ" ; t = "َاء"} ;
fawAcil = { h = "" ; m1 = "َوَا"; m2 = "ِ" ; t = "" } ; fAcilp = { h = "" ; m1 = "َا" ; m2 = "ِ" ; t = "َة" } ;
ficAlp = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "َة" } ; fawAcil = { h = "" ; m1 = "َوَا"; m2 = "ِ" ; t = "" } ;
fcal = { h = "" ; m1 = "ْ" ; m2 = "َ" ; t = "" } ; ficAlp = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "َة" } ;
fcil = { h = "" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ; fcal = { h = "" ; m1 = "ْ" ; m2 = "َ" ; t = "" } ;
fcul = { h = "" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ; fcil = { h = "" ; m1 = "ْ" ; m2 = "ِ" ; t = "" } ;
ficl = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "" } ; fcul = { h = "" ; m1 = "ْ" ; m2 = "ُ" ; t = "" } ;
ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ; ficl = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "" } ;
ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ; ficAl = { h = "" ; m1 = "ِ" ; m2 = "َا" ; t = "" } ;
ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ; ficlp = { h = "" ; m1 = "ِ" ; m2 = "ْ" ; t = "َة" } ;
ftacil = { h = "" ; m1 = "ْتَ" ; m2 = "ِ" ; t = "" } ; ftacal = { h = "" ; m1 = "ْتَ" ; m2 = "َ" ; t = "" } ;
fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ; ftacil = { h = "" ; m1 = "ْتَ" ; m2 = "ِ" ; t = "" } ;
fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ; ttacal = ftacal ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ; ttacil = ftacil ** { m1 = "" ; h = "تَّ" } ; ---- IL assimilated VIII
fucal = { h = "" ; m1 = "ُ" ; m2 = "َ" ; t = "" } ; fuccAl = { h = "" ; m1 = "ُ" ; m2 = "َّا" ; t = "" } ;
fucaylp = { h = "" ; m1 = "ُ" ; m2 = "َيْ" ; t = "َة" } ; fuccil = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "" } ;
fucAl = { h = "" ; m1 = "ُ" ; m2 = "َا" ; t = "" } ; fuccilo = { h = "" ; m1 = "ُ" ; m2 = "ِّ" ; t = "ْ" } ;
fucl = { h = "" ; m1 = "ُ" ; m2 = "ْ" ; t = "" } ; fucal = { h = "" ; m1 = "ُ" ; m2 = "َ" ; t = "" } ;
fucil = { h = "" ; m1 = "ُ" ; m2 = "ِ" ; t = "" } ; fucaylp = { h = "" ; m1 = "ُ" ; m2 = "َيْ" ; t = "َة" } ;
fuclp = { h = "" ; m1 = "ُ" ; m2 = "ْ" ; t = "َة" } ; fucAl = { h = "" ; m1 = "ُ" ; m2 = "َا" ; t = "" } ;
fucilo = { h = "" ; m1 = "ُ" ; m2 = "ِ" ; t = "ْ" } ; fucl = { h = "" ; m1 = "ُ" ; m2 = "ْ" ; t = "" } ;
fucul = { h = "" ; m1 = "ُ" ; m2 = "ُ" ; t = "" } ; fucil = { h = "" ; m1 = "ُ" ; m2 = "ِ" ; t = "" } ;
fuculo = { h = "" ; m1 = "ُ" ; m2 = "ُ" ; t = "ْ" } ; fuclp = { h = "" ; m1 = "ُ" ; m2 = "ْ" ; t = "َة" } ;
fucUl = { h = "" ; m1 = "ُ" ; m2 = "ُو" ; t = "" } ; fucilo = { h = "" ; m1 = "ُ" ; m2 = "ِ" ; t = "ْ" } ;
fUcil = { 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

@@ -76,12 +76,11 @@ resource ResAra = PatternsAra ** open Prelude, Predef, ParamX in {
-- takes a weak pattern and a triliteral root and makes -- takes a weak pattern and a triliteral root and makes
-- a word, deducing which root consonant is weak -- a word, deducing which root consonant is weak
mkWeak : Pattern -> Str -> Str = \pat,root -> mkWeak : Pattern -> Root3 -> Str = \pat,fcl ->
let fcl = mkRoot3 root in case <fcl.f,fcl.c,fcl.l> of {
case root of { <_,_,("و"|"ي"|"ّ")> => mkDefective pat fcl;
_ + ("و"|"ي"|"ّ") => mkDefective pat fcl; <_,("و"|"ي"),_> => mkHollow pat fcl;
_ + ("و"|"ي") + _ => mkHollow pat fcl; <("و"|"ي"),_,_> => mkAssimilated pat fcl
("و"|"ي") + _ => mkAssimilated pat fcl
}; };
mkBilit : Pattern -> Root2 -> Str = \p,fcl -> mkBilit : Pattern -> Root2 -> Str = \p,fcl ->
@@ -95,7 +94,7 @@ resource ResAra = PatternsAra ** open Prelude, Predef, ParamX in {
w@_ + "ف" + x@_ + "ع" + y@_ => w@_ + "ف" + x@_ + "ع" + y@_ =>
let pat = { h = w ; m1 = x; m2 = ""; t = y} in let pat = { h = w ; m1 = x; m2 = ""; t = y} in
case <length rS : Ints 100> of { case <length rS : Ints 100> of {
6 | 5 => mkWeak pat rS ; --3=> 6 | 5 => mkWeak pat (mkRoot3 rS) ; --3=>
4 | 3 => mkBilit pat (mkRoot2 rS) ; --2=> 4 | 3 => mkBilit pat (mkRoot2 rS) ; --2=>
_ => rS ---- AR error "expected 3--6" _ => rS ---- AR error "expected 3--6"
} }
@@ -232,33 +231,45 @@ oper
verbHollow : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb = verbHollow : (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
\xAf,xif,xyf,xuf,axAf,axaf,uxAf,uxaf,xaf,xAf',ppart -> \xAf,xif,xyf,xuf,axAf,axaf,uxAf,uxaf,xaf,xAf',ppart ->
let { perfPattern = patHollowPerf xAf xif xyf xuf ; let { perfPattern = patHollowPerf xAf xif xyf xuf ;
impfPattern = patHollowImpf axAf axaf uxAf uxaf ; impfPattern = patHollowImpf axAf axaf uxAf uxaf ;
impPattern = patHollowImp axaf xAf' ; impPattern = patHollowImp axaf xAf' ;
jusPattern = patHollowJus axaf axAf uxaf uxAf ; jusPattern = patHollowJus axaf axAf uxaf uxAf ;
} in } in
{ s = table { { s = table {
VPerf v pgn => perfPattern ! v ! pgn + suffixPerf ! pgn ; VPerf v pgn => perfPattern ! v ! pgn + suffixPerf ! pgn ;
VImpf Ind v pgn => prefixImpf ! pgn + impfPattern ! v ! pgn + suffixImpfInd ! pgn ; VImpf Ind v pgn => prefixImpf ! pgn + impfPattern ! v ! pgn + suffixImpfInd ! pgn ;
VImpf Cnj v pgn => prefixImpf ! pgn + impfPattern ! v ! pgn + suffixImpfCJ Cnj ! pgn ; VImpf Cnj v pgn => prefixImpf ! pgn + impfPattern ! v ! pgn + suffixImpfCJ Cnj ! pgn ;
VImpf Jus v pgn => prefixImpf ! pgn + jusPattern ! v ! pgn + suffixImpfCJ Jus ! pgn ; VImpf Jus v pgn => prefixImpf ! pgn + jusPattern ! v ! pgn + suffixImpfCJ Jus ! pgn ;
VImp g n => impPattern ! g ! n + suffixImpfCJ Jus ! (Per2 g n); VImp g n => impPattern ! g ! n + suffixImpfCJ Jus ! (Per2 g n);
VPPart => ppart VPPart => ppart
} }
} ; } ;
--macro for defective verbs: --macro for defective verbs:
verbDef: (_,_,_,_,_,_,_,_,_,_,_ : Str) -> Vowel -> Verb = verbDef : DefForms -> Vowel -> Verb =
\rama,ramay,rumi,rumu,rumiy,armi,armu,urma,Irmi,Irmu,ppart,vowel -> \vforms,vImpf ->
let { let {
patPerf = patDefPerf rama ramay rumi rumu rumiy ; rama = vforms ! 0 ; -- VPerf Act (Per3 Masc Sg)
patImpfAct = patDefImpfAct armi armu ; ramay = vforms ! 1 ; -- VPerf Act (Per3 Fem Pl)
patImp = patDefImp Irmi Irmu rumi = vforms ! 2 ; -- VPerf Pas (Per3 _ Sg)
rumu = vforms ! 3 ; -- VPerf Pas (Per3 Masc Pl)
rumiy = vforms ! 4 ; -- VPerf Pas (Per3 Fem Pl)
armi = vforms ! 5 ; -- VImpf _ Act (Per1 _ _ | Per2/3 Fem _ | Per2/3 Masc Sg)
armu = vforms ! 6 ; -- VImpf _ Act (Per2/3 Masc Pl)
urma = vforms ! 7 ; -- VImpf _ Pas
Irmi = vforms ! 8 ; -- VImp Masc Sg | VImp Fem _
Irmu = vforms ! 9 ; -- VImp Masc Pl
ppart = vforms ! 10 ; -- VPPart
patPerf = patDefPerf rama ramay rumi rumu rumiy ;
patImpfAct = patDefImpfAct armi armu ;
patImp = patDefImp Irmi Irmu
} in } in
{ s = table { { s = table {
VPerf v pgn => patPerf ! v ! pgn + (suffixPerfDef v) ! pgn ; VPerf v pgn => patPerf ! v ! pgn + (suffixPerfDef v) ! pgn ;
VImpf m Act pgn => prefixImpf ! pgn + patImpfAct ! pgn + (suffixImpfDef Act vowel) ! m ! pgn ; VImpf m Act pgn => prefixImpf ! pgn + patImpfAct ! pgn + (suffixImpfDef Act vImpf) ! m ! pgn ;
VImpf m Pas pgn => prefixImpf ! pgn + urma + (suffixImpfDef Pas vowel) ! m ! pgn ; VImpf m Pas pgn => prefixImpf ! pgn + urma + (suffixImpfDef Pas vImpf) ! m ! pgn ;
VImp g n => patImp ! g ! n + (suffixImpfDef Act vowel) ! Jus ! (Per2 g n) ; VImp g n => patImp ! g ! n + (suffixImpfDef Act vImpf) ! Jus ! (Per2 g n) ;
VPPart => ppart VPPart => ppart
} }
} ; } ;
@@ -268,15 +279,15 @@ oper
Act => Act =>
table { table {
Per3 Fem Pl => ramay ; Per3 Fem Pl => ramay ;
Per3 _ _ => rama ; Per3 _ _ => rama ;
_ => ramay _ => ramay
} ; } ;
Pas => Pas =>
table { table {
Per3 Masc Pl => rumu ; Per3 Masc Pl => rumu ;
Per3 Fem Pl => rumy ; Per3 Fem Pl => rumy ;
Per3 _ _ => rumi ; Per3 _ _ => rumi ;
_ => rumy _ => rumy
} }
} ; } ;
@@ -284,15 +295,15 @@ oper
patDefImpfAct : (_,_ : Str) -> PerGenNum => Str = \rmi,rmu -> patDefImpfAct : (_,_ : Str) -> PerGenNum => Str = \rmi,rmu ->
table { table {
Per3 Masc Pl => rmu ; Per3 Masc Pl => rmu ;
Per2 Masc Pl => rmu ; Per2 Masc Pl => rmu ;
_ => rmi _ => rmi
} ; } ;
patDefImp : (_,_ : Str) -> Gender => Number => Str = \rmi, rmu -> patDefImp : (_,_ : Str) -> Gender => Number => Str = \rmi, rmu ->
table { table {
Masc => table {Pl => rmu ; _ => rmi} ; Masc => table {Pl => rmu ; _ => rmi} ;
_ => table {_ => rmi} _ => table {_ => rmi}
} ; } ;
@@ -368,18 +379,18 @@ v1sound : Root3 -> Vowel -> Vowel -> Verb =
let { let {
qf = {f = fcl.c ; c = fcl.l} ; qf = {f = fcl.c ; c = fcl.l} ;
qif = mkBilit (fvc ! vImpf) qf; qif = mkBilit (fvc ! vImpf) qf;
katab = mkStrong (patV1Perf ! vPerf) fcl ; katab = mkStrong (patV1Perf ! vPerf) fcl ;
kutib = mkStrong fucil fcl ; --FIXME no passive if vPerf == u kutib = mkStrong fucil fcl ; --FIXME no passive if vPerf == u
ktub = mkStrong (patV1Impf ! vImpf) fcl ; ktub = mkStrong (patV1Impf ! vImpf) fcl ;
aktub = "َ" + aktub = "َ" +
case fcl.f of { case fcl.f of {
"و"|"ي" => qif ; "و"|"ي" => qif ;
_ => ktub _ => ktub
}; };
uktab = mkStrong ufcal fcl ; uktab = mkStrong ufcal fcl ;
euktub = case fcl.f of { euktub = case fcl.f of {
"؟"|"و"|"ي" => qif ; "؟"|"و"|"ي" => qif ;
_ => prefixImp ! vImpf + ktub _ => prefixImp ! vImpf + ktub
}; };
maktUb = mkStrong mafcUl fcl maktUb = mkStrong mafcUl fcl
} in } in
@@ -419,8 +430,8 @@ patHol3 : Vowel => Pattern =
fvc : Vowel => Pattern = fvc : Vowel => Pattern =
table { table {
u => fuc ; u => fuc ;
i => fic ; i => fic ;
a => fac a => fac
} ; } ;
@@ -446,80 +457,116 @@ v1geminate : Str -> Vowel -> Vowel -> Verb =
patGem1 : Vowel => Pattern = patGem1 : Vowel => Pattern =
table { table {
a => facal ; a => facal ;
u => facul ; u => facul ;
i => facil i => facil
} ; } ;
patGem2 : Vowel => Pattern = patGem2 : Vowel => Pattern =
table { table {
u => fucc ; u => fucc ;
a => facc ; a => facc ;
i => ficc --no such verb probably exists i => ficc --no such verb probably exists
} ; } ;
patGem3 : Vowel => Pattern = patGem3 : Vowel => Pattern =
table { table {
u => fcul ; u => fcul ;
a => fcal ; a => fcal ;
i => fcil --no such verb probably exists i => fcil --no such verb probably exists
} ; } ;
v1defective : Root3 -> Vowel -> Verb = DefForms : Type = Predef.Ints 10 => Str ;
\rmy,vowel -> toDefForms : (x1,_,_,_,_,_,_,_,_,_,x11 : Str) -> DefForms =
let { \rama,ramay,rumi,rumu,rumiy,armi,armu,urma,eirmi,eirmu,marmiy ->
rama = mkDefective faca rmy ; table {
ramay = mkStrong facalo rmy ; 0 => rama ;
rumi = mkDefective fuci rmy ; 1 => ramay ;
rumu = mkDefective fucu rmy ; 2 => rumi ;
rumiy = mkStrong fucilo rmy ; 3 => rumu ;
rmi = mkDefective (patDef1 ! vowel) rmy ; 4 => rumiy ;
armi = "َ" + rmi ; 5 => armi ;
rmu = mkDefective (patDef2 ! vowel) rmy ; 6 => armu ;
armu = "َ" + rmu ; 7 => urma ;
urma = mkDefective ufca rmy ; 8 => eirmi ;
eirmi = prefixImp ! vowel + rmi; 9 => eirmu ;
eirmu = prefixImp ! vowel + rmu; 10 => marmiy
marmiy = mkStrong mafcil rmy } ;
} in verbDef rama ramay rumi rumu rumiy armi armu urma eirmi eirmu marmiy vowel ;
def1Forms_vPerfA : Root3 -> Vowel -> DefForms = \rmy,vImpf ->
let {
rama = mkDefective faca rmy ;
ramay = mkStrong facalo rmy ;
rumi = mkDefective fuci rmy ;
rumu = mkDefective fucu rmy ;
rumiy = mkStrong fucilo rmy ;
rmi = mkDefective (patDef1 ! vImpf) rmy ;
armi = "َ" + rmi ;
rmu = mkDefective (patDef2 ! vImpf) rmy ;
armu = "َ" + rmu ;
urma = mkDefective ufca rmy ;
eirmi = prefixImp ! vImpf + rmi;
eirmu = prefixImp ! vImpf + rmu;
marmiy = mkStrong mafcil rmy
} in toDefForms rama ramay rumi rumu rumiy armi armu urma eirmi eirmu marmiy ;
v1defective : Root3 -> Vowel -> Vowel -> Verb = \rmy,vPerf,vImpf ->
case vPerf of {
i => v1defective_i rmy vImpf ;
_ => v1defective_a rmy vImpf
} ;
v1defective_a : Root3 -> Vowel -> Verb = \rmy,vImpf ->
let vforms = def1Forms_vPerfA rmy vImpf
in verbDef vforms vImpf ;
v1defective_i : Root3 -> Vowel -> Verb = \bqy,vImpf -> -- IL (conjugation 1d4)
let vforms_a = def1Forms_vPerfA bqy vImpf ;
baqI = mkDefective facIl bqy ;
baqiy = mkDefective facil bqy ;
vforms_i = table { 0 => baqI ;
1 => baqiy ;
x => vforms_a ! x } ;
in verbDef vforms_i vImpf ;
patDef1 : Vowel => Pattern = patDef1 : Vowel => Pattern =
table { table {
u => fcu ; u => fcu ;
a => fca ; a => fca ;
i => fci i => fci
} ; } ;
patDef2 : Vowel => Pattern = patDef2 : Vowel => Pattern =
table { table {
a => fca ; a => fca ;
_ => fcu _ => fcu
} ; } ;
v2sound : Root3 -> Verb = \qsm -> v2sound : Root3 -> Verb = \qsm ->
let { let {
qassam = mkStrong faccal qsm ; qassam = mkStrong faccal qsm ;
qussim = mkStrong fuccil qsm ; qussim = mkStrong fuccil qsm ;
qassim = mkStrong faccil qsm ; qassim = mkStrong faccil qsm ;
uqassim = "ُ" + qassim ; uqassim = "ُ" + qassim ;
uqassam = "ُ" + qassam ; uqassam = "ُ" + qassam ;
muqassam = "مُ" + qassam muqassam = "مُ" + qassam
} in } in
verb qassam qussim uqassim uqassam qassim muqassam; verb qassam qussim uqassim uqassam qassim muqassam;
v2defective : Root3 -> Verb = \gny -> v2defective : Root3 -> Verb = \gny ->
let { let {
ganna = mkDefective facca gny ; ganna = mkDefective facca gny ;
gannay = mkStrong faccalo gny ; gannay = mkStrong faccalo gny ;
gunni = mkDefective fucci gny ; gunni = mkDefective fucci gny ;
gunnu = mkDefective fuccu gny ; gunnu = mkDefective fuccu gny ;
gunniy = mkStrong fuccilo gny ; gunniy = mkStrong fuccilo gny ;
ganni = mkDefective facci gny; ganni = mkDefective facci gny;
uganni = "ُ" + ganni; uganni = "ُ" + ganni;
gannu = mkDefective faccu gny; gannu = mkDefective faccu gny;
ugannu = "ُ" + gannu; ugannu = "ُ" + gannu;
uganna = "ُ" + ganna; uganna = "ُ" + ganna;
mugannaY = "مُ" + ganna + "ى" mugannaY = "مُ" + ganna + "ى"
} in verbDef ganna gannay gunni gunnu gunniy uganni ugannu uganna ganni gannu mugannaY i; } in verbDef (toDefForms ganna gannay gunni gunnu gunniy uganni ugannu uganna ganni gannu mugannaY) i;
v3sound : Root3 -> Verb = v3sound : Root3 -> Verb =
\tbc -> \tbc ->
@@ -547,21 +594,21 @@ v4sound : Root3 -> Verb =
v4defective : Root3 -> Verb = \cTy -> v4defective : Root3 -> Verb = \cTy ->
let { let {
cTa = mkDefective fca cTy; cTa = mkDefective fca cTy;
cTu = mkDefective fcu cTy; cTu = mkDefective fcu cTy;
cTi = mkDefective fci cTy; cTi = mkDefective fci cTy;
eacTa = "أَ" + cTa; eacTa = "أَ" + cTa;
eacTay = mkStrong eafcal cTy ; eacTay = mkStrong eafcal cTy ;
ucTi = "ُ" + cTi; ucTi = "ُ" + cTi;
eucTi = "أُ" + cTi; eucTi = "أُ" + cTi;
ucTu = "ُ" + cTu; ucTu = "ُ" + cTu;
eucTu = "أُ" + cTu; eucTu = "أُ" + cTu;
eucTiy = mkStrong eufcil cTy ; eucTiy = mkStrong eufcil cTy ;
ucTa = "ُ" + cTa; ucTa = "ُ" + cTa;
eacTi = "أَ" + cTi; eacTi = "أَ" + cTi;
eacTu = "أَ" + cTu; eacTu = "أَ" + cTu;
mucTaY = "م" + ucTa +"ى" mucTaY = "م" + ucTa +"ى"
} in verbDef eacTa eacTay eucTi eucTu eucTiy ucTi ucTu ucTa eacTi eacTu mucTaY i; } in verbDef (toDefForms eacTa eacTay eucTi eucTu eucTiy ucTi ucTu ucTa eacTi eacTu mucTaY) i;
v5sound : Root3 -> Verb = v5sound : Root3 -> Verb =
\nfs -> \nfs ->
@@ -596,18 +643,32 @@ v8sound : Root3 -> Verb =
murtabaT = "م" + urtabaT murtabaT = "م" + urtabaT
} in verb eirtabaT eurtubiT artabiT urtabaT eirtabiT murtabaT; } in verb eirtabaT eurtubiT artabiT urtabaT eirtabiT murtabaT;
v8assimilated : Root3 -> Verb = --- IL 8a1
\wfq ->
let {
ttafiq = mkWeak ttacil wfq ;
ttafaq = mkWeak ttacal wfq ;
eittafaq = "إِ" + ttafaq ;
euttufiq = mkWeak euttucil wfq ;
attafiq = "َ" + ttafiq ;
uttafaq = "ُ" + ttafaq ;
eittafiq = "إِ" + ttafiq ;
muttafaq = "م" + uttafaq
} in verb eittafaq euttufiq attafiq uttafaq eittafiq muttafaq;
patV1Perf : Vowel => Pattern = patV1Perf : Vowel => Pattern =
table { table {
a => facal ; --katab a => facal ; --katab
u => facul ; --Hasun u => facul ; --Hasun
i => facil --rabiH i => facil --rabiH
} ; } ;
patV1Impf : Vowel => Pattern = patV1Impf : Vowel => Pattern =
table { table {
u => fcul ; --ktub u => fcul ; --ktub
a => fcal ; --rbaH a => fcal ; --rbaH
i => fcil --Hsin i => fcil --Hsin
} ; } ;
endVowel : Mood => Str = endVowel : Mood => Str =
@@ -715,7 +776,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
-- indeclinable nominal word (mamnuu3 mina S-Sarf) -- indeclinable nominal word (mamnuu3 mina S-Sarf)
indeclN : Str -> State => Case => Str = indeclN : Str -> State => Case => Str =
\aHmar -> \\s,c => Al!s + aHmar + indecl!c; \aHmar -> \\s,c => defArt s aHmar + indecl!c;
-- takes 2 words, singular and broken plural, and gives the -- takes 2 words, singular and broken plural, and gives the
-- complete noun inflection table -- complete noun inflection table
@@ -752,41 +813,62 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
sing : Str -> State => Case => Str = sing : Str -> State => Case => Str =
\word -> \word ->
case word of { case word of {
lemma + "ِي" => \\s,c => Al ! s + lemma + dec2sg ! s ! c ; lemma + "ِي" => \\s,c => defArt s lemma + dec2sg ! s ! c ;
_ + ("ا"|"ى") => \\s,c => Al ! s + word + dec3sg ! s ! c ; _ + ("ا"|"ى") => \\s,c => defArt s word + dec3sg ! s ! c ;
_ => \\s,c => Al ! s + word + dec1sg ! s ! c _ => \\s,c => defArt s word + dec1sg ! s ! c
}; };
-- takes a singular word and tests the ending to -- takes a singular word and tests the ending to
-- determine the declension and gives the corresponding dual inf table -- determine the declension and gives the corresponding dual inf table
dual : Str -> State => Case => Str = dual : Str -> State => Case => Str =
\caSaA -> \caSaA ->
case caSaA of { case caSaA of {
lemma + ("ا"|"ى") => \\s,c => Al ! s + lemma + "ي" + dl ! s ! c ; lemma + ("ا"|"ى") => \\s,c => defArt s lemma + "ي" + dl ! s ! c ;
_ => \\s,c => Al ! s + caSaA + dl ! s ! c _ => \\s,c => defArt s caSaA + dl ! s ! c
}; };
-- takes a singular word and gives the corresponding sound -- takes a singular word and gives the corresponding sound
--plural feminine table --plural feminine table
plurF : Str -> State => Case => Str = plurF : Str -> State => Case => Str =
\kalima -> \kalima ->
\\s,c => Al ! s + (mkAt kalima) + f_pl ! s ! c ; \\s,c => defArt s (mkAt kalima) + f_pl ! s ! c ;
-- takes a singular word and gives the corresponding sound -- takes a singular word and gives the corresponding sound
--plural masculine table. FIXME: consider declension 3 --plural masculine table. FIXME: consider declension 3
plurM : Str -> State => Case => Str = plurM : Str -> State => Case => Str =
\mucallim -> \mucallim ->
\\s,c => Al ! s + mucallim + m_pl ! s ! c ; \\s,c => defArt s mucallim + m_pl ! s ! c ;
-- to add the Al prefix for Definite words -- to add the Al prefix for Definite words
Al : State => Str = Al : State => Str =
table { table {
Def => "ال"; Def => "ال" ;
_ => "" _ => ""
}; };
--declection 1 (strong ending) of the singular or broken plural words defArt : State -> Str -> Str = \st,stem ->
let arra = "الرَّ" ;
arri = "الرِّ" ;
arr = "الرِّ" ;
atta = "التَ" ;
atti = "التِّ";
att = "التّ" ;
al = "ال" ;
in case st of { -- TODO rest of the assimilations
Def => case stem of {
ra@"رَ" + x => arra + x ;
ri@"رِ" + x => arri + x ;
r@"ر" + x => arr + x ; -- no vowel specified
ta@"تَ" + x => atta + x ;
ti@"تِ" + x => atti + x ;
t@"ت" + x => att + x ; -- no vowel specified
_ => al + stem
} ;
_ => "" + stem
};
--declension 1 (strong ending) of the singular or broken plural words
dec1sg : State => Case => Str = dec1sg : State => Case => Str =
table { table {
Indef => Indef =>
@@ -1140,16 +1222,16 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf ->
NCard => table { NCard => table {
Masc => \\s,c => (sing wAhid) ! s ! c ; Masc => \\s,c => (sing wAhid) ! s ! c ;
--all fem are first declension: --all fem are first declension:
Fem => \\s,c => Al ! s + wAhida + dec1sg ! s ! c Fem => \\s,c => defArt s wAhida + dec1sg ! s ! c
}; };
NOrd => table { NOrd => table {
Masc => \\s,c => Al ! s + awwal + dec1sg ! s ! c; Masc => \\s,c => defArt s awwal + dec1sg ! s ! c;
Fem => \\s,c => (sing Ula) ! s ! c Fem => \\s,c => (sing Ula) ! s ! c
} }
}; };
ten => table { ten => table {
NCard => \\_,s,c => Al ! s + wAhid + m_pl ! Indef ! c; NCard => \\_,s,c => defArt s wAhid + m_pl ! Indef ! c;
NOrd => \\_,s,c => Al ! s + awwal + m_pl ! Indef ! c NOrd => \\_,s,c => defArt s awwal + m_pl ! Indef ! c
} }
} }
}; };

View File

@@ -4,6 +4,7 @@ concrete SentenceAra of Sentence = CatAra ** open
ResAra, ResAra,
Prelude, Prelude,
ResAra, ResAra,
TenseX,
ParamX, ParamX,
CommonX in { CommonX in {
@@ -59,13 +60,13 @@ concrete SentenceAra of Sentence = CatAra ** open
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); -}
@@ -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

@@ -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 ;

View File

@@ -46,4 +46,3 @@ oper
{ pgn = Per3 Masc n ; isPron = False } ; { pgn = Per3 Masc n ; isPron = False } ;
} }