From b73d5010dfe20ddf7a2e0583c7b8e9c9091d1ed4 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Sat, 29 Dec 2018 18:43:25 +0200 Subject: [PATCH 1/4] (Ara) add both7and_DConj + make Conj into ConjDistr --- src/arabic/CatAra.gf | 3 +-- src/arabic/ConjunctionAra.gf | 18 +++++++++--------- src/arabic/ExtendAra.gf | 2 +- src/arabic/ParadigmsAra.gf | 14 ++++++++++++++ src/arabic/StructuralAra.gf | 6 +++--- 5 files changed, 28 insertions(+), 15 deletions(-) diff --git a/src/arabic/CatAra.gf b/src/arabic/CatAra.gf index e4cfd520a..051a40b8d 100644 --- a/src/arabic/CatAra.gf +++ b/src/arabic/CatAra.gf @@ -70,8 +70,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { -- Structural - Conj = {s : Str ; n : ResAra.Number} ; --- DConj = {s1,s2 : Str ; n : ResAra.Number} ; + Conj = {s1,s2 : Str; n : ResAra.Number} ; Subj = {s : Str ; o : Order} ; Prep = ResAra.Preposition ; diff --git a/src/arabic/ConjunctionAra.gf b/src/arabic/ConjunctionAra.gf index 0db6abd1f..24b16903f 100644 --- a/src/arabic/ConjunctionAra.gf +++ b/src/arabic/ConjunctionAra.gf @@ -13,11 +13,11 @@ lin BaseAdv = twoSS ; ConsAdv = consrSS comma ; - ConjAdv = conjunctSS ; + ConjAdv = conjunctDistrSS ; BaseS = twoTable Order ; ConsS = consrTable Order comma ; - ConjS = conjunctTable Order ; + ConjS = conjunctDistrTable Order ; BaseNP x y = twoTable Case x y ** { a = conjAgr x.a y.a ; @@ -27,7 +27,7 @@ lin a = conjAgr xs.a x.a ; empty = [] } ; - ConjNP conj ss = conjunctTable Case conj ss ** { + ConjNP conj ss = conjunctDistrTable Case conj ss ** { a = let gn = pgn2gn ss.a.pgn in {pgn = Per3 gn.g (conjNumber conj.n gn.n) ; isPron = False} ; empty = [] @@ -35,7 +35,7 @@ lin BaseAP = twoTable5 Species Gender Number State Case ; ConsAP = consrTable5 Species Gender Number State Case comma ; - ConjAP = conjunctTable5 Species Gender Number State Case ; + ConjAP = conjunctDistrTable5 Species Gender Number State Case ; oper @@ -74,9 +74,9 @@ oper \P,Q,R,T,S,or,xs -> {s = \\p,q,r,t,s => xs.s1 ! p ! q ! r ! t ! s ++ or.s ++ xs.s2 ! p ! q ! r ! t ! s} ; - -- conjunctDistrTable5 : - -- (P,Q,R,T,S : PType) -> ConjunctionDistr -> ListTable5 P Q R T S -> - -- {s : P => Q => R => T => S => Str} = - -- \P,Q,R,T,S,or,xs -> - -- {s = \\p,q,r,t,s => or.s1++ xs.s1 ! p ! q ! r ! t ! s ++ or.s2 ++ xs.s2 ! p ! q ! r ! t ! s} ; + conjunctDistrTable5 : + (P,Q,R,T,S : PType) -> ConjunctionDistr -> ListTable5 P Q R T S -> + {s : P => Q => R => T => S => Str} = + \P,Q,R,T,S,or,xs -> + {s = \\p,q,r,t,s => or.s1++ xs.s1 ! p ! q ! r ! t ! s ++ or.s2 ++ xs.s2 ! p ! q ! r ! t ! s} ; } diff --git a/src/arabic/ExtendAra.gf b/src/arabic/ExtendAra.gf index 4e230204b..a3bb0953d 100644 --- a/src/arabic/ExtendAra.gf +++ b/src/arabic/ExtendAra.gf @@ -50,7 +50,7 @@ concrete ExtendAra of Extend = BaseVPS = twoTable PerGenNum ; ConsVPS = consrTable PerGenNum comma ; - ConjVPS = conjunctTable PerGenNum ; + ConjVPS = conjunctDistrTable PerGenNum ; PredVPS np vps = { s = \\_ => np.s ! Nom ++ vps.s ! np.a.pgn -- first quick version with order always Nominal. diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index 6c0e69e81..bae27faa3 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -199,6 +199,13 @@ resource ParadigmsAra = open mkPrep : Str -> Prep ; mkPrep : Str -> Case -> Prep } ; -- preposition in the sense of RGL abstract syntax + +--2 Conjunctions + mkConj : overload { + mkConj : Str -> Conj ; -- and + mkConj : Str -> Str -> Conj ; -- either … or + } ; + --2 Verbs -- Overloaded operations @@ -592,6 +599,13 @@ resource ParadigmsAra = open lin N3 (n ** {c2 = mkPreposition p ; c3 = mkPreposition q}) ; } ; + mkConj = overload { + mkConj : Str -> Conj = \s -> lin Conj {s1 = [] ; s2 = s ; n = Sg} ; + mkConj : Str -> Str -> Conj = \s1,s2 -> lin Conj {s1 = s1 ; s2 = s2 ; n = Sg} ; + mkConj : Str -> Number -> Conj = \s,n -> lin Conj {s1 = [] ; s2 = s ; n = n} ; + mkConj : Str -> Str -> Number -> Conj = \s1,s2,n -> lin Conj {s1 = s1 ; s2 = s2 ; n = n} + } ; + mkPron : (_,_,_ : Str) -> PerGenNum -> Pron = \ana,nI,I,pgn -> lin Pron (ResAra.mkPron ana nI I pgn) ; diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index 749a25617..e8bb48b6f 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -11,12 +11,12 @@ concrete StructuralAra of Structural = CatAra ** almost_AdN = ss "حَوَالي" ; -- or "تَقرِيبا" -- although_Subj = ss "َلتهُْغه" ; -- always_AdV = ss "َلوَيس" ; - and_Conj = ss "وَ" ** {n = Pl} ; + and_Conj = mkConj "وَ" Pl ; -- because_Subj = ss "بعَُسي" ; before_Prep = mkPrep "قَبْلَ" ; behind_Prep = mkPrep "خَلْفَ" ; between_Prep = mkPrep "بَيْنَ" ; --- both7and_DConj = sd2 "بْته" "َند" ** {n = Pl} ; + both7and_DConj = mkConj "كِلا" "وَ" Pl ; -- but_PConj = ss "بُت" ; by8agent_Prep, by8means_Prep = biPrep ; @@ -64,7 +64,7 @@ concrete StructuralAra of Structural = CatAra ** no_Utt = {s = \\_ => "لا"} ; on_Prep = mkPrep "عَلَى" ; only_Predet = mkPredet "فَقَط" False; - or_Conj = ss "أَوْ" ** {n = Sg} ; + or_Conj = mkConj "أَوْ" ; -- otherwise_PConj = ss "ْتهروِسي" ; part_Prep = mkPrep "مِنَ" ; -- please_Voc = ss "ةلَسي" ; From 02700acc8dbababe5da0c2296319b9d265f8047f Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Sat, 29 Dec 2018 18:44:16 +0200 Subject: [PATCH 2/4] (Ara) add a string (e.g. "that") in VS --- src/arabic/CatAra.gf | 2 +- src/arabic/ParadigmsAra.gf | 10 ++++++++-- src/arabic/VerbAra.gf | 2 +- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/arabic/CatAra.gf b/src/arabic/CatAra.gf index 051a40b8d..48e5d221b 100644 --- a/src/arabic/CatAra.gf +++ b/src/arabic/CatAra.gf @@ -80,7 +80,7 @@ concrete CatAra of Cat = CommonX - [Utt] ** open ResAra, Prelude, ParamX in { V2, V2A = ResAra.Verb2 ; VV = ResAra.Verb2 ** {sc : Preposition} ; -- c2 is for verb V2S, V2Q = ResAra.Verb2 ; - VS = ResAra.Verb ** {o : Order} ; + VS = ResAra.Verb ** {o : Order; s2 : Str} ; V3 = ResAra.Verb3 ; V2V = ResAra.Verb3 ** {sc : Preposition} ; -- c3 is for verb, c2 is for dir.obj diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index bae27faa3..e9c8966a6 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -274,7 +274,10 @@ resource ParadigmsAra = open -- questions, verb phrases, and adjectives. mkV0 : V -> V0 ; - mkVS : V -> VS ; + -- mkVS = overload { + -- mkVS : V -> VS ; + -- mkVS : V -> Str -> VS + -- } ; mkV2S : V -> Str -> V2S ; mkVV = overload { mkVV : V -> VV = regVV ; @@ -737,7 +740,10 @@ resource ParadigmsAra = open dirdirV3 v = dirV3 v (casePrep acc) ; - mkVS v = lin VS (v ** {o = Subord}) ; + mkVS = overload { + mkVS : V -> VS = \v -> lin VS (v ** {o = Subord; s2 = []}) ; + mkVS : V -> Str -> VS = \v,s -> lin VS (v ** {o = Subord; s2 = s}) + } ; mkVQ v = lin VQ v ; regVV : V -> VV = \v -> lin VV v ** {c2 = mkPreposition "أَنْ" ; sc = noPrep} ; diff --git a/src/arabic/VerbAra.gf b/src/arabic/VerbAra.gf index 63c483f2a..0f36da2a0 100644 --- a/src/arabic/VerbAra.gf +++ b/src/arabic/VerbAra.gf @@ -51,7 +51,7 @@ 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 = s.s ! vs.o} + obj = emptyObj ** {s = vs.s2 ++ s.s ! vs.o} } ; -- : VQ -> QS -> VP ; -- wonder who runs From 06a3d83f02bb0ab205155385fa53861504b6a3c4 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Sat, 29 Dec 2018 18:45:17 +0200 Subject: [PATCH 3/4] (Ara) Add a new mkA, for dealing with adjective construct phrases --- src/arabic/ParadigmsAra.gf | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index e9c8966a6..6fdc88fb5 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -150,6 +150,8 @@ resource ParadigmsAra = open = \r,s,p -> lin A (brkA r s p) ; } ; + idaafaA : N -> A -> A ; -- first argument will be in constructus but inflect in case, adjective in genitive, but inflect in gender, number and definiteness. e.g. غَيْرُ طَيِّبٍ + degrA : (posit,compar,plur : Str) -> A ; irregFemA : (masc : A) -> (fem : A) -> A ; -- adjective with irregular feminine. Takes two adjectives (masc. "regular" and fem. "regular") and puts them together. @@ -659,7 +661,11 @@ resource ParadigmsAra = open degrA : (posit,compar,plur : Str) -> A = \posit,compar,plur -> lin A {s = clr posit compar plur} ; - + idaafaA : N -> A -> A = \ghayr,tayyib -> tayyib ** { + s = table { + APosit g n d c => ghayr.s ! n ! Const ! c ++ tayyib.s ! APosit g n d c ; + AComp d c => ghayr.s ! Sg ! Const ! c ++ tayyib.s ! AComp d c } + } ; sndA root pat = let raw = sndA' root pat in { From 9a9b36dca8483326fea13464da01bcfeb76addf5 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Sat, 29 Dec 2018 18:45:47 +0200 Subject: [PATCH 4/4] (Ara) misc. small fixes and cleanup --- src/arabic/MissingAra.gf | 1 - src/arabic/ParadigmsAra.gf | 4 +++- src/arabic/ResAra.gf | 4 ++-- src/arabic/SentenceAra.gf | 25 ++++--------------------- 4 files changed, 9 insertions(+), 25 deletions(-) diff --git a/src/arabic/MissingAra.gf b/src/arabic/MissingAra.gf index 9dfe21b1d..774055f83 100644 --- a/src/arabic/MissingAra.gf +++ b/src/arabic/MissingAra.gf @@ -15,7 +15,6 @@ oper DetNP : Det -> NP = notYet "DetNP" ; oper ExistIP : IP -> QCl = notYet "ExistIP" ; oper FunRP : Prep -> NP -> RP -> RP = notYet "FunRP" ; oper ImpPl1 : VP -> Utt = notYet "ImpPl1" ; -oper ImpersCl : VP -> Cl = notYet "ImpersCl" ; oper PConjConj : Conj -> PConj = notYet "PConjConj" ; oper PPartNP : NP -> V2 -> NP = notYet "PPartNP" ; oper PredSCVP : SC -> VP -> Cl = notYet "PredSCVP" ; diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index 6fdc88fb5..4c9cf18a8 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -551,7 +551,9 @@ resource ParadigmsAra = open brkN' : Str -> Str -> Str -> Gender -> Species -> N = \root,sg,pl,gen,spec -> - let { kitAb = mkWord sg root; + let { kitAb = case root of { + ? + ? + "ي" => mkDefectiveAlifMaqsura (mkPat sg) (mkRoot3 root) ; + _ => mkWord sg root }; kutub = mkWord pl root } in mkFullN (reg kitAb kutub) gen spec; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index d807d3bf8..a54db8ec8 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -221,7 +221,7 @@ oper --PerfAct, PerfPas, ImpfAct, ImpfPas, Imp, PPart verb : (_,_,_,_,_,_ : Str) -> Verb = \katab,kutib,aktub,uktab,euktub,maktUb -> { - s = table { + s = \\vf => rectifyHmz (case vf of { VPerf Act pgn => katab + suffixPerf ! pgn ; VPerf Pas pgn => kutib + suffixPerf ! pgn ; VImpf Ind Act pgn => prefixImpf!pgn + aktub + suffixImpfInd !pgn; @@ -230,7 +230,7 @@ oper VImpf m Pas pgn => prefixImpf !pgn + uktab + suffixImpfCJ m !pgn; VImp g n => euktub + suffixImpfCJ Jus ! (Per2 g n); VPPart => maktUb - } + }) } ; --affixes of sound verbs diff --git a/src/arabic/SentenceAra.gf b/src/arabic/SentenceAra.gf index cea5f38eb..b3fc8bf73 100644 --- a/src/arabic/SentenceAra.gf +++ b/src/arabic/SentenceAra.gf @@ -12,23 +12,8 @@ concrete SentenceAra of Sentence = CatAra ** open flags optimize=all_subs ; coding=utf8 ; lin -{- - PredVP np vp = - { s = \\t,p,o => - case o of { - Verbal => - case vp.comp.a.isPron of { - False => vp.s ! t ! p ! Verbal ! np.a ++ np.s ! Nom ++ vp.comp.s ! Acc ; - True => vp.s ! t ! p ! Verbal ! np.a ++ vp.comp.s ! Acc ++ np.s ! Nom - }; - Nominal => - np.s ! Nom ++ vp.s ! t ! p ! Nominal ! np.a ++ vp.comp.s ! Acc - } - }; --} - PredVP = predVP ; --- PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ; + PredVP = predVP ; ImpVP vp = { s = \\p,g,n => @@ -57,11 +42,9 @@ concrete SentenceAra of Sentence = CatAra ** open -- SlashVS np vs sslash = TODO - - EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ; - EmbedQS qs = {s = qs.s ! QIndir} ; - EmbedVP vp = {s = uttVP vp ! Masc} ; - + EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ; + EmbedQS qs = {s = qs.s ! QIndir} ; + EmbedVP vp = {s = uttVP vp ! Masc} ; UseCl t p cl = {s = \\o => t.s ++ p.s ++