From 9171a1b6121bfa1cde4f6a6950971991ab9b9b91 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 16 Nov 2018 15:02:18 +0100 Subject: [PATCH 1/5] (Ara) Add DetNP + fix state of num in DetQuantOrd --- src/arabic/NounAra.gf | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/src/arabic/NounAra.gf b/src/arabic/NounAra.gf index 2df55ad9..dd845055 100644 --- a/src/arabic/NounAra.gf +++ b/src/arabic/NounAra.gf @@ -25,7 +25,7 @@ lin ++ adj c ++ cn.np ! c ; True => noun (cas c) -- deal with possessive suffix - ++ determiner c + ++ determiner c -- (nounCase c det.n det.d) --?? ++ adj c ++ cn.np ! c }; @@ -42,6 +42,8 @@ lin UsePron p = p ; + DetNP det = emptyNP ** {s = det.s ! NoHum ! Masc} ; ---- + PredetNP pred np = np ** { s = \\c => case pred.isDecl of { True => pred.s!c ++ np.s ! Gen ; -- akvaru l-awlAdi @@ -64,26 +66,15 @@ lin AdvNP np adv = np ** { s = \\c => np.s ! c ++ adv.s }; -{- - DetSg quant ord = { - 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 = - case ord.n of { - None => False; - _ => True - } - } ; --} DetQuantOrd quant num ord = quant ** { - s = \\h,g,c => quant.s ! Pl ! h ! g ! c - ++ num.s ! g ! (toDef quant.d num.n) ! c + s = \\h,g,c => let d = toDef quant.d num.n in + quant.s ! Pl ! h ! g ! c + ++ num.s ! g ! d ! c --FIXME check this: - ++ ord.s ! g ! (toDef quant.d num.n) ! c ; + ++ ord.s ! g + ! case d of {Poss => Def ; _ => d} + ! c ; n = num.n; isNum = orB num.isNum ord.isNum ; -- ord may come from OrdDigits or OrdNumeral @@ -172,8 +163,6 @@ lin a = {pgn = Per3 cn.g Sg ; isPron = False} ; empty = []} ; --- MassDet = {s = \\_,_,_,_ => [] ; d = Indef; --- isNum = False; isPron = False} ; UseN, UseN2 = useN ; From 9d59e59387f637ff192ed07955bd60a69c4e321a Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 16 Nov 2018 15:02:59 +0100 Subject: [PATCH 2/5] (Ara) Add inherent state field in IDet --- src/arabic/QuestionAra.gf | 5 +++-- src/arabic/ResAra.gf | 6 ++++-- src/arabic/StructuralAra.gf | 6 +++++- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/arabic/QuestionAra.gf b/src/arabic/QuestionAra.gf index 2a4c69ad..ee7edaca 100644 --- a/src/arabic/QuestionAra.gf +++ b/src/arabic/QuestionAra.gf @@ -71,7 +71,7 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA IdetCN idet cn = { s = \\isPred,g,s,c => idet.s ! cn.g ! s ! c ++ - cn2str cn idet.n Indef Gen ; --idaafa + cn2str cn idet.n idet.d Gen ; a = { pgn = agrP3 NoHum cn.g idet.n ; isPron = False } } ; @@ -80,6 +80,7 @@ concrete QuestionAra of Question = CatAra ** open ResAra, ParamX, Prelude, VerbA s = \\g,s,c => let gend = detGender g num.n -- gender flips with some numbers in iquant.s ! s ! c ++ num.s ! gend ! s ! c ; - n = sizeToNumber num.n + n = sizeToNumber num.n ; + d = Indef ---- TODO check } ; } diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index e503607c..9b80898d 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -1368,8 +1368,10 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> IDet : Type = { s : Gender -- IdetCN needs to choose the gender of the CN - => State => Case => Str ; - n : Number + => State -- Needs to be retained variable for IP; PrepIP chooses the state of IP + => Case => Str ; + n : Number ; + d : State -- in IdetCN, chooses the state of the CN } ; IQuant : Type = { diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index 93349fbb..bc7d40c2 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -40,7 +40,11 @@ concrete StructuralAra of Structural = CatAra ** -- here7to_Adv = ss ["تْ هري"] ; -- here7from_Adv = ss ["فرْم هري"] ; how_IAdv = ss "كَيفَ" ; --- how8many_IDet = mkDet "كَمْ" Pl Const ; -- IL: check (was ["هْو مَني"]) ; + how8many_IDet = { + s = \\g,s,c => "كَمْ عَدَد" + caseTbl ! c ; + n = Pl ; d = Def + } ; -- IL + -- if_Subj = ss "ِف" ; in8front_Prep = mkPrep "مُقَابِلَ" ; i_Pron = ResAra.i_Pron ; From a2907a91a5bb6e8a73b39b37fdaaf5cc8e26e861 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 16 Nov 2018 15:03:19 +0100 Subject: [PATCH 3/5] (Ara) Add a paradigm for relative adjectives --- src/arabic/ParadigmsAra.gf | 21 +++++++++++++++------ src/arabic/ResAra.gf | 17 ++++++++++++++--- 2 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index 0900043c..4209267b 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -76,7 +76,7 @@ resource ParadigmsAra = open --- = sdfN ; } ; - dualN : N -> N ; + dualN : N -> N ; -- Force the plural of the N into dual (e.g. "twins") --This is used for loan words or anything that has untreated irregularities --in the interdigitization process of its words @@ -130,16 +130,15 @@ resource ParadigmsAra = open -- Overloaded operator for main cases mkA = overload { - mkA : (root,patt : Str) -> A + mkA : (root,sg : Str) -> A -- adjective with sound plural; takes root string and sg. pattern string = \r,p -> lin A (sndA r p); - mkA : (root : Str) -> A -- forms adjectives with positive form aFCal + mkA : (root : Str) -> A -- adjective with positive form aFCal = \r -> lin A (clrA r); - mkA : (root,sg,pl : Str) -> A + mkA : (root,sg,pl : Str) -> A -- adjective with broken plural = \r,s,p -> lin A (brkA r s p) ; - -- mkA : (posit,compar,plur : Str) -> A - -- = degrA ; } ; + degrA : (posit,compar,plur : Str) -> A ; --Takes a root string and a pattern string sndA : (root,patt : Str) -> Adj ; @@ -147,6 +146,8 @@ resource ParadigmsAra = open --Takes a root string only clrA : (root : Str) -> Adj ; -- forms adjectives of type aFCal + nisbaA : Str -> Adj ; -- forms relative adjectives by adding the suffix ِيّ + --3 Two-place adjectives -- -- Two-place adjectives need a preposition for their second argument. @@ -637,6 +638,14 @@ resource ParadigmsAra = open } }; + nisbaA : Str -> Adj = \Haal -> + let Haaliyy = Haal + "ِيّ" in { + s = table { + APosit g n d c => positAdj Haaliyy ! g ! n ! d ! c ; + AComp d c => "أَكْثَر" ++ indeclN Haaliyy ! d ! c + } + } ; + clrA root = let { eaHmar = mkWord "أَفعَل" root; HamrA' = mkWord "فَعلاء" root; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index 9b80898d..3c3afade 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -966,9 +966,10 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> -- determine the declension and gives the corresponding inf table sing : Str -> State => Case => Str = \word -> \\s,c => defArt s (case word of { - lemma + "ِي" => fixShd lemma (dec2sg ! s ! c) ; - _ + ("ا"|"ى") => fixShd word (dec3sg ! s ! c) ; - lemma + "ة" => case s of { + lemma + "ِيّ" => fixShd word (decNisba ! s ! c) ; + lemma + "ِي" => fixShd lemma (dec2sg ! s ! c) ; + _ + ("ا"|"ى") => fixShd word (dec3sg ! s ! c) ; + lemma + "ة" => case s of { Poss => lemma + "ت" + dec1sg ! s ! c ; _ => word + dec1sg ! s ! c } ; @@ -1046,6 +1047,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> _ => "ِي" }; + --declension 3 (ending in alif) dec3sg : State => Case => Str = \\s,c => case of { @@ -1054,6 +1056,15 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> _ => [] }; + --declension 2 (ends in yaa') + decNisba : State => Case => Str = \\s,c => + case of { + <_, Bare> => [] ; + => "اً" ; + => "ٍ" ; + <_, Acc> => "َ" ; + _ => [] + }; --dual suffixes dl : State => Case => Str = From c4f207a541765b9d1625845d095171f2f24ae352 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 16 Nov 2018 16:05:55 +0100 Subject: [PATCH 4/5] (Ara) Fix existential constructions --- src/arabic/IdiomAra.gf | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/src/arabic/IdiomAra.gf b/src/arabic/IdiomAra.gf index 33c6b7ff..269d2799 100644 --- a/src/arabic/IdiomAra.gf +++ b/src/arabic/IdiomAra.gf @@ -1,6 +1,7 @@ -concrete IdiomAra of Idiom = CatAra ** open +concrete IdiomAra of Idiom = CatAra ** open Prelude, ResAra, + VerbAra, ParadigmsAra in { @@ -8,34 +9,32 @@ concrete IdiomAra of Idiom = CatAra ** open lin -- : VP -> Cl ; -- it is hot - ImpersCl vp = + ImpersCl vp = let it : ResAra.NP = pron2np (pgn2pron vp.obj.a.pgn) ; -- if no obj, Per3 Masc Sg chosen by default in predVP it vp ; -- : VP -> Cl ; -- one sleeps - GenericCl = predVP (regNP "المَرْء" Sg) ; + GenericCl = predVP (regNP "المَرْء" Sg) ; -- : NP -> RS -> Cl ; -- it is I who did it - --CleftNP np rs = - - -- TODO: check page 61 for existentials and clefts /IL + --CleftNP np rs = -- : Adv -> S -> Cl ; -- it is here she slept - CleftAdv adv s = - let comp : Comp = {s = \\_,_ => adv.s ++ s.s} in ---- - predVP he_Pron (kaan comp) ; + CleftAdv adv s = + let comp : Comp = CompAdv adv in + predVP he_Pron (UseComp comp) ; -- : NP -> Cl ; -- there is a house ExistNP np = - predVP emptyNP (insertObj np (predV copula ** {c2=noPrep})) ; -- dummy /IL + predVP (emptyNP ** {s=\\c=>"هُنَاكَ"}) (UseComp (CompNP np)) ; -- IL -- ExistIP : IP -> QCl ; -- which houses are there -- 7/12/2012 generalizations of these -- : NP -> Adv -> Cl ; -- there is a house in Paris - ExistNPAdv np adv = - predVP emptyNP (insertStr adv.s (insertObj np (predV copula ** {c2=noPrep}))) ; + ExistNPAdv np adv = + predVP (emptyNP ** {s=\\c=>"هُنَاكَ"}) (AdvVP (UseComp (CompNP np)) adv) ; -- IL -- ExistIPAdv : IP -> Adv -> QCl ; -- which houses are there in Paris @@ -48,18 +47,16 @@ concrete IdiomAra of Idiom = CatAra ** open -- 3/12/2013 non-reflexive uses of "self" -- : VP -> VP ; -- is at home himself; is himself at home - SelfAdvVP, + SelfAdvVP, SelfAdVVP = \vp -> vp ** { s = \\pgn,vf => let pron : ResAra.NP = pgn2pron pgn in - vp.s ! pgn ! vf ++ refl ! Nom ++ pron.s ! Gen + vp.s ! pgn ! vf ++ refl ! Nom ++ pron.s ! Gen } ; -- : NP -> NP ; -- the president himself (is at home) SelfNP np = np ** { - s = let pron : ResAra.NP = np2pron np ; - in \\c => np.s ! c ++ refl ! c ++ pron.s ! Gen + s = let pron : ResAra.NP = np2pron np ; + in \\c => np.s ! c ++ refl ! c ++ pron.s ! Gen } ; - } - From 5a6fe1e336f183213cde73da854c7edaa10c9205 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Fri, 16 Nov 2018 17:21:29 +0100 Subject: [PATCH 5/5] (Ara) Add subordinate clauses --- src/arabic/CatAra.gf | 2 +- src/arabic/ConjunctionAra.gf | 16 +++++++++------- src/arabic/PhraseAra.gf | 2 +- src/arabic/ResAra.gf | 19 ++++++++++--------- src/arabic/SentenceAra.gf | 8 ++++---- src/arabic/StructuralAra.gf | 3 ++- src/arabic/SymbolAra.gf | 2 +- src/arabic/VerbAra.gf | 3 ++- 8 files changed, 30 insertions(+), 25 deletions(-) diff --git a/src/arabic/CatAra.gf b/src/arabic/CatAra.gf index 2fda445f..95a53b92 100644 --- a/src/arabic/CatAra.gf +++ b/src/arabic/CatAra.gf @@ -11,7 +11,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { -- Tensed/Untensed SSlash, - S = {s : Str} ; + S = {s : Order => Str} ; -- subordinate clause has nominal word order and subject in acc QS = {s : QForm => Str} ; RS = {s : Agr => Case => Str} ; -- case because the relative pronoun inflects in case diff --git a/src/arabic/ConjunctionAra.gf b/src/arabic/ConjunctionAra.gf index c57f029d..0db6abd1 100644 --- a/src/arabic/ConjunctionAra.gf +++ b/src/arabic/ConjunctionAra.gf @@ -3,20 +3,22 @@ concrete ConjunctionAra of Conjunction = lincat - [S], + [S] = {s1,s2 : Order => Str} ; [Adv] = {s1,s2 : Str} ; [NP] = {s1,s2 : Case => Str ; a : Agr ; empty : Str} ; [AP] = {s1,s2 : Species => Gender => Number => State => Case => Str} ; lin - BaseS, + BaseAdv = twoSS ; - ConsS, ConsAdv = consrSS comma ; - ConjS, ConjAdv = conjunctSS ; + BaseS = twoTable Order ; + ConsS = consrTable Order comma ; + ConjS = conjunctTable Order ; + BaseNP x y = twoTable Case x y ** { a = conjAgr x.a y.a ; empty = [] @@ -31,9 +33,9 @@ lin empty = [] } ; - BaseAP x y = twoTable5 Species Gender Number State Case x y ; - ConsAP xs x = consrTable5 Species Gender Number State Case comma xs x ; - ConjAP conj ss = conjunctTable5 Species Gender Number State Case conj ss ; + BaseAP = twoTable5 Species Gender Number State Case ; + ConsAP = consrTable5 Species Gender Number State Case comma ; + ConjAP = conjunctTable5 Species Gender Number State Case ; oper diff --git a/src/arabic/PhraseAra.gf b/src/arabic/PhraseAra.gf index 9bc36fa6..40482e3a 100644 --- a/src/arabic/PhraseAra.gf +++ b/src/arabic/PhraseAra.gf @@ -19,7 +19,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 - UttS, + UttS s = {s = \\_ => s.s ! Verbal} ; UttAdv, UttIAdv = \s -> {s = \\_ => s.s} ; ---- OK? AR -- diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index 3c3afade..870d8402 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -27,7 +27,8 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { Mood = Ind | Cnj | Jus ; Voice = Act | Pas ; Order = Verbal | Nominal - | VOS ; -- Relative clauses with resumptive pronouns + | VOS -- Relative clauses with resumptive pronouns + | Subord ; -- Nominal word order but subject in accusative oper @@ -1293,7 +1294,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> proDrop : NP -> NP = \np -> case np.a.isPron of { - True => np ** {s = \\_ => []}; + True => np ** {s = table {Nom => [] ; x => np.s ! x}}; _ => np } ; @@ -1474,10 +1475,11 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> => vp.pred.s ! gn ! Nom; --xabar marfooc _ => vp.pred.s ! gn ! Acc --xabar kaana wa laysa manSoob }; - subj = np.empty - ++ case of { - => [] ; -- prodrop if it's not predicative - _ => vp.sc.s ++ np.s ! vp.sc.c + sc : Preposition = case o of {Subord => {s=[]; c=Acc} ; Dir => vp.sc} ; + subj = np.empty ++ sc.s + ++ case vp.isPred of { + False => (proDrop np).s ! sc.c ; -- prodrop if it's not predicative + True => np.s ! sc.c } ; } in @@ -1486,9 +1488,8 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> True => vp.obj.s ++ subj ; -- obj. clitic attaches directly to the verb False => subj ++ vp.obj.s } ++ vp.s2 ++ pred t p ; - Nominal => subj ++ vStr t p ++ vp.obj.s ++ vp.s2 ++ pred t p ; - VOS => vStr t p ++ vp.obj.s ++ vp.s2 ++ pred t p ++ subj - + VOS => vStr t p ++ vp.obj.s ++ vp.s2 ++ pred t p ++ subj ; + Nominal|Subord => subj ++ vStr t p ++ vp.obj.s ++ vp.s2 ++ pred t p } } ; diff --git a/src/arabic/SentenceAra.gf b/src/arabic/SentenceAra.gf index 408b3468..34267a0f 100644 --- a/src/arabic/SentenceAra.gf +++ b/src/arabic/SentenceAra.gf @@ -66,11 +66,11 @@ concrete SentenceAra of Sentence = CatAra ** open -- UseCl t p cl = - {s = t.s ++ p.s ++ + {s = \\o => t.s ++ p.s ++ case of { --- IL guessed tenses - => cl.s ! Pres ! p.p ! Nominal ; - => cl.s ! Past ! p.p ! Nominal ; - => cl.s ! x ! p.p ! Nominal + => cl.s ! Pres ! p.p ! o ; + => cl.s ! Past ! p.p ! o ; + => cl.s ! x ! p.p ! o } }; diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index bc7d40c2..030e8b45 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -44,7 +44,7 @@ concrete StructuralAra of Structural = CatAra ** s = \\g,s,c => "كَمْ عَدَد" + caseTbl ! c ; n = Pl ; d = Def } ; -- IL - + -- if_Subj = ss "ِف" ; in8front_Prep = mkPrep "مُقَابِلَ" ; i_Pron = ResAra.i_Pron ; @@ -78,6 +78,7 @@ concrete StructuralAra of Structural = CatAra ** something_NP = regNP "شَيْء" Sg ; -- somewhere_Adv = ss "سْموهري" ; that_Quant = mkQuant3 "ذَلِكَ" "تِلكَ" "أُلٱِكَ" Def; + that_Subj = ss "أنَّ" ; ----b that_NP = indeclNP "ذَلِكَ" Sg ; there_Adv = ss "هُناك" ; -- there7to_Adv = ss "تهري" ; diff --git a/src/arabic/SymbolAra.gf b/src/arabic/SymbolAra.gf index fd1a95cd..10e2b7bb 100644 --- a/src/arabic/SymbolAra.gf +++ b/src/arabic/SymbolAra.gf @@ -25,7 +25,7 @@ lin empty = [] } ; - SymbS sy = sy ; + SymbS sy = {s = \\_ => sy.s} ; SymbOrd n = {s = \\_,_,_ => n.s ; n = One ; isNum = False } ; diff --git a/src/arabic/VerbAra.gf b/src/arabic/VerbAra.gf index 8e82368d..e07ff791 100644 --- a/src/arabic/VerbAra.gf +++ b/src/arabic/VerbAra.gf @@ -28,7 +28,8 @@ concrete VerbAra of Verb = CatAra ** open Prelude, ResAra, ParamX in { -- : VS -> S -> VP ; -- say that she runs ComplVS vs s = predV vs ** { -- IL - obj = emptyObj ** s } ; + obj = emptyObj ** {s = s.s ! Subord} + } ; -- : VQ -> QS -> VP ; -- wonder who runs ComplVQ vq qs = predV vq ** { -- IL