From 31b025bdf1233c75d3ed85742e9decee4b893607 Mon Sep 17 00:00:00 2001 From: Aarne Ranta Date: Wed, 16 Aug 2023 11:32:11 +0300 Subject: [PATCH] completed infinitive and participle structures of Finnish --- src/finnish/infinitives/Infinitive.gf | 45 +++++++- src/finnish/infinitives/InfinitiveFin.gf | 140 +++++++++++++++++++++-- 2 files changed, 172 insertions(+), 13 deletions(-) diff --git a/src/finnish/infinitives/Infinitive.gf b/src/finnish/infinitives/Infinitive.gf index 90289074..ec1aa285 100644 --- a/src/finnish/infinitives/Infinitive.gf +++ b/src/finnish/infinitives/Infinitive.gf @@ -1,6 +1,6 @@ abstract Infinitive = - Grammar, + Grammar - [VPSlashPrep], ---- to avoid certain spurious ambiguities, to be fixed Lexicon ** { @@ -9,11 +9,50 @@ fun PresPartPassObjVP : VPSlash -> VP ; -- (oluesta) on pidettävä PastPartPassAdv : NP -> VP -> Adv ; -- junan mentyä - AgentPartAP : NP -> VPSlash -> AP ; -- koiran syömä + + PresPartActAP : VP -> AP ; -- (lihaa) syövä + PastPartActAP : VP -> AP ; -- (lihaa) syönyt + PresPartPassAP : VPSlash -> AP ; -- (tänään) syötävä + PastPartPassAP : VPSlash -> AP ; -- (tänään) syöty + + AgentPartAP : NP -> VPSlash -> AP ; -- koiran syömä + Inf2InessAdv : NP -> VP -> Adv ; -- junan mennessä - Inf2InessPassAdv : NP -> VPSlash -> Adv ; -- junaa odotettaessa + + Inf2InessPassAdv : VP -> Adv ; -- odotettaessa (junaa), touhuttaessa (junan kanssa) + Inf2InessPassInvAdv : NP -> VPSlash -> Adv ; -- junaa odotettaessa, junan kanssa touhutessa + Inf2InstrAdv : VP -> Adv ; -- odottaen (junaa) + Inf2InstrInvAdv : NP -> VPSlash -> Adv ; -- junaa odottaen + Inf2InstrAdv : VP -> Adv ; -- odottaen (junaa) + Inf2InstrInvAdv : NP -> VPSlash -> Adv ; -- junaa odottaen + + Inf3InessAdv : VP -> Adv ; -- odottamassa (junaa) + Inf3InessInvAdv : NP -> VPSlash -> Adv ; -- junaa odottamassa + + Inf3ElatAdv : VP -> Adv ; -- odottamasta (junaa) + Inf3ElatInvAdv : NP -> VPSlash -> Adv ; -- junaa odottamasta + + Inf3IllatAdv : VP -> Adv ; -- odottamaan (junaa) + Inf3IllatInvAdv : NP -> VPSlash -> Adv ; -- junaa odottamaan + + Inf3AdessAdv : VP -> Adv ; -- odottamalla (junaa) + Inf3AdessInvAdv : NP -> VPSlash -> Adv ; -- junaa odottamalla + + Inf3AbessAdv : VP -> Adv ; -- odottamatta (junaa) + Inf3AbessInvAdv : NP -> VPSlash -> Adv ; -- junaa odottamatta + + ComplPresPartActVS : VS -> NP -> VP -> VP ; -- sanoa junan menevän + ComplPastPartActVS : VS -> NP -> VP -> VP ; -- sanoa junan menneen + + ComplPresPartActAgrVS : VS -> VP -> VP ; -- sanoa menevänsä + ComplPastPartActAgrVS : VS -> VP -> VP ; -- sanoa menneensä + + ComplPresPartPassVS : VS -> NP -> VPSlash -> VP ; -- sanoa junaa odotettavan + ComplPastPartPassVS : VS -> NP -> VPSlash -> VP ; -- sanoa junaa odotetun + + } \ No newline at end of file diff --git a/src/finnish/infinitives/InfinitiveFin.gf b/src/finnish/infinitives/InfinitiveFin.gf index e5241ed8..8ace5786 100644 --- a/src/finnish/infinitives/InfinitiveFin.gf +++ b/src/finnish/infinitives/InfinitiveFin.gf @@ -1,7 +1,7 @@ --# -path=..:alltenses concrete InfinitiveFin of Infinitive = - GrammarFin, + GrammarFin - [VPSlashPrep], LexiconFin ** open ResFin, @@ -27,7 +27,31 @@ lin vp.adv ! Pos ++ vp.ext } ; - + + PresPartActAP vp = { + s = \\_, nf => preCompVP vp (PresPartAct (AN nf)) ; + hasPrefix = False ; + p = [] + } ; + + PastPartActAP vp = { + s = \\_, nf => preCompVP vp (PastPartAct (AN nf)) ; + hasPrefix = False ; + p = [] + } ; + + PresPartPassAP vp = { + s = \\_, nf => preCompVP (PresPartPass (AN nf)) ; + hasPrefix = False ; + p = [] + } ; + + PastPartPassAP vp = { + s = \\_, nf => preCompVP (PastPartPass (AN nf)) ; + hasPrefix = False ; + p = [] + } ; + AgentPartAP np vp = { s = \\_, nf => np.s ! NPCase Gen ++ @@ -45,21 +69,117 @@ lin infVP SCNom Pos np.a vp Inf2Iness } ; - Inf2InessPassAdv np vps = { - s = np.s ! NPCase Part ++ + Inf2InessPassAdv vp = { + s = infVP SCNom Pos infAdvAgr vp Inf2InessPass + } ; + + Inf2InessPassInvAdv np vps = { + s = infAppCompl vps.c2 np ++ infVP SCNom Pos np.a Inf2InessPass } ; + Inf2InstrAdv vp = { + s = infVP SCNom Pos infAdvAgr vp Inf2Instr + } ; + + Inf2InstrInvAdv np vps = { + s = infAppCompl vps.c2 np ++ + infVP SCNom Pos np.a Inf2Instr + } ; + + Inf3InessAdv vp = { + s = infVP SCNom Pos infAdvAgr vp Inf3Iness + } ; + + Inf3InessInvAdv np vps = { + s = infAppCompl vps.c2 np ++ + infVP SCNom Pos np.a Inf3Iness + } ; + Inf3ElatAdv vp = { + s = infVP SCNom Pos infAdvAgr vp Inf3Elat + } ; + + Inf3ElatInvAdv np vps = { + s = infAppCompl vps.c2 np ++ + infVP SCNom Pos np.a Inf3Elat + } ; + + Inf3IllatAdv vp = { + s = infVP SCNom Pos infAdvAgr vp Inf3Illat + } ; + + Inf3IllatInvAdv np vps = { + s = infAppCompl vps.c2 np ++ + infVP SCNom Pos np.a Inf3Illat + } ; + + + Inf3AdessAdv vp = { + s = infVP SCNom Pos infAdvAgr vp Inf3Adess + } ; + + Inf3AdessInvAdv np vps = { + s = infAppCompl vps.c2 np ++ + infVP SCNom Pos np.a Inf3Adess + } ; + + + Inf3AbessAdv vp = { + s = infVP SCNom Pos infAdvAgr vp Inf3Abess + } ; + + Inf3AbessInvAdv np vps = { + s = infAppCompl vps.c2 np ++ + infVP SCNom Pos np.a Inf3Abess + } ; + + ComplPresPartActVS vs np vp = + insertExtrapos (subjPartVP np vp (NPCase Gen) (PresPartAct (AN (NCase Sg Gen)))) (predSV vs) ; + ComplPastPartActVS vs np vp = + insertExtrapos (subjPartVP np vp (NPCase Gen) (PastPartAct (AN (NCase Sg Gen)))) (predSV vs) ; + + ComplPresPartActAgrVS vs vp = + insertObj (\\_,_,agr => subjPartAgrVP vp (PresPartAct (AN (NPossGen Sg))) agr) (predSV vs) ; + ComplPastPartActAgrVS vs vp = + insertObj (\\_,_,agr => subjPartAgrVP vp (PastPartAct (AN (NPossGen Sg))) agr) (predSV vs) ; + + ComplPresPartPassVS vs np vps = + insertExtrapos (subjPartVP np (NPCase Part) (PresPartPass (AN (NCase Sg Gen)))) (predSV vs) ; + ComplPastPartPassVS vs np vps = + insertExtrapos (subjPartVP np (NPCase Part) (PastPartPass (AN (NCase Sg Gen)))) (predSV vs) ; --- {s = vp.s.s ! Inf Inf1Long} ; --- {s = vp.s.s ! Inf Inf2Instr} ; - --- {s = vp.s.s ! Inf Inf2InessPass} ; --- {s = vp.s.s ! Inf Inf2Adess} ; --- {s = vp.s.s ! Inf InfPresPart} ; +oper + infAppCompl : Compl -> ResFin.NP -> Str = \co, np -> + appCompl False Neg co np ; -- not fin, Acc becomes Part + + infAdvAgr : Agr = agrP3 Sg ; --- ? + + -- hänen syövän, häntä syödyn, häntä syötävän + subjPartVP : ResFin.NP -> StemFin.VP -> NPForm -> VForm -> Str = \np, vp, npform, vform -> + np.s ! NPCase Gen ++ + vp.s.s ! vform ++ + vp.s2 ! True ! Pos ! np.a ++ + vp.adv ! Pos ++ + vp.ext ; + + -- tiedän syöväni, tiedän syöneeni + subjPartAgrVP : StemFin.VP -> VForm -> Agr -> Str = \vp, vform, agr -> + vp.s.s ! vform ++ BIND ++ + case vp.s.h of {Back => possSuffix agr ; Front => possSuffixFront agr} ++ + vp.s2 ! True ! Pos ! agr ++ + vp.adv ! Pos ++ + vp.ext ; + + + -- ruohoa syövä, Ranskassa valmistettu + preCompVP : StemFin.VP -> VForm -> Str = \vp, vform -> + vp.s2 ! True ! Pos ! infAdvAgr ++ + vp.adv ! Pos ++ + vp.s.s ! vform ++ + vp.ext ; } \ No newline at end of file