forked from GitHub/gf-core
139 lines
3.2 KiB
Plaintext
139 lines
3.2 KiB
Plaintext
-- SentenceMlt.gf: clauses and sentences
|
|
--
|
|
-- Maltese GF Resource Grammar
|
|
-- John J. Camilleri 2011 -- 2013
|
|
-- Angelo Zammit 2012
|
|
-- Licensed under LGPL
|
|
|
|
--# -path=.:abstract:common:prelude
|
|
|
|
concrete SentenceMlt of Sentence = CatMlt ** open
|
|
Prelude,
|
|
ResMlt,
|
|
ParamX in {
|
|
|
|
flags optimize=all_subs ;
|
|
|
|
lin
|
|
-- NP -> VP -> Cl
|
|
-- John walks
|
|
PredVP np vp =
|
|
let
|
|
-- subj : Str = case np.isPron of {
|
|
-- True => [] ; -- omit subject pronouns
|
|
-- False => np.s ! NPNom
|
|
-- } ;
|
|
subj : Str = np.s ! NPNom ;
|
|
in
|
|
mkClause subj np.a vp ;
|
|
|
|
-- SC -> VP -> Cl
|
|
-- that she goes is good
|
|
PredSCVP sc vp = mkClause sc.s (agrP3 Sg Masc) vp ;
|
|
|
|
-- VP -> Imp
|
|
ImpVP vp = {
|
|
-- s = \\pol,n => joinVP vp (VPImperat n) Simul pol ;
|
|
s = \\pol,n => case pol of {
|
|
Pos => (vp.v.s ! VImp n).s1 ++ vp.s2 ! agrP3 n Masc ;
|
|
Neg => (vp.v.s ! VImp n).s2 ++ BIND ++ "x" ++ vp.s2 ! agrP3 n Masc
|
|
} ;
|
|
} ;
|
|
|
|
-- NP -> VPSlash -> ClSlash
|
|
-- (whom) he sees
|
|
SlashVP np vp =
|
|
mkClause (np.s ! npNom) np.a vp ** {c2 = vp.c2} ;
|
|
|
|
-- ClSlash -> Adv -> ClSlash
|
|
-- (whom) he sees today
|
|
AdvSlash slash adv = {
|
|
s = \\t,a,p,o => slash.s ! t ! a ! p ! o ++ adv.s ;
|
|
c2 = slash.c2
|
|
} ;
|
|
|
|
-- Cl -> Prep -> ClSlash
|
|
-- (with whom) he walks
|
|
-- SlashPrep cl prep = cl ** {c2 = prep} ;
|
|
SlashPrep cl prep = cl ** {c2 = {
|
|
s = prep.s ;
|
|
enclitic = prep.enclitic ;
|
|
takesDet = prep.takesDet ;
|
|
joinsVerb = prep.joinsVerb ;
|
|
isPresent = True ;
|
|
}
|
|
} ;
|
|
|
|
-- NP -> VS -> SSlash -> ClSlash
|
|
-- (whom) she says that he loves
|
|
SlashVS np vs slash =
|
|
mkClause (np.s ! npNom) np.a
|
|
(insertObj (\\_ => conjLi ++ slash.s) (predV vs)) **
|
|
{c2 = slash.c2} ;
|
|
|
|
-- S -> SC
|
|
-- that she goes
|
|
EmbedS s = {
|
|
s = conjLi ++ s.s
|
|
} ;
|
|
|
|
-- QS -> SC
|
|
-- who goes
|
|
EmbedQS qs = {
|
|
s = qs.s ! QIndir
|
|
} ;
|
|
|
|
-- VP -> SC
|
|
-- to go
|
|
EmbedVP vp = {
|
|
s = infVP vp Simul Pos (agrP3 Sg Masc)
|
|
} ;
|
|
|
|
-- Temp -> Pol -> Cl -> S
|
|
UseCl t p cl = {
|
|
s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! ODir
|
|
} ;
|
|
|
|
-- Temp -> Pol -> QCl -> QS
|
|
UseQCl t p qcl = {
|
|
s = \\q => t.s ++ p.s ++ qcl.s ! t.t ! t.a ! p.p ! q
|
|
} ;
|
|
|
|
-- Temp -> Pol -> RCl -> RS
|
|
UseRCl t p rcl = {
|
|
s = \\r => t.s ++ p.s ++ rcl.s ! t.t ! t.a ! p.p ! r ;
|
|
-- c = cl.c
|
|
} ;
|
|
|
|
-- Temp -> Pol -> ClSlash -> SSlash
|
|
UseSlash t p clslash = {
|
|
s = t.s ++ p.s ++ clslash.s ! t.t ! t.a ! p.p ! ODir ;
|
|
c2 = clslash.c2
|
|
} ;
|
|
|
|
-- Adv -> S -> S
|
|
-- then I will go home
|
|
AdvS a s = {
|
|
s = a.s ++ s.s
|
|
} ;
|
|
|
|
-- Adv -> S -> S
|
|
-- next week, I will go home
|
|
ExtAdvS a s = {
|
|
s = a.s ++ "," ++ s.s
|
|
} ;
|
|
|
|
-- S -> Subj -> S -> S
|
|
-- I go home if she comes
|
|
SSubjS a s b = {
|
|
s = a.s ++ "," ++ s.s ++ b.s
|
|
} ;
|
|
|
|
-- S -> RS -> S
|
|
-- she sleeps, which is good
|
|
RelS s r = {
|
|
s = s.s ++ "," ++ r.s ! agrP3 Sg Masc
|
|
} ;
|
|
|
|
}
|