From eb074e6bcd4626d1cfd127954f7f1f842ebfe407 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Mon, 22 Oct 2018 17:09:33 +0200 Subject: [PATCH 1/2] (Ara) Small cleanup and adding comments --- src/arabic/NounAra.gf | 59 +++++++++++++++++++++---------------------- src/arabic/ResAra.gf | 7 +---- 2 files changed, 30 insertions(+), 36 deletions(-) diff --git a/src/arabic/NounAra.gf b/src/arabic/NounAra.gf index a35572820..d20b3e787 100644 --- a/src/arabic/NounAra.gf +++ b/src/arabic/NounAra.gf @@ -5,26 +5,28 @@ flags optimize=noexpand ; lin DetCN det cn = let { - number = sizeToNumber det.n; - state = possState det.d; + cas : Case -> Case = if_then_else Case det.is1sg Bare ; + number = sizeToNumber det.n ; determiner : Case -> Str = \c -> - det.s ! cn.h ! (detGender cn.g det.n) ! c; - noun : Case -> NTable -> Str = \c,nt -> - let cas = if_then_else Case det.is1sg Bare c -- no case vowel with 1sg poss. suff. - in nt ! number - ! nounState det.d number - ! nounCase cas det.n det.d + det.s ! cn.h ! (detGender cn.g det.n) ! c ; + noun : Case -> Str = \c -> + cn.s ! number + ! nounState det.d number + ! nounCase c det.n det.d ; + adj : Case -> Str = \c -> + cn.adj ! number + ! (definite ! det.d) -- Indef remains Indef, rest become Def + ! c } in { s = \\c => case cnB4det det.isPron det.isNum det.n det.d of { False => determiner c - ++ noun c cn.s -- deal with poss. suffix - ++ cn.adj ! number ! state ! c -- normal case+state - ++ cn.np ! c ; - True => noun c cn.s -- deal with poss. suffix - -- ++ determiner c -- or this? - ++ det.s ! cn.h ! cn.g ! c - ++ cn.adj ! number ! state ! c -- normal case+state + ++ noun c + ++ adj c + ++ cn.np ! c ; + True => noun (cas c) -- deal with possessive suffix + ++ determiner c + ++ adj c ++ cn.np ! c }; a = { pgn = agrP3 cn.h cn.g number; @@ -45,23 +47,20 @@ lin }; a = np.a } ; - {- - --should compile.. not working :( wierd error message.. bug? + +{- PPartNP np v2 = let x = case np.a.pgn of { - Per3 g n => ( positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ; - _ => \\_ => [] -- not occuring anyway - } in { - s = \\c => np.s ! c ++ x ! c ; - a = np.a - }; - -} + Per3 g n => positAdj (v2.s ! VPPart) ) ! g ! n ! Indef ; -- doesn't work because trying to glue runtime tokens + Per2 g n => \\_ => [] ; + _ => \\_ => [] + } in np ** { + s = \\c => np.s ! c ++ v2.s ! VPPart ---- TODO: agreement + }; +-} - -- FIXME try parsing something like "this house now" and you'll get - -- an internal compiler error, but it still works.. wierd.. - AdvNP np adv = { - s = \\c => np.s ! c ++ adv.s; - a = np.a + AdvNP np adv = np ** { + s = \\c => np.s ! c ++ adv.s }; {- DetSg quant ord = { @@ -104,7 +103,7 @@ lin PossPron p = { s = \\_,_,_,_ => p.s ! Gen; d = Poss; - is1sg = case p.a.pgn of { Per1 _ => True ; _ => False } ; + is1sg = case p.a.pgn of { Per1 Sing => True ; _ => False } ; isPron = True; isNum = False } ; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index bf9a37941..c73158c7a 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -48,8 +48,6 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { --for roots with 2 consonants (works also for assimilated strs, like fc~, --because the function discards anything after the first two characters mkRoot2 : Str -> Root2 = \fcl -> - -- let { cl = drop 2 fcl} in --drop 1 fcl - -- {f = take 2 fcl; c = take 2 cl}; --take 1 case fcl of { f@? + c@? + _ => { f = f ; c = c } ; _ => error ("mkRoot2: too short root" ++ fcl) @@ -138,7 +136,7 @@ resource ResAra = PatternsAra ** open Prelude, Predef, OrthoAra, ParamX in { VPerf Voice PerGenNum | VImpf Mood Voice PerGenNum | VImp Gender Number - | VPPart ; + | VPPart ; -- TODO: add gender and number (or check if easy to use BIND) PerGenNum = Per3 Gender Number @@ -1045,9 +1043,6 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> _ => Def --Lkitaabu }; - possState : State -> State = \s -> - case s of { Poss => Def ; - x => x } ; --FIXME needs testing nounCase : Case -> Size -> State -> Case = \c,size,s -> From 6b0094b22a4c6fe5b742f956c756710fe3cd31b4 Mon Sep 17 00:00:00 2001 From: Inari Listenmaa Date: Mon, 22 Oct 2018 17:09:51 +0200 Subject: [PATCH 2/2] (Ara) Fixing possessive suffixes --- src/arabic/ParadigmsAra.gf | 4 ++-- src/arabic/ResAra.gf | 9 ++++++--- src/arabic/StructuralAra.gf | 4 ++-- 3 files changed, 10 insertions(+), 7 deletions(-) diff --git a/src/arabic/ParadigmsAra.gf b/src/arabic/ParadigmsAra.gf index f84fc7add..9dea1146f 100644 --- a/src/arabic/ParadigmsAra.gf +++ b/src/arabic/ParadigmsAra.gf @@ -435,8 +435,8 @@ resource ParadigmsAra = open mkPron : (_,_,_ : Str) -> PerGenNum -> NP = \ana,nI,I,pgn -> { s = table { - Acc => nI; - Gen => I; + Acc => BIND ++ nI; -- object suffix + Gen => BIND ++ I; -- possessive suffix _ => ana }; a = {pgn = pgn; isPron = True }; diff --git a/src/arabic/ResAra.gf b/src/arabic/ResAra.gf index c73158c7a..d4f08f631 100644 --- a/src/arabic/ResAra.gf +++ b/src/arabic/ResAra.gf @@ -954,7 +954,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> --dual suffixes dl : State => Case => Str = table { - Const => + (Const|Poss) => table { Nom => "َا"; _ => "َيْ" @@ -970,7 +970,7 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> --sound masculine plural suffixes m_pl : State => Case => Str = table { - Const => + (Const|Poss) => table { Nom => "ُو"; _ => "ِي" @@ -1266,7 +1266,10 @@ patHollowImp : (_,_ :Str) -> Gender => Number => Str =\xaf,xAf -> mkNum : Str -> Str -> Str -> {s : DForm => CardOrd => Gender => State => Case => Str} = \wAhid,awwal,Ula -> - let { wAhida = wAhid + "َة"} in + let wAhida : Str = case wAhid of { + x + "ة" => mkAt wAhid ; + _ => wAhid + "َة" } + in { s= table { unit => table { NCard => table { diff --git a/src/arabic/StructuralAra.gf b/src/arabic/StructuralAra.gf index 8160f2eff..7931b8132 100644 --- a/src/arabic/StructuralAra.gf +++ b/src/arabic/StructuralAra.gf @@ -43,9 +43,9 @@ concrete StructuralAra of Structural = CatAra ** -- how8many_IDet = mkDet "كَمْ" Pl Const ; -- IL: check (was ["هْو مَني"]) ; -- if_Subj = ss "ِف" ; in8front_Prep = ss "مُقَابِلَ" ; - i_Pron = mkPron "أَنَا" "نِي" "ِي" (Per1 Sing); + i_Pron = mkPron "أَنَا" "نِي" "ي" (Per1 Sing); in_Prep = ss "فِي" ; - it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg); -- IL: check + it_Pron = he_Pron ; -- was: it_Pron = mkPron "ِت" "ِت" "ِتس" (Per3 Masc Sg); -- less_CAdv = ss "لسّ" ; many_Det = mkDet "جَمِيع" Pl Const ; -- more_CAdv = ss "مْري" ;