forked from GitHub/gf-rgl
Add some extensions needed by UDTranslateFin
This commit is contained in:
89
src/finnish/ExtendFin.gf
Normal file
89
src/finnish/ExtendFin.gf
Normal file
@@ -0,0 +1,89 @@
|
||||
--# -path=.:../common:../abstract
|
||||
|
||||
concrete ExtendFin of Extend =
|
||||
CatFin ** ExtendFunctor - [VPI2,VPS2,MkVPS2,ConjVPS2,ComplVPS2,MkVPI2,ConjVPI2,ComplVPI2,ComplVPIVV]
|
||||
with
|
||||
(Grammar = GrammarFin) **
|
||||
|
||||
open
|
||||
GrammarFin,
|
||||
ResFin,
|
||||
(S=StemFin),
|
||||
IdiomFin,
|
||||
Coordination,
|
||||
Prelude,
|
||||
MorphoFin,
|
||||
ParadigmsFin in {
|
||||
|
||||
|
||||
lincat
|
||||
VPS = {s : Agr => Str } ;
|
||||
[VPS] = {s1,s2 : Agr => Str } ;
|
||||
VPI = {s : VVType => Agr => Str ; sc : SubjCase } ; -- Agr needed for possessive suffix:
|
||||
[VPI] = {s1,s2 : VVType => Agr => Str ; sc : SubjCase } ; -- e.g. toivon nukkuva+ni
|
||||
|
||||
lin
|
||||
BaseVPS = twoTable Agr ;
|
||||
ConsVPS = consrTable Agr comma ;
|
||||
|
||||
BaseVPI = twoTable2 VVType Agr ;
|
||||
ConsVPI = consrTable2 VVType Agr comma ;
|
||||
|
||||
MkVPS t p vp = mkVPS t p (lin VP vp) ;
|
||||
ConjVPS c xs = conjunctDistrTable Agr c xs ;
|
||||
PredVPS np vps = {s = np.s ! npNom ++ vps.s ! np.a} ;
|
||||
|
||||
|
||||
MkVPI vp = mkVPI vp ;
|
||||
ConjVPI c xs = conjunctDistrTable2 VVType Agr c xs ;
|
||||
ComplVPIVV vv vpi =
|
||||
S.insertObj (\\_,_,a => vpi.s ! vv.vi ! a)
|
||||
(S.predV (vv ** {sc = case vpi.sc of {
|
||||
SCNom => vv.sc ; -- minun täytyy pestä auto
|
||||
c => c }}) -- minulla täytyy olla auto
|
||||
) ;
|
||||
|
||||
|
||||
-------- two-place verb conjunction
|
||||
|
||||
lincat
|
||||
-- Polarity needed to pick the right object case
|
||||
VPS2 = {s : Agr => Str ; c2 : Compl ; p : Polarity } ;
|
||||
[VPS2] = {s1,s2 : Agr => Str ; c2 : Compl ; p : Polarity } ;
|
||||
-- A version with
|
||||
VPI2 = {s : VVType => Agr => Str ; c2 : Compl ; sc : SubjCase } ;
|
||||
[VPI2] = {s1,s2 : VVType => Agr => Str ; c2 : Compl ; sc : SubjCase } ;
|
||||
|
||||
lin
|
||||
-- : Temp -> Pol -> VPSlash -> VPS2 ; -- has loved
|
||||
MkVPS2 t p vpsl = mkVPS t p (lin VP vpsl) ** {c2 = vpsl.c2 ; p = p.p } ;
|
||||
|
||||
-- : VPSlash -> VPI2 ; -- to love
|
||||
MkVPI2 vpsl = mkVPI (lin VP vpsl) ** {c2 = vpsl.c2} ;
|
||||
|
||||
BaseVPS2 x y = twoTable Agr x y ** {c2 = y.c2 ; p = xs.p } ; ---- just remembering the compl. case of the latter verb
|
||||
ConsVPS2 x xs = consrTable Agr comma x xs ** {c2 = xs.c2 ; p = xs.p } ;
|
||||
|
||||
BaseVPI2 x y = twoTable2 VVType Agr x y ** {c2 = y.c2} ; ---- just remembering the compl. case of the latter verb
|
||||
ConsVPI2 x xs = consrTable2 VVType Agr comma x xs ** {c2 = xs.c2} ;
|
||||
|
||||
|
||||
ConjVPS2 c xs = conjunctDistrTable Agr c xs ** {c2 = xs.c2 ; p = xs.p } ;
|
||||
ConjVPI2 c xs = conjunctDistrTable2 VVType Agr c xs ** {c2 = xs.c2 ; p = xs.p ; sc = xs.sc } ;
|
||||
|
||||
|
||||
-- appCompl : Bool -> Polarity -> Compl -> ResFin.NP -> Str
|
||||
ComplVPS2 v np = { s = \\agr => v.s ! agr ++ appCompl True v.p v.c2 np } ;
|
||||
|
||||
-- TODO: Version with variable polarity?
|
||||
ComplVPI2 v np = v ** { s = \\vt,a => v.s ! vt ! a ++ appCompl True Pos v.c2 np };
|
||||
|
||||
oper
|
||||
mkVPS : Temp -> Pol -> VP -> VPS = \tem,pol,vp -> lin VPS {
|
||||
s = \\agr => (UseCl tem pol (S.mkClause (\_ -> []) agr vp)).s } ;
|
||||
|
||||
mkVPI : VP -> VPI = \vp -> lin VPI {
|
||||
s = \\vt,agr => S.infVP vp.s.sc Pos agr vp (vvtype2infform vt) ;
|
||||
sc = vp.s.sc } ;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user