Files
gf-core/lib/src/finnish/IdiomFin.gf

96 lines
2.7 KiB
Plaintext

concrete IdiomFin of Idiom = CatFin **
open MorphoFin, StemFin, ParadigmsFin, Prelude in {
flags optimize=all_subs ; coding=utf8;
lin
ExistNP np =
let
cas : Polarity -> NPForm = \p -> case p of {
Pos => NPSep ; -- on olemassa luku
Neg => NPCase Part -- ei ole olemassa lukua
}
in
mkClause noSubj (agrP3 Sg) (insertObj
(\\_,b,_ => "olemassa" ++ np.s ! cas b) (predV olla)) ;
ExistIP ip =
let
cas : SubjCase = SCNom ; ---- also partitive in Extra
vp = insertObj (\\_,b,_ => "olemassa") (predV olla) ;
cl = mkClause (subjForm (ip ** {isPron = False ; a = agrP3 ip.n}) cas) (agrP3 ip.n) vp
in {
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
} ;
-- Notice the nominative in the cleft $NP$: "se on Matti josta Liisa pitää"
CleftNP np rs = mkClause (\_ -> "se") (agrP3 Sg)
(insertExtrapos (rs.s ! np.a)
(insertObj (\\_,_,_ => np.s ! NPSep) (predV olla))) ;
-- This gives the almost forbidden "se on Porissa kun Matti asuu".
CleftAdv ad s = mkClause (\_ -> "se") (agrP3 Sg)
(insertExtrapos ("kun" ++ s.s)
(insertObj (\\_,_,_ => ad.s) (predV olla))) ;
ImpersCl vp = mkClause noSubj (agrP3 Sg) vp ;
GenericCl vp = mkClause noSubj (agrP3 Sg) (passVP vp (casePrep nominative)) ;
ProgrVP vp =
let
inf = (sverb2verbSep vp.s).s ! Inf Inf3Iness ;
on = predV olla
in {
s = on.s ;
s2 = \\b,p,a => inf ++ vp.s2 ! b ! p ! a ;
adv = vp.adv ;
ext = vp.ext ;
vptyp = vp.vptyp ;
} ;
ImpPl1 vp =
let vps = (sverb2verbSep vp.s).s ! ImperP1Pl
in
{s = vps ++
vp.s2 ! True ! Pos ! Ag Pl P1 ++ vp.adv ! Pos ++ vp.ext
} ;
ImpP3 np vp =
let vps = (sverb2verbSep vp.s).s ! ImperP3 (verbAgr np.a).n
in
{s = np.s ! subjcase2npform vp.s.sc ++ vps ++
vp.s2 ! True ! Pos ! np.a ++ vp.adv ! Pos ++ vp.ext
} ;
SelfAdvVP vp = insertAdv (\\_ => "itse") vp ;
SelfAdVVP vp = insertAdv (\\_ => "itse") vp ;
SelfNP np = {
s = \\c => np.s ! c ++ (reflPron np.a).s ! c ;
a = np.a ;
isPron = False ; -- minun toloni --> minun itseni talo
isNeg = np.isNeg
} ;
ExistNPAdv np adv =
mkClause (\_ -> adv.s) np.a (insertObj
(\\_,b,_ => np.s ! NPSep) (predV vpVerbOlla)) ;
ExistIPAdv ip adv =
let
c = case ip.n of {Sg => Nom ; Pl => Part} ;
cl = mkClause (\_ -> ip.s ! NPCase c ++ adv.s) (agrP3 Sg) -- kuka täällä on ; keitä täällä on
(predV vpVerbOlla) ;
in {
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
} ;
oper
olla = vpVerbOlla ;
noSubj : Polarity -> Str = \_ -> [] ;
}