mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-09-30 06:03:40 -06:00
extensions from Codex
This commit is contained in:
+116
-3
@@ -6,14 +6,21 @@ concrete ExtendAra of Extend =
|
||||
EmptyRelSlash, PredAPVP,
|
||||
ComplDirectVS, ComplDirectVQ, UttAdV, -- because of Utt
|
||||
VPS, MkVPS, PredVPS, BaseVPS, ConsVPS, ConjVPS,
|
||||
VPI, MkVPI, BaseVPI, ConsVPI, ConjVPI, ComplVPIVV,
|
||||
BaseComp, ConsComp, ConjComp,
|
||||
BaseImp, ConsImp, ConjImp,
|
||||
EmbedSSlash, AdjAsNP, GerundNP,
|
||||
PassVPSlash, ---- bogus implementation, see below
|
||||
PassAgentVPSlash, PresPartAP, PastPartAP, PastPartAgentAP, ProgrVPSlash,
|
||||
ReflPron, ReflPoss, AdvRNP, AdvRVP, AdvRAP, PossPronRNP,
|
||||
CompoundAP, GerundCN, GerundAdv, ByVP, PositAdVAdj,
|
||||
CompoundN, UseDAP, UseDAPMasc, UseDAPFem
|
||||
]
|
||||
with (Grammar=GrammarAra)
|
||||
** open
|
||||
|
||||
ResAra,
|
||||
(P=ParamX),
|
||||
Prelude,
|
||||
ParadigmsAra,
|
||||
RelativeAra,
|
||||
@@ -71,6 +78,10 @@ lin
|
||||
lincat
|
||||
VPS = {s : PerGenNum => Str} ; -- finite VP's with tense and polarity
|
||||
[VPS] = {s1,s2 : PerGenNum => Str} ;
|
||||
VPI = {s : Str} ;
|
||||
[VPI] = {s1,s2 : Str} ;
|
||||
[Comp] = {s1,s2 : AAgr => ResAra.Case => Str} ;
|
||||
[Imp] = {s1,s2 : P.Polarity => ResAra.Gender => ResAra.Number => Str} ;
|
||||
lin
|
||||
-- : Temp -> Pol -> VP -> VPS ; -- hasn't slept
|
||||
MkVPS t p vp = {
|
||||
@@ -95,11 +106,70 @@ lin
|
||||
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}}
|
||||
|
||||
MkVPI vp = {s = uttVP VPGer vp ! Masc} ;
|
||||
BaseVPI x y = {s1 = x.s ; s2 = y.s} ;
|
||||
ConsVPI x xs = {s1 = x.s ++ SOFT_BIND ++ "," ++ xs.s1 ; s2 = xs.s2} ;
|
||||
ConjVPI conj xs = {s = xs.s1 ++ conj.s2 ++ xs.s2} ;
|
||||
ComplVPIVV vv vpi = insertStr (vv.s2 ++ vpi.s) (predV vv) ;
|
||||
|
||||
BaseComp x y = {
|
||||
s1 = \\agr,cas => x.s ! agr ! cas ++ x.obj.s ;
|
||||
s2 = \\agr,cas => y.s ! agr ! cas ++ y.obj.s
|
||||
} ;
|
||||
ConsComp x xs = {
|
||||
s1 = \\agr,cas => x.s ! agr ! cas ++ x.obj.s ++ SOFT_BIND ++ "," ++ xs.s1 ! agr ! cas ;
|
||||
s2 = xs.s2
|
||||
} ;
|
||||
ConjComp conj xs = {
|
||||
s = \\agr,cas => xs.s1 ! agr ! cas ++ conj.s2 ++ xs.s2 ! agr ! cas ;
|
||||
obj = emptyObj ;
|
||||
isNP = False
|
||||
} ;
|
||||
|
||||
BaseImp x y = {s1 = x.s ; s2 = y.s} ;
|
||||
ConsImp x xs = {
|
||||
s1 = \\p,g,n => x.s ! p ! g ! n ++ SOFT_BIND ++ "," ++ xs.s1 ! p ! g ! n ;
|
||||
s2 = xs.s2
|
||||
} ;
|
||||
ConjImp conj xs = {
|
||||
s = \\p,g,n => xs.s1 ! p ! g ! n ++ conj.s2 ++ xs.s2 ! p ! g ! n
|
||||
} ;
|
||||
|
||||
|
||||
-- AR 24-02-08
|
||||
PassVPSlash vpslash = vpslash ** {s = \\pgn, vpf => vpslash.s ! pgn ! vpf} ;
|
||||
---- vpf does not have passive forms left,
|
||||
---- so this function is not possible with the current lincat of VP and VPSlash
|
||||
PassVPSlash vpslash = vpslash ** {
|
||||
s = \\pgn,vpf => case vpf of {
|
||||
VPPerf => vpslash.s ! pgn ! VPPassPerf ;
|
||||
VPImpf m => vpslash.s ! pgn ! VPPassImpf m ;
|
||||
_ => vpslash.s ! pgn ! vpf
|
||||
} ;
|
||||
obj = emptyObj ;
|
||||
c2 = accPrep ;
|
||||
agrObj = \\_ => []
|
||||
} ;
|
||||
|
||||
PassAgentVPSlash vpslash agent =
|
||||
insertStr ("مِنْ قِبَلِ" ++ agent.s ! Gen) (PassVPSlash vpslash) ;
|
||||
|
||||
PresPartAP vp = {
|
||||
s = \\h,g,n,_,_ => presentRelative ! h ! g ! n
|
||||
++ vp.s ! Per3 g n ! VPImpf Ind
|
||||
++ vp.obj.s ++ vp.pred.s ! {g = g ; n = n} ! Acc ++ vp.s2
|
||||
} ;
|
||||
|
||||
PastPartAP vpslash = {
|
||||
s = \\_,_,_,_,_ =>
|
||||
vpslash.s ! Per3 Masc ResAra.Sg ! VPPPart
|
||||
++ vpslash.obj.s ++ vpslash.s2
|
||||
} ;
|
||||
|
||||
PastPartAgentAP vpslash agent =
|
||||
let ap = PastPartAP vpslash in ap ** {
|
||||
s = \\h,g,n,d,c => ap.s ! h ! g ! n ! d ! c
|
||||
++ "مِنْ قِبَلِ" ++ agent.s ! Gen
|
||||
} ;
|
||||
|
||||
ProgrVPSlash vpslash = vpslash ;
|
||||
|
||||
---- very unsure about this as well
|
||||
CompoundN a b = b ** {
|
||||
@@ -134,4 +204,47 @@ lin UseDAPFem dap = case dap.isEmpty of {
|
||||
} ;
|
||||
False => emptyNP ** {s = dap.s ! NoHum ! Fem} } ;
|
||||
|
||||
lin ReflPoss num cn =
|
||||
DetCN (DetQuant (PossPron he_Pron) num) cn ;
|
||||
|
||||
ReflPron = lin NP (indeclNP "نَفْسِهِ" ResAra.Sg) ;
|
||||
|
||||
AdvRNP np prep rnp = AdvNP np (PrepNP prep rnp) ;
|
||||
AdvRVP vp prep rnp = AdvVP vp (PrepNP prep rnp) ;
|
||||
AdvRAP ap prep rnp = AdvAP ap (PrepNP prep rnp) ;
|
||||
|
||||
PossPronRNP pron num cn rnp =
|
||||
DetCN (DetQuant (PossPron pron) num)
|
||||
(PossNP cn rnp) ;
|
||||
|
||||
GerundCN vp = useN {
|
||||
s = \\_,_,_ => uttVP VPGer vp ! Masc ;
|
||||
s2 = emptyNTable ;
|
||||
g = Masc ;
|
||||
h = NoHum ;
|
||||
isDual = False
|
||||
} ;
|
||||
GerundAdv vp = {s = uttVP VPGer vp ! Masc} ;
|
||||
ByVP vp = {s = "بِـ" ++ uttVP VPGer vp ! Masc} ;
|
||||
|
||||
CompoundAP n a =
|
||||
let ap = Grammar.PositA a in ap ** {
|
||||
s = \\h,g,num,d,c => ap.s ! h ! g ! num ! d ! c
|
||||
++ n.s ! ResAra.Sg ! Const ! Gen
|
||||
} ;
|
||||
|
||||
PositAdVAdj a = {s = a.s ! APosit Masc ResAra.Sg Indef Acc} ;
|
||||
|
||||
oper presentRelative : ResAra.Species => ResAra.Gender => ResAra.Number => Str = table {
|
||||
NoHum => \\_,_ => "الَّتِي" ;
|
||||
Hum => table {
|
||||
Masc => table {
|
||||
ResAra.Sg => "الَّذِي" ; Dl => "اللَّذَانِ" ; ResAra.Pl => "الَّذِينَ"
|
||||
} ;
|
||||
Fem => table {
|
||||
ResAra.Sg => "الَّتِي" ; Dl => "اللَّتَانِ" ; ResAra.Pl => "اللَّاتِي"
|
||||
}
|
||||
}
|
||||
} ;
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user