From cb1363413c67c27ca5e0aa7525103ad876ce5e37 Mon Sep 17 00:00:00 2001 From: aarne Date: Mon, 6 Feb 2006 20:44:41 +0000 Subject: [PATCH] Most of Finnish done. --- doc/gf-formalism.txt | 5 + lib/resource-1.0/finnish/AdjectiveFin.gf | 24 ++-- lib/resource-1.0/finnish/CatFin.gf | 5 +- lib/resource-1.0/finnish/LangFin.gf | 8 +- lib/resource-1.0/finnish/MorphoFin.gf | 38 ----- lib/resource-1.0/finnish/NounFin.gf | 59 +++++--- lib/resource-1.0/finnish/NumeralFin.gf | 172 ++++++++++++++++++----- lib/resource-1.0/finnish/QuestionFin.gf | 37 ++--- lib/resource-1.0/finnish/RelativeFin.gf | 11 +- lib/resource-1.0/finnish/ResFin.gf | 33 +---- lib/resource-1.0/finnish/VerbFin.gf | 44 +++--- 11 files changed, 249 insertions(+), 187 deletions(-) diff --git a/doc/gf-formalism.txt b/doc/gf-formalism.txt index 954ff620d..fdfcab4d8 100644 --- a/doc/gf-formalism.txt +++ b/doc/gf-formalism.txt @@ -50,6 +50,11 @@ We have developed one for linguistics - constraint of reversibility (nontrivial math problem) +Writing a grammar of e.g. French clitics should not be a topic +on which one can write a paper - it should be easy to render in code +the known facts about languages! + + #NEW diff --git a/lib/resource-1.0/finnish/AdjectiveFin.gf b/lib/resource-1.0/finnish/AdjectiveFin.gf index d6ad527ac..886601c0d 100644 --- a/lib/resource-1.0/finnish/AdjectiveFin.gf +++ b/lib/resource-1.0/finnish/AdjectiveFin.gf @@ -1,23 +1,26 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, Prelude in { + flags optimize=all_subs ; -- gfc size from 2864336 to 6786 + lin PositA a = { - s = \\_ => a.s ! AAdj Posit ; - isPre = True + s = \\_ => a.s ! Posit } ; ComparA a np = { - s = \\_ => a.s ! AAdj Compar ++ "than" ++ np.s ! Nom ; - isPre = False + s = \\isMod,af => case isMod of { + True => np.s ! NPCase Part ++ a.s ! Compar ! af ; -- minua isompi + _ => a.s ! Compar ! af ++ "kuin" ++ np.s ! NPCase Nom -- isompi kuin minä + } } ; -- $SuperlA$ belongs to determiner syntax in $Noun$. - ComplA2 a np = { - s = \\_ => a.s ! AAdj Posit ++ a.c2 ++ np.s ! Acc ; - isPre = False + ComplA2 adj np = { + s = \\isMod,af => + preOrPost isMod (appCompl True Pos adj.c2 np) (adj.s ! Posit ! af) } ; - +{- ReflA2 a = { s = \\ag => a.s ! AAdj Posit ++ a.c2 ++ reflPron ! ag ; isPre = False @@ -27,10 +30,9 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, Prelude in { s = \\a => ap.s ! a ++ sc.s ; isPre = False } ; - +-} AdAP ada ap = { - s = \\a => ada.s ++ ap.s ! a ; - isPre = ap.isPre + s = \\b,af => ada.s ++ ap.s ! b ! af } ; UseA2 a = a ; diff --git a/lib/resource-1.0/finnish/CatFin.gf b/lib/resource-1.0/finnish/CatFin.gf index 7879505be..7a1cbb2fe 100644 --- a/lib/resource-1.0/finnish/CatFin.gf +++ b/lib/resource-1.0/finnish/CatFin.gf @@ -30,7 +30,7 @@ concrete CatFin of Cat = TenseX ** open ResFin, Prelude in { -- Relative RCl = {s : Tense => Anteriority => Polarity => Agr => Str} ; - RP = {s : Number => Case => Str ; a : RAgr} ; + RP = {s : Number => NPForm => Str ; a : RAgr} ; -- Verb @@ -40,6 +40,9 @@ concrete CatFin of Cat = TenseX ** open ResFin, Prelude in { -- Adjective +-- The $Bool$ tells whether usage is modifying (as opposed to +-- predicative), e.g. "x on suurempi kuin y" vs. "y:tä suurempi luku". + AP = {s : Bool => AForm => Str} ; -- Noun diff --git a/lib/resource-1.0/finnish/LangFin.gf b/lib/resource-1.0/finnish/LangFin.gf index d8c2980c9..1df23e389 100644 --- a/lib/resource-1.0/finnish/LangFin.gf +++ b/lib/resource-1.0/finnish/LangFin.gf @@ -3,12 +3,12 @@ concrete LangFin of Lang = NounFin, VerbFin, --- AdjectiveFin, + AdjectiveFin, AdverbFin, --- NumeralFin, + NumeralFin, SentenceFin, --- QuestionFin, --- RelativeFin, + QuestionFin, + RelativeFin, ConjunctionFin, PhraseFin, StructuralFin, diff --git a/lib/resource-1.0/finnish/MorphoFin.gf b/lib/resource-1.0/finnish/MorphoFin.gf index bc2474975..f2cc0f4ab 100644 --- a/lib/resource-1.0/finnish/MorphoFin.gf +++ b/lib/resource-1.0/finnish/MorphoFin.gf @@ -1064,44 +1064,6 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn -> (juo + "t" + u) (juo + "d" + u + "n") ; - --- For $NumeralsFin$. - - param NumPlace = NumIndep | NumAttr ; - -oper - yksiN = nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi" - "yksien" "yksiä" "yksiin") ; - kymmenenN = nhn (mkSubst "ä" "kymmenen" "kymmene" "kymmene" "kymmentä" - "kymmeneen" "kymmeni" "kymmeni" "kymmenien" "kymmeniä" - "kymmeniin") ; - sataN = nhn (sLukko "sata") ; - - tuhatN = nhn (mkSubst "a" "tuhat" "tuhanne" "tuhante" "tuhatta" "tuhanteen" - "tuhansi" "tuhansi" "tuhansien" "tuhansia" "tuhansiin") ; - - kymmentaN = {s = table { - NCase Sg Nom => "kymmentä" ; - c => kymmenenN.s ! c - } - } ; - - sataaN = {s = table { - Sg => sataN.s ; - Pl => table { - NCase Sg Nom => "sataa" ; - c => sataN.s ! c - } - } - } ; - tuhattaN = {s = table { - Sg => tuhatN.s ; - Pl => table { - NCase Sg Nom => "tuhatta" ; - c => tuhatN.s ! c - } - } - } ; } ; diff --git a/lib/resource-1.0/finnish/NounFin.gf b/lib/resource-1.0/finnish/NounFin.gf index c597184bf..59870437a 100644 --- a/lib/resource-1.0/finnish/NounFin.gf +++ b/lib/resource-1.0/finnish/NounFin.gf @@ -13,8 +13,15 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in { True => Sg ; _ => det.n } ; - ncase : Case -> NForm = \c -> case of { - => NCase Sg Part ; + ncase : Case -> NForm = \c -> case of { + <_, Nom,True,_> => NCase Sg Part ; + <_, _, True,False> => NCase Sg c ; + <_, Nom,_,True> => NPossNom ; + => NPossNom ; + => NPossGenPl ; + <_,Transl,_,True> => NPossTransl n ; + <_,Illat,_,True> => NPossIllat n ; + _ => NCase n c ---- } in { @@ -77,41 +84,51 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in { NoNum = {s = \\_,_ => [] ; isNum = False} ; NoOrd = {s = \\_,_ => []} ; - NumInt n = {s = \\_,_ => n.s ++ "." ; isNum = True} ; + NumInt n = {s = \\_,_ => n.s ; isNum = True} ; OrdInt n = {s = \\_,_ => n.s ++ "."} ; -{- - NumNumeral numeral = {s = numeral.s ! NCard} ; - OrdNumeral numeral = {s = numeral.s ! NOrd} ; +---- NumNumeral numeral = {s = numeral.s ! NCard} ; +---- OrdNumeral numeral = {s = numeral.s ! NOrd} ; - AdNum adn num = {s = adn.s ++ num.s} ; + AdNum adn num = {s = \\n,c => adn.s ++ num.s ! n ! c ; isNum = num.isNum} ; - OrdSuperl a = {s = a.s ! AAdj Superl} ; +---- OrdSuperl a = {s = a.s ! AAdj Superl} ; - DefArt = {s = \\_ => artDef} ; - - IndefArt = { - s = table { - Sg => artIndef ; - Pl => [] - } + DefArt = { + s1 = \\_,_ => [] ; + s2 = [] ; + isNum,isPoss = False } ; - MassDet = {s = [] ; n = Sg} ; --} + IndefArt = { + s1 = \\_,_ => [] ; --- Nom is Part in Pl ? + s2 = [] ; + isNum,isPoss = False + } ; + + MassDet = { + s1 = \\_ => [] ; --- Nom is Part ? + s2 = [] ; + isNum,isPoss = False + } ; UseN n = n ; -{- UseN2 n = n ; UseN3 n = n ; - ComplN2 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c} ; - ComplN3 f x = {s = \\n,c => f.s ! n ! Nom ++ f.c2 ++ x.s ! c ; c2 = f.c3} ; + ComplN2 f x = { + s = \\nf => appCompl True Pos f.c2 x ++ f.s ! nf + } ; + ComplN3 f x = { + s = \\nf => appCompl True Pos f.c2 x ++ f.s ! nf ; + c2 = f.c3 + } ; AdjCN ap cn = { - s = \\n,c => preOrPost ap.isPre (ap.s ! agrP3 n) (cn.s ! n ! c) + s = \\nf => ap.s ! True ! AN nf ++ cn.s ! nf } ; +{- RelCN cn rs = {s = \\n,c => cn.s ! n ! c ++ rs.s ! {n = n ; p = P3}} ; AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s} ; diff --git a/lib/resource-1.0/finnish/NumeralFin.gf b/lib/resource-1.0/finnish/NumeralFin.gf index 7df555918..6ac0f3c6e 100644 --- a/lib/resource-1.0/finnish/NumeralFin.gf +++ b/lib/resource-1.0/finnish/NumeralFin.gf @@ -1,44 +1,142 @@ -concrete NumeralFin of Numeral = CatFin ** open ResFin in { +concrete NumeralFin of Numeral = CatFin ** open Prelude, ParadigmsFin, MorphoFin in { + +-- Notice: possessive forms are not used. They get wrong, since every +-- part is made to agree in them. + +flags optimize = all_subs ; lincat - Digit = {s : DForm => CardOrd => Str} ; - Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; - Sub100 = {s : CardOrd => Str ; n : Number} ; - Sub1000 = {s : CardOrd => Str ; n : Number} ; Sub1000000 = {s : CardOrd => Str ; n : Number} ; + Digit = {s : CardOrd => Str} ; + Sub10, Sub100, Sub1000 = {s : NumPlace => CardOrd => Str ; n : Number} ; -lin num x = x ; -lin n2 = let two = mkNum "two" "twelve" "twenty" "second" in - {s = \\f,c => case of { - => "twelfth" ; - _ => two.s ! f ! c - } - } ; +lin + num x = x ; + n2 = co + (nhn (mkSubst "a" "kaksi" "kahde" "kahte" "kahta" "kahteen" "kaksi" "kaksi" + "kaksien" "kaksia" "kaksiin")) + (ordN "a" "kahdes") ; --- toinen + n3 = co + (nhn (mkSubst "a" "kolme" "kolme" "kolme" "kolmea" "kolmeen" "kolmi" "kolmi" + "kolmien" "kolmia" "kolmiin")) + (ordN "a" "kolmas") ; + n4 = co (regN "neljä") (ordN "ä" "neljäs") ; + n5 = co (reg3N "viisi" "viiden" "viisiä") (ordN "ä" "viides") ; + n6 = co (reg3N "kuusi" "kuuden" "kuusia") (ordN "a" "kuudes") ; + n7 = co + (nhn (mkSubst "ä" "seitsemän" "seitsemä" "seitsemä" "seitsemää" + "seitsemään" "seitsemi" "seitsemi" "seitsemien" "seitsemiä" + "seitsemiin")) + (ordN "ä" "seitsemäs") ; + n8 = co + (nhn (mkSubst "a" "kahdeksan" "kahdeksa" "kahdeksa" "kahdeksaa" + "kahdeksaan" "kahdeksi" "kahdeksi" "kahdeksien" "kahdeksia" + "kahdeksiin")) + (ordN "a" "kahdeksas") ; + n9 = co + (nhn (mkSubst "ä" "yhdeksän" "yhdeksä" "yhdeksä" "yhdeksää" + "yhdeksään" "yhdeksi" "yhdeksi" "yhdeksien" "yhdeksiä" "yhdeksiin")) + (ordN "ä" "yhdeksäs") ; -lin n3 = mkNum "three" "thirteen" "thirty" "third" ; -lin n4 = mkNum "four" "fourteen" "forty" "fourth" ; -lin n5 = mkNum "five" "fifteen" "fifty" "fifth" ; -lin n6 = regNum "six" ; -lin n7 = regNum "seven" ; -lin n8 = mkNum "eight" "eighteen" "eighty" "eighth" ; -lin n9 = regNum "nine" ; + pot01 = + {s = table { + NumAttr => \\_ => [] ; + NumIndep => yksiN.s + } ; + n = Sg + } ; + pot0 d = {n = Pl ; s = \\_ => d.s} ; + pot110 = + {s = \\_ => kymmenenN.s ; + n = Pl + } ; + + pot111 = {n = Pl ; s = \\_,c => yksiN.s ! c ++"toista"} ; ---- yhdes + pot1to19 d = {n = Pl ; s = \\_,c => d.s ! c ++"toista"} ; + pot0as1 n = n ; + + pot1 d = {n = Pl ; s = \\_,c => d.s ! c ++ kymmentaN.s ! c} ; + pot1plus d e = { + n = Pl ; + s = \\_,c => d.s ! c ++ kymmentaN.s ! c ++ e.s ! NumIndep ! c + } ; + pot1as2 n = n ; + pot2 d = {n = Pl ; s = \\_,c => d.s ! NumAttr ! c ++ sataaN.s ! d.n ! c} ; ---- + pot2plus d e = { + n = Pl ; + s = \\_,c => d.s ! NumAttr ! c ++ sataaN.s ! d.n ! c ++ e.s ! NumIndep ! c + } ; + pot2as3 n = {n = n.n ; s = n.s ! NumIndep} ; + pot3 d = {n = Pl ; s = \\c => d.s ! NumAttr ! c ++ tuhattaN.s ! d.n ! c} ; ---- + pot3plus d e = { + n = Pl ; + s = \\c => d.s ! NumAttr ! c ++ tuhattaN.s ! d.n ! c ++ e.s ! NumIndep ! c + } ; + +oper + co : (c,o : {s : NForm => Str}) -> {s : CardOrd => Str} = \c,o -> { + s = table { + NCard nf => c.s ! nf ; + NOrd nf => o.s ! nf + } + } ; + +-- Too much trouble to infer vowel, cf. "kuudes" vs. "viides". + + ordN : Str -> Str -> {s : NForm => Str} = \a,sadas -> + let + sada = init sadas + in + mkN + sadas (sada + "nnen") (sada + "nten" + a) (sada + "tt" + a) (sada + "nteen") + (sada + "nsin" + a) (sada + "nsiss" + a) (sada + "nsien") + (sada + "nsi" + a) (sada + "nsiin") ; + +param + NumPlace = NumIndep | NumAttr ; + +oper + yksiN = co + (nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi" + "yksien" "yksiä" "yksiin")) + (ordN "ä" "yhdes") ; ---- ensimmäinen + kymmenenN = co + (nhn (mkSubst "ä" "kymmenen" "kymmene" "kymmene" "kymmentä" + "kymmeneen" "kymmeni" "kymmeni" "kymmenien" "kymmeniä" "kymmeniin")) + (ordN "ä" "kymmenes") ; + sataN = co + (nhn (sLukko "sata")) + (ordN "a" "sadas") ; + + tuhatN = co + (nhn (mkSubst "a" "tuhat" "tuhanne" "tuhante" "tuhatta" "tuhanteen" + "tuhansi" "tuhansi" "tuhansien" "tuhansia" "tuhansiin")) + (ordN "a" "tuhannes") ; + + kymmentaN = + {s = table { + NCard (NCase Sg Nom) => "kymmentä" ; + k => kymmenenN.s ! k + } + } ; + + sataaN : {s : Number => CardOrd => Str} = {s = table { + Sg => sataN.s ; + Pl => table { + NCard (NCase Sg Nom) => "sataa" ; + k => sataN.s ! k + } + } + } ; + + tuhattaN = {s = table { + Sg => tuhatN.s ; + Pl => table { + NCard (NCase Sg Nom) => "tuhatta" ; + k => tuhatN.s ! k + } + } + } ; -lin pot01 = mkNum "one" "eleven" "ten" "first" ** {n = Sg} ; -lin pot0 d = d ** {n = Pl} ; -lin pot110 = regCardOrd "ten" ** {n = Pl} ; -lin pot111 = regCardOrd "eleven" ** {n = Pl} ; -lin pot1to19 d = {s = d.s ! teen} ** {n = Pl} ; -lin pot0as1 n = {s = n.s ! unit} ** {n = n.n} ; -lin pot1 d = {s = d.s ! ten} ** {n = Pl} ; -lin pot1plus d e = { - s = \\c => d.s ! ten ! NCard ++ "-" ++ e.s ! unit ! c ; n = Pl} ; -lin pot1as2 n = n ; -lin pot2 d = {s = \\c => d.s ! unit ! NCard ++ mkCard c "hundred"} ** {n = Pl} ; -lin pot2plus d e = { - s = \\c => d.s ! unit ! NCard ++ "hundred" ++ "and" ++ e.s ! c ; n = Pl} ; -lin pot2as3 n = n ; -lin pot3 n = { - s = \\c => n.s ! NCard ++ mkCard c "thousand" ; n = Pl} ; -lin pot3plus n m = { - s = \\c => n.s ! NCard ++ "thousand" ++ m.s ! c ; n = Pl} ; } + diff --git a/lib/resource-1.0/finnish/QuestionFin.gf b/lib/resource-1.0/finnish/QuestionFin.gf index d6abf2f5b..04ee1e813 100644 --- a/lib/resource-1.0/finnish/QuestionFin.gf +++ b/lib/resource-1.0/finnish/QuestionFin.gf @@ -1,22 +1,20 @@ -concrete QuestionFin of Question = CatFin ** open ResFin in { +concrete QuestionFin of Question = CatFin ** open ResFin, Prelude in { flags optimize=all_subs ; lin QuestCl cl = { - s = \\t,a,p => - let cls = cl.s ! t ! a ! p - in table { - QDir => cls ! OQuest ; - QIndir => "if" ++ cls ! ODir - } ---- "whether" in ExtFin + s = \\t,a,p => cl.s ! t ! a ! p ! SQuest } ; - QuestVP qp vp = - let cl = mkClause (qp.s ! Nom) {n = qp.n ; p = P3} vp - in {s = \\t,a,b,_ => cl.s ! t ! a ! b ! ODir} ; - + QuestVP ip vp = + let + cl = mkClause (ip.s ! vp.sc) (agrP3 ip.n) vp + in { + s = \\t,a,p => cl.s ! t ! a ! p ! SDecl + } ; +{- QuestSlash ip slash = { s = \\t,a,p => let @@ -27,28 +25,23 @@ concrete QuestionFin of Question = CatFin ** open ResFin in { QIndir => who ++ cls ! ODir } } ; - +-} QuestIAdv iadv cl = { - s = \\t,a,p => - let - cls = cl.s ! t ! a ! p ; - why = iadv.s - in table { - QDir => why ++ cls ! OQuest ; - QIndir => why ++ cls ! ODir - } + s = \\t,a,p => iadv.s ++ cl.s ! t ! a ! p ! SDecl } ; - PrepIP p ip = {s = p.s ++ ip.s ! Nom} ; + PrepIP p ip = {s = + appCompl True Pos p (ip ** {a = agrP3 ip.n ; isPron = False})} ; AdvIP ip adv = { s = \\c => ip.s ! c ++ adv.s ; n = ip.n } ; - +{- IDetCN idet num ord cn = { s = \\c => idet.s ++ num.s ++ ord.s ++ cn.s ! idet.n ! c ; n = idet.n } ; +-} } diff --git a/lib/resource-1.0/finnish/RelativeFin.gf b/lib/resource-1.0/finnish/RelativeFin.gf index 2781896cb..5b0c50f51 100644 --- a/lib/resource-1.0/finnish/RelativeFin.gf +++ b/lib/resource-1.0/finnish/RelativeFin.gf @@ -5,7 +5,8 @@ concrete RelativeFin of Relative = CatFin ** open ResFin in { lin RelCl cl = { - s = \\t,a,p,_ => "such" ++ "that" ++ cl.s ! t ! a ! p ! ODir + s = \\t,a,p,_ => "siten" ++ "että" ++ cl.s ! t ! a ! p ! SDecl + ---- sellainen } ; RelVP rp vp = { @@ -15,11 +16,11 @@ concrete RelativeFin of Relative = CatFin ** open ResFin in { RNoAg => ag ; RAg a => a } ; - cl = mkClause (rp.s ! Nom) agr vp + cl = mkClause (rp.s ! agr.n ! vp.sc) agr vp in - cl.s ! t ! ant ! b ! ODir + cl.s ! t ! ant ! b ! SDecl } ; - +{- RelSlash rp slash = { s = \\t,a,p,_ => slash.c2 ++ rp.s ! Acc ++ slash.s ! t ! a ! p ! ODir } ; @@ -30,5 +31,5 @@ concrete RelativeFin of Relative = CatFin ** open ResFin in { } ; IdRP = mkIP "which" "which" "whose" Sg ** {a = RNoAg} ; - +-} } diff --git a/lib/resource-1.0/finnish/ResFin.gf b/lib/resource-1.0/finnish/ResFin.gf index 980386d36..14458b69c 100644 --- a/lib/resource-1.0/finnish/ResFin.gf +++ b/lib/resource-1.0/finnish/ResFin.gf @@ -60,6 +60,7 @@ oper NPAcc => Gen -- appCompl does the job } ; + --2 For $Verb$ -- A special form is needed for the negated plural imperative. @@ -96,8 +97,7 @@ param --2 For $Numeral$ - CardOrd = NCard | NOrd ; - DForm = unit | teen | ten ; + CardOrd = NCard NForm | NOrd NForm ; --2 Transformations between parameter types @@ -287,35 +287,6 @@ oper questPart : Str -> Str = \on -> on ++ BIND ++ "ko" ; ---- - -{- --- For $Numeral$. - - mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} = - \two, twelve, twenty, second -> - {s = table { - unit => table {NCard => two ; NOrd => second} ; - teen => \\c => mkCard c twelve ; - ten => \\c => mkCard c twenty - } - } ; - - regNum : Str -> {s : DForm => CardOrd => Str} = - \six -> mkNum six (six + "teen") (six + "ty") (regOrd six) ; - - regCardOrd : Str -> {s : CardOrd => Str} = \ten -> - {s = table {NCard => ten ; NOrd => regOrd ten}} ; - - mkCard : CardOrd -> Str -> Str = \c,ten -> - (regCardOrd ten).s ! c ; - - regOrd : Str -> Str = \ten -> - case last ten of { - "y" => init ten + "ieth" ; - _ => ten + "th" - } ; --} - -- The definitions below were moved here from $MorphoFin$ so that we the -- auxiliary of predication can be defined. diff --git a/lib/resource-1.0/finnish/VerbFin.gf b/lib/resource-1.0/finnish/VerbFin.gf index 90800584c..a8d48e403 100644 --- a/lib/resource-1.0/finnish/VerbFin.gf +++ b/lib/resource-1.0/finnish/VerbFin.gf @@ -17,23 +17,33 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in { ComplVA v ap = insertObj (ap.s) (predV v) ; ComplV2A v np ap = insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ; - - UseComp comp = insertObj comp.s (predAux auxBe) ; - - AdvVP vp adv = insertObj (\\_ => adv.s) vp ; - ---- This rule destroys parsing... ----- AdVVP adv vp = insertAdV adv.s vp ; - - ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ; - - PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ; - - UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to" - - CompAP ap = ap ; - CompNP np = {s = \\_ => np.s ! Acc} ; - CompAdv a = {s = \\_ => a.s} ; -} + UseComp comp = + insertObj (\\_ => comp.s) (predV (verbOlla ** {sc = NPCase Nom})) ; + + AdvVP vp adv = insertObj (\\_,_ => adv.s) vp ; + +---- AdVVP adv vp = insertAdV adv.s vp ; + +-- ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ; + +-- PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ; + +-- UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to" + + CompAP ap = { + s = \\agr => + let + n = agr.n ; + c = case agr.n of { + Sg => Nom ; -- minä olen iso + Pl => Part -- me olemme isoja + } --- definiteness of NP ? + in ap.s ! False ! AN (NCase agr.n c) + } ; + CompNP np = {s = \\_ => np.s ! NPCase Nom} ; + CompAdv a = {s = \\_ => a.s} ; + + }