diff --git a/src/arabic/CatAra.gf b/src/arabic/CatAra.gf index 3a1ee2584..d1fe2f494 100644 --- a/src/arabic/CatAra.gf +++ b/src/arabic/CatAra.gf @@ -23,10 +23,9 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { -- Question QCl = ResAra.QCl ; -- {s : ResAra.Tense => Polarity => QForm => Str} ; - IP, - IDet, - IComp = ResAra.IP ; -- {s : Gender => State => Case => Str ; n : ResAra.Number} ; - -- IAdv = {s : Str} ; + IDet = ResAra.IDet ; -- {s : Gender => State => Case => Str ; n : Number} ; + IP = ResAra.IP ; -- {s : (isPred : Bool) => State => Case => Str ; n : Number} ; + IComp = ResAra.IComp ; -- IQuant = {s : State => Case => Str} ; -- ---- Relative diff --git a/src/arabic/PhraseAra.gf b/src/arabic/PhraseAra.gf index 9d24e6898..5e11b5e5a 100644 --- a/src/arabic/PhraseAra.gf +++ b/src/arabic/PhraseAra.gf @@ -11,7 +11,7 @@ concrete PhraseAra of Phrase = CatAra ** open UttImpSg pol imp = {s = \\g => imp.s ! pol.p ! g ! ResAra.Sg ++ pol.s} ; UttImpPl,UttImpPol = \pol,imp -> {s = \\g => imp.s ! pol.p ! g ! ResAra.Pl ++ pol.s} ; - UttIP ip = {s = \\g => ip.s ! g ! Def ! Nom} ; --IL + UttIP ip = {s = \\_g => ip.s ! False ! Def ! Nom} ; --IL UttAP ap = {s = ResAra.uttAP ap} ; --IL UttCard c = {s = ResAra.uttNum c} ; --IL diff --git a/src/arabic/QuestionAra.gf b/src/arabic/QuestionAra.gf index 38b2296c2..ecfa1f8c1 100644 --- a/src/arabic/QuestionAra.gf +++ b/src/arabic/QuestionAra.gf @@ -1,4 +1,4 @@ -concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbAra in { +concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbAra, SentenceAra in { flags optimize=all_subs ; coding = utf8 ; @@ -14,90 +14,61 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA -- ComplSlashIP vps ip = {} ; --- AR copied from PredVP + --IL guessed QuestVP qp vp = - { s =\\t,p,_ => - let { - ---- o = Verbal ; ---- AR - objgn = pgn2gn vp.obj.a.pgn ; - np = {s = qp.s ! objgn.g ! Def ; ----IL just guessing state - a ={pgn = Per3 Masc qp.n ; isPron = False}} ; - pgn = np.a.pgn ; - gn = pgn2gn pgn; - kataba = vp.s ! pgn ! VPPerf ; - yaktubu = vp.s ! pgn ! VPImpf Ind ; - yaktuba = vp.s ! pgn ! VPImpf Cnj ; - yaktub = vp.s ! pgn ! VPImpf Jus ; - vStr : ResAra.Tense -> Polarity -> Str = - \tn,pl -> case of { - => yaktubu ; - => "لَا" ++ yaktubu ; - => "" ; --no verb "to be" in present - => "لَيسَ" ;--same here, just add negation particle - <_, ResAra.Past, Pos> => kataba ; - <_, ResAra.Past, Neg> => "لَمْ" ++ yaktub ; - <_, ResAra.Fut, Pos> => "سَ" ++ yaktubu ; - <_, ResAra.Fut, Neg> => "لَنْ" ++ yaktuba - }; - pred : ResAra.Tense -> Polarity -> Str = - \tn,pl -> case of { - => vp.pred.s ! gn ! Nom; --xabar marfooc - _ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob - } ; + let np = { s = qp.s ! vp.isPred ! Def ; + a = { pgn = Per3 Masc qp.n ; + isPron = False } + } ; + cl = PredVP np vp ; + in { s = \\t,p,_qf => cl.s ! t ! p ! Nominal } ; - } in ---- case o of { ----- _ => - case of { ----- AR workaround 18/12/2008 case of { - -- ya2kuluhu - => (vStr t p) ++ vp.obj.s ++ vp.s2 ++ (pred t p); - -- ya2kuluhu al-waladu, yakuluhu al-2awlaadu - => (vStr t p) ++ np.s ! Nom ++ vp.obj.s ++ vp.s2 ++ (pred t p); - => (vStr t p) ++ vp.obj.s ++ np.s ! Nom ++ vp.s2 ++ (pred t p); - => (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) - } - ; ---- }; ---- AR guessed QuestIAdv iadv cl = {s = \\t,p,_ => iadv.s ++ cl.s ! t ! p ! Verbal} ; ---- IL guessed - QuestIComp icomp np = - let vp = kaan (CompNP np) in - QuestVP icomp vp ; + -- : IComp -> NP -> QCl + QuestIComp ic np = + let vp = kaan (CompNP np) ; + ip = ic ** { s : Bool => State => Case => Str = \\_,_,_ => ic.s ! pgn2gn np.a.pgn } ; + in QuestVP ip vp ; - CompIP ip = ip ; - -- old, when IComp = Comp { s = \\{g=g ; n=_},c => ip.s ! g ! Def ! c } ; ---- + -- : IP -> IComp ; + CompIP ip = { + s = \\_ => ip.s ! True -- True=IP will be a subject of predicative sentence + ! Def ! Nom ; -- IP will be a subject + n = ip.n + } ; - CompIAdv iadv = mkIP iadv.s ResAra.Sg ; + CompIAdv iadv = { s = \\_ => iadv.s ; n = ResAra.Sg } ; -- QCl = {s : R.Tense => Polarity => QForm => Str} ; QuestSlash ip cl = { ----IL just guessing - s = \\t,p,qf => case qf of { - QDir => cl.s ! t ! p ! Verbal ++ cl.c2 ++ ip.s ! Masc ! Def ! Nom ; --VSO (purely guessing) - QIndir => cl.s ! t ! p ! Nominal ++ cl.c2 ++ ip.s ! Masc ! Def ! Nom } --SVO (purely guessing) + s = \\t,p,qf => + let o = case qf of { QDir => Nominal ; _ => Verbal } ; -- purely guessing + in cl.c2 ++ ip.s ! False ! Def ! Nom ++ cl.s ! t ! p ! o } ; - PrepIP p ip = {s = p.s ++ ip.s ! Masc ! Def ! Acc} ; ----IL + --IL guessed + PrepIP p ip = { + s = p.s ++ ip.s ! False -- not used as a subject of predicative sentence + ! Def ! Gen + } ; - AdvIP ip adv = ip ** { - s = \\g,s,c => ip.s ! g ! s ! c ++ adv.s ; - n = ip.n - } ; + AdvIP ip adv = ip ** { + s = \\g,s,c => ip.s ! g ! s ! c ++ adv.s ; + } ; -----IL guessed with help of L and Google translate -- : IDet -> IP - IdetIP idet = idet ; -- Gender still matters if turned into IComp + IdetIP idet = idet ** { s = \\isPred => idet.s ! Masc } ; -- : IDet -> CN -> IP IdetCN idet cn = idet ** { - s = \\g,s,c => idet.s ! cn.g ! s ! c ++ -- gender is determined by the CN - cn.s ! idet.n ! Indef ! Gen ; --idaafa + s = \\isPred,s,c + => idet.s ! cn.g ! s ! c ++ + cn.s ! idet.n ! Indef ! Gen ; --idaafa } ; -- : IQuant -> Num -> IDet diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index b0eca6e00..73b423c2a 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -1102,8 +1102,17 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> }; - mkIP : Str -> Number -> IP = - \s,n -> {s = \\_g,_s,_c => s ; n = n} ; + mkIP = overload { + mkIP : Str -> Number -> IP = \maa,n -> { + s = \\_p,_s,_c => maa ; + n = n + } ; + mkIP : (_,_ : Str) -> Number -> IP = \maa,maadhaa,n -> { + s = table { True => \\_s,_c => maa ; + False => \\_s,_c => maadhaa } ; + n = n + } + } ; mkOrd : (_,_ : Str) -> Size -> NumOrdCard = \aysar,yusra,sz -> @@ -1151,6 +1160,13 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> s : AAgr => Case => Str } ; + IComp : Type = { + s : AAgr -- "how old": masc or fem for adjective + -- no need for Case, IComp is only used by QuestIComp, as grammatical subject + => Str ; + n : Number + } ; + Obj : Type = { s : Str ; a : Agr @@ -1162,12 +1178,22 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> } ; IP : Type = { - s : Gender -- because of CompIP - => State => Case -- because of PrepIP: e.g. "in which" chooses definite accusative + s : Bool -- different forms for "what is this" and "what do you do" + => State => Case -- because of PrepIP: e.g. "in which" chooses definite accusative => Str ; n : Number } ; + IDet : Type = { + s : Gender -- IdetCN needs to choose the gender of the CN + => State => Case => Str ; + n : Number + } ; + + IQuant : Type = { + s : State => Case => Str + } ; + param VPForm = VPPerf | VPImpf Mood diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index 136680f56..505e6bc45 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -91,8 +91,8 @@ concrete StructuralAra of Structural = CatAra ** -- very_AdA = ss "ثري" ; -- want_VV = P.mkVV (P.regV "وَنت") ; we_Pron = mkPron "نَحنُ" "نا" "نا" (Per1 Plur) ; - whatPl_IP = mkIP "ماذا" Pl ; - whatSg_IP = mkIP "ماذا" Sg ; + whatPl_IP = mkIP "ما" "ماذا" Pl ; + whatSg_IP = mkIP "ما" "ماذا" Sg ; when_IAdv = ss "مَتَى" ; -- when_Subj = ss "وهن" ; where_IAdv = ss "أَينَ" ; @@ -107,8 +107,8 @@ concrete StructuralAra of Structural = CatAra ** => "أيِّ" } } ; - whoSg_IP = mkIP "مَنْ" Sg ; - whoPl_IP = mkIP "مَنْ" Pl ; + whoSg_IP = mkIP "مَنْ" "مَنْ" Sg ; + whoPl_IP = mkIP "مَنْ" "مَنْ" Pl ; -- why_IAdv = ss "وهي" ; without_Prep = ss "بِدُونِ" ; with_Prep = ss "مَع" ;