forked from GitHub/gf-core
at last, proper possessive suffixes in Finnish Prep. This needs a parameter and vowel harmony: "opettajan mukaan" (according to the teacher), "meidän mukaamme" (according to us), "hänen jälkeensä" (after her).
This commit is contained in:
@@ -10,7 +10,7 @@ concrete AdverbFin of Adverb = CatFin ** open ResFin, Prelude, StemFin in {
|
|||||||
s = cadv.s ++ a.s ! Posit ! sAAdv ++ cadv.p ++ s.s
|
s = cadv.s ++ a.s ! Posit ! sAAdv ++ cadv.p ++ s.s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PrepNP prep np = {s = preOrPost prep.isPre prep.s (np.s ! prep.c)} ;
|
PrepNP prep np = {s = appCompl True Pos prep np} ;
|
||||||
|
|
||||||
AdAdv = cc2 ;
|
AdAdv = cc2 ;
|
||||||
|
|
||||||
|
|||||||
@@ -98,17 +98,17 @@ concrete CatFin of Cat = CommonX ** open ResFin, StemFin, Prelude in {
|
|||||||
PN = SPN ;
|
PN = SPN ;
|
||||||
|
|
||||||
linref
|
linref
|
||||||
SSlash = \ss -> ss.s ++ ss.c2.s ;
|
SSlash = \ss -> ss.s ++ ss.c2.s ! False ;
|
||||||
ClSlash = \cls -> cls.s ! Pres ! Simul ! Pos ++ cls.c2.s ;
|
ClSlash = \cls -> cls.s ! Pres ! Simul ! Pos ++ cls.c2.s ! False ;
|
||||||
|
|
||||||
VP = vpRef ;
|
VP = vpRef ;
|
||||||
VPSlash = \vps -> vpRef vps ++ vps.c2.s ;
|
VPSlash = \vps -> vpRef vps ++ vps.c2.s ! False ;
|
||||||
|
|
||||||
V, VS, VQ, VA = \v -> vpRef (predV v) ;
|
V, VS, VQ, VA = \v -> vpRef (predV v) ;
|
||||||
V2, V2A, V2Q, V2S = \v -> vpRef (predV v) ++ v.c2.s ;
|
V2, V2A, V2Q, V2S = \v -> vpRef (predV v) ++ v.c2.s ! False ;
|
||||||
V3 = \v -> vpRef (predV v) ++ v.c2.s ++ v.c3.s ;
|
V3 = \v -> vpRef (predV v) ++ v.c2.s ! False ++ v.c3.s ! False ;
|
||||||
VV = \v -> vpRef (predV v) ;
|
VV = \v -> vpRef (predV v) ;
|
||||||
V2V = \v -> vpRef (predV v) ++ v.c2.s ;
|
V2V = \v -> vpRef (predV v) ++ v.c2.s ! False ;
|
||||||
|
|
||||||
Conj = \c -> c.s1 ++ c.s2 ;
|
Conj = \c -> c.s1 ++ c.s2 ;
|
||||||
|
|
||||||
|
|||||||
@@ -7,9 +7,13 @@ concrete ExtraFin of ExtraFinAbs = CatFin **
|
|||||||
lin
|
lin
|
||||||
GenNP np = {
|
GenNP np = {
|
||||||
s1,sp = \\_,_ => np.s ! NPCase Gen ;
|
s1,sp = \\_,_ => np.s ! NPCase Gen ;
|
||||||
s2 = \\_ => [] ;
|
s2 = case np.isPron of { -- "isän auto", "hänen autonsa"
|
||||||
|
True => table {Front => BIND ++ possSuffixFront np.a ;
|
||||||
|
Back => BIND ++ possSuffix np.a } ;
|
||||||
|
False => \\_ => []
|
||||||
|
} ;
|
||||||
isNum = False ;
|
isNum = False ;
|
||||||
isPoss = False ;
|
isPoss = np.isPron ; --- also gives "sen autonsa"
|
||||||
isDef = True ; --- "Jussin kolme autoa ovat" ; thus "...on" is missing
|
isDef = True ; --- "Jussin kolme autoa ovat" ; thus "...on" is missing
|
||||||
isNeg = False
|
isNeg = False
|
||||||
} ;
|
} ;
|
||||||
|
|||||||
@@ -888,6 +888,11 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
ase => ase
|
ase => ase
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
guessHarmony : Str -> Harmony = \s -> case s of {
|
||||||
|
_ + ("a" | "o" | "u" | "A" | "O" | "U") + _ => Back ;
|
||||||
|
_ => Front
|
||||||
|
} ;
|
||||||
|
|
||||||
vowHarmony : Str -> Str = \s -> case s of {
|
vowHarmony : Str -> Str = \s -> case s of {
|
||||||
_ + ("a" | "o" | "u" | "A" | "O" | "U") + _ => "a" ;
|
_ + ("a" | "o" | "u" | "A" | "O" | "U") + _ => "a" ;
|
||||||
_ => "ä"
|
_ => "ä"
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
accusative : Prep
|
accusative : Prep
|
||||||
= {c = NPAcc ; s = [] ; isPre = True ; lock_Prep = <>} ;
|
= {c = NPAcc ; s : Bool => Str = \\_ => [] ; isPre = True ; h = Back ; lock_Prep = <>} ;
|
||||||
|
|
||||||
NK : Type ; -- Noun from DictFin (Kotus)
|
NK : Type ; -- Noun from DictFin (Kotus)
|
||||||
AK : Type ; -- Adjective from DictFin (Kotus)
|
AK : Type ; -- Adjective from DictFin (Kotus)
|
||||||
@@ -367,14 +367,21 @@ mkVS = overload {
|
|||||||
infFirst = Inf1 ; infElat = Inf3Elat ; infIllat = Inf3Illat ; infIness = Inf3Iness ; infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ;
|
infFirst = Inf1 ; infElat = Inf3Elat ; infIllat = Inf3Illat ; infIness = Inf3Iness ; infPresPart = InfPresPart ; infPresPartAgr = InfPresPartAgr ;
|
||||||
|
|
||||||
prePrep : Case -> Str -> Prep =
|
prePrep : Case -> Str -> Prep =
|
||||||
\c,p -> {c = NPCase c ; s = p ; isPre = True ; lock_Prep = <>} ;
|
\c,p -> lin Prep {c = NPCase c ; s = \\_ => p ; isPre = True ; h = Back} ; --- no possessive suffix
|
||||||
|
|
||||||
postPrep : Case -> Str -> Prep =
|
postPrep : Case -> Str -> Prep =
|
||||||
\c,p -> {c = NPCase c ; s = p ; isPre = False ; lock_Prep = <>} ;
|
\c,p -> let h = guessHarmony p in case p of {
|
||||||
postGenPrep p = {
|
mukaa + "n" => lin Prep {c = NPCase c ; s = table {False => p ; True => mukaa} ; isPre = False ; h = h} ;
|
||||||
c = NPCase genitive ; s = p ; isPre = False ; lock_Prep = <>} ;
|
_ => lin Prep {c = NPCase c ; s : Bool => Str = \\_ => p ; isPre = False ; h = h}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
postGenPrep = postPrep genitive ;
|
||||||
|
|
||||||
casePrep : Case -> Prep =
|
casePrep : Case -> Prep =
|
||||||
\c -> {c = NPCase c ; s = [] ; isPre = True ; lock_Prep = <>} ;
|
\c -> lin Prep {c = NPCase c ; s : Bool => Str = \\_ => [] ; isPre = True ; h = Back} ;
|
||||||
accPrep = {c = NPAcc ; s = [] ; isPre = True ; lock_Prep = <>} ;
|
|
||||||
|
accPrep =
|
||||||
|
lin Prep {c = NPAcc ; s : Bool => Str = \\_ => [] ; isPre = True ; h = Back} ;
|
||||||
|
|
||||||
NK = {s : NForms ; lock_NK : {}} ;
|
NK = {s : NForms ; lock_NK : {}} ;
|
||||||
AK = {s : NForms ; lock_AK : {}} ;
|
AK = {s : NForms ; lock_AK : {}} ;
|
||||||
|
|||||||
@@ -166,7 +166,12 @@ param
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
Compl : Type = {s : Str ; c : NPForm ; isPre : Bool} ;
|
Compl : Type = {
|
||||||
|
s : Bool => Str ; -- perää(n)
|
||||||
|
c : NPForm ; -- NP Gen
|
||||||
|
isPre : Bool ; -- False postposition
|
||||||
|
h : Harmony -- hänen peräänsä
|
||||||
|
} ;
|
||||||
|
|
||||||
appCompl : Bool -> Polarity -> Compl -> NP -> Str = \isFin,b,co,np ->
|
appCompl : Bool -> Polarity -> Compl -> NP -> Str = \isFin,b,co,np ->
|
||||||
let
|
let
|
||||||
@@ -183,17 +188,19 @@ param
|
|||||||
} ;
|
} ;
|
||||||
_ => co.c
|
_ => co.c
|
||||||
} ;
|
} ;
|
||||||
{-
|
nps = np.s ! c ;
|
||||||
c = case <isFin, b, co.c, np.isPron> of {
|
cos = case c of {
|
||||||
<_, Neg, NPAcc,_> => NPCase Part ; -- en näe taloa/sinua
|
NPCase Gen => case np.isPron of {
|
||||||
<_, Pos, NPAcc,True> => NPAcc ; -- näen/täytyy sinut
|
True => co.s ! True ++ BIND ++ case co.h of {
|
||||||
<False,Pos, NPAcc,False> => NPCase Nom ; -- täytyy nähdä talo
|
Back => possSuffix np.a ;
|
||||||
<_,_,coc,_> => coc
|
Front => possSuffixFront np.a
|
||||||
} ;
|
} ;
|
||||||
-}
|
False => co.s ! False
|
||||||
nps = np.s ! c
|
} ;
|
||||||
|
_ => co.s ! False
|
||||||
|
} ;
|
||||||
in
|
in
|
||||||
preOrPost co.isPre co.s nps ;
|
preOrPost co.isPre cos nps ;
|
||||||
|
|
||||||
-- For $Verb$.
|
-- For $Verb$.
|
||||||
|
|
||||||
@@ -261,7 +268,7 @@ oper
|
|||||||
-- This is used for subjects of passives: therefore isFin in False.
|
-- This is used for subjects of passives: therefore isFin in False.
|
||||||
|
|
||||||
subjForm : NP -> NPForm -> Polarity -> Str = \np,sc,b ->
|
subjForm : NP -> NPForm -> Polarity -> Str = \np,sc,b ->
|
||||||
appCompl False b {s = [] ; c = sc ; isPre = True} np ;
|
appCompl False b {s = \\_ => [] ; c = sc ; isPre = True ; h = Back} np ;
|
||||||
|
|
||||||
questPart : Harmony -> Str = \b -> case b of {Back => "ko" ; _ => "kö"} ;
|
questPart : Harmony -> Str = \b -> case b of {Back => "ko" ; _ => "kö"} ;
|
||||||
|
|
||||||
|
|||||||
@@ -317,7 +317,7 @@ oper
|
|||||||
|
|
||||||
passVP : VP -> Compl -> VP = \vp,pr -> {
|
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
|
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 ++ vp.s2 ! b ! p ! a ; ---- prep after verb
|
s2 = \\b,p,a => pr.s ! False ++ vp.s2 ! b ! p ! a ; ---- prep after verb
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
vptyp = {isNeg = vp.vptyp.isNeg ; isPass = True} ;
|
vptyp = {isNeg = vp.vptyp.isNeg ; isPass = True} ;
|
||||||
|
|||||||
@@ -123,7 +123,8 @@ lin
|
|||||||
insertObj (\\_,b,a => vpi.s ! v.vi) (predSV v) ** {c2 = v.c2} ;
|
insertObj (\\_,b,a => vpi.s ! v.vi) (predSV v) ** {c2 = v.c2} ;
|
||||||
|
|
||||||
VPSlashVS v vp = -- : VS -> VP -> VPSlash ; -- hän sanoo (minun) menevän (!) ---- menneen ?
|
VPSlashVS v vp = -- : VS -> VP -> VPSlash ; -- hän sanoo (minun) menevän (!) ---- menneen ?
|
||||||
insertObj (\\_,b,a => infVP v.sc b a vp InfPresPart) (predSV v) ** {c2 = {c = NPCase Gen ; s = [] ; isPre = True}} ;
|
insertObj (\\_,b,a => infVP v.sc b a vp InfPresPart) (predSV v) **
|
||||||
|
{c2 = {c = NPCase Gen ; s = \\_ => [] ; h = Back ; isPre = True}} ;
|
||||||
|
|
||||||
-- SlashSlashV2V v ant pol vps = -- : V2V -> Ant -> Pol -> VPSlash -> VPSlash ; --- not implemented in Eng so far
|
-- SlashSlashV2V v ant pol vps = -- : V2V -> Ant -> Pol -> VPSlash -> VPSlash ; --- not implemented in Eng so far
|
||||||
-- insertObj (\\_,b,a => infVPGen pol.p v.sc b a vps v.vi) (predSV v) ** {c2 = v.c2} ; --- or vps.c2 ??
|
-- insertObj (\\_,b,a => infVPGen pol.p v.sc b a vps v.vi) (predSV v) ** {c2 = v.c2} ; --- or vps.c2 ??
|
||||||
|
|||||||
@@ -510,7 +510,7 @@ oper
|
|||||||
(VP ** {c2 : Compl}) -> (VP ** {c2 : Compl}) =
|
(VP ** {c2 : Compl}) -> (VP ** {c2 : Compl}) =
|
||||||
\v, np, vp -> {
|
\v, np, vp -> {
|
||||||
s = v ;
|
s = v ;
|
||||||
s2 = \\fin,b,a => np.s ! v.c2.c ++ vp.c2.s ++ v.s ! SVInf ;
|
s2 = \\fin,b,a => np.s ! v.c2.c ++ vp.c2.s ! False ++ v.s ! SVInf ;
|
||||||
---- infVP v.sc b a vp v.vi ;
|
---- infVP v.sc b a vp v.vi ;
|
||||||
-- ignoring Acc variation and pre/postposition and proper inf form
|
-- ignoring Acc variation and pre/postposition and proper inf form
|
||||||
ext = [] ;
|
ext = [] ;
|
||||||
@@ -666,8 +666,8 @@ oper
|
|||||||
} ;
|
} ;
|
||||||
|
|
||||||
passVP : VP -> Compl -> VP = \vp,pr -> {
|
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
|
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 ++ vp.s2 ! b ! p ! a ; ---- prep after verb
|
s2 = \\b,p,a => pr.s ! False ++ vp.s2 ! b ! p ! a ; ---- prep after verb ---- TODO minun päälleni katsotaan
|
||||||
ext = vp.ext ;
|
ext = vp.ext ;
|
||||||
adv = vp.adv ;
|
adv = vp.adv ;
|
||||||
vptyp = {isNeg = vp.vptyp.isNeg ; isPass = True} ;
|
vptyp = {isNeg = vp.vptyp.isNeg ; isPass = True} ;
|
||||||
|
|||||||
Reference in New Issue
Block a user