diff --git a/lib/src/finnish/CatFin.gf b/lib/src/finnish/CatFin.gf
index 2187a634d..2863bebdc 100644
--- a/lib/src/finnish/CatFin.gf
+++ b/lib/src/finnish/CatFin.gf
@@ -85,8 +85,8 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
V, VS, VQ = SVerb1 ;
V2, VA, V2Q, V2S = SVerb1 ** {c2 : Compl} ;
V2A = SVerb1 ** {c2, c3 : Compl} ;
- VV = SVerb1 ** {vi : InfForm} ; ---- infinitive form
- V2V = SVerb1 ** {c2 : Compl ; vi : InfForm} ; ---- infinitive form
+ VV = SVerb1 ** {vi : VVType} ; ---- infinitive form
+ V2V = SVerb1 ** {c2 : Compl ; vi : VVType} ; ---- infinitive form
V3 = SVerb1 ** {c2, c3 : Compl} ;
A = {s : Degree => SAForm => Str ; h : Harmony} ;
@@ -98,22 +98,22 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
PN = SPN ;
linref
- SSlash = \ss -> ss.s ++ ss.c2.s ! False ;
- ClSlash = \cls -> cls.s ! Pres ! Simul ! Pos ++ cls.c2.s ! False ;
- NP = \np -> np.s ! NPSep ;
+ SSlash = \ss -> ss.s ++ ss.c2.s.p1 ;
+ ClSlash = \cls -> cls.s ! Pres ! Simul ! Pos ++ cls.c2.s.p1 ;
+ NP = \np -> np.s ! NPAcc ; ----NPSep ;
VP = vpRef ;
- VPSlash = \vps -> vpRef vps ++ vps.c2.s ! False ;
+ VPSlash = \vps -> vpRef vps ++ vps.c2.s.p1 ;
V, VS, VQ, VA = \v -> vpRef (predV v) ;
- V2, V2A, V2Q, V2S = \v -> vpRef (predV v) ++ v.c2.s ! False ;
- V3 = \v -> vpRef (predV v) ++ v.c2.s ! False ++ v.c3.s ! False ;
+ V2, V2A, V2Q, V2S = \v -> vpRef (predV v) ++ v.c2.s.p1 ;
+ V3 = \v -> vpRef (predV v) ++ v.c2.s.p1 ++ v.c3.s.p1 ;
VV = \v -> vpRef (predV v) ;
- V2V = \v -> vpRef (predV v) ++ v.c2.s ! False ;
+ V2V = \v -> vpRef (predV v) ++ v.c2.s.p1 ;
Conj = \c -> c.s1 ++ c.s2 ;
oper
- vpRef : StemFin.VP -> Str = \vp -> infVP (NPCase Nom) Pos (agrP3 Sg) vp Inf1 ;
+ vpRef : StemFin.VP -> Str = \vp -> infVP SCNom Pos (agrP3 Sg) vp Inf1 ;
}
diff --git a/lib/src/finnish/ExtraFin.gf b/lib/src/finnish/ExtraFin.gf
index f3e99776c..add09502f 100644
--- a/lib/src/finnish/ExtraFin.gf
+++ b/lib/src/finnish/ExtraFin.gf
@@ -30,27 +30,27 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
} ;
lincat
- VPI = {s : InfForm => Str} ;
- [VPI] = {s1,s2 : InfForm => Str} ;
+ VPI = {s : VVType => Str} ;
+ [VPI] = {s1,s2 : VVType => Str} ;
lin
- BaseVPI = twoTable InfForm ;
- ConsVPI = consrTable InfForm comma ;
+ BaseVPI = twoTable VVType ;
+ ConsVPI = consrTable VVType comma ;
- MkVPI vp = {s = \\i => infVP (NPCase Nom) Pos (agrP3 Sg) vp i} ;
- ConjVPI = conjunctDistrTable InfForm ;
+ MkVPI vp = {s = \\i => infVP SCNom Pos (agrP3 Sg) vp (vvtype2infform i)} ;
+ ConjVPI = conjunctDistrTable VVType ;
ComplVPIVV vv vpi =
insertObj (\\_,_,_ => vpi.s ! vv.vi) (predSV vv) ;
lincat
VPS = {
s : Agr => Str ;
- sc : NPForm ; --- can be different for diff parts
+ sc : SubjCase ; --- can be different for diff parts
h : Harmony --- can be different for diff parts
} ;
[VPS] = {
s1,s2 : Agr => Str ;
- sc : NPForm ; --- take the first: minä osaan kutoa ja täytyy virkata
+ sc : SubjCase ; --- take the first: minä osaan kutoa ja täytyy virkata
h : Harmony --- take the first: osaanko minä kutoa ja käyn koulua
} ;
@@ -112,7 +112,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
IAdvPredNP iadv v np =
let cl = mkClause (\_ -> iadv.s) np.a (insertObj
- (\\_,b,_ => np.s ! v.sc) (predSV v)) ;
+ (\\_,b,_ => np.s ! subjcase2npform v.sc) (predSV v)) ;
in {
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
} ;
@@ -255,7 +255,7 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
-- advantage though: works for all V2 verbs, need not be transitive
PassAgentVPSlash vp np = {
- s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = vp.c2.c} ;
+ s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = npform2subjcase vp.c2.c} ;
s2 = \\b,p,a => np.s ! NPCase Nom ++ vp.s2 ! b ! p ! a ;
adv = vp.adv ;
ext = vp.ext ;
diff --git a/lib/src/finnish/IdiomFin.gf b/lib/src/finnish/IdiomFin.gf
index 9cac5d68e..cdedf2491 100644
--- a/lib/src/finnish/IdiomFin.gf
+++ b/lib/src/finnish/IdiomFin.gf
@@ -16,7 +16,7 @@ concrete IdiomFin of Idiom = CatFin **
ExistIP ip =
let
- cas : NPForm = NPCase Nom ; ---- also partitive in Extra
+ 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 {
@@ -61,7 +61,7 @@ concrete IdiomFin of Idiom = CatFin **
ImpP3 np vp =
let vps = (sverb2verbSep vp.s).s ! ImperP3 (verbAgr np.a).n
in
- {s = np.s ! vp.s.sc ++ vps ++
+ {s = np.s ! subjcase2npform vp.s.sc ++ vps ++
vp.s2 ! True ! Pos ! np.a ++ vp.adv ! Pos ++ vp.ext
} ;
diff --git a/lib/src/finnish/MorphoFin.gf b/lib/src/finnish/MorphoFin.gf
index 978ec61ec..9009e0fed 100644
--- a/lib/src/finnish/MorphoFin.gf
+++ b/lib/src/finnish/MorphoFin.gf
@@ -943,7 +943,7 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
a = Predef.dp 1 minuna
} in
{s = table {
- NPCase Nom | NPSep => mina ;
+ NPCase Nom => mina ; ----- NPSep
NPCase Gen => minun ;
NPCase Part => minua ;
NPCase Transl => minu + "ksi" ;
diff --git a/lib/src/finnish/ParadigmsFin.gf b/lib/src/finnish/ParadigmsFin.gf
index 58eb0cf61..d41441c7e 100644
--- a/lib/src/finnish/ParadigmsFin.gf
+++ b/lib/src/finnish/ParadigmsFin.gf
@@ -85,7 +85,7 @@ oper
} ;
accusative : Prep
- = {c = NPAcc ; s : Bool => Str = \\_ => [] ; isPre = True ; h = Back ; lock_Prep = <>} ;
+ = lin Prep {c = NPAcc ; s = <[],[],\\_ => []>} ;
NK : Type ; -- Noun from DictFin (Kotus)
AK : Type ; -- Adjective from DictFin (Kotus)
@@ -279,7 +279,7 @@ mkVS = overload {
mkV2V : V -> Prep -> V2V -- e.g. "käskeä" genitive
= \v,p -> mkV2Vf v p infIllat ;
mkV2Vf : V -> Prep -> InfForm -> V2V -- e.g. "kieltää" partitive infElatv
- = \v,p,f -> mk2V2 v p ** {vi = f ; lock_V2V = <>} ;
+ = \v,p,f -> mk2V2 v p ** {vi = infform2vvtype f ; lock_V2V = <>} ;
} ;
mkV0 : V -> V0 ; --%
@@ -367,21 +367,28 @@ mkVS = overload {
infFirst = Inf1 ; infElat = Inf3Elat ; infIllat = Inf3Illat ; infIness = Inf3Iness ; infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ;
prePrep : Case -> Str -> Prep =
- \c,p -> lin Prep {c = NPCase c ; s = \\_ => p ; isPre = True ; h = Back} ; --- no possessive suffix
+ \c,p -> lin Prep {c = NPCase c ; s =
[]>} ; -- no possessive suffix
postPrep : Case -> Str -> Prep =
- \c,p -> let h = guessHarmony p in case p of {
- mukaa + "n" => lin Prep {c = NPCase c ; s = table {False => p ; True => mukaa} ; isPre = False ; h = h} ;
- _ => lin Prep {c = NPCase c ; s : Bool => Str = \\_ => p ; isPre = False ; h = h}
- } ;
+ \c,p ->
+ let
+ h = guessHarmony p ;
+ a2p : Agr => Str = case c of {
+ Gen => \\a => p ++ Predef.BIND ++ possSuffixGen h a ;
+ _ => \\a => p
+ } ;
+ in case p of {
+ mukaa + "n" => lin Prep {c = NPCase c ; s = <[],p, a2p>} ;
+ _ => lin Prep {c = NPCase c ; s = <[],p, a2p>}
+ } ;
postGenPrep = postPrep genitive ;
casePrep : Case -> Prep =
- \c -> lin Prep {c = NPCase c ; s : Bool => Str = \\_ => [] ; isPre = True ; h = Back} ;
+ \c -> lin Prep {c = NPCase c ; s = <[],[],\\_ => []>} ;
- accPrep =
- lin Prep {c = NPAcc ; s : Bool => Str = \\_ => [] ; isPre = True ; h = Back} ;
+ accPrep : Prep =
+ lin Prep {c = NPAcc ; s = <[],[],\\_ => []>} ;
NK = {s : NForms ; lock_NK : {}} ;
AK = {s : NForms ; lock_AK : {}} ;
@@ -574,8 +581,11 @@ mkVS = overload {
} ;
mkIsPre : Prep -> Bool = \p -> case p.c of {
- NPCase Gen => notB p.isPre ; -- Jussin veli (prep is , isPre becomes False)
- _ => True -- syyte Jussia vastaan, puhe Jussin puolesta
+ NPCase Gen => case p.s.p2 of {
+ "" => False ; -- Jussin veli
+ _ => True -- puhe Jussin puolesta
+ } ;
+ _ => True -- syyte Jussia vastaan ; puhe Jussille
} ;
mkPN = overload {
@@ -631,22 +641,22 @@ mkVS = overload {
mkV : (
huutaa,huudan,huutaa,huutavat,huutakaa,huudetaan,
huusin,huusi,huusisi,huutanut,huudettu,huutanee : Str) -> V = mk12V ;
- mkV : (sana : VK) -> V = \w -> vforms2sverb w.s ** {sc = NPCase Nom ; lock_V = <> ; p = []} ;
+ mkV : (sana : VK) -> V = \w -> vforms2sverb w.s ** {sc = SCNom ; lock_V = <> ; p = []} ;
mkV : V -> Str -> V = \w,p -> {s = w.s ; sc = w.sc ; lock_V = <> ; h = w.h ; p = p} ;
mkV : Str -> V -> V = \s,v -> {s = \\f => s + v.s ! f ; sc = v.sc ; lock_V = <> ; h = v.h ; p = v.p} ;
} ;
mk1V : Str -> V = \s ->
let vfs = vforms2sverb (vForms1 s) in
- vfs ** {sc = NPCase Nom ; lock_V = <> ; p = []} ;
+ vfs ** {sc = SCNom ; lock_V = <> ; p = []} ;
mk2V : (_,_ : Str) -> V = \x,y ->
- let vfs = vforms2sverb (vForms2 x y) in vfs ** {sc = NPCase Nom ; lock_V = <> ; p = []} ;
+ let vfs = vforms2sverb (vForms2 x y) in vfs ** {sc = SCNom ; lock_V = <> ; p = []} ;
mk3V : (huutaa,huudan,huusi : Str) -> V = \x,_,y -> mk2V x y ; ----
mk12V : (
huutaa,huudan,huutaa,huutavat,huutakaa,huudetaan,
huusin,huusi,huusisi,huutanut,huudettu,huutanee : Str) -> V =
\a,b,c,d,e,f,g,h,i,j,k,l ->
- vforms2sverb (vForms12 a b c d e f g h i j k l) ** {sc = NPCase Nom ; lock_V = <> ; p = []} ;
+ vforms2sverb (vForms12 a b c d e f g h i j k l) ** {sc = SCNom ; lock_V = <> ; p = []} ;
vForms1 : Str -> VForms = \ottaa ->
let
@@ -709,11 +719,11 @@ mkVS = overload {
- caseV c v = {s = v.s ; sc = NPCase c ; h = v.h ; lock_V = <> ; p = v.p} ;
+ caseV c v = {s = v.s ; sc = npform2subjcase (NPCase c) ; h = v.h ; lock_V = <> ; p = v.p} ;
vOlla = {
s = ollaSVerbForms ;
- sc = NPCase Nom ; h = Back ; lock_V = <> ; p = []} ; ---- lieneekö
+ sc = SCNom ; h = Back ; lock_V = <> ; p = []} ; ---- lieneekö
mk2V2 : V -> Prep -> V2 = \v,c -> v ** {c2 = c ; lock_V2 = <>} ;
caseV2 : V -> Case -> V2 = \v,c -> mk2V2 v (casePrep c) ;
@@ -730,7 +740,7 @@ mkVS = overload {
mkV2 : V -> V2 = dirV2 ;
mkV2 : V -> Case -> V2 = caseV2 ;
mkV2 : V -> Prep -> V2 = mk2V2 ;
- mkV2 : VK -> V2 = \w -> dirV2 (vforms2sverb w.s ** {sc = NPCase Nom ; lock_V = <> ; p = []}) ;
+ mkV2 : VK -> V2 = \w -> dirV2 (vforms2sverb w.s ** {sc = SCNom ; lock_V = <> ; p = []}) ;
} ;
mk2V2 : V -> Prep -> V2 ;
@@ -741,7 +751,7 @@ mkVS = overload {
dirdirV3 v = dirV3 v allative ;
- mkVVf v f = v ** {vi = f ; lock_VV = <>} ;
+ mkVVf v f = v ** {vi = infform2vvtype f ; lock_VV = <>} ;
mkVQ v = v ** {lock_VQ = <>} ;
V0 : Type = V ;
@@ -754,7 +764,7 @@ mkVS = overload {
mkV2S v p = mk2V2 v p ** {lock_V2S = <>} ;
mkV2Vbare : V -> V2V = \v -> mkV2Vf v (casePrep partitive) infIllat ; ----
-- mkV2V v p = mkV2Vf v p infIllat ;
- mkV2Vf v p f = mk2V2 v p ** {vi = f ; lock_V2V = <>} ;
+ mkV2Vf v p f = mk2V2 v p ** {vi = infform2vvtype f ; lock_V2V = <>} ;
mkVAbare : V -> VA = \v -> mkVA v (casePrep partitive) ; ----
mkVA v p = v ** {c2 = p ; lock_VA = <>} ;
diff --git a/lib/src/finnish/PhraseFin.gf b/lib/src/finnish/PhraseFin.gf
index 0cfe82f4c..557ef1a73 100644
--- a/lib/src/finnish/PhraseFin.gf
+++ b/lib/src/finnish/PhraseFin.gf
@@ -11,8 +11,8 @@ concrete PhraseFin of Phrase = CatFin ** open ResFin, StemFin, (P = Prelude) in
UttIP ip = {s = ip.s ! NPCase Nom} ;
UttIAdv iadv = iadv ;
- UttNP np = {s = np.s ! NPSep} ;
- UttVP vp = {s = infVP (NPCase Nom) Pos (agrP3 Sg) vp Inf1} ;
+ UttNP np = {s = np.s ! NPAcc} ; ----NPSep} ;
+ UttVP vp = {s = infVP SCNom Pos (agrP3 Sg) vp Inf1} ;
UttAdv adv = adv ;
UttCN np = {s = np.s ! NCase Sg Nom} ;
UttAP np = {s = np.s ! P.False ! NCase Sg Nom} ;
diff --git a/lib/src/finnish/ResFin.gf b/lib/src/finnish/ResFin.gf
index 70a7c2cc0..3c1a05d8d 100644
--- a/lib/src/finnish/ResFin.gf
+++ b/lib/src/finnish/ResFin.gf
@@ -28,9 +28,34 @@ resource ResFin = ParamX ** open Prelude in {
| NPossTransl Number | NPossIllat Number
| NCompound ; -- special compound form, e.g. "nais"
+--- These cases are possible for subjects.
+
+ SubjCase = SCNom | SCGen | SCPart | SCElat | SCAdess | SCAblat ;
+
+oper
+ appSubjCase : SubjCase -> ResFin.NP -> Str = \sc,np -> np.s ! subjcase2npform sc ;
+
+ subjcase2npform : SubjCase -> NPForm = \sc -> case sc of {
+ SCNom => NPCase Nom ;
+ SCGen => NPCase Gen ;
+ SCPart => NPCase Part ;
+ SCElat => NPCase Elat ;
+ SCAdess => NPCase Adess ;
+ SCAblat => NPCase Ablat
+ } ;
+
+ npform2subjcase : NPForm -> SubjCase = \sc -> case sc of {
+ NPCase Gen => SCGen ;
+ NPCase Part => SCPart ;
+ NPCase Elat => SCElat ;
+ NPCase Adess => SCAdess ;
+ NPCase Ablat => SCAblat ;
+ _ => SCNom
+ } ;
+
-- Agreement of $NP$ has number*person and the polite second ("te olette valmis").
-
+param
Agr = Ag Number Person | AgPol ;
@@ -72,7 +97,7 @@ oper
-- have a uniform, special accusative form ("minut", etc).
param
- NPForm = NPCase Case | NPAcc | NPSep ; -- NPSep is NP used alone, e.g. in an Utt. Equals NPCase Nom except for pro-drop
+ NPForm = NPCase Case | NPAcc ; -- | NPSep ; -- NPSep is NP used alone, e.g. in an Utt. Equals NPCase Nom except for pro-drop
oper
npform2case : Number -> NPForm -> Case = \n,f ->
@@ -81,8 +106,8 @@ oper
case < : NPForm * Number> of {
=> c ;
=> Gen ;-- appCompl does the job
- => Nom ;
- => Nom
+ => Nom
+---- => Nom
} ;
n2nform : NForm -> NForm = \nf -> case nf of {
@@ -142,6 +167,25 @@ param
| InfPresPartAgr -- puhuva(mme)
;
+-- These forms appear in complements to VV and V2V.
+
+ VVType = VVInf | VVIness | VVIllat | VVPresPart ;
+
+oper
+ vvtype2infform : VVType -> InfForm = \vt -> case vt of {
+ VVInf => Inf1 ;
+ VVIness => Inf3Iness ;
+ VVIllat => Inf3Illat ;
+ VVPresPart => InfPresPart
+ } ;
+ infform2vvtype : InfForm -> VVType = \vt -> case vt of {
+ Inf3Iness => VVIness ;
+ Inf3Illat => VVIllat ;
+ InfPresPart => VVPresPart ;
+ _ => VVInf
+ } ;
+
+param
SType = SDecl | SQuest ;
--2 For $Relative$
@@ -168,13 +212,11 @@ param
---
Compl : Type = {
- s : Bool => Str ; -- perää(n)
- c : NPForm ; -- NP Gen
- isPre : Bool ; -- False postposition
- h : Harmony -- hänen peräänsä
+ s : Str * Str * (Agr => Str) ;
+ c : NPForm ;
} ;
- appCompl : Bool -> Polarity -> Compl -> NP -> Str = \isFin,b,co,np ->
+ appCompl : Bool -> Polarity -> Compl -> ResFin.NP -> Str = \isFin,b,co,np ->
let
c = case co.c of {
NPAcc => case b of {
@@ -190,18 +232,16 @@ param
_ => co.c
} ;
nps = np.s ! c ;
- cos = case c of {
+ cos1 = co.s.p1 ;
+ cos2 = case c of {
NPCase Gen => case np.isPron of {
- True => co.s ! True ++ BIND ++ case co.h of {
- Back => possSuffix np.a ;
- Front => possSuffixFront np.a
- } ;
- False => co.s ! False
+ True => co.s.p3 ! np.a ;
+ False => co.s.p2
} ;
- _ => co.s ! False
+ _ => co.s.p2
} ;
in
- preOrPost co.isPre cos nps ;
+ cos1 ++ nps ++ cos2 ;
-- For $Verb$.
@@ -268,8 +308,8 @@ oper
-- This is used for subjects of passives: therefore isFin in False.
- subjForm : NP -> NPForm -> Polarity -> Str = \np,sc,b ->
- appCompl False b {s = \\_ => [] ; c = sc ; isPre = True ; h = Back} np ;
+ subjForm : NP -> SubjCase -> Polarity -> Str = \np,sc,b ->
+ appCompl False b {s = <[],[],\\_ => []> ; c = subjcase2npform sc} np ;
questPart : Harmony -> Str = \b -> case b of {Back => "ko" ; _ => "kö"} ;
@@ -519,7 +559,7 @@ oper
nsa = possSuffixFront agr
in {
s = table {
- NPCase Nom | NPSep => itse ! NPossNom Sg ;
+ NPCase Nom => itse ! NPossNom Sg ;
NPCase Gen | NPAcc => itse ! NPossNom Sg + nsa ;
NPCase Transl => itse ! NPossTransl Sg + nsa ;
NPCase Illat => itse ! NPossIllat Sg + nsa ;
diff --git a/lib/src/finnish/SentenceFin.gf b/lib/src/finnish/SentenceFin.gf
index e6d2234eb..b95efd4d7 100644
--- a/lib/src/finnish/SentenceFin.gf
+++ b/lib/src/finnish/SentenceFin.gf
@@ -47,7 +47,7 @@ concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin, StemFin in {
EmbedS s = {s = etta_Conj ++ s.s} ;
EmbedQS qs = {s = qs.s} ;
- EmbedVP vp = {s = infVP (NPCase Nom) Pos (agrP3 Sg) vp Inf1} ; --- case,pol,agr,infform
+ EmbedVP vp = {s = infVP SCNom Pos (agrP3 Sg) vp Inf1} ; --- case,pol,agr,infform
UseCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p ! SDecl} ;
UseQCl t p cl = {s = t.s ++ p.s ++ cl.s ! t.t ! t.a ! p.p} ;
diff --git a/lib/src/finnish/StemFin.gf b/lib/src/finnish/StemFin.gf
index 7ebf9ee72..7421d9538 100644
--- a/lib/src/finnish/StemFin.gf
+++ b/lib/src/finnish/StemFin.gf
@@ -100,7 +100,7 @@ oper
ollaSVerbForms : SVForm => Str = verbOlla.s ;
-- used in Cat
- SVerb1 = {s : SVForm => Str ; sc : NPForm ; h : Harmony ; p : Str} ;
+ SVerb1 = {s : SVForm => Str ; sc : SubjCase ; h : Harmony ; p : Str} ;
sverb2verbBind : SVerb -> Verb = sverb2verb True ;
sverb2verbSep : SVerb -> Verb = sverb2verb False ;
@@ -161,12 +161,12 @@ oper
---- a hack to make VerbFin compile accurately for library (here),
---- and in a simplified way for ParseFin (in stemmed/)
- slashV2VNP : (SVerb1 ** {c2 : Compl ; vi : InfForm}) -> (NP ** {isNeg : Bool}) ->
+ slashV2VNP : (SVerb1 ** {c2 : Compl ; vi : VVType}) -> (NP ** {isNeg : Bool}) ->
(VP ** {c2 : Compl}) -> (VP ** {c2 : Compl})
= \v, np, vp ->
insertObjPre np.isNeg
(\fin,b,a -> appCompl fin b v.c2 np ++
- infVP v.sc b a vp v.vi)
+ infVP v.sc b a vp (vvtype2infform v.vi))
(predSV v) ** {c2 = vp.c2} ;
@@ -182,7 +182,7 @@ oper
defaultVPTyp = {isNeg = False ; isPass = False} ;
- HVerb : Type = Verb ** {sc : NPForm ; h : Harmony ; p : Str} ;
+ HVerb : Type = Verb ** {sc : SubjCase ; h : Harmony ; p : Str} ;
predV : HVerb -> VP = \verb -> {
s = verb ;
@@ -197,7 +197,7 @@ oper
s2 : Bool => Polarity => Agr => Str ; -- talo/talon/taloa
adv : Polarity => Str ; -- ainakin/ainakaan
ext : Str ;
- sc : NPForm ;
+ sc : SubjCase ;
isNeg : Bool ; -- True if some complement is negative
h : Harmony
} ;
@@ -316,8 +316,8 @@ oper
} ;
passVP : VP -> Compl -> VP = \vp,pr -> {
- s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = pr.c} ; -- minusta pidetään ---- TODO minun katsotaan päälle
- s2 = \\b,p,a => pr.s ! False ++ vp.s2 ! b ! p ! a ; ---- prep after verb
+ s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = npform2subjcase pr.c} ; -- minusta pidetään ---- TODO minun katsotaan päälle
+ s2 = \\b,p,a => pr.s.p1 ++ vp.s2 ! b ! p ! a ++ pr.s.p2 ; ---- possessive suffix
ext = vp.ext ;
adv = vp.adv ;
vptyp = {isNeg = vp.vptyp.isNeg ; isPass = True} ;
@@ -362,7 +362,7 @@ oper
s = \\t,a,b =>
let
agrfin = case vp.sc of {
- NPCase Nom => ;
+ SCNom => ;
_ => -- minun täytyy, minulla on
} ;
verb = vp.s ! VIFin t ! a ! b ! agrfin.p1 ;
@@ -387,17 +387,17 @@ oper
-- the first Polarity is VP-internal, the second comes form the main verb:
-- ([main] tahdon | en tahdo) ([internal] nukkua | olla nukkumatta)
- infVPGen : Polarity -> NPForm -> Polarity -> Agr -> VP -> InfForm -> Str =
+ infVPGen : Polarity -> SubjCase -> Polarity -> Agr -> VP -> InfForm -> Str =
\ipol,sc,pol,agr,vp0,vi ->
let
vp = vp2old_vp vp0 ;
fin = case sc of { -- subject case
- NPCase Nom => True ; -- minä tahdon nähdä auton
+ SCNom => True ; -- minä tahdon nähdä auton
_ => False -- minun täytyy nähdä auto
} ;
verb = case ipol of {
Pos => ; -- nähdä/näkemään
- Neg => <(vp2old_vp (predV (verbOlla ** {sc = NPCase Nom ; h = Back ; p = []}))).s ! VIInf vi ! Simul ! Pos ! agr,
+ Neg => <(vp2old_vp (predV (verbOlla ** {sc = SCNom ; h = Back ; p = []}))).s ! VIInf vi ! Simul ! Pos ! agr,
(vp.s ! VIInf Inf3Abess ! Simul ! Pos ! agr).fin> -- olla/olemaan näkemättä
} ;
vph = vp.h ;
@@ -409,8 +409,8 @@ oper
in
verb.p1.fin ++ verb.p1.inf ++ poss ++ verb.p2 ++ compl ;
- infVP : NPForm -> Polarity -> Agr -> VP -> InfForm -> Str = infVPGen Pos ;
+ infVP : SubjCase -> Polarity -> Agr -> VP -> InfForm -> Str = infVPGen Pos ;
- vpVerbOlla : HVerb = verbOlla ** {sc = NPCase Nom ; h = Back ; p = []} ;
+ vpVerbOlla : HVerb = verbOlla ** {sc = SCNom ; h = Back ; p = []} ;
}
\ No newline at end of file
diff --git a/lib/src/finnish/VerbFin.gf b/lib/src/finnish/VerbFin.gf
index 364d7963f..0d2f1b863 100644
--- a/lib/src/finnish/VerbFin.gf
+++ b/lib/src/finnish/VerbFin.gf
@@ -19,10 +19,10 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin, StemFin in {
ComplVV v vp =
insertObj
- (\\_,b,a => infVP v.sc b a vp v.vi)
+ (\\_,b,a => infVP v.sc b a vp (vvtype2infform v.vi))
(predSV {s = v.s ;
sc = case vp.s.sc of {
- NPCase Nom => v.sc ; -- minun täytyy pestä auto
+ SCNom => v.sc ; -- minun täytyy pestä auto
c => c -- minulla täytyy olla auto
} ;
h = v.h ; p = v.p
@@ -43,7 +43,7 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin, StemFin in {
SlashV2Q v q =
insertExtrapos ("," ++ q.s) (predSV v) ** {c2 = v.c2} ;
SlashV2V v vp =
- insertObj (\\_,b,a => infVP v.sc b a vp v.vi) (predSV v) ** {c2 = v.c2} ;
+ insertObj (\\_,b,a => infVP v.sc b a vp (vvtype2infform v.vi)) (predSV v) ** {c2 = v.c2} ;
SlashV2A v ap =
insertObj
(\\fin,b,_ =>
@@ -59,7 +59,7 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin, StemFin in {
SlashVV v vp = {
s = v ;
- s2 = \\_,b,a => infVP v.sc b a vp v.vi ;
+ s2 = \\_,b,a => infVP v.sc b a vp (vvtype2infform v.vi) ;
adv = \\_ => v.p ;
vptyp = vp.vptyp ;
ext = [] ;
diff --git a/lib/src/finnish/stemmed/StemFin.gf b/lib/src/finnish/stemmed/StemFin.gf
index fcf90302a..bf884ae92 100644
--- a/lib/src/finnish/stemmed/StemFin.gf
+++ b/lib/src/finnish/stemmed/StemFin.gf
@@ -183,7 +183,7 @@ oper
ollaSVerbForms : SVForm => Str = table SVForm ["oll";"ole";"on";"o";"olk";"olla";"oli";"oli";"olisi";"oll";"olt";"ollu";"liene";"ole"] ;
-- used in Cat
- SVerb1 = {s : SVForm => Str ; sc : NPForm ; h : Harmony ; p : Str} ;
+ SVerb1 = {s : SVForm => Str ; sc : SubjCase ; h : Harmony ; p : Str} ;
sverb2verbBind : SVerb -> Verb = sverb2verb True ;
sverb2verbSep : SVerb -> Verb = sverb2verb False ;
@@ -412,7 +412,7 @@ oper
AgentPart AAdv => plus tulema "sti"
} ;
- sc = NPCase Nom ;
+ sc = SCNom ;
lock_V = <>
} ;
@@ -506,11 +506,11 @@ oper
---- a hack to make VerbFin compile accurately for library (in ../),
---- and in a simplified way for ParseFin (here)
- slashV2VNP : (SVerb1 ** {c2 : Compl ; vi : InfForm}) -> (NP ** {isNeg : Bool}) ->
+ slashV2VNP : (SVerb1 ** {c2 : Compl ; vi : VVType}) -> (NP ** {isNeg : Bool}) ->
(VP ** {c2 : Compl}) -> (VP ** {c2 : Compl}) =
\v, np, vp -> {
s = v ;
- s2 = \\fin,b,a => np.s ! v.c2.c ++ vp.c2.s ! False ++ v.s ! SVInf ;
+ s2 = \\fin,b,a => appCompl fin b v.c2 np ++ v.s ! SVInf ;
---- infVP v.sc b a vp v.vi ;
-- ignoring Acc variation and pre/postposition and proper inf form
ext = [] ;
@@ -546,7 +546,7 @@ oper
s2 : Bool => Polarity => Agr => Str ; -- talo/talon/taloa
adv : Polarity => Str ; -- ainakin/ainakaan
ext : Str ;
- sc : NPForm ;
+ sc : SubjCase ;
isNeg : Bool ; -- True if some complement is negative
h : Harmony
} ;
@@ -666,8 +666,8 @@ oper
} ;
passVP : VP -> Compl -> VP = \vp,pr -> {
- s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = pr.c} ; -- minusta pidetään
- s2 = \\b,p,a => pr.s ! False ++ vp.s2 ! b ! p ! a ; ---- prep after verb ---- TODO minun päälleni katsotaan
+ s = {s = vp.s.s ; h = vp.s.h ; p = vp.s.p ; sc = npform2subjcase pr.c} ; -- minusta pidetään
+ s2 = \\b,p,a => pr.s.p1 ++ vp.s2 ! b ! p ! a ++ pr.s.p2 ; ---- possessive suffix
ext = vp.ext ;
adv = vp.adv ;
vptyp = {isNeg = vp.vptyp.isNeg ; isPass = True} ;
@@ -712,9 +712,9 @@ oper
s = \\t,a,b =>
let
agrfin = case vp.sc of {
- NPCase Nom => ;
- _ => -- minun täytyy, minulla on
- } ;
+ SCNom => ;
+ _ => -- minun täytyy, minulla on
+ } ;
verb = vp.s ! VIFin t ! a ! b ! agrfin.p1 ;
in {subj = sub b ;
fin = verb.fin ;
@@ -737,12 +737,12 @@ oper
-- the first Polarity is VP-internal, the second comes form the main verb:
-- ([main] tahdon | en tahdo) ([internal] nukkua | olla nukkumatta)
- infVPGen : Polarity -> NPForm -> Polarity -> Agr -> VP -> InfForm -> Str =
+ infVPGen : Polarity -> SubjCase -> Polarity -> Agr -> VP -> InfForm -> Str =
\ipol,sc,pol,agr,vp0,vi ->
let
vp = vp2old_vp vp0 ;
fin = case sc of { -- subject case
- NPCase Nom => True ; -- minä tahdon nähdä auton
+ SCNom => True ; -- minä tahdon nähdä auton
_ => False -- minun täytyy nähdä auto
} ;
verb = case ipol of {
@@ -759,10 +759,10 @@ oper
in
verb.p1.fin ++ verb.p1.inf ++ poss ++ verb.p2 ++ compl ;
- infVP : NPForm -> Polarity -> Agr -> VP -> InfForm -> Str = infVPGen Pos ;
+ infVP : SubjCase -> Polarity -> Agr -> VP -> InfForm -> Str = infVPGen Pos ;
vpVerbOlla : SVerb1 = {
s = ollaSVerbForms ;
- sc = NPCase Nom ; h = Back ; lock_V = <> ; p = []
+ sc = SCNom ; h = Back ; lock_V = <> ; p = []
} ;
}
\ No newline at end of file