mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-05-27 17:08:54 -06:00
(Ara) Add new funs in ExtendAra + clean up
Remove some old exclusions, which were excluded because the necessary RGL function wasn't yet implemented in the autumn.
This commit is contained in:
@@ -2,61 +2,75 @@
|
|||||||
|
|
||||||
concrete ExtendAra of Extend =
|
concrete ExtendAra of Extend =
|
||||||
CatAra ** ExtendFunctor - [
|
CatAra ** ExtendFunctor - [
|
||||||
GenNP, SlashBareV2S, PredAPVP, GenModNP, ExistsNP,
|
GenNP, ApposNP, ICompAP, DetNPMasc, DetNPFem,
|
||||||
StrandRelSlash, ExistPluralCN, ExistMassCN, ExistCN, EmptyRelSlash, DetNPMasc, DetNPFem,
|
EmptyRelSlash, PredAPVP,
|
||||||
ComplBareVS, ComplDirectVS, ComplDirectVQ,
|
ComplDirectVS, ComplDirectVQ, -- because of Utt
|
||||||
ICompAP,
|
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS
|
||||||
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS,
|
|
||||||
ApposNP
|
|
||||||
]
|
]
|
||||||
with (Grammar=GrammarAra)
|
with (Grammar=GrammarAra)
|
||||||
** open
|
** open
|
||||||
|
|
||||||
ParamX,
|
|
||||||
ResAra,
|
ResAra,
|
||||||
Prelude,
|
Prelude,
|
||||||
|
ParadigmsAra,
|
||||||
RelativeAra,
|
RelativeAra,
|
||||||
Coordination
|
Coordination
|
||||||
|
|
||||||
in {
|
in {
|
||||||
|
|
||||||
lin
|
lin
|
||||||
GenNP np = baseQuant ** {s = \\_,_,_,_ => np.s ! Gen ; d = Const} ;
|
-- If the NP is a pronoun, just use PossPron
|
||||||
|
GenNP np = case np.a.isPron of {
|
||||||
|
True => Grammar.PossPron (pgn2pron np.a.pgn) ;
|
||||||
|
False => let g = np.s ! Gen in mkQuant3 g g g Const
|
||||||
|
} ;
|
||||||
|
|
||||||
-- : NP -> NP -> NP
|
-- : NP -> NP -> NP
|
||||||
ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ;
|
ApposNP np1 np2 = np2 ** {s = \\c => np1.s ! c ++ np2.s ! c} ;
|
||||||
|
|
||||||
-- : AP -> IComp ; -- "how old"
|
-- : AP -> IComp ; -- "how old"
|
||||||
ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ;
|
ICompAP ap = {s = \\gn => "كَمْ" ++ ap.s ! NoHum ! gn.g ! gn.n ! Indef ! Acc} ;
|
||||||
|
|
||||||
-- : ClSlash -> RCl -- he lives in
|
-- : AP -> VP -> Cl ; -- it is good to walk
|
||||||
EmptyRelSlash = RelSlash (IdRP ** {s = \\_ => []}) ;
|
PredAPVP ap vp =
|
||||||
|
let isGood : Str = "مِنَ" ++ ap.s ! Hum ! Masc ! Sg ! Def ! Gen ;
|
||||||
|
toWalk : Str = "ال" ++ BIND ++ (uttVP VPGer vp ! Masc) ; -- TODO: Masdar into NForm=>Str?
|
||||||
|
goodToWalk_Adv : Adv = lin Adv {s = isGood ++ toWalk} ;
|
||||||
|
in PredVP emptyNP (UseComp (CompAdv goodToWalk_Adv)) ;
|
||||||
|
|
||||||
lincat
|
-- : Det -> NP
|
||||||
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
|
DetNPMasc det = emptyNP ** {s = det.s ! NoHum ! Masc} ;
|
||||||
[VPS] = {s1,s2 : PerGenNum => Str} ;
|
DetNPFem det = emptyNP ** {s = det.s ! NoHum ! Fem} ;
|
||||||
lin
|
|
||||||
-- : Temp -> Pol -> VP -> VPS ; -- hasn't slept
|
|
||||||
MkVPS t p vp = {
|
|
||||||
s = \\pgn => let vps =
|
|
||||||
wordOrderNoSubj
|
|
||||||
Nominal -- Nominal (=SVO) generalises best for ConjVPS.
|
|
||||||
vp.obj.a.isPron
|
|
||||||
(vStr vp pgn t.t p.p Nominal)
|
|
||||||
vp.obj.s -- BIND is taken care of when the VP was made, no need to add one here
|
|
||||||
(pred vp pgn t.t p.p)
|
|
||||||
vp.s2
|
|
||||||
in vps.before ++ vps.after -- word order is SVO, so this is safe for just this case.
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- maybe more robust to use إِيَّا as object carrier if the VPS
|
|
||||||
-- consists of several VPSs; like it's done in Slash3V3 /IL
|
|
||||||
BaseVPS = twoTable PerGenNum ;
|
|
||||||
ConsVPS = consrTable PerGenNum comma ;
|
|
||||||
ConjVPS = conjunctDistrTable PerGenNum ;
|
|
||||||
|
|
||||||
PredVPS np vps = {
|
-- : ClSlash -> RCl -- he lives in
|
||||||
s = \\_ => np.s ! Nom ++ vps.s ! np.a.pgn -- first quick version with order always Nominal.
|
EmptyRelSlash = RelSlash (IdRP ** {s = \\_ => []}) ;
|
||||||
} ; -- if necessary, change VPS into {s : PerGenNum => Order => {before,after : Str}}
|
|
||||||
|
lincat
|
||||||
|
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
|
||||||
|
[VPS] = {s1,s2 : PerGenNum => Str} ;
|
||||||
|
lin
|
||||||
|
-- : Temp -> Pol -> VP -> VPS ; -- hasn't slept
|
||||||
|
MkVPS t p vp = {
|
||||||
|
s = \\pgn => let vps =
|
||||||
|
wordOrderNoSubj
|
||||||
|
Nominal -- Nominal (=SVO) generalises best for ConjVPS.
|
||||||
|
vp.obj.a.isPron
|
||||||
|
(vStr vp pgn t.t p.p Nominal)
|
||||||
|
vp.obj.s -- BIND is taken care of when the VP was made, no need to add one here
|
||||||
|
(pred vp pgn t.t p.p)
|
||||||
|
vp.s2
|
||||||
|
in vps.before ++ vps.after -- word order is SVO, so this is safe for just this case.
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- maybe more robust to use إِيَّا as object carrier if the VPS
|
||||||
|
-- consists of several VPSs; like it's done in Slash3V3 /IL
|
||||||
|
BaseVPS = twoTable PerGenNum ;
|
||||||
|
ConsVPS = consrTable PerGenNum comma ;
|
||||||
|
ConjVPS = conjunctDistrTable PerGenNum ;
|
||||||
|
|
||||||
|
PredVPS np vps = {
|
||||||
|
s = \\_ => np.s ! Nom ++ vps.s ! np.a.pgn -- first quick version with order always Nominal.
|
||||||
|
} ; -- if necessary, change VPS into {s : PerGenNum => Order => {before,after : Str}}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user