mirror of
https://github.com/GrammaticalFramework/gf-rgl.git
synced 2026-09-17 07:46:01 -06:00
added more of the Extend API
This commit is contained in:
+218
-2
@@ -3,9 +3,25 @@ concrete ExtendMlt of Extend =
|
|||||||
ComplDirectVS,
|
ComplDirectVS,
|
||||||
ComplDirectVQ,
|
ComplDirectVQ,
|
||||||
iFem_Pron, youFem_Pron, weFem_Pron, youPlFem_Pron,
|
iFem_Pron, youFem_Pron, weFem_Pron, youPlFem_Pron,
|
||||||
theyFem_Pron, youPolFem_Pron
|
theyFem_Pron, youPolFem_Pron,
|
||||||
|
MkVPS, ConjVPS, PredVPS, SQuestVPS, QuestVPS, RelVPS,
|
||||||
|
MkVPI, ConjVPI, ComplVPIVV,
|
||||||
|
MkVPS2, ConjVPS2, ComplVPS2, ReflVPS2,
|
||||||
|
MkVPI2, ConjVPI2, ComplVPI2,
|
||||||
|
BaseVPS, ConsVPS, BaseVPI, ConsVPI,
|
||||||
|
BaseVPS2, ConsVPS2, BaseVPI2, ConsVPI2,
|
||||||
|
BaseComp, ConsComp, ConjComp, BaseImp, ConsImp, ConjImp,
|
||||||
|
PresPartAP, EmbedPresPart, PastPartAP, PastPartAgentAP,
|
||||||
|
PassVPSlash, PassAgentVPSlash,
|
||||||
|
CompoundN, CompoundAP, GerundCN, GerundNP, GerundAdv,
|
||||||
|
WithoutVP, ByVP, InOrderToVP,
|
||||||
|
RNP, RNPList,
|
||||||
|
ReflRNP, ReflPron, ReflPoss, PredetRNP, AdvRNP, AdvRVP, AdvRAP,
|
||||||
|
ReflA2RNP, PossPronRNP, ConjRNP,
|
||||||
|
Base_rr_RNP, Base_nr_RNP, Base_rn_RNP, Cons_rr_RNP, Cons_nr_RNP,
|
||||||
|
AdAdV, UttAdV, PositAdVAdj
|
||||||
]
|
]
|
||||||
with (Grammar = GrammarMlt) ** open ParadigmsMlt, MorphoMlt, ResMlt in {
|
with (Grammar = GrammarMlt) ** open Prelude, Maybe, ParadigmsMlt, MorphoMlt, ResMlt in {
|
||||||
|
|
||||||
lin iFem_Pron = mkPron "jien" "i" singular P1 feminine ; --- also JIENA
|
lin iFem_Pron = mkPron "jien" "i" singular P1 feminine ; --- also JIENA
|
||||||
youFem_Pron = mkPron "int" "ek" singular P2 feminine ; --- also INTI
|
youFem_Pron = mkPron "int" "ek" singular P2 feminine ; --- also INTI
|
||||||
@@ -14,4 +30,204 @@ lin iFem_Pron = mkPron "jien" "i" singular P1 feminine ; --- also JIENA
|
|||||||
theyFem_Pron = mkPron "huma" "hom" plural P3 feminine ;
|
theyFem_Pron = mkPron "huma" "hom" plural P3 feminine ;
|
||||||
youPolFem_Pron = mkPron "int" "ek" singular P2 feminine ; --- also INTI
|
youPolFem_Pron = mkPron "int" "ek" singular P2 feminine ; --- also INTI
|
||||||
|
|
||||||
|
lincat
|
||||||
|
VPS = {s : Agr => Str} ;
|
||||||
|
[VPS] = {s1,s2 : Agr => Str} ;
|
||||||
|
VPI = {s : Agr => Str} ;
|
||||||
|
[VPI] = {s1,s2 : Agr => Str} ;
|
||||||
|
VPS2 = {s : Agr => Str ; c2 : Compl} ;
|
||||||
|
[VPS2] = {s1,s2 : Agr => Str ; c2 : Compl} ;
|
||||||
|
VPI2 = {s : Agr => Str ; c2 : Compl} ;
|
||||||
|
[VPI2] = {s1,s2 : Agr => Str ; c2 : Compl} ;
|
||||||
|
[Comp] = {s1,s2 : Agr => Str} ;
|
||||||
|
[Imp] = {s1,s2 : Polarity => Number => Str} ;
|
||||||
|
RNP = {s : Agr => Str} ;
|
||||||
|
RNPList = {s1,s2 : Agr => Str} ;
|
||||||
|
|
||||||
|
lin BaseVPS x y = {s1 = x.s ; s2 = y.s} ;
|
||||||
|
ConsVPS x xs = {
|
||||||
|
s1 = \\agr => xs.s1 ! agr ++ "," ++ xs.s2 ! agr ;
|
||||||
|
s2 = x.s
|
||||||
|
} ;
|
||||||
|
MkVPS temp pol vp = {s = \\agr => temp.s ++ pol.s ++ joinVP vp temp.t temp.a pol.p agr ++ vp.s2 ! agr} ;
|
||||||
|
ConjVPS conj xs = {s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr} ;
|
||||||
|
PredVPS np vps = {s = np.s ! NPNom ++ vps.s ! np.a} ;
|
||||||
|
|
||||||
|
lin BaseVPI x y = {s1 = x.s ; s2 = y.s} ;
|
||||||
|
ConsVPI x xs = {
|
||||||
|
s1 = \\agr => xs.s1 ! agr ++ "," ++ xs.s2 ! agr ;
|
||||||
|
s2 = x.s
|
||||||
|
} ;
|
||||||
|
MkVPI vp = {s = \\agr => infVP vp Simul Pos agr} ;
|
||||||
|
ConjVPI conj xs = {s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr} ;
|
||||||
|
ComplVPIVV vv vpi = insertObj (\\agr => vpi.s ! agr) (predV vv) ;
|
||||||
|
|
||||||
|
lin BaseVPS2 x y = {s1 = x.s ; s2 = y.s ; c2 = y.c2} ;
|
||||||
|
ConsVPS2 x xs = {
|
||||||
|
s1 = \\agr => xs.s1 ! agr ++ "," ++ xs.s2 ! agr ;
|
||||||
|
s2 = x.s ;
|
||||||
|
c2 = x.c2
|
||||||
|
} ;
|
||||||
|
MkVPS2 temp pol vp = {
|
||||||
|
s = \\agr => temp.s ++ pol.s ++ joinVP vp temp.t temp.a pol.p agr ++ vp.s2 ! agr ;
|
||||||
|
c2 = vp.c2
|
||||||
|
} ;
|
||||||
|
ConjVPS2 conj xs = {
|
||||||
|
s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr ;
|
||||||
|
c2 = xs.c2
|
||||||
|
} ;
|
||||||
|
ComplVPS2 vps np = {s = \\agr => vps.s ! agr ++ complNP vps.c2 np} ;
|
||||||
|
|
||||||
|
lin BaseVPI2 x y = {s1 = x.s ; s2 = y.s ; c2 = y.c2} ;
|
||||||
|
ConsVPI2 x xs = {
|
||||||
|
s1 = \\agr => xs.s1 ! agr ++ "," ++ xs.s2 ! agr ;
|
||||||
|
s2 = x.s ;
|
||||||
|
c2 = x.c2
|
||||||
|
} ;
|
||||||
|
MkVPI2 vp = {s = \\agr => infVP vp Simul Pos agr ; c2 = vp.c2} ;
|
||||||
|
ConjVPI2 conj xs = {
|
||||||
|
s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr ;
|
||||||
|
c2 = xs.c2
|
||||||
|
} ;
|
||||||
|
ComplVPI2 vpi np = {s = \\agr => vpi.s ! agr ++ complNP vpi.c2 np} ;
|
||||||
|
|
||||||
|
lin BaseComp x y = {s1 = x.s ; s2 = y.s} ;
|
||||||
|
ConsComp x xs = {
|
||||||
|
s1 = \\agr => xs.s1 ! agr ++ "," ++ xs.s2 ! agr ;
|
||||||
|
s2 = x.s
|
||||||
|
} ;
|
||||||
|
ConjComp conj xs = {s = \\agr => conj.s1 ++ xs.s1 ! agr ++ conj.s2 ++ xs.s2 ! agr} ;
|
||||||
|
|
||||||
|
lin BaseImp x y = {s1 = x.s ; s2 = y.s} ;
|
||||||
|
ConsImp x xs = {
|
||||||
|
s1 = \\pol,num => xs.s1 ! pol ! num ++ "," ++ xs.s2 ! pol ! num ;
|
||||||
|
s2 = x.s
|
||||||
|
} ;
|
||||||
|
ConjImp conj xs = {
|
||||||
|
s = \\pol,num => conj.s1 ++ xs.s1 ! pol ! num ++ conj.s2 ++ xs.s2 ! pol ! num
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin PresPartAP vp = {
|
||||||
|
s = \\gn => "li" ++ infVP vp Simul Pos (toAgr gn) ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
EmbedPresPart vp = {s = gerundStr vp} ;
|
||||||
|
PastPartAP vp = {
|
||||||
|
s = \\gn => pastPartStr vp gn ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
PastPartAgentAP vp np = {
|
||||||
|
s = \\gn => pastPartStr vp gn ++ prepNP prep_minn np ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
PassVPSlash vp =
|
||||||
|
insertObj (\\agr => pastPartStr vp (toGenNum agr)) CopulaVP ;
|
||||||
|
PassAgentVPSlash vp np =
|
||||||
|
insertObj (\\agr => pastPartStr vp (toGenNum agr) ++ prepNP prep_minn np) CopulaVP ;
|
||||||
|
ProgrVPSlash vp = GrammarMlt.ProgrVP (lin VP vp) ** {c2 = vp.c2} ;
|
||||||
|
|
||||||
|
lin CompoundAP n a = {
|
||||||
|
s = \\gn => n.s ! Singulative ++ a.s ! APosit gn ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
CompoundN n1 n2 = {
|
||||||
|
s = \\num => n2.s ! num ++ prep_ta.s ! Definite ++ n1.s ! Singulative ;
|
||||||
|
g = n2.g ;
|
||||||
|
hasColl = n2.hasColl ;
|
||||||
|
hasDual = n2.hasDual ;
|
||||||
|
takesPron = n2.takesPron
|
||||||
|
} ;
|
||||||
|
|
||||||
|
lin SQuestVPS np vps = {s = \\q => case q of {
|
||||||
|
QDir => vps.s ! np.a ++ np.s ! NPNom ;
|
||||||
|
QIndir => np.s ! NPNom ++ vps.s ! np.a
|
||||||
|
}} ;
|
||||||
|
QuestVPS ip vps = {s = \\_ => ip.s ++ vps.s ! agrP3 ip.n Masc} ;
|
||||||
|
RelVPS rp vps = {s = \\agr => rp.s ++ vps.s ! agr} ;
|
||||||
|
|
||||||
|
lin GerundCN vp = {
|
||||||
|
s = \\_ => gerundStr vp ;
|
||||||
|
g = Masc ;
|
||||||
|
hasColl = False ;
|
||||||
|
hasDual = False ;
|
||||||
|
takesPron = False
|
||||||
|
} ;
|
||||||
|
GerundNP vp = {
|
||||||
|
s = \\_ => gerundStr vp ;
|
||||||
|
a = agrP3 Sg Masc ;
|
||||||
|
isPron = False ;
|
||||||
|
isDefn = True
|
||||||
|
} ;
|
||||||
|
GerundAdv vp = advSS (gerundStr vp) ;
|
||||||
|
WithoutVP vp = advSS ("mingħajr" ++ gerundStr vp) ;
|
||||||
|
ByVP vp = advSS ("billi" ++ infVP vp Simul Pos (agrP3 Sg Masc)) ;
|
||||||
|
|
||||||
|
lin ReflPron = {s = \\agr => prep_lil.enclitic ! agr ++ reflPron ! toVAgr agr} ;
|
||||||
|
ReflPoss num cn = {s = \\agr => reflPossStr num cn agr} ;
|
||||||
|
PredetRNP pred rnp = {s = \\agr => pred.s ++ rnp.s ! agr} ;
|
||||||
|
AdvRNP np prep rnp = {s = \\agr => np.s ! NPAcc ++ prepRNP prep rnp agr} ;
|
||||||
|
AdvRVP vp prep rnp = insertObj (\\agr => prepRNP prep rnp agr) vp ;
|
||||||
|
AdvRAP ap prep rnp = {
|
||||||
|
s = \\gn => ap.s ! gn ++ prepRNP prep rnp (toAgr gn) ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
ReflA2RNP a2 rnp = {
|
||||||
|
s = \\gn => a2.s ! APosit gn ++ complRNP a2.c2 rnp (toAgr gn) ;
|
||||||
|
isPre = False
|
||||||
|
} ;
|
||||||
|
PossPronRNP p num cn rnp = {
|
||||||
|
s = \\_ => num.s ! NumAdj ++ cn.s ! numform2nounnum num.n ++ p.s ! Possessive ++ prep_ta.s ! Definite ++ rnp.s ! p.a ;
|
||||||
|
a = agrP3 (numform2num num.n) cn.g ;
|
||||||
|
isPron = False ;
|
||||||
|
isDefn = True
|
||||||
|
} ;
|
||||||
|
ConjRNP conj rnps = {s = \\agr => conj.s1 ++ rnps.s1 ! agr ++ conj.s2 ++ rnps.s2 ! agr} ;
|
||||||
|
Base_rr_RNP x y = {s1 = x.s ; s2 = y.s} ;
|
||||||
|
Base_nr_RNP np rnp = {s1 = \\_ => np.s ! NPAcc ; s2 = rnp.s} ;
|
||||||
|
Base_rn_RNP rnp np = {s1 = rnp.s ; s2 = \\_ => np.s ! NPAcc} ;
|
||||||
|
Cons_rr_RNP rnp rnps = {
|
||||||
|
s1 = \\agr => rnps.s1 ! agr ++ "," ++ rnps.s2 ! agr ;
|
||||||
|
s2 = rnp.s
|
||||||
|
} ;
|
||||||
|
Cons_nr_RNP np rnps = {
|
||||||
|
s1 = \\agr => rnps.s1 ! agr ++ "," ++ rnps.s2 ! agr ;
|
||||||
|
s2 = \\_ => np.s ! NPAcc
|
||||||
|
} ;
|
||||||
|
ReflPossPron = PossPron he_Pron ;
|
||||||
|
|
||||||
|
PositAdVAdj a = {s = "b'mod" ++ a.s ! APosit (GSg Masc)} ;
|
||||||
|
AdAdV ada adv = {s = ada.s ++ adv.s} ;
|
||||||
|
UttAdV adv = {s = adv.s} ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
complNP : Compl -> NP -> Str = \c,np ->
|
||||||
|
case <c.isPresent,np.isDefn> of {
|
||||||
|
<True,True> => c.s ! Definite ++ np.s ! NPCPrep ;
|
||||||
|
<True,False> => c.s ! Indefinite ++ np.s ! NPNom ;
|
||||||
|
_ => np.s ! NPNom
|
||||||
|
} ;
|
||||||
|
|
||||||
|
complRNP : Compl -> {s : Agr => Str} -> Agr -> Str = \c,rnp,agr ->
|
||||||
|
case c.isPresent of {
|
||||||
|
True => c.s ! Definite ++ rnp.s ! agr ;
|
||||||
|
False => rnp.s ! agr
|
||||||
|
} ;
|
||||||
|
|
||||||
|
prepRNP : Prep -> {s : Agr => Str} -> Agr -> Str = \prep,rnp,agr ->
|
||||||
|
prep.s ! Definite ++ rnp.s ! agr ;
|
||||||
|
|
||||||
|
reflPossStr : Num -> CN -> Agr -> Str = \num,cn,agr ->
|
||||||
|
num.s ! NumAdj ++ cn.s ! numform2nounnum num.n ++ prep_ta.enclitic ! agr ;
|
||||||
|
|
||||||
|
pastPartStr : VPSlash -> GenNum -> Str = \vp,gn ->
|
||||||
|
let agr = toAgr gn in
|
||||||
|
case exists Participle vp.v.pastPart of {
|
||||||
|
True => fromJust Participle vp.v.pastPart ! gn ++ vp.s2 ! agr ++ vp.c2.s ! Definite ;
|
||||||
|
False => (vp.v.s ! VPerf (toVAgr agr)).s1 ++ vp.s2 ! agr ++ vp.c2.s ! Definite
|
||||||
|
} ;
|
||||||
|
|
||||||
|
gerundStr : VP -> Str = \vp ->
|
||||||
|
"li" ++ infVP vp Simul Pos (agrP3 Sg Masc) ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user