forked from GitHub/gf-rgl
@@ -59,9 +59,9 @@ concrete CatPes of Cat = CommonX - [Adv] ** open ResPes, Prelude in {
|
|||||||
Pron = {s : Str ; ps : Str ; a : AgrPes};
|
Pron = {s : Str ; ps : Str ; a : AgrPes};
|
||||||
Det = ResPes.Determiner ;
|
Det = ResPes.Determiner ;
|
||||||
Predet = {s : Str} ;
|
Predet = {s : Str} ;
|
||||||
Num = {s : Str ; n : Number} ;
|
Num = {s : Str ; n : Number ; isNum : Bool} ;
|
||||||
Card = {s : Str; n : Number} ;
|
Card = {s : Str; n : Number} ;
|
||||||
Ord = {s : Str; n : Number} ;
|
Ord = {s : Str; n : Number ; isNum : Bool} ;
|
||||||
Quant = {s: Number => Str ; a:AgrPes ; fromPron : Bool};
|
Quant = {s: Number => Str ; a:AgrPes ; fromPron : Bool};
|
||||||
Art = {s : Str} ;
|
Art = {s : Str} ;
|
||||||
|
|
||||||
@@ -82,15 +82,15 @@ concrete CatPes of Cat = CommonX - [Adv] ** open ResPes, Prelude in {
|
|||||||
|
|
||||||
V2, V2A, V2Q, V2S = ResPes.Verb ** {c2 : Compl} ;
|
V2, V2A, V2Q, V2S = ResPes.Verb ** {c2 : Compl} ;
|
||||||
V3 = ResPes.Verb ** {c2, c3 : Str} ;
|
V3 = ResPes.Verb ** {c2, c3 : Str} ;
|
||||||
VV = ResPes.Verb ** { isAux : Bool} ;
|
VV = ResPes.Verb ** {isAux : Bool} ;
|
||||||
V2V = ResPes.Verb ** {c1 : Str ; c2 : Str ; isAux : Bool} ;
|
V2V = ResPes.Verb ** {c1 : Str ; c2 : Str ; isAux : Bool} ;
|
||||||
A = ResPes.Adjective ; --- {s : Gender => Number => Case => Str} ;
|
A = ResPes.Adjective ; --- {s : Gender => Number => Case => Str} ;
|
||||||
A2 = ResPes.Adjective ** { c2 : Str} ;
|
A2 = ResPes.Adjective ** { c2 : Str} ;
|
||||||
|
|
||||||
N = {s : Ezafa => Number => Str ; animacy : Animacy ; definitness : Bool} ;
|
N = ResPes.Noun ;
|
||||||
|
|
||||||
N2 = {s : Ezafa => Number => Str ; animacy : Animacy ; definitness : Bool} ** {c : Str};
|
N2 = ResPes.Noun ** {c : Str};
|
||||||
N3 = {s : Ezafa => Number => Str ; animacy : Animacy ; definitness : Bool} ** {c2 : Str ; c3 : Str } ;
|
N3 = ResPes.Noun ** {c2 : Str ; c3 : Str} ;
|
||||||
PN = {s : Str ; animacy : Animacy} ;
|
PN = {s : Str ; animacy : Animacy} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
17
src/persian/ExtendPes.gf
Normal file
17
src/persian/ExtendPes.gf
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
--# -path=.:../common:../abstract:../prelude
|
||||||
|
|
||||||
|
concrete ExtendPes of Extend =
|
||||||
|
CatPes ** ExtendFunctor - [
|
||||||
|
GenNP
|
||||||
|
]
|
||||||
|
with (Grammar=GrammarPes)
|
||||||
|
** open Prelude, ResPes in {
|
||||||
|
|
||||||
|
lin
|
||||||
|
-- NP -> Quant ; -- this man's
|
||||||
|
GenNP np = np ** {
|
||||||
|
s = \\num => np.s ! NPC bEzafa ; -- the possessed will get aEzafa, possesser is just unmarked; https://sites.la.utexas.edu/persian_online_resources/language-specific-grammar/ezfe/
|
||||||
|
fromPron = True -- not necessarily from Pron, but it should come after the noun, and if fromPron=True, then DetCN places determiner after cn.
|
||||||
|
} ;
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
--# -path=.:../abstract:../common:../hindustani
|
--# -path=.:../abstract:../common
|
||||||
|
|
||||||
concrete LangPes of Lang =
|
concrete LangPes of Lang =
|
||||||
GrammarPes,
|
GrammarPes
|
||||||
LexiconPes
|
,LexiconPes
|
||||||
** {
|
** {
|
||||||
|
|
||||||
flags startcat = Phr ; unlexer=unwords ; lexer=words ;
|
flags startcat = Phr ; unlexer=unwords ; lexer=words ;
|
||||||
|
|||||||
@@ -3,13 +3,13 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
|
|||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
DetCN det cn = {
|
DetCN det cn = { s = \\_ =>
|
||||||
s = \\_ => case <det.isNum,det.fromPron> of {
|
case <det.isNum,det.fromPron> of {
|
||||||
<False,True> => cn.s ! aEzafa ! det.n ++ det.s ; -- det.n ;
|
<False,True> => cn.s ! aEzafa ! det.n ++ det.s ;
|
||||||
<False,False> => det.s ++ cn.s ! bEzafa ! det.n ; -- det.n ;
|
<False,False> => det.s ++ cn.s ! bEzafa ! det.n ;
|
||||||
<True,True> => cn.s ! aEzafa ! Sg ++ det.s ;
|
<True,True> => cn.s ! aEzafa ! Sg ++ det.s ; -- noun modified by a number is invariably singular
|
||||||
<True,False> => det.s ++ cn.s ! bEzafa ! Sg
|
<True,False> => det.s ++ cn.s ! bEzafa ! Sg
|
||||||
};
|
};
|
||||||
a = agrPesP3 det.n ;
|
a = agrPesP3 det.n ;
|
||||||
animacy = cn.animacy
|
animacy = cn.animacy
|
||||||
} ;
|
} ;
|
||||||
@@ -17,42 +17,34 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
|
|||||||
UsePN pn = {s = \\_ => pn.s ; a = agrPesP3 Sg ; animacy = pn.animacy } ;
|
UsePN pn = {s = \\_ => pn.s ; a = agrPesP3 Sg ; animacy = pn.animacy } ;
|
||||||
UsePron p = {s = \\_ => p.s ; a = p.a ; animacy = Animate} ;
|
UsePron p = {s = \\_ => p.s ; a = p.a ; animacy = Animate} ;
|
||||||
|
|
||||||
PredetNP pred np = {
|
PredetNP pred np = np ** {
|
||||||
s = \\ez => pred.s ++ np.s ! ez ;
|
s = \\ez => pred.s ++ np.s ! ez
|
||||||
a = np.a;
|
|
||||||
animacy = np.animacy
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PPartNP np v2 = {
|
PPartNP np v2 = np ** {
|
||||||
s = \\ez => np.s ! ez ++ partNP (v2.s ! Root1) ;
|
s = \\ez => np.s ! ez ++ partNP (v2.s ! Root1)
|
||||||
a = np.a ;
|
|
||||||
animacy = np.animacy
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
RelNP np rs = {
|
RelNP np rs = np ** {
|
||||||
s = \\ez => np.s ! ez ++ rs.s ! np.a ;
|
s = \\ez => np.s ! ez ++ rs.s ! np.a
|
||||||
a = np.a ;
|
|
||||||
animacy = np.animacy
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvNP np adv = {
|
AdvNP np adv = np ** {
|
||||||
s = \\ez => np.s ! NPC aEzafa ++ adv.s ;
|
s = \\ez => np.s ! NPC aEzafa ++ adv.s
|
||||||
a = np.a ;
|
|
||||||
animacy = np.animacy
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetQuantOrd quant num ord = {
|
DetQuantOrd quant num ord = {
|
||||||
s = quant.s ! num.n ++ num.s ++ ord.s ;
|
s = quant.s ! num.n ++ num.s ++ ord.s ;
|
||||||
isNum = True;
|
isNum = orB num.isNum ord.isNum ;
|
||||||
fromPron = quant.fromPron ;
|
fromPron = quant.fromPron ;
|
||||||
n = num.n
|
n = num.n
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetQuant quant num = {
|
DetQuant quant num = {
|
||||||
s = quant.s ! num.n ++ num.s;
|
s = quant.s ! num.n ++ num.s;
|
||||||
isNum = True ; -- this does not work in case of 'these women' but works in case of 'five women'
|
isNum = num.isNum;
|
||||||
fromPron = quant.fromPron ;
|
fromPron = quant.fromPron ;
|
||||||
n = num.n
|
n = num.n
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
DetNP det = {
|
DetNP det = {
|
||||||
@@ -63,20 +55,20 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
|
|||||||
|
|
||||||
PossPron p = {s = \\_ => p.ps ; a = p.a ; fromPron = True} ;
|
PossPron p = {s = \\_ => p.ps ; a = p.a ; fromPron = True} ;
|
||||||
|
|
||||||
NumSg = {s = [] ; n = Sg} ;
|
NumSg = {s = [] ; n = Sg ; isNum = False} ;
|
||||||
NumPl = {s = [] ; n = Pl} ;
|
NumPl = {s = [] ; n = Pl ; isNum = False} ;
|
||||||
-- from here
|
-- from here
|
||||||
NumCard n = n ** {hasCard = True} ;
|
NumCard n = n ** {isNum = True} ;
|
||||||
|
|
||||||
NumDigits n = {s = n.s ! NCard ; n = n.n} ;
|
NumDigits n = n ** {s = n.s ! NCard; isNum = True} ;
|
||||||
OrdDigits n = {s = n.s ! NOrd; n = n.n} ;
|
OrdDigits n = n ** {s = n.s ! NOrd ; isNum = True} ;
|
||||||
|
|
||||||
NumNumeral numeral = {s = numeral.s ! NCard; n = numeral.n} ;
|
NumNumeral n = n ** {s = n.s ! NCard; isNum = True} ;
|
||||||
OrdNumeral numeral = {s = numeral.s ! NOrd ; n = numeral.n} ;
|
OrdNumeral n = n ** {s = n.s ! NOrd ; isNum = True} ;
|
||||||
-- to here
|
-- to here
|
||||||
AdNum adn num = {s = adn.s ++ num.s ; n = num.n} ;
|
AdNum adn num = num ** {s = adn.s ++ num.s} ;
|
||||||
|
|
||||||
OrdSuperl a = {s = a.s ! bEzafa ++ taryn; n = Sg} ; -- check the form of adjective
|
OrdSuperl a = {s = a.s ! bEzafa ++ taryn; n = Sg ; isNum=False} ; -- check the form of adjective
|
||||||
|
|
||||||
DefArt = {s = \\_ => [] ; a = defaultAgrPes ; fromPron = False} ;
|
DefArt = {s = \\_ => [] ; a = defaultAgrPes ; fromPron = False} ;
|
||||||
IndefArt = {s = table { Sg => IndefArticle ; Pl => []} ; a =defaultAgrPes ; fromPron = False} ;
|
IndefArt = {s = table { Sg => IndefArticle ; Pl => []} ; a =defaultAgrPes ; fromPron = False} ;
|
||||||
@@ -111,7 +103,7 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
|
|||||||
s = \\ez,n => f.s ! ez ! n ++ f.c ++ x.s ! NPC ez ;
|
s = \\ez,n => f.s ! ez ! n ++ f.c ++ x.s ! NPC ez ;
|
||||||
animacy = f.animacy;
|
animacy = f.animacy;
|
||||||
definitness = True
|
definitness = True
|
||||||
};
|
};
|
||||||
ComplN3 f x = {
|
ComplN3 f x = {
|
||||||
s = \\ez,n => f.s ! ez ! n ++ f.c2 ++ x.s ! NPC ez ;
|
s = \\ez,n => f.s ! ez ! n ++ f.c2 ++ x.s ! NPC ez ;
|
||||||
c = f.c3;
|
c = f.c3;
|
||||||
@@ -119,22 +111,18 @@ concrete NounPes of Noun = CatPes ** open ResPes, Prelude in {
|
|||||||
definitness = True;
|
definitness = True;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdjCN ap cn = {
|
AdjCN ap cn = cn ** {
|
||||||
s = \\ez,n => cn.s ! aEzafa ! n ++ ap.s ! ez; -- check the form of adjective and also cn.s!ez!n changed from cn.s!aEzafa!n to have correct enclicitic form other wise it creats wrong enclictic form of old man
|
s = \\ez,n => cn.s ! aEzafa ! n ++ ap.s ! ez -- check the form of adjective and also cn.s!ez!n changed from cn.s!aEzafa!n to have correct enclicitic form other wise it creats wrong enclictic form of old man
|
||||||
animacy = cn.animacy ;
|
|
||||||
definitness = cn.definitness
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
RelCN cn rs = {
|
RelCN cn rs = cn ** {
|
||||||
s = \\ez,n => cn.s ! enClic ! n ++ rs.s ! agrPesP3 n ;
|
s = \\ez,n => cn.s ! enClic ! n ++ rs.s ! agrPesP3 n ;
|
||||||
animacy = cn.animacy ;
|
|
||||||
definitness = cn.definitness
|
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvCN cn ad = {s = \\ez,n => cn.s ! aEzafa ! n ++ ad.s ; animacy = cn.animacy ; definitness = cn.definitness} ;
|
AdvCN cn ad = cn ** {s = \\ez,n => cn.s ! aEzafa ! n ++ ad.s} ;
|
||||||
|
|
||||||
SentCN cn sc = {s = \\ez,n => cn.s ! ez ! n ++ sc.s ; animacy = cn.animacy ; definitness = cn.definitness} ;
|
SentCN cn sc = cn ** {s = \\ez,n => cn.s ! ez ! n ++ sc.s} ;
|
||||||
|
|
||||||
ApposCN cn np = {s = \\ez,n => cn.s ! ez ! n ++ np.s ! NPC aEzafa ; animacy = cn.animacy ; definitness = True} ; -- ezafa form of city to be used
|
ApposCN cn np = cn ** {s = \\ez,n => cn.s ! ez ! n ++ np.s ! NPC aEzafa ; definitness = True} ; -- ezafa form of city to be used
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--# -path=.:../abstract:../../prelude:../common
|
--# -path=.:../abstract:../prelude:../common
|
||||||
--
|
--
|
||||||
----1 Pnbu Lexical Paradigms
|
----1 Persian Lexical Paradigms
|
||||||
|
|
||||||
resource ParadigmsPes = open
|
resource ParadigmsPes = open
|
||||||
Predef,
|
Predef,
|
||||||
@@ -23,14 +23,26 @@ oper
|
|||||||
singular = Sg ; plural = Pl;
|
singular = Sg ; plural = Pl;
|
||||||
|
|
||||||
animate = Animate ; inanimate = Inanimate ; --i
|
animate = Animate ; inanimate = Inanimate ; --i
|
||||||
mkN01 : Str -> Animacy -> Noun ;
|
mkN01 : (sg : Str) -> Animacy -> Noun ; -- Takes singular form and animacy, forms plural with ها
|
||||||
mkN01 str ani = mkN str (str ++ "ها") ani;
|
mkN01 sg ani =
|
||||||
mkN02 : Str -> Animacy -> Noun ;
|
let pl = zwnj sg "ها" ; -- Using zero-width non-joiner, defined in ResPes
|
||||||
mkN02 str ani = case (last str) of {
|
in MorphoPes.mkN sg pl ani ;
|
||||||
"ه" => mkN str ((init str) + "گان") ani ;
|
|
||||||
("ا"|"و") => mkN str (str + "یان") ani ;
|
mkN02 : (sg : Str) -> Animacy -> Noun ; -- Takes singular form and animacy, pattern matches singular and forms plural with either گان, یان or ان
|
||||||
_ => mkN str (str+"ان") ani
|
mkN02 str ani = case last str of {
|
||||||
|
"ه" => MorphoPes.mkN str (init str + "گان") ani ;
|
||||||
|
("ا"|"و") => MorphoPes.mkN str (str + "یان") ani ;
|
||||||
|
_ => MorphoPes.mkN str (str + "ان") ani
|
||||||
};
|
};
|
||||||
|
|
||||||
|
mkN = overload {
|
||||||
|
mkN : (sg : Str) -> N -- Takes singular form, returns an inanimate noun with ها as the plural form
|
||||||
|
= \sg -> mkN01 sg inanimate ;
|
||||||
|
mkN : (sg,pl : Str) -> N -- Takes singular and plural form, returns an inanimate noun
|
||||||
|
= \sg,pl -> MorphoPes.mkN sg pl inanimate ;
|
||||||
|
mkN : (sg,pl : Str) -> Animacy -> N -- Worst-case constructor: takes singular and plural forms and animacy
|
||||||
|
= \sg,pl,ani -> MorphoPes.mkN sg pl ani
|
||||||
|
} ;
|
||||||
{-
|
{-
|
||||||
|
|
||||||
--2 Nouns
|
--2 Nouns
|
||||||
@@ -44,21 +56,20 @@ oper
|
|||||||
-}
|
-}
|
||||||
-- Compound Nouns
|
-- Compound Nouns
|
||||||
|
|
||||||
mkCmpdNoun1 : Str -> N -> N
|
mkCmpdNoun1 : Str -> N -> N
|
||||||
= \s,noun -> {s =\\ez,n => s ++ noun.s ! ez ! n ; animacy = noun.animacy ; definitness = noun.definitness ; lock_N = <>};
|
= \s,noun -> noun ** {s =\\ez,n => s ++ noun.s ! ez ! n};
|
||||||
mkCmpdNoun2 : N -> Str -> N
|
mkCmpdNoun2 : N -> Str -> N
|
||||||
= \noun,s -> {s =\\ez,n => noun.s ! ez ! n ++ s ; animacy = noun.animacy ; definitness =noun.definitness ; lock_N = <>};
|
= \noun,s -> noun ** {s =\\ez,n => noun.s ! ez ! n ++ s};
|
||||||
|
|
||||||
|
|
||||||
-- Proper names
|
-- Proper names
|
||||||
mkPN : Str -> Animacy -> PN =
|
mkPN : Str -> Animacy -> PN
|
||||||
|
= \str,ani -> lin PN {s = str ; animacy = ani} ;
|
||||||
\str,ani -> {s = str ; animacy = ani ; lock_PN = <>} ;
|
|
||||||
|
|
||||||
|
|
||||||
-- Personal Pronouns
|
-- Personal Pronouns
|
||||||
personalPN : Str -> Number -> PPerson -> Pron =
|
personalPN : Str -> Number -> PPerson -> Pron
|
||||||
\str,nn,p -> {s = str ; a = AgPes nn p ; ps = str ; lock_Pron = <>};
|
= \str,nn,p -> lin Pron {s = str ; a = AgPes nn p ; ps = str};
|
||||||
{-
|
{-
|
||||||
-- Demonstration Pronouns
|
-- Demonstration Pronouns
|
||||||
demoPN : Str -> Str -> Str -> Quant =
|
demoPN : Str -> Str -> Str -> Quant =
|
||||||
@@ -66,11 +77,11 @@ oper
|
|||||||
-- Determiner
|
-- Determiner
|
||||||
-}
|
-}
|
||||||
mkDet = overload {
|
mkDet = overload {
|
||||||
mkDet : Str -> Number -> Det =
|
mkDet : Str -> Number -> Det
|
||||||
\s1,n -> makeDet s1 n False ** { lock_Det = <>};
|
= \s1,n -> lin Det (makeDet s1 n False);
|
||||||
mkDet : Str -> Number -> Bool -> Det =
|
mkDet : Str -> Number -> Bool -> Det
|
||||||
\s1,n,b -> makeDet s1 n b ** { lock_Det = <>};
|
= \s1,n,b -> lin Det (makeDet s1 n b)
|
||||||
};
|
};
|
||||||
{-
|
{-
|
||||||
-- Intergative pronouns
|
-- Intergative pronouns
|
||||||
mkIP : (x1,x2,x3,x4:Str) -> Number -> Gender -> IP =
|
mkIP : (x1,x2,x3,x4:Str) -> Number -> Gender -> IP =
|
||||||
@@ -82,13 +93,13 @@ oper
|
|||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
|
|
||||||
mkA = overload {
|
mkA = overload {
|
||||||
mkA : Str-> A
|
mkA : Str -> A
|
||||||
= \str -> mkAdj str str ** { lock_A = <>} ;
|
= \str -> lin A (mkAdj str str);
|
||||||
mkA : Str-> Str -> A
|
mkA : Str-> Str -> A
|
||||||
= \str,adv -> mkAdj str adv ** { lock_A = <>} ;
|
= \str,adv -> lin A (mkAdj str adv);
|
||||||
mkA : Str -> Str -> A2
|
mkA : Str -> Str -> A2
|
||||||
= \a,c -> mkAdj a a ** { c2 = c ; lock_A2 = <>} ;
|
= \a,c -> lin A2 (mkAdj a a ** {c2 = c})
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
--2 Verbs
|
--2 Verbs
|
||||||
mkV : Str -> Str -> V
|
mkV : Str -> Str -> V
|
||||||
@@ -113,26 +124,28 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkV3 : V -> Str -> Str -> V3;
|
mkV3 : V -> Str -> Str -> V3;
|
||||||
mkV3 v p q = v ** { c2 = p ; c3 = q ; lock_V3 = <>} ;
|
mkV3 v p q = lin V3 (v ** {c2 = p ; c3 = q}) ;
|
||||||
mkV2V : V -> Str -> Str -> Bool -> V2V ;
|
mkV2V : V -> Str -> Str -> Bool -> V2V ;
|
||||||
mkV2V v s1 s2 b = v ** {isAux = b ; c1 = s1 ; c2 = s2 ; lock_V2V = <>} ;
|
mkV2V v s1 s2 b = lin V2V (v ** {isAux = b ; c1 = s1 ; c2 = s2}) ;
|
||||||
|
|
||||||
-- compund verbs
|
-- compund verbs
|
||||||
compoundV = overload {
|
compoundV = overload {
|
||||||
compoundV : Str -> V -> V = \s,v -> {s = \\vf => s ++ v.s ! vf ; lock_V = <>} ;
|
compoundV : Str -> V -> V
|
||||||
compoundV : Str -> V2 -> V = \s,v -> {s = \\vf => s ++ v.s ! vf ; lock_V = <>} ;
|
= \s,v -> v ** {s = \\vf => s ++ v.s ! vf} ;
|
||||||
};
|
compoundV : Str -> V2 -> V
|
||||||
|
= \s,v -> lin V {s = \\vf => s ++ v.s ! vf} ;
|
||||||
|
};
|
||||||
|
|
||||||
invarV : Str -> V -- for verbs like " بایستن " ("must"), which don't inflect
|
invarV : Str -> V -- for verbs like " بایستن " ("must"), which don't inflect
|
||||||
= \s -> lin V {s = \\_ => s} ;
|
= \s -> lin V {s = \\_ => s} ;
|
||||||
|
|
||||||
----2 Adverbs
|
----2 Adverbs
|
||||||
mkAdv : Str -> Adv = \str -> {s = str ; lock_Adv = <>};
|
mkAdv : Str -> Adv = \str -> lin Adv {s = str} ;
|
||||||
|
|
||||||
----2 Prepositions
|
----2 Prepositions
|
||||||
|
|
||||||
mkPrep : Str -> Prep ;
|
mkPrep : Str -> Prep ;
|
||||||
mkPrep str = {s = str ; lock_Prep = <>};
|
mkPrep str = lin Prep {s = str};
|
||||||
{-
|
{-
|
||||||
--3 Determiners and quantifiers
|
--3 Determiners and quantifiers
|
||||||
|
|
||||||
@@ -186,23 +199,5 @@ oper
|
|||||||
--
|
--
|
||||||
-- V0 : Type ;
|
-- V0 : Type ;
|
||||||
-- AS, A2S, AV, A2V : Type ;
|
-- AS, A2S, AV, A2V : Type ;
|
||||||
--
|
--}
|
||||||
----.
|
|
||||||
----2 Definitions of paradigms
|
|
||||||
----
|
|
||||||
---- The definitions should not bother the user of the API. So they are
|
|
||||||
---- hidden from the document.
|
|
||||||
--
|
|
||||||
-- Gender = MorphoHin.Gender ;
|
|
||||||
-- Number = MorphoHin.Number ;
|
|
||||||
-- Case = MorphoHin.Case ;
|
|
||||||
-- human = Masc ;
|
|
||||||
-- nonhuman = Neutr ;
|
|
||||||
-- masculine = Masc ;
|
|
||||||
-- feminine = Fem ;
|
|
||||||
-- singular = Sg ;
|
|
||||||
-- plural = Pl ;
|
|
||||||
-- nominative = Nom ;
|
|
||||||
-- genitive = Gen ;
|
|
||||||
-}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -62,6 +62,10 @@ resource ResPes = ParamX ** open Prelude,Predef in {
|
|||||||
Neg => CNeg b
|
Neg => CNeg b
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
-- Zero-width non-joiner, used for certain morphemes
|
||||||
|
-- See https://en.wikipedia.org/wiki/Persian_alphabet#Word_boundaries
|
||||||
|
ZWNJ : Str = "" ;
|
||||||
|
zwnj : Str -> Str -> Str = \s1,s2 -> s1 + ZWNJ + s2 ;
|
||||||
-----------------------
|
-----------------------
|
||||||
--- Verb Phrase
|
--- Verb Phrase
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|||||||
@@ -16,19 +16,19 @@ concrete SymbolPes of Symbol = CatPes ** open Prelude, ResPes in {
|
|||||||
animacy = cn.animacy
|
animacy = cn.animacy
|
||||||
} ;
|
} ;
|
||||||
CNSymbNP det cn xs = {
|
CNSymbNP det cn xs = {
|
||||||
s = \\ez => det.s ++ cn.s ! aEzafa ! det.n ++ xs.s ;
|
s = \\ez => det.s ++ cn.s ! aEzafa ! det.n ++ xs.s ;
|
||||||
a = agrPesP3 det.n ;
|
a = agrPesP3 det.n ;
|
||||||
animacy = cn.animacy
|
animacy = cn.animacy
|
||||||
} ;
|
} ;
|
||||||
CNNumNP cn i = {
|
CNNumNP cn i = {
|
||||||
s = \\ez => cn.s ! aEzafa ! Sg ++ i.s ;
|
s = \\ez => cn.s ! aEzafa ! Sg ++ i.s ;
|
||||||
a = agrPesP3 Sg ;
|
a = agrPesP3 Sg ;
|
||||||
animacy = cn.animacy
|
animacy = cn.animacy
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
SymbS sy = sy ;
|
SymbS sy = sy ;
|
||||||
SymbNum sy = { s = sy.s ; n = Pl } ;
|
SymbNum sy = { s = sy.s ; n = Pl } ;
|
||||||
SymbOrd sy = { s = sy.s ++ "wN" ; n = Pl} ;
|
SymbOrd sy = { s = sy.s ++ "wN" ; n = Pl; isNum=False} ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
|
|
||||||
|
|||||||
@@ -41,9 +41,10 @@ concrete VerbPes of Verb = CatPes ** open ResPes in {
|
|||||||
ReflVP v = insertObjPre (\\a => reflPron ! a) v ;
|
ReflVP v = insertObjPre (\\a => reflPron ! a) v ;
|
||||||
PassV2 v = predV v ; -- need to be fixed
|
PassV2 v = predV v ; -- need to be fixed
|
||||||
CompAP ap ={s = \\_ => ap.s ! bEzafa} ; -- check form of adjective
|
CompAP ap ={s = \\_ => ap.s ! bEzafa} ; -- check form of adjective
|
||||||
CompNP np = {s = \\a => np.s ! NPC bEzafa} ;
|
|
||||||
CompAdv adv = {s = \\_ => adv.s } ;
|
CompAdv adv = {s = \\_ => adv.s } ;
|
||||||
CompCN cn = {s = \\a => cn.s ! bEzafa ! giveNumber a } ;
|
CompCN cn = {s = \\a => cn.s ! bEzafa ! giveNumber a } ;
|
||||||
|
-- IL 2019-01-31 changed bEzafa to enClic according to
|
||||||
|
-- https://sites.la.utexas.edu/persian_online_resources/nouns/noun-in-a-predicative-position/
|
||||||
|
CompNP np = {s = \\a => np.s ! NPC enClic} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user