forked from GitHub/gf-rgl
Merge pull request #229 from inariksit/persian
Fixes in Persian: Prep, Subj, N2, N3, typos
This commit is contained in:
@@ -16,7 +16,12 @@ concrete AdverbPes of Adverb = CatPes ** open ResPes, Prelude in {
|
|||||||
AdAdv ada adv = { s = ada.s ++ adv.s} ;
|
AdAdv ada adv = { s = ada.s ++ adv.s} ;
|
||||||
|
|
||||||
-- SubjS = cc2 ;
|
-- SubjS = cc2 ;
|
||||||
SubjS sub snt = {s = sub.s ++ conjThat ++ snt.s ! sub.compl} ;
|
SubjS sub snt = {
|
||||||
|
s = case sub.relpron of {
|
||||||
|
Ke => sub.s ++ conjThat ++ snt.s ! sub.compl ;
|
||||||
|
Ance => "آنچه" ++ snt.s ! sub.compl }
|
||||||
|
} ;
|
||||||
|
|
||||||
AdnCAdv cadv = {s = cadv.s ++ "از"} ;
|
AdnCAdv cadv = {s = cadv.s ++ "از"} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -71,7 +71,11 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in {
|
|||||||
Conj = {s1,s2 : Str ; n : Number} ;
|
Conj = {s1,s2 : Str ; n : Number} ;
|
||||||
-----b Conj = {s : Str ; n : Number} ;
|
-----b Conj = {s : Str ; n : Number} ;
|
||||||
-----b DConj = {s1,s2 : Str ; n : Number} ;
|
-----b DConj = {s1,s2 : Str ; n : Number} ;
|
||||||
Subj = {s : Str ; compl : VVForm} ; -- subjunctive or indicative
|
Subj = {
|
||||||
|
s : Str ;
|
||||||
|
compl : VVForm ; -- subjunctive or indicative
|
||||||
|
relpron : RelPron -- choose between که and آنچه
|
||||||
|
} ;
|
||||||
VS = ResPes.Verb ** {compl : VVForm} ; -- subjunctive or indicative
|
VS = ResPes.Verb ** {compl : VVForm} ; -- subjunctive or indicative
|
||||||
Prep = Compl ;
|
Prep = Compl ;
|
||||||
---- Open lexical classes, e.g. Lexicon
|
---- Open lexical classes, e.g. Lexicon
|
||||||
@@ -86,8 +90,8 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in {
|
|||||||
|
|
||||||
N = ResPes.Noun ;
|
N = ResPes.Noun ;
|
||||||
|
|
||||||
N2 = ResPes.Noun ** {c2 : Str ; compl : Str}; -- when N3 is made to N2, need to retain compl
|
N2 = ResPes.Noun ** {c2 : Compl ; compl : Str}; -- when N3 is made to N2, need to retain compl
|
||||||
N3 = ResPes.Noun ** {c2 : Str ; c3 : Str} ;
|
N3 = ResPes.Noun ** {c2 : Compl ; c3 : Compl} ;
|
||||||
PN = {s : Str ; animacy : Animacy} ;
|
PN = {s : Str ; animacy : Animacy} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
cow_N = mkN01 "گاو" animate;
|
cow_N = mkN01 "گاو" animate;
|
||||||
die_V = mkV "مردن" "میر" ;
|
die_V = mkV "مردن" "میر" ;
|
||||||
dirty_A = mkA "کثیف" ;
|
dirty_A = mkA "کثیف" ;
|
||||||
distance_N3 = (mkN "فاصله" "فواصل" inanimate ) ** {c2="از" ; c3 = "تا"};
|
distance_N3 = mkN3 (mkN "فاصله" "فواصل" inanimate ) "از" "تا" ;
|
||||||
doctor_N = mkN01 "دکتر" animate; -- has variant "پزشک", but only a doctor in medicine
|
doctor_N = mkN01 "دکتر" animate; -- has variant "پزشک", but only a doctor in medicine
|
||||||
dog_N = mkN01 "سگ" animate;
|
dog_N = mkN01 "سگ" animate;
|
||||||
door_N = mkN01 "در" inanimate;
|
door_N = mkN01 "در" inanimate;
|
||||||
|
|||||||
@@ -25,6 +25,10 @@ oper
|
|||||||
-- fatha : Str = "َ" ;
|
-- fatha : Str = "َ" ;
|
||||||
kasre,fatha : Str = [] ;
|
kasre,fatha : Str = [] ;
|
||||||
|
|
||||||
|
-- for appComp
|
||||||
|
-- runtimeKasre : Str -> Str = \s -> glue s kasre ;
|
||||||
|
runtimeKasre : Str -> Str = \s -> s ;
|
||||||
|
|
||||||
|
|
||||||
---- Nouns
|
---- Nouns
|
||||||
param
|
param
|
||||||
@@ -316,7 +320,7 @@ oper
|
|||||||
|
|
||||||
haveVerb : Verb = haveRegV ** {s = table {
|
haveVerb : Verb = haveRegV ** {s = table {
|
||||||
ImpPrefix _ => [] ;
|
ImpPrefix _ => [] ;
|
||||||
VAor Neg agr => imperfectSuffix agr (addN "دار") ;
|
VAor Neg agr => imperfectSuffixD agr (addN "دار") ;
|
||||||
VSubj pol agr => haveRegV.s ! VPerf pol agr ;
|
VSubj pol agr => haveRegV.s ! VPerf pol agr ;
|
||||||
vf => haveRegV.s ! vf }
|
vf => haveRegV.s ! vf }
|
||||||
} where { haveRegV = mkVerb "داشتن" "دار" } ;
|
} where { haveRegV = mkVerb "داشتن" "دار" } ;
|
||||||
|
|||||||
@@ -119,14 +119,14 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
ComplN2 n2 np = n2 ** {
|
ComplN2 n2 np = n2 ** {
|
||||||
s = \\n,m => n2.s ! n ! Ezafe ;
|
s = \\n,m => n2.s ! n ! n2.c2.mod ;
|
||||||
compl = \\_ => n2.compl ++ n2.c2 ++ np2str np ;
|
compl = \\_ => n2.compl ++ n2.c2.s ++ np2str np ;
|
||||||
hasAdj = False
|
hasAdj = False
|
||||||
};
|
};
|
||||||
|
|
||||||
ComplN3 n3 np = n3 ** {
|
ComplN3 n3 np = n3 ** {
|
||||||
s = \\n,m => n3.s ! n ! Ezafe ;
|
s = \\n,m => n3.s ! n ! n3.c2.mod ;
|
||||||
compl = n3.c2 ++ np2str np ;
|
compl = n3.c2.s ++ np2str np ;
|
||||||
c = n3.c3;
|
c = n3.c3;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ lin pot3plus n m = {
|
|||||||
} ;
|
} ;
|
||||||
-}
|
-}
|
||||||
D_0 = mkDig "0" ;
|
D_0 = mkDig "0" ;
|
||||||
D_1 = mk3Dig "1" "" Pl;
|
D_1 = mk3Dig "1" "" Sg ;
|
||||||
D_2 = mk2Dig "2" "";
|
D_2 = mk2Dig "2" "";
|
||||||
D_3 = mk2Dig "3" "سوم" ;
|
D_3 = mk2Dig "3" "سوم" ;
|
||||||
D_4 = mkDig "4" ;
|
D_4 = mkDig "4" ;
|
||||||
|
|||||||
@@ -42,11 +42,13 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkN2 : overload {
|
mkN2 : overload {
|
||||||
mkN2 : (key : N) -> (to : Str) -> N2 -- Takes a noun and a complementiser, returns a N2.
|
mkN2 : (key : N) -> (to : Str) -> N2 ; -- Takes a noun and a complementiser as a string, returns a N2.
|
||||||
|
mkN2 : (key : N) -> (to : Prep) -> N2 -- Takes a noun and a complementiser as a Prep, returns a N2.
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkN3 : overload {
|
mkN3 : overload {
|
||||||
mkN3 : (distance : N) -> (from,to : Str) -> N3 -- Takes a noun and two complementisers, returns a N3.
|
mkN3 : (distance : N) -> (from,to : Str) -> N3 ; -- Takes a noun and two complementisers as strings, returns a N3.
|
||||||
|
mkN3 : (distance : N) -> (from,to : Prep) -> N3 -- Takes a noun and two complementisers as Preps, returns a N3.
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
-- Compound Nouns
|
-- Compound Nouns
|
||||||
@@ -124,7 +126,7 @@ oper
|
|||||||
|
|
||||||
mkV3 = overload {
|
mkV3 = overload {
|
||||||
mkV3 : Str -> V3 -- Predictable V3, را for direct object, no prepositions.
|
mkV3 : Str -> V3 -- Predictable V3, را for direct object, no prepositions.
|
||||||
= \s -> lin V3 (regV s ** {c2 = prepOrRa "را" ; c3 = prepOrRa []}) ;
|
= \s -> lin V3 (regV s ** {c2 = prepOrRa "را" ; c3 = noPrep}) ;
|
||||||
mkV3 : V -> (dir,indir : Str) -> V3 -- Takes a verb and two prepositions or را as strings (can be empty).
|
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}) ;
|
= \v,p,q -> lin V3 (v ** {c2 = prepOrRa p ; c3 = prepOrRa q}) ;
|
||||||
mkV3 : V -> (dir,indir : Prep) -> V3 -- Takes a verb and two prepositions
|
mkV3 : V -> (dir,indir : Prep) -> V3 -- Takes a verb and two prepositions
|
||||||
@@ -140,9 +142,9 @@ oper
|
|||||||
|
|
||||||
mkVA = overload {
|
mkVA = overload {
|
||||||
mkVA : Str -> VA -- predictable verb with adjective complement
|
mkVA : Str -> VA -- predictable verb with adjective complement
|
||||||
= \s -> lin VA (regV s ** {c2 = prepOrRa []}) ;
|
= \s -> lin VA (regV s ** {c2 = noPrep}) ;
|
||||||
mkVA : V -> VA -- VA out of a verb
|
mkVA : V -> VA -- VA out of a verb
|
||||||
= \v -> lin VA (v ** {c2 = prepOrRa []}) ;
|
= \v -> lin VA (v ** {c2 = noPrep}) ;
|
||||||
mkVA : V -> Prep -> VA -- VA out of a verb and preposition
|
mkVA : V -> Prep -> VA -- VA out of a verb and preposition
|
||||||
= \v,p -> lin VA (v ** {c2 = p}) ;
|
= \v,p -> lin VA (v ** {c2 = p}) ;
|
||||||
} ;
|
} ;
|
||||||
@@ -214,9 +216,9 @@ oper
|
|||||||
|
|
||||||
mkSubj = overload {
|
mkSubj = overload {
|
||||||
mkSubj : Str -> Subj -- Takes its verbal complement in indicative.
|
mkSubj : Str -> Subj -- Takes its verbal complement in indicative.
|
||||||
= \s -> lin Subj {s=s ; compl=indicative} ;
|
= \s -> mkSubj' s ;
|
||||||
mkSubj : VVForm -> Str -> Subj -- Specify whether it takes complement in subjunctive or indicative.
|
mkSubj : VVForm -> Str -> Subj -- Specify whether it takes complement in subjunctive or indicative.
|
||||||
= \vvf,s -> lin Subj {s=s ; compl=vvf}
|
= \vvf,s -> mkSubj' s ** {compl=vvf}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkInterj : Str -> Interj
|
mkInterj : Str -> Interj
|
||||||
@@ -246,6 +248,13 @@ oper
|
|||||||
Mod = ResPes.Mod ;
|
Mod = ResPes.Mod ;
|
||||||
ezafe = ResPes.Ezafe ;
|
ezafe = ResPes.Ezafe ;
|
||||||
|
|
||||||
|
|
||||||
|
mkSubj' : Str -> Subj ;
|
||||||
|
mkSubj' s = lin Subj (case s of {
|
||||||
|
"آن" => {s = [] ; relpron = Ance ; compl = indicative} ;
|
||||||
|
_ => {s = s ; relpron = Ke ; compl = indicative}
|
||||||
|
}) ;
|
||||||
|
|
||||||
-- Removed mkV_1, mkV_2, mkN01 and mkN02 from public API, still available for
|
-- Removed mkV_1, mkV_2, mkN01 and mkN02 from public API, still available for
|
||||||
-- any applications that open ParadigmsPes. /IL 2019-02-08
|
-- any applications that open ParadigmsPes. /IL 2019-02-08
|
||||||
mkV_1 : Str -> V
|
mkV_1 : Str -> V
|
||||||
@@ -360,25 +369,29 @@ oper
|
|||||||
"را" => {s = [] ; ra = "را" ; mod=Bare} ;
|
"را" => {s = [] ; ra = "را" ; mod=Bare} ;
|
||||||
prep => {s = prep ; ra = []; mod=Bare}
|
prep => {s = prep ; ra = []; mod=Bare}
|
||||||
} ;
|
} ;
|
||||||
|
noPrep = prepOrRa [] ;
|
||||||
|
ezafePrep = {s = [] ; ra = [] ; mod=Ezafe} ;
|
||||||
|
|
||||||
mkPost : Str -> Prep = \s -> lin Prep {s=[] ; ra=s ; mod=Bare} ;
|
mkPost : Str -> Prep = \s -> lin Prep {s=[] ; ra=s ; mod=Bare} ;
|
||||||
|
|
||||||
mkN2 = overload {
|
mkN2 = overload {
|
||||||
mkN2 : Str -> N2 -- Predictable N2 without complement
|
mkN2 : Str -> N2 -- Predictable N2 without complement
|
||||||
= \s -> lin N2 (mkN01 s inanimate ** {c2,compl = []}) ;
|
= \s -> lin N2 (mkN01 s inanimate ** {c2 = ezafePrep ; compl = []}) ;
|
||||||
mkN2 : N -> N2 -- N2 from without complement
|
mkN2 : N -> N2 -- N2 from without complement
|
||||||
= \n -> lin N2 (n ** {c2,compl = []}) ;
|
= \n -> lin N2 (n ** {c2 = ezafePrep ; compl = []}) ;
|
||||||
mkN2 : N -> Str -> N2
|
mkN2 : N -> Str -> N2
|
||||||
= \n,c -> lin N2 (n ** {c2 = c ; compl = []}) ;
|
= \n,c -> lin N2 (n ** {c2 = prepOrRa c ; compl = []}) ;
|
||||||
mkN2 : N -> Prep -> Str -> N2 -- hidden from puclic API
|
mkN2 : N -> Prep -> Str -> N2 -- hidden from puclic API
|
||||||
= \n,p,c -> lin N2 (n ** {c2 = p.s; compl = []})
|
= \n,p,c -> lin N2 (n ** {c2 = p; compl = []})
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkN3 = overload {
|
mkN3 = overload {
|
||||||
mkN3 : N -> Str -> Str -> N3
|
mkN3 : N -> Str -> Str -> N3
|
||||||
|
= \n,p,q -> lin N3 (n ** {c2 = prepOrRa p ; c3 = prepOrRa q}) ;
|
||||||
|
mkN3 : N -> Prep -> Prep -> N3
|
||||||
= \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;
|
= \n,p,q -> lin N3 (n ** {c2 = p ; c3 = q}) ;
|
||||||
mkN3 : N -> Prep -> Str -> Str -> N3 -- hidden from public API
|
mkN3 : N -> Prep -> Str -> Str -> N3 -- hidden from public API
|
||||||
= \n,p,q,r -> lin N3 (n ** {c2 = p.s ; c3 = q ; c4 = r}) -- there is no c4
|
= \n,p,q,r -> lin N3 (n ** {c2 = p ; c3 = prepOrRa q ; c4 = r}) -- there is no c4
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -149,7 +149,9 @@ oper
|
|||||||
-- VP complementation
|
-- VP complementation
|
||||||
---------------------
|
---------------------
|
||||||
appComp : Compl -> (Mod=>Str) -> Str = \c2,obj ->
|
appComp : Compl -> (Mod=>Str) -> Str = \c2,obj ->
|
||||||
c2.s ++ obj ! c2.mod ++ c2.ra ;
|
case c2.mod of {
|
||||||
|
Ezafe => runtimeKasre c2.s ++ obj ! Bare ++ c2.ra ;
|
||||||
|
_ => c2.s ++ obj ! c2.mod ++ c2.ra } ;
|
||||||
|
|
||||||
insertComp : (Agr => Str) -> VPH -> VPH = \obj,vp -> vp ** {
|
insertComp : (Agr => Str) -> VPH -> VPH = \obj,vp -> vp ** {
|
||||||
comp = \\a => vp.comp ! a ++ obj ! a
|
comp = \\a => vp.comp ! a ++ obj ! a
|
||||||
|
|||||||
Reference in New Issue
Block a user