forked from GitHub/gf-rgl
174 lines
5.7 KiB
Plaintext
174 lines
5.7 KiB
Plaintext
concrete ExtendAfr of Extend =
|
|
CatAfr ** ExtendFunctor - [
|
|
VPS, BaseVPS, ConsVPS, MkVPS, ConjVPS, PredVPS,
|
|
VPI, BaseVPI, ConsVPI, MkVPI, ConjVPI, ComplVPIVV,
|
|
PassVPSlash, PassAgentVPSlash,
|
|
PresPartAP, PastPartAP, PastPartAgentAP, ProgrVPSlash,
|
|
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,
|
|
GenModNP, ComplBareVS, CompoundN, CompoundAP,
|
|
GerundCN, GerundNP, GerundAdv, ByVP, InOrderToVP,
|
|
ApposNP, UttVPShort, ComplSlashPartLast,
|
|
PositAdVAdj,
|
|
UseDAP, UseDAPMasc, UseDAPFem,
|
|
BaseComp, ConsComp, ConjComp, BaseImp, ConsImp, ConjImp
|
|
]
|
|
with
|
|
(Grammar = GrammarAfr) **
|
|
|
|
open
|
|
ParadigmsAfr, ResAfr, Coordination, Prelude in {
|
|
|
|
lincat
|
|
VPS = {s : Order => Agr => Str} ;
|
|
[VPS] = {s1,s2 : Order => Agr => Str} ;
|
|
VPI = {s : Agr => Str} ;
|
|
[VPI] = {s1,s2 : Agr => Str} ;
|
|
|
|
lin BaseVPS = twoTable2 Order Agr ;
|
|
ConsVPS = consrTable2 Order Agr comma ;
|
|
MkVPS tm pol vp = {
|
|
s = \\o,a => (mkClause [] a vp).s ! tm.t ! tm.a ! pol.p ! o
|
|
} ;
|
|
ConjVPS conj vps = conjunctDistrTable2 Order Agr conj vps ;
|
|
PredVPS np vps = {
|
|
s = \\o => case o of {
|
|
Main | Sub => np.s ! NPNom ++ vps.s ! o ! np.a ;
|
|
Inv => vps.s ! Inv ! np.a ++ np.s ! NPNom
|
|
}
|
|
} ;
|
|
|
|
BaseVPI = twoTable Agr ;
|
|
ConsVPI = consrTable Agr comma ;
|
|
MkVPI vp = {s = \\a => infVPString vp a} ;
|
|
ConjVPI conj vpis = conjunctDistrTable Agr conj vpis ;
|
|
ComplVPIVV vv vpi = insertInf (vpi.s ! agrP3 Sg) (predVGen vv.isAux vv) ;
|
|
|
|
lincat
|
|
RNP = {s : Agr => Str ; isPron : Bool} ;
|
|
RNPList = {s1,s2 : Agr => Str} ;
|
|
|
|
lin ReflRNP vps rnp = insertObjNP rnp.isPron (\\a => appPrep vps.c2 (\\_ => rnp.s ! a)) vps ;
|
|
ReflPron = {s = reflPron ; isPron = True} ;
|
|
ReflPoss num cn = {
|
|
s = \\a => reflPossDet a ++ num.s ++ cn.s ! Strong ! NF num.n Nom ;
|
|
isPron = False
|
|
} ;
|
|
PredetRNP pred rnp = {
|
|
s = \\a => pred.s ! a.n ! a.g ++ rnp.s ! a ;
|
|
isPron = False
|
|
} ;
|
|
AdvRNP np prep rnp = {
|
|
s = \\a => np.s ! NPAcc ++ prep.s ++ rnp.s ! a ;
|
|
isPron = False
|
|
} ;
|
|
AdvRVP vp prep rnp = insertObj (\\a => prep.s ++ rnp.s ! a) vp ;
|
|
AdvRAP ap prep rnp = {
|
|
s = \\af => ap.s ! af ++ prep.s ++ rnp.s ! agrP3 Sg ;
|
|
isPre = False
|
|
} ;
|
|
ReflA2RNP a rnp = {
|
|
s = \\af => a.s ! Posit ! af ++ a.c2 ++ rnp.s ! agrP3 Sg ;
|
|
isPre = False
|
|
} ;
|
|
PossPronRNP pron num cn rnp = heavyNP {
|
|
s = \\c => pron.unstressed.poss ++ num.s ++ cn.s ! Strong ! NF num.n Nom ++
|
|
"van" ++ rnp.s ! pron.a ;
|
|
a = agrP3 num.n
|
|
} ;
|
|
ConjRNP conj rnps = conjunctDistrTable Agr conj rnps ** {isPron = False} ;
|
|
Base_rr_RNP = twoTable Agr ;
|
|
Base_nr_RNP np rnp = twoTable Agr {s = \\_ => np.s ! NPAcc} rnp ;
|
|
Base_rn_RNP rnp np = twoTable Agr rnp {s = \\_ => np.s ! NPAcc} ;
|
|
Cons_rr_RNP = consrTable Agr comma ;
|
|
Cons_nr_RNP np rnps = consrTable Agr comma {s = \\_ => np.s ! NPAcc} rnps ;
|
|
|
|
lin GenModNP num np cn = heavyNP {
|
|
s = \\c => np.s ! NPNom ++ "se" ++ cn.s ! Strong ! NF num.n Nom ;
|
|
a = agrP3 num.n
|
|
} ;
|
|
ComplBareVS v s = insertExtrapos (s.s ! Sub) (predV v) ;
|
|
|
|
CompoundN n1 n2 = {
|
|
s = \\f => n1.s ! NF Sg Nom ++ BIND ++ n2.s ! f ;
|
|
g = n2.g
|
|
} ;
|
|
CompoundAP noun adj = {
|
|
s = \\af => noun.s ! NF Sg Nom ++ BIND ++ adj.s ! Posit ! af ;
|
|
isPre = True
|
|
} ;
|
|
|
|
PresPartAP vp = {
|
|
s = \\_ => "wat" ++ (mkClause [] (agrP3 Sg) vp).s ! Pres ! Simul ! Pos ! Sub ;
|
|
isPre = False
|
|
} ;
|
|
PastPartAP vp = {
|
|
s = \\_ => partVP vp (agrP3 Sg) ;
|
|
isPre = True
|
|
} ;
|
|
PastPartAgentAP vp np = {
|
|
s = \\_ => partVP vp (agrP3 Sg) ++ "door" ++ np.s ! NPAcc ;
|
|
isPre = False
|
|
} ;
|
|
ProgrVPSlash vp = vp ;
|
|
GerundCN vp = {
|
|
s = \\_,_ => infVPString vp (agrP3 Sg) ;
|
|
g = Neutr
|
|
} ;
|
|
GerundNP vp = heavyNP {
|
|
s = \\_ => infVPString vp (agrP3 Sg) ;
|
|
a = agrP3 Sg
|
|
} ;
|
|
GerundAdv vp = {s = "door" ++ infVPString vp (agrP3 Sg)} ;
|
|
ByVP vp = {s = "door" ++ infVPString vp (agrP3 Sg)} ;
|
|
InOrderToVP vp = {s = "om" ++ infVPString vp (agrP3 Sg)} ;
|
|
|
|
ApposNP np1 np2 = heavyNP {
|
|
s = \\c => np1.s ! c ++ "," ++ np2.s ! c ;
|
|
a = np1.a
|
|
} ;
|
|
PositAdVAdj a = {s = a.s ! Posit ! APred} ;
|
|
UttVPShort vp = {s = vp.s.s ! VInf ++ vp.n2 ! agrP3 Sg ++ vp.a2} ;
|
|
ComplSlashPartLast vps np = insertObjNP np.isPron
|
|
(\\_ => np.s ! NPAcc ++ vps.c2) (vps ** {c2 = []}) ;
|
|
|
|
UseDAP dap = heavyNP {
|
|
s = \\_ => dap.sp ! Neutr ;
|
|
a = agrP3 dap.n
|
|
} ;
|
|
UseDAPMasc = UseDAP ;
|
|
UseDAPFem = UseDAP ;
|
|
|
|
lincat [Comp] = {s1,s2 : Agr => Str} ;
|
|
lin BaseComp = twoTable Agr ;
|
|
ConsComp = consrTable Agr comma ;
|
|
ConjComp = conjunctDistrTable Agr ;
|
|
|
|
lincat [Imp] = {s1,s2 : Polarity => ImpForm => Str} ;
|
|
lin BaseImp = twoTable2 Polarity ImpForm ;
|
|
ConsImp = consrTable2 Polarity ImpForm comma ;
|
|
ConjImp = conjunctDistrTable2 Polarity ImpForm ;
|
|
|
|
-- KA: guessed from PassV2 in Afrikaans and the equivalents in Dutch
|
|
lin PassVPSlash vps =
|
|
insertInf (vps.s.s ! VPerf) (predV word_V) ;
|
|
PassAgentVPSlash vps np =
|
|
insertAdv (appPrep "door" np.s) (insertInf (vps.s.s ! VPerf) (predV word_V)) ;
|
|
|
|
oper
|
|
infVPString : ResAfr.VP -> Agr -> Str = \vp,a ->
|
|
"om" ++ vp.n0 ! a ++ vp.n2 ! a ++ vp.a2 ++ "te" ++
|
|
vp.s.s ! VInf ++ vp.inf.p1 ++ vp.ext ;
|
|
|
|
partVP : ResAfr.VP -> Agr -> Str = \vp,a ->
|
|
vp.s.s ! VPerf ++ vp.n0 ! a ++ vp.n2 ! a ++ vp.a2 ++ vp.inf.p1 ++ vp.ext ;
|
|
|
|
reflPossDet : Agr -> Str = \a -> case <a.n,a.p> of {
|
|
<Sg,P1> => "my" ; <Sg,P2> => "jou" ; <Sg,P3> => "sy" ;
|
|
<Pl,P1> => "ons" ; <Pl,P2> => "julle" ; <Pl,P3> => "hulle"
|
|
} ;
|
|
|
|
}
|