diff --git a/src/persian/AdverbPes.gf b/src/persian/AdverbPes.gf index cba51938c..2fe6cacc9 100644 --- a/src/persian/AdverbPes.gf +++ b/src/persian/AdverbPes.gf @@ -8,7 +8,7 @@ concrete AdverbPes of Adverb = CatPes ** open ResPes, Prelude in { s = a.adv ++ cadv.p ++ cadv.s ++ np.s ! Bare ; } ; ComparAdvAdjS cadv a s = { - s = a.adv ++ cadv.p ++ cadv.s ++ s.s; + s = a.adv ++ cadv.p ++ cadv.s ++ s.s ! Indic; } ; PrepNP prep np = {s = prep.s ++ np.s ! Bare } ; @@ -16,7 +16,7 @@ concrete AdverbPes of Adverb = CatPes ** open ResPes, Prelude in { AdAdv ada adv = { s = ada.s ++ adv.s} ; -- SubjS = cc2 ; - SubjS sub snt = {s = sub.s ++ "که" ++ snt.s } ; + SubjS sub snt = {s = sub.s ++ "که" ++ snt.s ! sub.compl} ; AdnCAdv cadv = {s = cadv.s ++ "از"} ; } diff --git a/src/persian/CatPes.gf b/src/persian/CatPes.gf index e79528dfd..377523563 100644 --- a/src/persian/CatPes.gf +++ b/src/persian/CatPes.gf @@ -5,10 +5,10 @@ concrete CatPes of Cat = CommonX - [Adv] ** open ResPes, Prelude in { lincat ------ Tensed/Untensed - S = {s : Str} ; + S = {s : VVForm => Str} ; -- as a complement to Subj QS = {s : QForm => Str} ; RS = {s : Agr => Str } ; -- c for it clefts - SSlash = {s : Str ; c2 : ResPes.Compl} ; + SSlash = {s : VVForm => Str ; c2 : ResPes.Compl} ; ---- Sentence @@ -75,7 +75,7 @@ concrete CatPes of Cat = CommonX - [Adv] ** open ResPes, Prelude in { Conj = {s1,s2 : Str ; n : Number} ; -----b Conj = {s : Str ; n : Number} ; -----b DConj = {s1,s2 : Str ; n : Number} ; - Subj = {s : Str} ; + Subj = {s : Str ; compl : VVForm} ; -- subjunctive or indicative Prep = {s : Str}; ---- Open lexical classes, e.g. Lexicon V, VS, VQ, VA = ResPes.Verb ; @@ -83,13 +83,13 @@ concrete CatPes of Cat = CommonX - [Adv] ** open ResPes, Prelude in { V2, V2A, V2Q, V2S = ResPes.Verb ** {c2 : Compl} ; V3 = ResPes.Verb ** {c2, c3 : Compl} ; VV = ResPes.VV ; - V2V = ResPes.VV ** {c1 : Str ; c2 : Str} ; + V2V = ResPes.VV ** {c2 : Compl} ; A = ResPes.Adjective ; A2 = ResPes.Adjective ** {c2 : Str} ; N = ResPes.Noun ; - N2 = ResPes.Noun ** {c : Str ; compl : Str}; -- when N3 is made to N2, need to retain compl + N2 = ResPes.Noun ** {c2 : Str ; compl : Str}; -- when N3 is made to N2, need to retain compl N3 = ResPes.Noun ** {c2 : Str ; c3 : Str} ; PN = {s : Str ; animacy : Animacy} ; diff --git a/src/persian/ConjunctionPes.gf b/src/persian/ConjunctionPes.gf index 4d79b8a5d..27f6dd2e5 100644 --- a/src/persian/ConjunctionPes.gf +++ b/src/persian/ConjunctionPes.gf @@ -7,7 +7,7 @@ concrete ConjunctionPes of Conjunction = lin - ConjS = conjunctDistrSS ; + ConjS = conjunctDistrTable VVForm ; ConjAdv = conjunctDistrSS ; -- ConjAdv conj advs = conjunctDistrTable Gender conj advs ; @@ -22,12 +22,12 @@ concrete ConjunctionPes of Conjunction = ---- These fun's are generated from the list cat's. - BaseS = twoSS ; - ConsS = consrSS comma ; + BaseS = twoTable VVForm ; + ConsS = consrTable VVForm comma ; + BaseAdv = twoSS ; --- BaseAdv x y = twoTable Gender x y ; ConsAdv = consrSS comma ; --- ConsAdv xs x = consrTable Gender comma xs x ; + BaseNP x y = y ** twoTable Mod x y ** {a = conjAgr x.a y.a ; animacy = y.animacy } ; -- check animacy 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} ; @@ -37,7 +37,7 @@ concrete ConjunctionPes of Conjunction = ConsAP xs x = consrTable Mod comma xs x ** {adv = x.adv}; -- Table3 Number Gender Case comma xs x ;-- ** {isPre = andB xs.isPre x.isPre} ; lincat - [S] = {s1,s2 : Str} ; + [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} ; diff --git a/src/persian/IdiomPes.gf b/src/persian/IdiomPes.gf index db1c5013c..ae64fea5c 100644 --- a/src/persian/IdiomPes.gf +++ b/src/persian/IdiomPes.gf @@ -13,7 +13,7 @@ lin in {s = \\t,p,o => cl.s ! t ! p ! o ++ rs.s ! np.a }; - CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s}; + CleftAdv ad ss = { s = \\t,b,o => ad.s ++ ss.s ! Indic}; ExistNP np = mkSClause " " (agrP3 (fromAgr np.a).n) diff --git a/src/persian/LexiconPes.gf b/src/persian/LexiconPes.gf index 0574740a4..35223fd61 100644 --- a/src/persian/LexiconPes.gf +++ b/src/persian/LexiconPes.gf @@ -21,7 +21,7 @@ concrete LexiconPes of Lexicon = CatPes ** beautiful_A = mkA "زیبا" ; become_VA = mkV "شدن" "شو"; beer_N = mkN01 "آبجو" inanimate; - beg_V2V = mkV2V (compoundV "خواهش" doVerb) "از" "" False; + beg_V2V = mkV2V (compoundV "خواهش" doVerb) "از" False; big_A = mkA "بزرگ" ; bike_N = mkN01 "دوچرخه" inanimate; bird_N = mkN02 "پرنده" animate; diff --git a/src/persian/NounPes.gf b/src/persian/NounPes.gf index 47b08fe1a..5b4abc0fa 100644 --- a/src/persian/NounPes.gf +++ b/src/persian/NounPes.gf @@ -86,18 +86,18 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in { UseN2 = useN ; Use2N3 n3 = useN n3 ** { - c = n3.c2 ; + c2 = n3.c2 ; compl = [] } ; Use3N3 n3 = useN n3 ** { - c = n3.c3 ; + c2 = n3.c3 ; compl = [] } ; ComplN2 n2 np = n2 ** { s = \\n,m => n2.s ! n ! Ezafe ; - compl = \\_ => n2.compl ++ n2.c ++ np.s ! Bare ; + compl = \\_ => n2.compl ++ n2.c2 ++ np.s ! Bare ; hasAdj = False }; diff --git a/src/persian/ParadigmsPes.gf b/src/persian/ParadigmsPes.gf index 667b5917c..1a424ed77 100644 --- a/src/persian/ParadigmsPes.gf +++ b/src/persian/ParadigmsPes.gf @@ -112,10 +112,37 @@ oper mkV2 : (listen : V) -> (to : Prep) -> V2 -- V2 out of V. Use given preposition, no را for direct object. } ; - mkV3 : V -> (dir,indir : Str) -> V3 ; -- Takes a verb and two prepositions as strings (can be empty). If the verb takes را for direct object, it's the first Str argument. e.g. talk, با, دربارۀ - mkV3 v p q = lin V3 (v ** {c2 = prepOrRa p ; c3 = prepOrRa q}) ; + mkV3 = overload { + mkV3 : Str -> V3 -- Predictable V3, را for direct object, no prepositions. + = \s -> lin V3 (regV s ** {c2 = prepOrRa "را" ; c3 = prepOrRa []}) ; + mkV3 : V -> (dir,indir : Str) -> V3 -- Takes a verb and two prepositions or را as strings (can be empty). + = \v,p,q -> lin V3 (v ** {c2 = prepOrRa p ; c3 = prepOrRa q}) + } ; + + mkVQ = overload { + mkVQ : Str -> VQ -- predictable verb with question complement + = \s -> lin VQ (regV s) ; + mkVQ : V -> VQ -- VQ out of a verb + = \v -> lin VQ v + } ; + + mkVA = overload { + mkVA : Str -> VA -- predictable verb with adjective complement + = \s -> lin VA (regV s) ; + mkVA : V -> VA -- VA out of a verb + = \v -> lin VA v + } ; + + mkVS = overload { + mkVS : Str -> VS -- predictable verb with sentence complement + = \s -> lin VS (regV s) ; + mkVS : V -> VS -- VS out of a verb + = \v -> lin VS v + } ; mkVV = overload { + mkVV : Str -> VV -- Predictable VV, subjunctive complement, is auxiliary. + = \s -> lin VV (regV s ** {isAux = True ; compl = subjunctive ; isDef = False}) ; mkVV : V -> VV -- takes its VP complement in subjunctive. Is auxiliary. = \v -> v ** {isAux = True ; compl = subjunctive ; isDef = False} ; mkVV : VVForm -> V -> VV -- takes its VP complement in the given VVForm @@ -124,9 +151,15 @@ oper = \isAux,vvf,v -> v ** {isAux = isAux ; compl = vvf ; isDef = False} } ; - mkV2V : V -> (cV, cN : Str) -> (isAux : Bool) -> V2V -- Verb, complementiser for the verb, complementiser for the noun, whether it's auxiliary. - = \v,s1,s2,b -> let vv : VV = mkVV b subjunctive v in - lin V2V (vv ** {c1 = s1 ; c2 = s2}) ; + mkV2V = overload { + mkV2V : V -> (cN : Str) -> (isAux : Bool) -> V2V -- Verb, complementiser for the noun, whether it's auxiliary. + = \v,s,b -> let vv : VV = mkVV b subjunctive v in + lin V2V (vv ** {c2 = prepOrRa s}) ; + mV2V : VV -> (cN : Str) -> V2V -- V2V out of VV + complementiser for the noun + = \vv,s -> lin V2V (vv ** {c2 = prepOrRa s}) ; + mV2V : VV -> V2V -- V2V out of VV, را for direct object + = \vv -> lin V2V (vv ** {c2 = prepOrRa "را"}) + } ; ----2 Adverbs @@ -158,7 +191,12 @@ oper = mk2Conj } ; - + mkSubj = overload { + mkSubj : Str -> Subj -- Takes its verbal complement in indicative. + = \s -> lin Subj {s=s ; compl=indicative} ; + mkSubj : VVForm -> Str -> Subj -- Specify whether it takes complement in subjunctive or indicative. + = \vvf,s -> lin Subj {s=s ; compl=vvf} + } ; --. --2 Definitions of paradigms @@ -289,10 +327,14 @@ oper } ; mkN2 = overload { + mkN2 : Str -> N2 -- Predictable N2 without complement + = \s -> lin N2 (mkN01 s inanimate ** {c2,compl = []}) ; + mkN2 : N -> N2 -- N2 from without complement + = \n -> lin N2 (n ** {c2,compl = []}) ; mkN2 : N -> Str -> N2 - = \n,c -> lin N2 (n ** {c = c ; compl=[]}) ; + = \n,c -> lin N2 (n ** {c2 = c ; compl = []}) ; mkN2 : N -> Prep -> Str -> N2 -- hidden from puclic API - = \n,p,c -> lin N2 (n ** {c = p.s ; c2 = c; compl=[]}) -- there is no c2 + = \n,p,c -> lin N2 (n ** {c2 = p.s; compl = []}) } ; mkN3 = overload { diff --git a/src/persian/PhrasePes.gf b/src/persian/PhrasePes.gf index 9b1ad0024..ff53f7de3 100644 --- a/src/persian/PhrasePes.gf +++ b/src/persian/PhrasePes.gf @@ -2,13 +2,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} ; - UttS, UttIP, --- Acc also UttAdv, UttIAdv, diff --git a/src/persian/ResPes.gf b/src/persian/ResPes.gf index 199092cf7..6c7eec727 100644 --- a/src/persian/ResPes.gf +++ b/src/persian/ResPes.gf @@ -40,6 +40,8 @@ resource ResPes = MorphoPes ** open Prelude,Predef in { animacy = Inanimate ; compl = [] } ; + indeclNP : Str -> NP = \s -> + emptyNP ** {s = \\m => s} ; useN : Noun -> CN = \n -> n ** { hasAdj = False ; @@ -56,8 +58,10 @@ resource ResPes = MorphoPes ** open Prelude,Predef in { --- Verb Phrase ----------------------- param + VVType = NoVV | FullVV | DefVV ; VVForm = Indic | Subj ; VVTense = VVPres | VVPerf | VVPast ; -- VVPast Anteriority ??? + TAnt = TA Tense Anteriority ; oper @@ -77,11 +81,9 @@ oper comp : Agr => Str; -- complements of a verb, agr for ReflVP "I/you see myself/yourself" and CompCN "I am human/we are humans" vComp : Agr => VVTense => Str; -- when a verb is used as a complement of an auxiliary verb. Unlike ‘comp’ or ‘obj’, this type of complement follows the auxiliary verb. obj : Str ; -- object of a verb; so far only used for A ("paint it black") - subj : VType ; ad : Str ; embComp : Str ; -- when a declarative or interrogative sentence is used as a complement of a verb. - isVV : Bool ; -- whether a VV has been added - isDef : Bool ; -- whether a the VV is defective + vvtype : VVType ; -- no VV, fully inflecting VV or defective VV } ; showVPH = overload { @@ -98,19 +100,12 @@ oper VPHSlash : Type = VPH ** {c2 : Compl} ; - param - TAnt = TA Tense Anteriority ; - - VType = VIntrans | VTrans | VTransPost ; -- TODO: find out if needed - -oper predV : Verb -> VPH = \verb -> verb ** { - subj = VIntrans ; ad, obj, embComp = []; - isDef,isVV = False ; + vvtype = NoVV ; comp = \\_ => [] ; vComp = \\_,_ => [] } ; @@ -133,8 +128,7 @@ oper insertVV : VV -> VPH -> VPH = \vv,vp -> predV vv ** { vComp = \\a,t => vp.vComp ! a ! t ++ complVV vv vp ! a ! t ; - isVV = True ; - isDef = vv.isDef ; + vvType = case vv.isDef of {True => DefVV ; _ => FullVV} ; } ; embComp : Str -> VPH -> VPH = \str,vp -> vp ** { @@ -153,16 +147,16 @@ oper ---- but don't know yet how False should be affect complVV : VV -> VPH -> (Agr => VVTense => Str) = \vv,vp -> \\agr,ant => if_then_Str vv.isAux conjThat [] ++ - case of { - -- Auxiliaries with full inflection: complement in subjunctive - <_,_,False> => showVPH (VSubj Pos agr) agr vp ; -- - + case of { -- Auxiliaries with defective inflection: complement inflects in tense - => showVPH (VSubj Pos agr) agr vp ; - => showVPH (VAor Pos agr) agr vp ; - => showVPH (VPast Pos agr) agr vp ; + => showVPH (VPast Pos agr) agr vp ; -- => showVPH PerfStem agr vp ++ pluperfAux Pos agr ; -- TODO do we need this? - => showVPH PerfStem agr vp ++ subjAux Pos agr ; + => showVPH PerfStem agr vp ++ subjAux Pos agr ; + + -- Auxiliaries that take indicative (full or defective inflection) + => showVPH (VAor Pos agr) agr vp ; + + -- Default: complement in subjunctive _ => showVPH (VSubj Pos agr) agr vp ---- TODO more forms ? } ; @@ -186,24 +180,24 @@ oper TA Pres Anter => vp.s ! VPerf pol agr ; TA Past Simul => vp.s ! VPast pol agr ; TA Past Anter => - case vp.isDef of { - True => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; - False => vp.s ! PerfStem ++ pluperfAux pol agr } ; + case vp.vvtype of { + DefVV => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; + _ => vp.s ! PerfStem ++ pluperfAux pol agr } ; TA Fut Simul => - case vp.isDef of { - True => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; - False => futAux pol agr ++ vp.s ! PastStem + case vp.vvtype of { + DefVV => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; + _ => futAux pol agr ++ vp.s ! PastStem } ; -- PastStem is, despite the name, used for future too. /IL TA Fut Anter => - case vp.isDef of { - True => vp.s ! VPerf pol agr ; - False => "خواسته" ++ pluperfAux pol agr ++ vp.s ! PastStem + case vp.vvtype of { + DefVV => vp.s ! VPerf pol agr ; + _ => "خواسته" ++ pluperfAux pol agr ++ vp.s ! PastStem } ; -- verb form need to be confirmed TA Cond Simul => vp.s ! VSubj pol agr ; TA Cond Anter => - case vp.isDef of { - True => vp.s ! VSubj pol agr ; - False => vp.s ! PerfStem ++ subjAux pol agr } -- verb form to be confirmed + case vp.vvtype of { + DefVV => vp.s ! VSubj pol agr ; + _ => vp.s ! PerfStem ++ subjAux pol agr } -- verb form to be confirmed } ; mkClause : NP -> VPH -> Clause = \np,vp -> @@ -214,7 +208,7 @@ oper quest = table { ODir => []; OQuest => "آیا" } ; - subj = np.s ! Bare ; + subj = np.s ! Bare ; vp = \\ta,p,ord => let vps = clTable vp ! np.a ! ta ! p ; vvt = ta2vvt ta ; @@ -238,7 +232,6 @@ oper VAor p a => haveVerb.s ! VAor Pos a ++ verb.s ! ImpPrefix p ++ verb.s ! VAor Pos a ; VPast p a => haveVerb.s ! VPast Pos a ++ verb.s ! ImpPrefix p ++ verb.s ! VPast Pos a ; -- negation in ImpPrefix _ => verb.s ! vh } ; -- TODO more forms - subj = VIntrans } ; IndefArticle : Str ; diff --git a/src/persian/SentencePes.gf b/src/persian/SentencePes.gf index c0f91eeac..b80db77fb 100644 --- a/src/persian/SentencePes.gf +++ b/src/persian/SentencePes.gf @@ -13,9 +13,9 @@ concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in { s = \\pol,n => let agr = Ag (numImp n) P2 ; vps = vp.prefix ++ vp.s ! VImp pol (numImp n) - in case vp.isVV of { - True => vps ++ vp.ad ++ vp.comp ! agr ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vp.embComp ; - False => vp.ad ++ vp.comp ! agr ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vps ++ vp.embComp } + in case vp.vvtype of { + NoVV => vp.ad ++ vp.comp ! agr ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vps ++ vp.embComp ; + _ => vps ++ vp.ad ++ vp.comp ! agr ++ vp.obj ++ vp.vComp ! agr ! VVPres ++ vp.embComp } } ; SlashVP np vp = @@ -32,17 +32,19 @@ concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in { } ; SlashVS np vs slash = - mkSlClause np - (embComp (conjThat ++ slash.s) (predV vs)) ** + mkSlClause np + (embComp (conjThat ++ slash.s ! Indic) (predV vs)) ** {c2 = slash.c2} ; - EmbedS s = {s = conjThat ++ s.s} ; + EmbedS s = {s = conjThat ++ s.s ! Indic} ; EmbedQS qs = {s = qs.s ! QIndir} ; EmbedVP vp = {s = showVPH Inf defaultAgr vp} ; --- agr - UseCl temp p cl = let vt = TA temp.t temp.a in { - s = temp.s ++ p.s ++ cl.s ! vt ! p.p ! ODir + UseCl temp p cl = { + s = \\vvf => temp.s ++ p.s ++ case vvf of { + Indic => cl.s ! TA temp.t temp.a ! p.p ! ODir ; + Subj => cl.s ! TA Cond temp.a ! p.p ! ODir } } ; UseQCl temp p qcl = let vt = TA temp.t temp.a in { @@ -53,13 +55,15 @@ concrete SentencePes of Sentence = CatPes ** open Prelude, ResPes,Predef in { s = \\q => temp.s ++ p.s ++ rcl.s ! vt ! p.p ! ODir ! q } ; - UseSlash temp p cls = let vt = TA temp.t temp.a in cls ** { - s = temp.s ++ p.s ++ cls.subj ++ cls.vp ! vt ! p.p ! ODir + UseSlash temp p cls = cls ** { + s = \\vvf => temp.s ++ p.s ++ cls.subj ++ case vvf of { + Indic => cls.vp ! TA temp.t temp.a ! p.p ! ODir ; + Subj => cls.vp ! TA Cond temp.a ! p.p ! ODir } } ; - AdvS a s = {s = a.s ++ s.s} ; + AdvS a s = {s = \\vvf => a.s ++ s.s ! vvf} ; - RelS s r = {s = s.s ++ r.s ! agrP3 Sg} ; - SSubjS s1 sj s2 = { s = s1.s ++ sj.s ++ s2.s}; + RelS s r = {s = \\vvf => s.s ! vvf ++ r.s ! agrP3 Sg} ; + SSubjS s1 sj s2 = {s = \\vvf => s1.s ! vvf ++ sj.s ++ s2.s ! sj.compl}; } diff --git a/src/persian/StructuralPes.gf b/src/persian/StructuralPes.gf index 67d0afe03..5969a552b 100644 --- a/src/persian/StructuralPes.gf +++ b/src/persian/StructuralPes.gf @@ -9,10 +9,10 @@ concrete StructuralPes of Structural = CatPes ** after_Prep = ss ["بعد از"] ; all_Predet = ss ["همه ی"] ; almost_AdA, almost_AdN = ss "تقریباً" ; - although_Subj = ss ["با وجود این"] ; + although_Subj = mkSubj "با وجود این" ; always_AdV = ss "همیشه" ; and_Conj = sd2 [] "و" ** {n = Pl} ; - because_Subj = ss ["برای این"] ; + because_Subj = mkSubj "برای این" ; before_Prep = ss ["قبل از"] ; behind_Prep = ss "پشت" ; between_Prep = ss "بین" ; @@ -24,12 +24,11 @@ concrete StructuralPes of Structural = CatPes ** can_VV = mkVV (mkV_1 "توانستن") ; ---- AR during_Prep = ss ["در طول"] ; either7or_DConj = sd2 "یا" "یا" ** {n = Sg} ; --- everybody_NP = MassNP (UseN (MorphoPnb.mkN11 ["هر کwی"])); -- not a good way coz need to include NounPnb +-- everybody_NP = R.indeclNP "هر کwی"; every_Det = mkDet "هر" Sg ; --- everything_NP = MassNP (UseN (MorphoPnb.mkN11 ["هر XE"])); +-- everything_NP = R.indeclNP ["هر XE"])); everywhere_Adv = ss ["هر جا"] ; few_Det = mkDet ["تعداد کمی"] Pl True; -- check --- first_Ord = {s = "اولین" ; n = Sg} ; --DEPRECATED for_Prep = ss "برای" ; from_Prep = ss "از" ; he_Pron = personalPron "او" "ش" Sg P3 ; @@ -39,7 +38,7 @@ concrete StructuralPes of Structural = CatPes ** how_IAdv = ss "چطور" ; how8many_IDet = {s = "چند" ; n = Pl ; isNum = True} ; how8much_IAdv = ss "چقدر" ; - if_Subj = ss "اگر" ; + if_Subj = mkSubj subjunctive "اگر" ; in8front_Prep = ss "جلوی" ; i_Pron = personalPron "من" "م" Sg P1; in_Prep = ss "در" ; @@ -64,13 +63,13 @@ concrete StructuralPes of Structural = CatPes ** quite_Adv = ss "کاملاً" ; she_Pron = personalPron "او" "ش" Sg P3 ; so_AdA = ss "بسیار" ; --- somebody_NP = MassNP (UseN (MorphoPnb.mkN11 "کwی" )); + somebody_NP = R.indeclNP "کwی" ; someSg_Det = mkDet "مقداری" Sg True ; somePl_Det = mkDet "چند" Pl True ; --- something_NP = MassNP (UseN (MorphoPnb.mkN11 "چیزی")); + something_NP = R.indeclNP "چیزی" ; somewhere_Adv = ss "جایی" ; that_Quant = mkQuant "آن" "آن"; - that_Subj = ss "آن"; + that_Subj = mkSubj "آن"; there_Adv = ss "آنجا" ; there7to_Adv = ss "آنجا" ; there7from_Adv = ss "آنجا" ; @@ -87,7 +86,7 @@ concrete StructuralPes of Structural = CatPes ** whatSg_IP = {s = ["چه چیزی"] ; n = Sg } ; whatPl_IP = {s = ["چه چیزهایی"] ; n = Pl } ; when_IAdv = ss "کی" ; - when_Subj = ss "وقتی" ; + when_Subj = mkSubj "وقتی" ; where_IAdv = ss "کجا" ; which_IQuant = {s = "کدام" ; n = Sg} ; whichPl_IDet = {s = "کدام" ; n = Pl ; isNum = False} ; @@ -107,9 +106,9 @@ concrete StructuralPes of Structural = CatPes ** if_then_Conj = sd2 "اگر" "آنگاه" ** {n = Sg} ; at_least_AdN = ss "حداقل" ; at_most_AdN = ss "حداکثر"; --- nothing_NP = MassNP (UseN (MorphoPnb.mkN11 "هیچ چیز" )); + nothing_NP = R.indeclNP "هیچ" ; except_Prep = ss ["به جز"] ; --- nobody_NP = MassNP (UseN (MorphoPnb.mkN11 "هیچ کس")); + nobody_NP = R.indeclNP "هیچ کس"; as_CAdv = {s = ["به اندازه ی"] ; p = ""} ; @@ -136,8 +135,7 @@ have_V2 = haveVerb ** { x => haveVerb.s ! x } ; c2 = { s = [] ; - ra = [] ; --- "را" ; ---- AR 18/9/2017: usually no ra acc. to Nasrin, but this is tricky - c = R.VTrans + ra = [] --- "را" ; ---- AR 18/9/2017: usually no ra acc. to Nasrin, but this is tricky } } ; } diff --git a/src/persian/SymbolPes.gf b/src/persian/SymbolPes.gf index bcce24df5..6012cf555 100644 --- a/src/persian/SymbolPes.gf +++ b/src/persian/SymbolPes.gf @@ -26,7 +26,7 @@ concrete SymbolPes of Symbol = CatPes ** open Prelude, ResPes in { compl = cn.compl ! Sg } ; - SymbS sy = sy ; + SymbS sy = {s = \\_ => sy.s} ; SymbNum sy = { s = sy.s ; n = Pl } ; SymbOrd sy = { s = sy.s ++ "wN" ; n = Pl; isNum=False} ; diff --git a/src/persian/VerbPes.gf b/src/persian/VerbPes.gf index 799da98d7..bfa98f093 100644 --- a/src/persian/VerbPes.gf +++ b/src/persian/VerbPes.gf @@ -13,18 +13,18 @@ concrete VerbPes of Verb = CatPes ** open ResPes,Prelude in { ComplSlash = complSlash ; ComplVV = insertVV ; - ComplVS v s = embComp (conjThat ++ s.s) (predV v) ; + ComplVS v s = embComp (conjThat ++ s.s ! Indic) (predV v) ; ComplVQ v q = embComp (conjThat ++ q.s ! QIndir) (predV v) ; ComplVA v ap = insertObj (ap.s ! Bare) (predV v) ; -- check form of adjective SlashVV vv vps = vps ** insertVV vv vps ; - SlashV2S v s = v ** embComp (conjThat ++ s.s) (predV v) ; + SlashV2S v s = v ** embComp (conjThat ++ s.s ! Indic) (predV v) ; SlashV2Q v q = v ** embComp (q.s ! QIndir) (predV v) ; SlashV2A v ap = v ** insertObj (ap.s ! Bare) (predV v) ; ---- paint it red , check form of adjective - SlashV2V v vp = insertVV v vp ** {c2 = {s = v.c1 ; ra = []}} ; + SlashV2V v vp = v ** insertVV v vp ; -- ** {c2 = {s = v.c1 ; ra = []}} ; SlashV2VNP v2v np vps = - let vvVP : VPH = insertVV v2v vps ; - vvVPS = vvVP ** {c2={s=v2v.c1 ; ra=v2v.c2}} ; -- TODO find out if it's a general rule; only one V2V in the lexicon /IL + let vvVPS : VPHSlash = vps ** insertVV v2v vps ; +-- vvVPS = vvVP ** {c2={s=v2v.c1 ; ra=v2v.c2}} ; -- TODO find out if it's a general rule; only one V2V in the lexicon /IL in complSlash vvVPS np ** {c2 = vps.c2} ; AdvVP vp adv = insertAdV adv.s vp ;