mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-28 09:28:54 -06:00
Merge branch 'master' of https://github.com/GrammaticalFramework/gf-rgl
This commit is contained in:
@@ -138,13 +138,22 @@ abstract Extend = Cat ** {
|
|||||||
-- proper structure of "it is AP to VP"
|
-- proper structure of "it is AP to VP"
|
||||||
|
|
||||||
PredAPVP : AP -> VP -> Cl ; -- it is good to walk
|
PredAPVP : AP -> VP -> Cl ; -- it is good to walk
|
||||||
PredIAdvVP : IAdv -> VP -> QCl ; -- how to walk?
|
|
||||||
|
|
||||||
-- to use an AP as CN or NP without CN
|
-- to use an AP as CN or NP without CN
|
||||||
|
|
||||||
AdjAsCN : AP -> CN ; -- a green one ; en grön (Swe)
|
AdjAsCN : AP -> CN ; -- a green one ; en grön (Swe)
|
||||||
AdjAsNP : AP -> NP ; -- green (is good)
|
AdjAsNP : AP -> NP ; -- green (is good)
|
||||||
|
|
||||||
|
-- infinitive complement for IAdv
|
||||||
|
|
||||||
|
PredIAdvVP : IAdv -> VP -> QCl ; -- how to walk?
|
||||||
|
|
||||||
|
-- alternative to EmbedQS. For English, EmbedQS happens to work,
|
||||||
|
-- because "what" introduces question and relative. The default linearization
|
||||||
|
-- could be e.g. "the thing we did (was fun)".
|
||||||
|
|
||||||
|
EmbedSSlash : SSlash -> SC ; -- what we did (was fun)
|
||||||
|
|
||||||
-- reflexive noun phrases: a generalization of Verb.ReflVP, which covers just reflexive pronouns
|
-- reflexive noun phrases: a generalization of Verb.ReflVP, which covers just reflexive pronouns
|
||||||
-- This is necessary in languages like Swedish, which have special reflexive possessives.
|
-- This is necessary in languages like Swedish, which have special reflexive possessives.
|
||||||
-- However, it is also needed in application grammars that want to treat "brush one's teeth" as a one-place predicate.
|
-- However, it is also needed in application grammars that want to treat "brush one's teeth" as a one-place predicate.
|
||||||
|
|||||||
@@ -5,7 +5,8 @@ concrete ExtendAra of Extend =
|
|||||||
GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem,
|
GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem,
|
||||||
EmptyRelSlash, PredAPVP,
|
EmptyRelSlash, PredAPVP,
|
||||||
ComplDirectVS, ComplDirectVQ, -- because of Utt
|
ComplDirectVS, ComplDirectVQ, -- because of Utt
|
||||||
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS
|
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS,
|
||||||
|
EmbedSSlash
|
||||||
]
|
]
|
||||||
with (Grammar=GrammarAra)
|
with (Grammar=GrammarAra)
|
||||||
** open
|
** open
|
||||||
@@ -46,6 +47,9 @@ lin
|
|||||||
-- : ClSlash -> RCl -- he lives in
|
-- : ClSlash -> RCl -- he lives in
|
||||||
EmptyRelSlash = RelSlash (IdRP ** {s = \\_ => []}) ;
|
EmptyRelSlash = RelSlash (IdRP ** {s = \\_ => []}) ;
|
||||||
|
|
||||||
|
-- : SSlash -> SC
|
||||||
|
EmbedSSlash = Grammar.EmbedS ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
|
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
|
||||||
[VPS] = {s1,s2 : PerGenNum => Str} ;
|
[VPS] = {s1,s2 : PerGenNum => Str} ;
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ concrete SentenceAra of Sentence = CatAra ** open
|
|||||||
|
|
||||||
-- SlashVS np vs sslash = TODO
|
-- SlashVS np vs sslash = TODO
|
||||||
|
|
||||||
EmbedS s = {s = "أَنْ" ++ s.s ! Verbal} ;
|
EmbedS s = {s = "مَا" ++ s.s ! Verbal} ;
|
||||||
EmbedQS qs = {s = qs.s ! QIndir} ;
|
EmbedQS qs = {s = qs.s ! QIndir} ;
|
||||||
EmbedVP vp = {s = uttVP VPPerf vp ! Masc} ; -- TODO: use VPGer once it's more stable
|
EmbedVP vp = {s = uttVP VPPerf vp ! Masc} ; -- TODO: use VPGer once it's more stable
|
||||||
|
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ lin
|
|||||||
FrontComplDirectVQ = variants {} ; -- NP -> VQ -> Utt -> Cl ; -- "where", she asked
|
FrontComplDirectVQ = variants {} ; -- NP -> VQ -> Utt -> Cl ; -- "where", she asked
|
||||||
PredAPVP ap vp = ImpersCl (UseComp (CompAP (SentAP ap (EmbedVP vp)))) ; -- DEFAULT it is (good to walk)
|
PredAPVP ap vp = ImpersCl (UseComp (CompAP (SentAP ap (EmbedVP vp)))) ; -- DEFAULT it is (good to walk)
|
||||||
PredIAdvVP iadv vp = QuestIAdv iadv (GenericCl vp) ; -- DEFAULT how does one walk
|
PredIAdvVP iadv vp = QuestIAdv iadv (GenericCl vp) ; -- DEFAULT how does one walk
|
||||||
|
EmbedSSlash = variants {} ; -- SSlash -> SC ; -- what we did (was fun)
|
||||||
AdjAsCN = variants {} ; -- AP -> CN ; -- a green one ; en grön (Swe)
|
AdjAsCN = variants {} ; -- AP -> CN ; -- a green one ; en grön (Swe)
|
||||||
AdjAsNP = variants {} ; -- AP -> NP ; -- green (is good)
|
AdjAsNP = variants {} ; -- AP -> NP ; -- green (is good)
|
||||||
ReflRNP = variants {} ; -- VPSlash -> RNP -> VP ; -- love my family and myself
|
ReflRNP = variants {} ; -- VPSlash -> RNP -> VP ; -- love my family and myself
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ concrete ExtendEng of Extend =
|
|||||||
FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP,
|
FocusAP, FocusAdV, FocusAdv, FocusObj, GenIP, GenModIP, GenModNP, GenNP, GenRP,
|
||||||
GerundAdv, GerundCN, GerundNP, IAdvAdv, ICompAP, InOrderToVP, MkVPS, NominalizeVPSlashNP,
|
GerundAdv, GerundCN, GerundNP, IAdvAdv, ICompAP, InOrderToVP, MkVPS, NominalizeVPSlashNP,
|
||||||
PassAgentVPSlash, PassVPSlash, PastPartAP, PastPartAgentAP, PositAdVAdj, PredVPS, PredVPSVV, PredetRNP, PrepCN,
|
PassAgentVPSlash, PassVPSlash, PastPartAP, PastPartAgentAP, PositAdVAdj, PredVPS, PredVPSVV, PredetRNP, PrepCN,
|
||||||
PredIAdvVP, PresPartAP, PurposeVP, ReflPoss, ReflPron, ReflRNP, SlashBareV2S, SlashV2V, StrandQuestSlash, StrandRelSlash,
|
EmbedSSlash, PredIAdvVP, PresPartAP, PurposeVP, ReflPoss, ReflPron, ReflRNP, SlashBareV2S, SlashV2V, StrandQuestSlash, StrandRelSlash,
|
||||||
UncontractedNeg, UttAccIP, UttAccNP, UttAdV, UttDatIP, UttDatNP, UttVPShort, WithoutVP, BaseVPS2, ConsVPS2, ConjVPS2, ComplVPS2, MkVPS2
|
UncontractedNeg, UttAccIP, UttAccNP, UttAdV, UttDatIP, UttDatNP, UttVPShort, WithoutVP, BaseVPS2, ConsVPS2, ConjVPS2, ComplVPS2, MkVPS2
|
||||||
]
|
]
|
||||||
with
|
with
|
||||||
@@ -193,6 +193,8 @@ concrete ExtendEng of Extend =
|
|||||||
|
|
||||||
PredIAdvVP iadv vp = {s = \\t,a,p,q => iadv.s ++ infVP VVInf vp False Simul CPos (agrP3 Sg)} ;
|
PredIAdvVP iadv vp = {s = \\t,a,p,q => iadv.s ++ infVP VVInf vp False Simul CPos (agrP3 Sg)} ;
|
||||||
|
|
||||||
|
EmbedSSlash s = {s = \\_ => "what" ++ s.s ++ s.c2} ;
|
||||||
|
|
||||||
NominalizeVPSlashNP vpslash np =
|
NominalizeVPSlashNP vpslash np =
|
||||||
let vp : ResEng.VP = insertObjPre (\\_ => vpslash.c2 ++ np.s ! NPAcc) vpslash ;
|
let vp : ResEng.VP = insertObjPre (\\_ => vpslash.c2 ++ np.s ! NPAcc) vpslash ;
|
||||||
a = AgP3Sg Neutr
|
a = AgP3Sg Neutr
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ concrete ExtendFin of Extend =
|
|||||||
VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS,
|
VPI2,VPS2,MkVPS,MkVPS2,ConjVPS2,ComplVPS2, ConsVPS, BaseVPS, ListVPS, VPS, ConjVPS,PredVPS,
|
||||||
MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
|
MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV
|
||||||
,ExistCN, ExistMassCN, ICompAP, ByVP
|
,ExistCN, ExistMassCN, ICompAP, ByVP
|
||||||
,CompoundN, GenNP, GenIP, AdvIsNP
|
,CompoundN, GenNP, GenIP, AdvIsNP, EmbedSSlash
|
||||||
]
|
]
|
||||||
with
|
with
|
||||||
(Grammar = GrammarFin) **
|
(Grammar = GrammarFin) **
|
||||||
@@ -149,4 +149,15 @@ lin
|
|||||||
ByVP vp = lin Adv {s = S.infVP vp.s.sc Pos (Ag Sg P3) vp Inf3Adess} ; ---- Agr ?
|
ByVP vp = lin Adv {s = S.infVP vp.s.sc Pos (Ag Sg P3) vp Inf3Adess} ; ---- Agr ?
|
||||||
|
|
||||||
AdvIsNP adv np = S.mkClause (\_ -> adv.s) np.a (UseComp (CompNP np)) ;
|
AdvIsNP adv np = S.mkClause (\_ -> adv.s) np.a (UseComp (CompNP np)) ;
|
||||||
|
|
||||||
|
-- : SSlash -> SC
|
||||||
|
EmbedSSlash ss =
|
||||||
|
let it_NP : NP = UsePron it_Pron ;
|
||||||
|
thatWhich : NP = it_NP ** {
|
||||||
|
s = \\nc => it_NP.s ! NPSep ++ case nc of {
|
||||||
|
NPCase c => mikaInt ! Sg ! c ;
|
||||||
|
NPAcc => mikaInt ! Sg ! Gen ;
|
||||||
|
NPSep => mikaInt ! Sg ! Nom }
|
||||||
|
} ;
|
||||||
|
in {s = appCompl True Pos ss.c2 thatWhich ++ ss.s} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,7 +43,8 @@ concrete AdjectivePes of Adjective = CatPes ** open ResPes, Prelude in {
|
|||||||
AdjOrd ord = {
|
AdjOrd ord = {
|
||||||
s = \\_ => ord.s ;
|
s = \\_ => ord.s ;
|
||||||
adv = ord.s ;
|
adv = ord.s ;
|
||||||
isPre = ord.isPre
|
isPre = ord.isPre ;
|
||||||
|
afterPrefix = False ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvAP ap adv = ap ** {
|
AdvAP ap adv = ap ** {
|
||||||
|
|||||||
@@ -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 ++ "از"} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ concrete CatPes of Cat = CommonX ** open ResPes, Prelude in {
|
|||||||
|
|
||||||
---- Sentence
|
---- Sentence
|
||||||
|
|
||||||
Cl = ResPes.Clause ;
|
Cl = ResPes.Clause ; -- TODO: like romance does "no tiene ningún", i.e. negative quant/det/NP forces negation in Cl and S
|
||||||
ClSlash = {
|
ClSlash = {
|
||||||
subj : Str ;
|
subj : Str ;
|
||||||
vp : ResPes.TAnt => Polarity => Order => Str ;
|
vp : ResPes.TAnt => Polarity => Order => Str ;
|
||||||
@@ -71,10 +71,15 @@ 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
|
||||||
Prep = Compl ;
|
Prep = Compl ;
|
||||||
---- Open lexical classes, e.g. Lexicon
|
---- Open lexical classes, e.g. Lexicon
|
||||||
V, VS, VQ = ResPes.Verb ;
|
V, VQ = ResPes.Verb ;
|
||||||
|
|
||||||
V2, VA, V2A, V2Q, V2S = ResPes.Verb ** {c2 : Compl} ;
|
V2, VA, V2A, V2Q, V2S = ResPes.Verb ** {c2 : Compl} ;
|
||||||
V3 = ResPes.Verb ** {c2, c3 : Compl} ;
|
V3 = ResPes.Verb ** {c2, c3 : Compl} ;
|
||||||
@@ -85,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} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ concrete ConjunctionPes of Conjunction =
|
|||||||
isCmpd : CmpdStatus;
|
isCmpd : CmpdStatus;
|
||||||
hasAdj : Bool ;
|
hasAdj : Bool ;
|
||||||
compl : Number => Str} ;
|
compl : Number => Str} ;
|
||||||
[AP] = {s1,s2 : Mod => Str ; adv : Str ; isPre : Bool} ;
|
[AP] = {s1,s2 : Mod => Str ; adv : Str ; isPre,afterPrefix : Bool} ;
|
||||||
[RS] = {s1,s2 : Agr => Str ; rp : RelPron => Str} ;
|
[RS] = {s1,s2 : Agr => Str ; rp : RelPron => Str} ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
concrete ExtendPes of Extend =
|
concrete ExtendPes of Extend =
|
||||||
CatPes ** ExtendFunctor - [
|
CatPes ** ExtendFunctor - [
|
||||||
GenNP, ApposNP, ICompAP, AdvIsNP, InOrderToVP, ByVP
|
GenNP, ApposNP, ICompAP, AdvIsNP, InOrderToVP, ByVP
|
||||||
,GerundNP,GerundCN,GerundAdv,EmbedPresPart
|
,GerundNP,GerundCN,GerundAdv,EmbedPresPart,EmbedSSlash
|
||||||
]
|
]
|
||||||
with (Grammar=GrammarPes)
|
with (Grammar=GrammarPes)
|
||||||
** open Prelude, ResPes in {
|
** open Prelude, ResPes in {
|
||||||
@@ -33,6 +33,9 @@ lin
|
|||||||
-- : VP -> SC ;
|
-- : VP -> SC ;
|
||||||
EmbedPresPart vp = lin SC {s = showVPH Inf defaultAgr vp} ;
|
EmbedPresPart vp = lin SC {s = showVPH Inf defaultAgr vp} ;
|
||||||
|
|
||||||
|
-- : SSlash -> SC
|
||||||
|
EmbedSSlash ss = {s = conjThat ++ ss.s ! Indic ++ ss.c2.s} ;
|
||||||
|
|
||||||
-- : Adv -> NP -> Cl -- here is the car / here are the cars
|
-- : Adv -> NP -> Cl -- here is the car / here are the cars
|
||||||
AdvIsNP adv np = mkClause (indeclNP adv.s ** {a = np.a}) (UseComp (CompNP np)) ;
|
AdvIsNP adv np = mkClause (indeclNP adv.s ** {a = np.a}) (UseComp (CompNP np)) ;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
@@ -76,7 +76,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
enemy_N = mkN02 "دشمن" animate;
|
enemy_N = mkN02 "دشمن" animate;
|
||||||
factory_N = mkN01 "کارخانه" inanimate;
|
factory_N = mkN01 "کارخانه" inanimate;
|
||||||
father_N2 = mkN2 (mkN02 "پدر" animate) [];
|
father_N2 = mkN2 (mkN02 "پدر" animate) [];
|
||||||
fear_VS = mkV_1 "ترسیدن";
|
fear_VS = mkVS (mkV_1 "ترسیدن") ;
|
||||||
find_V2 = mkV2 (compoundV "پیدا" doVerb) "را";
|
find_V2 = mkV2 (compoundV "پیدا" doVerb) "را";
|
||||||
fish_N = mkN01 "ماهی" animate;
|
fish_N = mkN01 "ماهی" animate;
|
||||||
floor_N = mkN01 "زمین" inanimate; -- Note: floor in persian can have 3 different translations
|
floor_N = mkN01 "زمین" inanimate; -- Note: floor in persian can have 3 different translations
|
||||||
@@ -97,7 +97,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
hat_N = mkN01 "کلاه" inanimate;
|
hat_N = mkN01 "کلاه" inanimate;
|
||||||
hear_V2 = mkV2 (mkV "شنیدن" "شنو") "را" ;
|
hear_V2 = mkV2 (mkV "شنیدن" "شنو") "را" ;
|
||||||
hill_N = mkN01 "تپه" inanimate;
|
hill_N = mkN01 "تپه" inanimate;
|
||||||
hope_VS = compoundV "امیدوار" beVerb;
|
hope_VS = mkVS (compoundV "امیدوار" beVerb) ;
|
||||||
horse_N = mkN01 "اسب" animate;
|
horse_N = mkN01 "اسب" animate;
|
||||||
hot_A = mkA "داغ" ["داغ داغ"] ;
|
hot_A = mkA "داغ" ["داغ داغ"] ;
|
||||||
house_N = mkN01 "خانه" inanimate;
|
house_N = mkN01 "خانه" inanimate;
|
||||||
@@ -106,7 +106,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
iron_N = mkN01 "آهن" inanimate;
|
iron_N = mkN01 "آهن" inanimate;
|
||||||
king_N = mkN "پادشاه" "پادشاهان" animate;
|
king_N = mkN "پادشاه" "پادشاهان" animate;
|
||||||
know_V2 = mkV2 (mkV "شناختن" "شناس") "را";
|
know_V2 = mkV2 (mkV "شناختن" "شناس") "را";
|
||||||
know_VS = (mkV_1 "دانستن") ; -- danestan -> dan ; needs explicit mkV_1
|
know_VS = mkVS (mkV_1 "دانستن") ; -- danestan -> dan ; needs explicit mkV_1
|
||||||
know_VQ = (mkV_1 "دانستن") ;
|
know_VQ = (mkV_1 "دانستن") ;
|
||||||
lake_N = mkN01 "دریاچه" inanimate;
|
lake_N = mkN01 "دریاچه" inanimate;
|
||||||
lamp_N = mkN01 "چراغ" inanimate; -- also "لامپ", but they have different usage
|
lamp_N = mkN01 "چراغ" inanimate; -- also "لامپ", but they have different usage
|
||||||
@@ -157,7 +157,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
roof_N = mkN01 "بام" inanimate; -- has variant "سقف"
|
roof_N = mkN01 "بام" inanimate; -- has variant "سقف"
|
||||||
rubber_N = mkN01 "پاککن" inanimate; -- also "لاستیک"
|
rubber_N = mkN01 "پاککن" inanimate; -- also "لاستیک"
|
||||||
run_V = mkV_1 "دویدن" ;
|
run_V = mkV_1 "دویدن" ;
|
||||||
say_VS = mkV "گفتن" "گوی" ;
|
say_VS = mkVS (mkV "گفتن" "گوی") ;
|
||||||
school_N = mkN "مدرسه" "مدارس" inanimate;
|
school_N = mkN "مدرسه" "مدارس" inanimate;
|
||||||
science_N = mkN "علم" "علوم" inanimate; -- also "دانش"
|
science_N = mkN "علم" "علوم" inanimate; -- also "دانش"
|
||||||
sea_N = mkN01 "دریا" inanimate;
|
sea_N = mkN01 "دریا" inanimate;
|
||||||
@@ -215,7 +215,7 @@ concrete LexiconPes of Lexicon = CatPes **
|
|||||||
woman_N = mkN02 "زن" animate;
|
woman_N = mkN02 "زن" animate;
|
||||||
wonder_VQ = compoundV "متعجب" beVerb ;
|
wonder_VQ = compoundV "متعجب" beVerb ;
|
||||||
wood_N = mkN01 "چوب" inanimate;
|
wood_N = mkN01 "چوب" inanimate;
|
||||||
write_V2 = mkV2 (mkV "نوشتن" "نویس") "را" ;
|
write_V2 = mkV2 (mkV "نوشتن" "نویس") ; -- would need ra with a definite object, but better rule of thumb to go without ra /NM
|
||||||
yellow_A = mkA "زرد" ;
|
yellow_A = mkA "زرد" ;
|
||||||
young_A = mkA "جوان""جوانانه" ;
|
young_A = mkA "جوان""جوانانه" ;
|
||||||
do_V2 = mkV2 (compoundV "انجام" giveVerb) "را";
|
do_V2 = mkV2 (compoundV "انجام" giveVerb) "را";
|
||||||
|
|||||||
@@ -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
|
||||||
@@ -150,7 +154,8 @@ oper
|
|||||||
Adjective : Type = {
|
Adjective : Type = {
|
||||||
s : Mod => Str ;
|
s : Mod => Str ;
|
||||||
adv : Str ;
|
adv : Str ;
|
||||||
isPre : Bool
|
isPre : Bool ; -- as attributive
|
||||||
|
afterPrefix : Bool ; -- as predicative, does it go between the prefix and the light verb
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkAdj : Str -> Str -> Adjective = \adj,adv -> {
|
mkAdj : Str -> Str -> Adjective = \adj,adv -> {
|
||||||
@@ -159,7 +164,7 @@ oper
|
|||||||
Clitic => mkEnclic adj ;
|
Clitic => mkEnclic adj ;
|
||||||
Poss => mkPossStem adj
|
Poss => mkPossStem adj
|
||||||
} ;
|
} ;
|
||||||
adv = adv ; isPre = False
|
adv = adv ; isPre = False ; afterPrefix = True ;
|
||||||
};
|
};
|
||||||
|
|
||||||
------------------------------------------------------------------
|
------------------------------------------------------------------
|
||||||
@@ -315,7 +320,8 @@ 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 ;
|
||||||
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
|
||||||
@@ -88,6 +90,7 @@ oper
|
|||||||
mkA : Str -> A ; -- Regular adjective, same form for adjective and adverb.
|
mkA : Str -> A ; -- Regular adjective, same form for adjective and adverb.
|
||||||
mkA : (adj,adv : Str) -> A -- Different forms for adjective and adverb.
|
mkA : (adj,adv : Str) -> A -- Different forms for adjective and adverb.
|
||||||
} ;
|
} ;
|
||||||
|
prefixA : A -> A ; -- Adjective that comes before the noun
|
||||||
|
|
||||||
mkA2 : (married,to : Str) -> A2 -- Takes string and complementiser, returns A2.
|
mkA2 : (married,to : Str) -> A2 -- Takes string and complementiser, returns A2.
|
||||||
= \a,c -> lin A2 (mkAdj a a ** {c2 = c}) ;
|
= \a,c -> lin A2 (mkAdj a a ** {c2 = c}) ;
|
||||||
@@ -123,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
|
||||||
@@ -139,18 +142,18 @@ 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}) ;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkVS = overload {
|
mkVS = overload {
|
||||||
mkVS : Str -> VS -- predictable verb with sentence complement
|
mkVS : Str -> VS -- predictable verb with sentence complement
|
||||||
= \s -> lin VS (regV s) ;
|
= \s -> lin VS (regV s ** {compl=subjunctive}) ;
|
||||||
mkVS : V -> VS -- VS out of a verb
|
mkVS : V -> VS -- VS out of a verb
|
||||||
= \v -> lin VS v
|
= \v -> lin VS (v ** {compl=subjunctive})
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
mkVV = overload {
|
mkVV = overload {
|
||||||
@@ -185,7 +188,7 @@ oper
|
|||||||
|
|
||||||
mkPrep = overload {
|
mkPrep = overload {
|
||||||
mkPrep : Str -> Prep -- Takes a string, returns a preposition.
|
mkPrep : Str -> Prep -- Takes a string, returns a preposition.
|
||||||
= \str -> lin Prep {s = str ; ra = [] ; mod = Bare} ;
|
= \str -> lin Prep (prepOrRa str) ;
|
||||||
mkPrep : Str -> Mod -> Prep -- Takes a string and Mod (so far only option is ezafe), returns a preposition.
|
mkPrep : Str -> Mod -> Prep -- Takes a string and Mod (so far only option is ezafe), returns a preposition.
|
||||||
= \str,m -> lin Prep {s = str ; ra = [] ; mod=m}
|
= \str,m -> lin Prep {s = str ; ra = [] ; mod=m}
|
||||||
} ;
|
} ;
|
||||||
@@ -213,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
|
||||||
@@ -245,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
|
||||||
@@ -303,6 +313,8 @@ oper
|
|||||||
= \a,c -> lin A2 (mkAdj a a ** {c2 = c})
|
= \a,c -> lin A2 (mkAdj a a ** {c2 = c})
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
prefixA a = a ** {isPre=True};
|
||||||
|
|
||||||
preA : (adj,adv : Str) -> A = \adj,adv ->
|
preA : (adj,adv : Str) -> A = \adj,adv ->
|
||||||
lin A ((mkAdj adj adv) ** {isPre=True}) ;
|
lin A ((mkAdj adj adv) ** {isPre=True}) ;
|
||||||
|
|
||||||
@@ -357,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
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -67,16 +67,23 @@ resource ResPes = MorphoPes ** open Prelude,Predef in {
|
|||||||
-----------------------
|
-----------------------
|
||||||
param
|
param
|
||||||
VVType = NoVV | FullVV | DefVV ;
|
VVType = NoVV | FullVV | DefVV ;
|
||||||
VVForm = Indic | Subj ;
|
VVForm = Indic | Subj ; ---| SubjPast ; -- TODO extend this to VV, VS and Subj
|
||||||
VVTense = VVPres | VVPerf | VVPast ; -- VVPast Anteriority ???
|
VVTense = VVPres | VVPast VVForm ;
|
||||||
TAnt = TA Tense Anteriority ;
|
TAnt = TA Tense Anteriority ;
|
||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
-- TODO: all forms
|
-- VVPast Subj is another possibility, used in constructions such as
|
||||||
ta2vvt : TAnt -> VVTense = \ta -> case ta of {
|
-- قاتل نمی توانسته آنجا بوده باشد، چون او آن زمان در پاریس بوده
|
||||||
TA Pres Anter => VVPerf ;
|
-- The form is created in complVV, but not currently used in other functions. /IL
|
||||||
TA Past _ => VVPast ;
|
ta2vvt : TAnt -> VVType -> VVTense = \ta,vvtype -> case ta of {
|
||||||
|
TA Pres Anter |
|
||||||
|
TA Past _ => VVPast Indic ;
|
||||||
|
TA Cond Simul => VVPres ;
|
||||||
|
TA Cond Anter =>
|
||||||
|
case vvtype of {
|
||||||
|
DefVV => VVPast Indic ;
|
||||||
|
_ => VVPres } ;
|
||||||
_ => VVPres } ;
|
_ => VVPres } ;
|
||||||
|
|
||||||
VV : Type = Verb ** {
|
VV : Type = Verb ** {
|
||||||
@@ -95,21 +102,19 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
showVPH = overload {
|
showVPH = overload {
|
||||||
showVPH : VerbForm -> Agr -> VPH -> Str = showVPH' VVPres ;
|
showVPH : VerbForm -> Agr -> VPH -> Str = showVPH' False VVPres ;
|
||||||
showVPH : VVTense -> VerbForm -> Agr -> VPH -> Str = showVPH'
|
showVPH : VVTense -> VerbForm -> Agr -> VPH -> Str = showVPH' False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
showVPH' : VVTense -> VerbForm -> Agr -> VPH -> Str =
|
showVPH' : Bool -> VVTense -> VerbForm -> Agr -> VPH -> Str =
|
||||||
\ant,vf,agr,vp -> vp.ad ++ vp.comp ! agr ++ vp.obj
|
\showImpPref,ant,vf,agr,vp ->
|
||||||
++ vp.prefix ++ vp.s ! vf
|
let impPref = case showImpPref of {
|
||||||
|
True => vp.s ! ImpPrefix Pos ;
|
||||||
|
False => [] }
|
||||||
|
in vp.ad ++ vp.comp ! agr ++ vp.obj
|
||||||
|
++ vp.prefix ++ impPref ++ vp.s ! vf
|
||||||
++ vp.vComp ! agr ! ant ++ vp.embComp ;
|
++ vp.vComp ! agr ! ant ++ vp.embComp ;
|
||||||
|
|
||||||
-- 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.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 ; mod : Mod} ;
|
Compl : Type = {s : Str ; ra : Str ; mod : Mod} ;
|
||||||
|
|
||||||
VPHSlash : Type = VPH ** {
|
VPHSlash : Type = VPH ** {
|
||||||
@@ -131,18 +136,22 @@ oper
|
|||||||
predVc : (Verb ** {c2 : Compl}) -> VPHSlash = \verb ->
|
predVc : (Verb ** {c2 : Compl}) -> VPHSlash = \verb ->
|
||||||
predV verb ** vs verb.c2 ;
|
predV verb ** vs verb.c2 ;
|
||||||
|
|
||||||
passV : Verb -> VPH = \v -> predV v ** {
|
passV : Verb -> VPH = \v -> passVP (predV v) ;
|
||||||
|
|
||||||
|
passVP : VPH -> VPH = \vp -> vp ** {
|
||||||
s = becomeVerb.s ;
|
s = becomeVerb.s ;
|
||||||
prefix = case v.passive of {
|
prefix = case vp.passive of {
|
||||||
Add => v.s ! PerfStem ++ v.prefix ;
|
Add => vp.s ! PerfStem ++ vp.prefix ;
|
||||||
Replace => v.prefix
|
Replace => vp.prefix
|
||||||
} ;
|
} ;
|
||||||
} ;
|
} ;
|
||||||
-- ---------------------
|
-- ---------------------
|
||||||
-- 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
|
||||||
@@ -159,7 +168,6 @@ oper
|
|||||||
insertVV : VV -> VPH -> VPH = \vv,vp -> predV vv ** {
|
insertVV : VV -> VPH -> VPH = \vv,vp -> predV vv ** {
|
||||||
vComp = \\a,t => vp.vComp ! a ! t ++ complVV vv vp ! a ! t ;
|
vComp = \\a,t => vp.vComp ! a ! t ++ complVV vv vp ! a ! t ;
|
||||||
vvtype = case vv.isDef of {True => DefVV ; _ => FullVV} ;
|
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 ** {
|
embComp : Str -> VPH -> VPH = \str,vp -> vp ** {
|
||||||
@@ -181,15 +189,15 @@ oper
|
|||||||
\\agr,ant => if_then_Str vv.isAux conjThat [] ++
|
\\agr,ant => if_then_Str vv.isAux conjThat [] ++
|
||||||
case <ant,vv.isDef,vv.compl> of {
|
case <ant,vv.isDef,vv.compl> of {
|
||||||
-- Auxiliaries with defective inflection: complement inflects in tense
|
-- Auxiliaries with defective inflection: complement inflects in tense
|
||||||
<VVPast,True,_> => showVPHvv (VPast Pos agr) agr vp ;
|
<VVPast Indic,True,> => showVPH' True VVPres (VPast Pos agr) agr vp ;
|
||||||
-- <VVPast Anter> => showVPH PerfStem agr vp ++ pluperfAux Pos agr ; -- TODO do we need this?
|
<VVPast Indic,_,_> => showVPH (VPast Pos agr) agr vp ;
|
||||||
<VVPerf,True,_> => showVPHvv PerfStem agr vp ++ subjAux Pos agr ;
|
<VVPast Subj> => showVPH PerfStem agr vp ++ subjAux Pos agr ;
|
||||||
|
|
||||||
-- Auxiliaries that take indicative (full or defective inflection)
|
-- Auxiliaries that take indicative (full or defective inflection)
|
||||||
<VVPres,_,Indic> => showVPHvv (VAor Pos agr) agr vp ;
|
<VVPres,_,Indic> => showVPH (VAor Pos agr) agr vp ;
|
||||||
|
|
||||||
-- Default: complement in subjunctive
|
-- Default: complement in subjunctive
|
||||||
_ => showVPHvv (VSubj Pos agr) agr vp ---- TODO more forms ?
|
_ => showVPH (VSubj Pos agr) agr vp
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
insertAdV : Str -> VPH -> VPH = \ad,vp -> vp ** {
|
insertAdV : Str -> VPH -> VPH = \ad,vp -> vp ** {
|
||||||
@@ -205,16 +213,15 @@ oper
|
|||||||
SlClause : Type = {quest : Order => Str ; subj : Str ; vp : TAnt => Polarity => Order => Str} ;
|
SlClause : Type = {quest : Order => Str ; subj : Str ; vp : TAnt => Polarity => Order => Str} ;
|
||||||
---- AR 18/9/2017 intermediate SClause to preserve SOV in e.g. QuestionPes.QuestSlash
|
---- AR 18/9/2017 intermediate SClause to preserve SOV in e.g. QuestionPes.QuestSlash
|
||||||
|
|
||||||
-- TODO: check the VV forms with defective verbs
|
|
||||||
clTable : VPH -> (Agr => TAnt => Polarity => Str) = \vp ->
|
clTable : VPH -> (Agr => TAnt => Polarity => Str) = \vp ->
|
||||||
\\agr,vt,pol => vp.prefix ++ case vt of {
|
\\agr,vt,pol => vp.prefix ++ case vt of {
|
||||||
TA Pres Simul => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; -- for reg. verbs, VAor pol is invariant and negation comes in ImpPrefix.
|
TA Pres Simul => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ; -- for reg. verbs, VAor pol is invariant and negation comes in ImpPrefix.
|
||||||
TA Pres Anter => vp.s ! VPerf pol agr ;
|
TA Pres Anter => vp.s ! VPerf pol agr ;
|
||||||
TA Past Simul => vp.s ! VPast pol agr ;
|
TA Past Simul => vp.s ! VPast pol agr ; -- Past Simul: simple past
|
||||||
TA Past Anter =>
|
TA Past Anter | TA Cond _ => -- Past Anter & Cond _: continuous past
|
||||||
case vp.vvtype of {
|
case vp.vvtype of {
|
||||||
DefVV => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ;
|
DefVV => vp.s ! VPast pol agr ;
|
||||||
_ => vp.s ! PerfStem ++ pluperfAux pol agr } ;
|
_ => vp.s ! ImpPrefix pol ++ vp.s ! VPast Pos agr } ;
|
||||||
TA Fut Simul =>
|
TA Fut Simul =>
|
||||||
case vp.vvtype of {
|
case vp.vvtype of {
|
||||||
DefVV => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ;
|
DefVV => vp.s ! ImpPrefix pol ++ vp.s ! VAor pol agr ;
|
||||||
@@ -223,13 +230,8 @@ oper
|
|||||||
TA Fut Anter =>
|
TA Fut Anter =>
|
||||||
case vp.vvtype of {
|
case vp.vvtype of {
|
||||||
DefVV => vp.s ! VPerf pol agr ;
|
DefVV => vp.s ! VPerf pol agr ;
|
||||||
_ => "خواسته" ++ pluperfAux pol agr ++ vp.s ! PastStem
|
_ => futAux pol agr ++ vp.s ! PastStem
|
||||||
} ; -- verb form need to be confirmed
|
}
|
||||||
TA Cond Simul => vp.s ! VSubj pol agr ;
|
|
||||||
TA Cond Anter =>
|
|
||||||
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 ->
|
mkClause : NP -> VPH -> Clause = \np,vp ->
|
||||||
@@ -243,7 +245,7 @@ oper
|
|||||||
subj = np2str np ;
|
subj = np2str np ;
|
||||||
vp = \\ta,p,ord =>
|
vp = \\ta,p,ord =>
|
||||||
let vps = clTable vp ! np.a ! ta ! p ;
|
let vps = clTable vp ! np.a ! ta ! p ;
|
||||||
vvt = ta2vvt ta ;
|
vvt = ta2vvt ta vp.vvtype ;
|
||||||
in case vp.vvtype of {
|
in case vp.vvtype of {
|
||||||
DefVV
|
DefVV
|
||||||
=> vps ++ vp.ad ++ vp.comp ! np.a ++ vp.obj
|
=> vps ++ vp.ad ++ vp.comp ! np.a ++ vp.obj
|
||||||
@@ -257,9 +259,8 @@ oper
|
|||||||
s = \\ta,p,ord =>
|
s = \\ta,p,ord =>
|
||||||
let vps = clTable vp ! agr ! ta ! p ;
|
let vps = clTable vp ! agr ! ta ! p ;
|
||||||
quest = case ord of { ODir => [] ; OQuest => "آیا" } ;
|
quest = case ord of { ODir => [] ; OQuest => "آیا" } ;
|
||||||
vvt = ta2vvt ta ;
|
vvt = ta2vvt ta vp.vvtype ;
|
||||||
in quest ++ subj ++ vp.ad ++ vp.comp ! agr ++ vp.obj
|
in quest ++ subj ++ vp.ad ++ vp.comp ! agr ++ vp.obj
|
||||||
-- in quest ++ vp.ad ++ subj ++ vp.comp ! agr ++ vp.obj -- TODO check which word order is better /IL
|
|
||||||
++ vps ++ vp.vComp ! agr ! vvt ++ vp.embComp
|
++ vps ++ vp.vComp ! agr ! vvt ++ vp.embComp
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -26,7 +26,7 @@ concrete StructuralPes of Structural = CatPes **
|
|||||||
either7or_DConj = sd2 "یا" "یا" ** {n = Sg} ;
|
either7or_DConj = sd2 "یا" "یا" ** {n = Sg} ;
|
||||||
-- everybody_NP = R.indeclNP "هر کwی";
|
-- everybody_NP = R.indeclNP "هر کwی";
|
||||||
every_Det = mkDet "هر" Sg ;
|
every_Det = mkDet "هر" Sg ;
|
||||||
-- everything_NP = R.indeclNP ["هر XE"]));
|
everything_NP = DetCN (mkDet "همه" Sg) (UseN (mkN "چیز")) ;
|
||||||
everywhere_Adv = ss ["هر جا"] ;
|
everywhere_Adv = ss ["هر جا"] ;
|
||||||
few_Det = mkDet ["تعداد کمی"] Pl True; -- check
|
few_Det = mkDet ["تعداد کمی"] Pl True; -- check
|
||||||
for_Prep = mkPrep "برای" Ezafe ;
|
for_Prep = mkPrep "برای" Ezafe ;
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ concrete SymbolPes of Symbol = CatPes ** open Prelude, ResPes in {
|
|||||||
|
|
||||||
SymbS sy = {s = \\_ => sy.s} ;
|
SymbS sy = {s = \\_ => sy.s} ;
|
||||||
SymbNum sy = {s = sy.s ; n = Pl} ;
|
SymbNum sy = {s = sy.s ; n = Pl} ;
|
||||||
SymbOrd sy = { s = sy.s ++ "wN" ; n = Pl; isNum,isPre=False} ;
|
SymbOrd sy = {s = sy.s ; n = Sg ; isNum,isPre=False} ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
|
|
||||||
|
|||||||
@@ -13,9 +13,13 @@ concrete VerbPes of Verb = CatPes ** open ResPes,Prelude in {
|
|||||||
ComplSlash = complSlash ;
|
ComplSlash = complSlash ;
|
||||||
|
|
||||||
ComplVV = insertVV ;
|
ComplVV = insertVV ;
|
||||||
ComplVS v s = embComp (conjThat ++ s.s ! Indic) (predV v) ;
|
ComplVS v s = embComp (conjThat ++ s.s ! v.compl) (predV v) ;
|
||||||
ComplVQ v q = embComp (conjThat ++ q.s) (predV v) ;
|
ComplVQ v q = embComp (conjThat ++ q.s) (predV v) ;
|
||||||
ComplVA v ap = insertObj (appComp v.c2 ap.s) (predV v) ; -- check form of adjective
|
ComplVA v ap = let adjStr = appComp v.c2 ap.s in
|
||||||
|
case ap.afterPrefix of {
|
||||||
|
True => predV (v ** {prefix = v.prefix ++ adjStr}) ;
|
||||||
|
False => insertObj adjStr (predV v) -- check form of adjective
|
||||||
|
} ;
|
||||||
|
|
||||||
SlashVV vv vps = vps ** ComplVV vv vps ;
|
SlashVV vv vps = vps ** ComplVV vv vps ;
|
||||||
SlashV2S v s = predVc v ** embComp (conjThat ++ s.s ! Indic) (predV v) ;
|
SlashV2S v s = predVc v ** embComp (conjThat ++ s.s ! Indic) (predV v) ;
|
||||||
|
|||||||
@@ -238,7 +238,7 @@ instance DiffPor of DiffRomance - [iAdvQuestionInv,chooseTA,otherInv,partAgr,sta
|
|||||||
<RCond,Simul> => <verb ! VFin VCondit n p, []> ; --# notpresent
|
<RCond,Simul> => <verb ! VFin VCondit n p, []> ; --# notpresent
|
||||||
<RCond,Anter> => <vaux ! VFin VCondit n p, part> ; --# notpresent
|
<RCond,Anter> => <vaux ! VFin VCondit n p, part> ; --# notpresent
|
||||||
<RPasse,Simul> => <verb ! VFin VPasse n p, []> ; --# notpresent
|
<RPasse,Simul> => <verb ! VFin VPasse n p, []> ; --# notpresent
|
||||||
<RPasse,Anter> => <vaux ! VFin VPasse n p, part> ; --# notpresent
|
<RPasse,Anter> => <vaux ! VFin (VPres m) n p, part> ; --# notpresent
|
||||||
<RPres,Anter> => <verb ! VFin VPasse n p, []> ; --# notpresent
|
<RPres,Anter> => <verb ! VFin VPasse n p, []> ; --# notpresent
|
||||||
<RPres,Simul> => <verb ! VFin (VPres m) n p, []>
|
<RPres,Simul> => <verb ! VFin (VPres m) n p, []>
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ concrete ExtendPor of Extend = CatPor ** ExtendRomanceFunctor -
|
|||||||
GenRP,
|
GenRP,
|
||||||
ICompAP,
|
ICompAP,
|
||||||
InOrderToVP,
|
InOrderToVP,
|
||||||
|
EmbedSSlash,
|
||||||
WithoutVP,
|
WithoutVP,
|
||||||
iFem_Pron,
|
iFem_Pron,
|
||||||
theyFem_Pron,
|
theyFem_Pron,
|
||||||
@@ -60,6 +61,9 @@ concrete ExtendPor of Extend = CatPor ** ExtendRomanceFunctor -
|
|||||||
exist_V : V ;
|
exist_V : V ;
|
||||||
exist_V = mkV "existir" ;
|
exist_V = mkV "existir" ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
EmbedSSlash s = {s = \\_ => "o que" ++ s.s ! {g = Masc ; n = Sg} ! Indic} ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english
|
CompoundN noun noun2 = { -- order is different because that's needed for correct translation from english
|
||||||
s = \\n => noun2.s ! n
|
s = \\n => noun2.s ! n
|
||||||
|
|||||||
@@ -223,7 +223,15 @@ incomplete concrete ExtendRomanceFunctor of Extend =
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
DetNPMasc = DetNP ;
|
DetNPMasc = DetNP ;
|
||||||
DetNPFem = DetNP ;
|
DetNPFem det =
|
||||||
|
let
|
||||||
|
g = Fem ;
|
||||||
|
n = det.n
|
||||||
|
in heavyNPpol det.isNeg {
|
||||||
|
s = det.sp ! g ;
|
||||||
|
a = agrP3 g n ;
|
||||||
|
hasClit = False
|
||||||
|
} ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
iFem_Pron = i_Pron ; -- DEFAULT I (masc)
|
iFem_Pron = i_Pron ; -- DEFAULT I (masc)
|
||||||
|
|||||||
@@ -158,8 +158,8 @@ instance DiffSpa of DiffRomance - [iAdvQuestionInv,otherInv,partAgr,stare_V,vpAg
|
|||||||
relPron : Bool => AAgr => Case => Str = \\b,a,c =>
|
relPron : Bool => AAgr => Case => Str = \\b,a,c =>
|
||||||
case c of {
|
case c of {
|
||||||
Nom | Acc => "que" ;
|
Nom | Acc => "que" ;
|
||||||
CPrep P_a => "cuyo" ;
|
CPrep P_de => "cuyo" ;
|
||||||
_ => prepCase c ++ "cuyo"
|
_ => prepCase c ++ "que"
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
pronSuch : AAgr => Str = aagrForms "tál" "tál" "tales" "tales" ;
|
pronSuch : AAgr => Str = aagrForms "tál" "tál" "tales" "tales" ;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ concrete ExtendSpa of Extend = CatSpa ** ExtendRomanceFunctor -
|
|||||||
CompoundAP,
|
CompoundAP,
|
||||||
CompoundN,
|
CompoundN,
|
||||||
ExistsNP,
|
ExistsNP,
|
||||||
|
EmbedSSlash,
|
||||||
GenRP,
|
GenRP,
|
||||||
GenRP,
|
GenRP,
|
||||||
IAdvAdv,
|
IAdvAdv,
|
||||||
@@ -61,6 +62,8 @@ concrete ExtendSpa of Extend = CatSpa ** ExtendRomanceFunctor -
|
|||||||
s = "qué tan" ++ adv.s
|
s = "qué tan" ++ adv.s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
EmbedSSlash s = {s = \\_ => "lo que" ++ s.s ! {g=Masc ; n=Sg} ! Indic} ;
|
||||||
|
|
||||||
ExistsNP np =
|
ExistsNP np =
|
||||||
mkClause [] True False np.a
|
mkClause [] True False np.a
|
||||||
(insertComplement (\\_ => (np.s ! Nom).ton)
|
(insertComplement (\\_ => (np.s ! Nom).ton)
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ concrete ExtendSwe of Extend = CatSwe **
|
|||||||
PassVPSlash, PassAgentVPSlash, UttVPShort, ByVP, InOrderToVP,
|
PassVPSlash, PassAgentVPSlash, UttVPShort, ByVP, InOrderToVP,
|
||||||
MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
|
MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
|
||||||
MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS,
|
MkVPS, BaseVPS, ConsVPS, ConjVPS, PredVPS,
|
||||||
ICompAP,ProDrop,
|
ICompAP,ProDrop,EmbedSSlash,
|
||||||
AdAdV, PositAdVAdj, GerundCN, GerundNP, GerundAdv, PresPartAP, PastPartAP, PastPartAgentAP,
|
AdAdV, PositAdVAdj, GerundCN, GerundNP, GerundAdv, PresPartAP, PastPartAP, PastPartAgentAP,
|
||||||
RNP, RNPList, ReflRNP, ReflPron, ReflPoss, PredetRNP, ConjRNP,
|
RNP, RNPList, ReflRNP, ReflPron, ReflPoss, PredetRNP, ConjRNP,
|
||||||
Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP,
|
Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP,
|
||||||
@@ -230,4 +230,6 @@ concrete ExtendSwe of Extend = CatSwe **
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
AdvIsNP adv np = PredVP {s = \\_ => adv.s ; a = np.a ; isPron = False} (UseComp (CompNP np)) ;
|
AdvIsNP adv np = PredVP {s = \\_ => adv.s ; a = np.a ; isPron = False} (UseComp (CompNP np)) ;
|
||||||
|
|
||||||
|
EmbedSSlash ss = {s = "det" ++ ss.s ! Main ++ ss.c2.s ++ ss.n3 ! agrUSgP3} ;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (ImpersCl (UseComp (CompAd
|
|||||||
PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePN john_PN) (ComplVA become_VA (PositA clever_A))))) NoVoc
|
PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePN john_PN) (ComplVA become_VA (PositA clever_A))))) NoVoc
|
||||||
PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePN john_PN) (ProgrVP (UseV sleep_V))))) NoVoc
|
PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (UsePN john_PN) (ProgrVP (UseV sleep_V))))) NoVoc
|
||||||
PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (ExistNPAdv (DetCN (DetQuant IndefArt NumSg) (UseN cow_N)) (PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN forest_N)))))) NoVoc
|
PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (ExistNPAdv (DetCN (DetQuant IndefArt NumSg) (UseN cow_N)) (PrepNP in_Prep (DetCN (DetQuant DefArt NumSg) (UseN forest_N)))))) NoVoc
|
||||||
PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredSCVP (EmbedQS (UseQCl (TTAnt TPast ASimul) PPos (QuestSlash whatSg_IP (SlashVP (UsePron she_Pron) (SlashV2a do_V2))))) (UseComp (CompAP (PositA important_A)))))) NoVoc
|
PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredSCVP (EmbedSSlash (UseSlash (TTAnt TPast ASimul) PPos (SlashVP (UsePron she_Pron) (SlashV2a do_V2)))) (UseComp (CompAP (PositA important_A)))))) NoVoc
|
||||||
PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredSCVP (EmbedS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron she_Pron) (UseV sleep_V)))) (AdvVP (PassV2 see_V2) (PrepNP by8agent_Prep everything_NP))))) NoVoc
|
PhrUtt NoPConj (UttS (UseCl (TTAnt TPast ASimul) PPos (PredSCVP (EmbedS (UseCl (TTAnt TPast ASimul) PPos (PredVP (UsePron she_Pron) (UseV sleep_V)))) (AdvVP (PassV2 see_V2) (PrepNP by8agent_Prep everything_NP))))) NoVoc
|
||||||
PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN man_N)) (UseComp (CompAdv here_Adv))))) NoVoc
|
PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PPos (PredVP (DetCN (DetQuant DefArt NumSg) (UseN man_N)) (UseComp (CompAdv here_Adv))))) NoVoc
|
||||||
PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestSlash (IdetCN (IdetQuant which_IQuant NumSg) (UseN book_N)) (SlashVP (UsePron youSg_Pron) (SlashV2a like_V2))))) NoVoc
|
PhrUtt NoPConj (UttQS (UseQCl (TTAnt TPres ASimul) PPos (QuestSlash (IdetCN (IdetQuant which_IQuant NumSg) (UseN book_N)) (SlashVP (UsePron youSg_Pron) (SlashV2a like_V2))))) NoVoc
|
||||||
|
|||||||
Reference in New Issue
Block a user