diff --git a/src/persian/AdjectivePes.gf b/src/persian/AdjectivePes.gf index 111fd94a5..253c73a73 100644 --- a/src/persian/AdjectivePes.gf +++ b/src/persian/AdjectivePes.gf @@ -3,46 +3,51 @@ concrete AdjectivePes of Adjective = CatPes ** open ResPes, Prelude in { flags coding = utf8; lin - PositA a = a ; - UseComparA a = a; + PositA a = a ; + UseComparA a = a ; - ComparA a np = { - s =\\ez => a.s ! ez ++ "تر" ++ "از" ++ np.s ! Bare ; - adv = a.adv - } ; + ComparA a np = a ** { + s = \\m => a.s ! m ++ "تر" ++ "از" ++ np.s ! Bare ; + adv = a.adv ++ "تر" ++ "از" ++ np.s ! Bare ; + } ; ---- $SuperlA$ belongs to determiner syntax in $Noun$. - ComplA2 a np = { - s =\\ez => np.s ! Bare ++ a.c2 ++ a.s ! ez ; - adv = a.adv - } ; + ComplA2 a np = a ** { + s = \\m => np.s ! Bare ++ a.c2 ++ a.s ! m ; + adv = np.s ! Bare ++ a.c2 ++ a.adv + } ; - ReflA2 a = { - s =\\ez => a.s ! ez ++ "" ; -- need to be fixed - adv = a.adv - } ; + ReflA2 a = a ** { + s = \\m => a.s ! m ++ reflPron ! defaultAgr ; ---- need to be fixed + adv = a.adv ++ reflPron ! defaultAgr + } ; - SentAP ap sc = { - s =\\ez => ap.s! ez ++ sc.s ; - adv = ap.adv - } ; + SentAP ap sc = ap ** { + s = \\m => ap.s ! m ++ sc.s ; + adv = ap.adv ++ sc.s + } ; - AdAP ada ap = { - s =\\ez => ada.s ++ ap.s ! ez ; - adv = ap.adv - } ; + AdAP ada ap = ap ** { + s = \\m => ada.s ++ ap.s ! m ; + adv = ada.s ++ ap.adv ; + } ; - UseA2 a = a ; + UseA2 a = a ; - CAdvAP cadv ap np = { - s =\\ez => cadv.s ++ np.s ! Bare ++ ap.s ! ez ; - adv = ap.adv - }; + CAdvAP cadv ap np = ap ** { + s = \\m => cadv.s ++ np.s ! Bare ++ ap.s ! m ; + adv = cadv.s ++ ap.adv + } ; - AdjOrd ord = { s =\\_ => ord.s ; adv = ""}; + AdjOrd ord = { + s = \\_ => ord.s ; + adv = ord.s ; + isPre = ord.isPre + } ; - - - AdvAP ap adv = {s =\\ez => ap.s ! ez ++ adv.s ; adv = ap.adv}; + AdvAP ap adv = ap ** { + s = \\m => ap.s ! m ++ adv.s ; + adv = ap.adv ++ adv.s + } ; } diff --git a/src/persian/CatPes.gf b/src/persian/CatPes.gf index fe5d2cab9..b5396a8c5 100644 --- a/src/persian/CatPes.gf +++ b/src/persian/CatPes.gf @@ -6,8 +6,8 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in { ------ Tensed/Untensed S = {s : VVForm => Str} ; -- as a complement to Subj - QS = {s : QForm => Str} ; - RS = {s : Agr => Str } ; -- c for it clefts + QS = {s : Str} ; + RS = {s : Agr => Str } ; SSlash = {s : VVForm => Str ; c2 : ResPes.Compl} ; ---- Sentence @@ -21,7 +21,7 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in { Imp = {s : Polarity => ImpForm => Str} ; ---- Question - QCl = {s : ResPes.TAnt => Polarity => QForm => Str} ; + QCl = {s : ResPes.TAnt => Polarity => Str} ; IP = {s: Str ; n : Number}; @@ -58,7 +58,7 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in { Predet = {s : Str} ; Num = {s : Str ; n : Number ; isNum : Bool} ; Card = {s : Str; n : Number} ; - Ord = {s : Str; n : Number ; isNum : Bool} ; + Ord = {s : Str; n : Number ; isNum,isPre : Bool} ; Quant = ResPes.Quant ; ---- Numeral diff --git a/src/persian/ConjunctionPes.gf b/src/persian/ConjunctionPes.gf index 27f6dd2e5..996f601d0 100644 --- a/src/persian/ConjunctionPes.gf +++ b/src/persian/ConjunctionPes.gf @@ -17,7 +17,7 @@ concrete ConjunctionPes of Conjunction = animacy = ss.animacy ; } ; - ConjAP conj ss = conjunctDistrTable Mod conj ss ** {adv = ss.adv}; + ConjAP conj ss = ss ** conjunctDistrTable Mod conj ss ; -- Adv isn't changed ConjRS conj rs = conjunctDistrTable Agr conj rs ** { c = rs.c}; ---- These fun's are generated from the list cat's. @@ -32,15 +32,14 @@ concrete ConjunctionPes of Conjunction = BaseRS x y = twoTable Agr x y ** {c = x.c}; ConsNP xs x = xs ** consrTable Mod comma xs x ** {a = conjAgr xs.a x.a ; animacy = xs.animacy } ; -- InaandB xs.animacy x.animacy} ; ConsRS xs x = consrTable Agr comma xs x ** { c = xs.c}; --- BaseAP x y = twoTable3 Number Gender Case x y ; -- ** {isPre = andB x.isPre y.isPre} ; - BaseAP x y = twoTable Mod x y ** {adv = x.adv}; - ConsAP xs x = consrTable Mod comma xs x ** {adv = x.adv}; -- Table3 Number Gender Case comma xs x ;-- ** {isPre = andB xs.isPre x.isPre} ; + BaseAP x y = y ** twoTable Mod x y ; + ConsAP xs x = xs ** consrTable Mod comma xs x ; -- Table3 Number Gender Case comma xs x ;-- ** {isPre = andB xs.isPre x.isPre} ; lincat [S] = {s1,s2 : VVForm => Str} ; [Adv] = {s1,s2 : Str} ; [NP] = {s1,s2 : Mod => Str ; a : Agr ; animacy : Animacy ; hasAdj : Bool; compl:Str} ; - [AP] = {s1,s2 : Mod => Str ; adv : Str} ; + [AP] = {s1,s2 : Mod => Str ; adv : Str ; isPre : Bool} ; [RS] = {s1,s2 : Agr => Str }; } diff --git a/src/persian/ExtendPes.gf b/src/persian/ExtendPes.gf index 77b8c986f..da5754392 100644 --- a/src/persian/ExtendPes.gf +++ b/src/persian/ExtendPes.gf @@ -3,7 +3,7 @@ concrete ExtendPes of Extend = CatPes ** ExtendFunctor - [ GenNP, ApposNP, ICompAP - ,GerundNP,GerundCN,GerundAdv + ,GerundNP,GerundCN,GerundAdv,EmbedPresPart ] with (Grammar=GrammarPes) ** open Prelude, ResPes in { @@ -30,4 +30,6 @@ lin -- : VP -> Adv ; -- publishing the document (prepositionless adverb) GerundAdv vp = lin Adv {s = showVPH Inf defaultAgr vp} ; + -- : VP -> SC ; + EmbedPresPart vp = lin SC {s = showVPH Inf defaultAgr vp} ; } diff --git a/src/persian/IdiomPes.gf b/src/persian/IdiomPes.gf index ae64fea5c..72a8d2f90 100644 --- a/src/persian/IdiomPes.gf +++ b/src/persian/IdiomPes.gf @@ -16,16 +16,12 @@ lin CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s ! Indic}; ExistNP np = - mkSClause " " (agrP3 (fromAgr np.a).n) - (insertComp (\\_ => np.s ! Bare) (predV beVerb)) ; + mkSClause [] (agrP3 (fromAgr np.a).n) + (insertComp (\\_ => np.s ! Bare) (predV beVerb)) ; ExistIP ip = - let cl = mkSClause ( ip.s ) (agrP3 ip.n) (predV beVerb); - in {s = \\t,p,qf => case qf of { - QDir => cl.s ! t ! p ! ODir; - QIndir => cl.s ! t! p ! ODir - } - }; + let cl = mkSClause ip.s (agrP3 ip.n) (predV beVerb); + in {s = \\t,p => cl.s ! t ! p ! ODir}; ProgrVP vp = predProg vp ; diff --git a/src/persian/LexiconPes.gf b/src/persian/LexiconPes.gf index 30fee4903..3073cef97 100644 --- a/src/persian/LexiconPes.gf +++ b/src/persian/LexiconPes.gf @@ -132,7 +132,7 @@ concrete LexiconPes of Lexicon = CatPes ** new_A = mkA "نو" "تازه"; newspaper_N = mkN01 "روزنامه" inanimate; oil_N = mkN "نفت" "نفت" inanimate; -- also "روغن" - old_A = mkA "پیر" "پیرانه"; + old_A = preA "پیر" "پیرانه" ; open_V2 = mkV2 (compoundV "باز" doVerb) "را"; paint_V2A = mkV2 (compoundV "رنگ" doVerb) "را" ; paper_N = mkN01 "کاغذ" inanimate; diff --git a/src/persian/MorphoPes.gf b/src/persian/MorphoPes.gf index ab02b8719..557a74736 100644 --- a/src/persian/MorphoPes.gf +++ b/src/persian/MorphoPes.gf @@ -147,7 +147,11 @@ oper --------------------------- -- Adjectives -------------------------- - Adjective : Type = {s : Mod => Str ; adv : Str} ; + Adjective : Type = { + s : Mod => Str ; + adv : Str ; + isPre : Bool + } ; mkAdj : Str -> Str -> Adjective = \adj,adv -> { s = table { Bare => adj; @@ -155,7 +159,7 @@ oper Clitic => mkEnclic adj ; Poss => mkPossStem adj } ; - adv = adv + adv = adv ; isPre = False }; ------------------------------------------------------------------ diff --git a/src/persian/NounPes.gf b/src/persian/NounPes.gf index c517e246d..62e3673ee 100644 --- a/src/persian/NounPes.gf +++ b/src/persian/NounPes.gf @@ -77,14 +77,14 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in { NumCard n = n ** {isNum = True} ; NumDigits n = n ** {s = n.s ! NCard; isNum = True} ; - OrdDigits n = n ** {s = n.s ! NOrd ; isNum = True} ; + OrdDigits n = n ** {s = n.s ! NOrd ; isNum = True ; isPre=False} ; NumNumeral n = n ** {s = n.s ! NCard; isNum = True} ; - OrdNumeral n = n ** {s = n.s ! NOrd ; isNum = True} ; + OrdNumeral n = n ** {s = n.s ! NOrd ; isNum = True ; isPre=False} ; -- to here AdNum adn num = num ** {s = adn.s ++ num.s} ; - OrdSuperl a = {s = a.s ! Bare ++ taryn; n = Sg ; isNum=False} ; -- check the form of adjective + OrdSuperl a = {s = a.s ! Bare ++ taryn; n = Sg ; isNum=False ; isPre = True} ; -- check the form of adjective DefArt = {s = \\_,_ => [] ; mod = Bare} ; IndefArt = {s = table {Sg => \\_ => IndefArticle ; Pl => \\_ => []} ; mod = Bare} ; @@ -121,7 +121,9 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in { } ; AdjCN ap cn = cn ** { - s = \\n,ez => cn.s ! n ! Ezafe ++ ap.s ! ez ; + s = \\n,m => case ap.isPre of { + True => ap.s ! Bare ++ cn.s ! n ! m ; -- TODO check mod of ap + False => cn.s ! n ! Ezafe ++ ap.s ! m } ; hasAdj = True } ; diff --git a/src/persian/ParadigmsPes.gf b/src/persian/ParadigmsPes.gf index 30faba830..127c717aa 100644 --- a/src/persian/ParadigmsPes.gf +++ b/src/persian/ParadigmsPes.gf @@ -282,6 +282,8 @@ oper = \a,c -> lin A2 (mkAdj a a ** {c2 = c}) } ; + preA : (adj,adv : Str) -> A = \adj,adv -> + lin A ((mkAdj adj adv) ** {isPre=True}) ; {- -- Demonstrative Pronouns diff --git a/src/persian/PhrasePes.gf b/src/persian/PhrasePes.gf index ff53f7de3..419e6a481 100644 --- a/src/persian/PhrasePes.gf +++ b/src/persian/PhrasePes.gf @@ -3,12 +3,12 @@ concrete PhrasePes of Phrase = CatPes ** open Prelude, ResPes in { lin PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ; UttS s = {s = s.s ! Indic} ; - UttQS qs = {s = qs.s ! QDir} ; UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg False} ; UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Pl False} ; UttImpPol pol imp = {s = pol.s ++ imp.s ! pol.p ! ImpF Sg True} ; UttIP, --- Acc also + UttQS, UttAdv, UttIAdv, UttCard = \ss -> ss ; diff --git a/src/persian/QuestionPes.gf b/src/persian/QuestionPes.gf index 924c8568c..2fba87468 100644 --- a/src/persian/QuestionPes.gf +++ b/src/persian/QuestionPes.gf @@ -4,41 +4,26 @@ concrete QuestionPes of Question = CatPes ** open ResPes, Prelude in { lin - QuestCl cl = { - s = \\t,p,qf => case qf of { - QDir => cl.s ! t ! p ! OQuest; - QIndir => cl.s ! t! p ! ODir - } - }; + QuestCl cl = { + s = \\t,p => cl.s ! t ! p ! OQuest + }; - QuestVP qp vp = - let cl = mkSClause ("") (Ag qp.n P3) vp; --- qp1 = qp.s; --- qp2 = qp.s ! Obl ++ "nE" - in { s = \\t,p,o => qp.s ++ cl.s ! t ! p ! ODir } ; --- _ => qp1 ++ cl.s ! t ! p ! ODir --- } + QuestVP qp vp = + let cl = mkSClause [] (Ag qp.n P3) vp; + in {s = \\t,p => qp.s ++ cl.s ! t ! p ! ODir} ; - QuestSlash ip slash = { - s = \\t,p,o => - slash.subj ++ slash.c2.s ++ ip.s ++ slash.c2.ra ++ - slash.vp ! t ! p ! ODir; - -- order of whome and john needs to be changed - -- AR 18/9/2017 now changed by making ClSlash discontinuous - }; + QuestSlash ip slash = { + s = \\t,p => slash.subj ++ slash.c2.s ++ ip.s ++ slash.c2.ra + ++ slash.vp ! t ! p ! ODir + }; - QuestIAdv iadv cl = { - s = \\t,p,_ => iadv.s ++ cl.s ! t ! p ! ODir; - }; + QuestIAdv iadv cl = { + s = \\t,p => iadv.s ++ cl.s ! t ! p ! ODir + }; - QuestIComp icomp np = - let cl = mkSClause (np.s ! Bare ++ icomp.s) np.a (predV beVerb); - in { - s = \\t,p,qf => case qf of { - QDir => cl.s ! t ! p ! ODir; - QIndir => cl.s ! t! p ! ODir - } - }; + QuestIComp icomp np = + let cl = mkSClause (np.s ! Bare ++ icomp.s) np.a (predV beVerb) + in {s = \\t,p => cl.s ! t ! p ! ODir}; PrepIP p ip = {s = p.s ++ ip.s } ; diff --git a/src/persian/ResPes.gf b/src/persian/ResPes.gf index fdf5a6673..ffbae8722 100644 --- a/src/persian/ResPes.gf +++ b/src/persian/ResPes.gf @@ -99,7 +99,7 @@ oper -- A hack: we reuse the obj field for the VP complement in -- SlashV2V and this is needed to get the right word order for complVV. showVPHvv : VerbForm -> Agr -> VPH -> Str = \vf,agr,vp -> - vp.ad ++ vp.comp ! agr ++ vp.prefix ++ vp.s ! vf + vp.comp ! agr ++ vp.prefix ++ vp.s ! vf -- vp.ad is missing on purpose! we add it in insertVV. ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vp.embComp ; Compl : Type = {s : Str ; ra : Str} ; @@ -140,6 +140,7 @@ oper insertVV : VV -> VPH -> VPH = \vv,vp -> predV vv ** { vComp = \\a,t => vp.vComp ! a ! t ++ complVV vv vp ! a ! t ; vvType = case vv.isDef of {True => DefVV ; _ => FullVV} ; + ad = vp.ad -- because complVV doesn't include ad! for word order. } ; embComp : Str -> VPH -> VPH = \str,vp -> vp ** { @@ -221,7 +222,7 @@ oper quest = table { ODir => []; OQuest => "آیا" } ; - subj = np.s ! Bare ; + subj = np2str np ; vp = \\ta,p,ord => let vps = clTable vp ! np.a ! ta ! p ; vvt = ta2vvt ta ; diff --git a/src/persian/SentencePes.gf b/src/persian/SentencePes.gf index b80db77fb..7e108a641 100644 --- a/src/persian/SentencePes.gf +++ b/src/persian/SentencePes.gf @@ -37,7 +37,7 @@ concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in { {c2 = slash.c2} ; EmbedS s = {s = conjThat ++ s.s ! Indic} ; - EmbedQS qs = {s = qs.s ! QIndir} ; + EmbedQS qs = qs ; EmbedVP vp = {s = showVPH Inf defaultAgr vp} ; --- agr @@ -48,7 +48,7 @@ concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in { } ; UseQCl temp p qcl = let vt = TA temp.t temp.a in { - s = \\q => temp.s ++ p.s ++ qcl.s ! vt ! p.p ! q; + s = temp.s ++ p.s ++ qcl.s ! vt ! p.p ; } ; UseRCl temp p rcl = let vt = TA temp.t temp.a in rcl ** { diff --git a/src/persian/SymbolPes.gf b/src/persian/SymbolPes.gf index 6012cf555..e349fd2d4 100644 --- a/src/persian/SymbolPes.gf +++ b/src/persian/SymbolPes.gf @@ -28,7 +28,7 @@ concrete SymbolPes of Symbol = CatPes ** open Prelude, ResPes in { SymbS sy = {s = \\_ => sy.s} ; SymbNum sy = { s = sy.s ; n = Pl } ; - SymbOrd sy = { s = sy.s ++ "wN" ; n = Pl; isNum=False} ; + SymbOrd sy = { s = sy.s ++ "wN" ; n = Pl; isNum,isPre=False} ; lincat diff --git a/src/persian/VerbPes.gf b/src/persian/VerbPes.gf index 5e8b8104b..368a9a7a9 100644 --- a/src/persian/VerbPes.gf +++ b/src/persian/VerbPes.gf @@ -14,12 +14,12 @@ concrete VerbPes of Verb = CatPes ** open ResPes,Prelude in { ComplVV = insertVV ; ComplVS v s = embComp (conjThat ++ s.s ! Indic) (predV v) ; - ComplVQ v q = embComp (conjThat ++ q.s ! QIndir) (predV v) ; + ComplVQ v q = embComp (conjThat ++ q.s) (predV v) ; ComplVA v ap = insertObj (appComp v.c2 (ap.s ! Bare)) (predV v) ; -- check form of adjective SlashVV vv vps = vps ** ComplVV vv vps ; SlashV2S v s = predVc v ** embComp (conjThat ++ s.s ! Indic) (predV v) ; - SlashV2Q v q = predVc v ** embComp (q.s ! QIndir) (predV v) ; + SlashV2Q v q = predVc v ** embComp q.s (predV v) ; SlashV2A v ap = predVc v ** insertObj (appComp v.c2 (ap.s ! Bare)) (predV v) ; ---- paint it red , check form of adjective -- : V2V -> VP -> VPSlash ; -- beg (her) to go