diff --git a/lib/resource/abstract/Clause.gf b/lib/resource/abstract/Clause.gf index b4990a07f..035eafe78 100644 --- a/lib/resource/abstract/Clause.gf +++ b/lib/resource/abstract/Clause.gf @@ -54,7 +54,29 @@ fun QPredAdv : IP -> Adv -> QCl ; -- "who is in France" QPredProgVP : IP -> VPI -> QCl ; -- "who is eating" +{- + RPredV : RP -> V -> RCl ; -- "who walks" + RPredPassV : RP -> V -> RCl ; -- "who is seen" + RPredV2 : RP -> V2 -> NP -> RCl ; -- "who sees Mary" + RPredV3 : RP -> V3 -> NP -> NP -> RCl ; -- "who gives Mary food" + RPredReflV2 : RP -> V2 -> RCl ; -- "who loves himself" + RPredVS : RP -> VS -> S -> RCl ; -- "who says that Mary runs" + RPredVV : RP -> VV -> VPI -> RCl ; -- "who must walk" + RPredVQ : RP -> VQ -> QS -> RCl ; -- "who asks who will come" + RPredVA : RP -> VA -> AP -> RCl ; -- "who looks ill" + RPredV2A : RP -> V2A -> NP ->AP ->RCl ; -- "who paints the house red" + RPredSubjV2V : RP -> V2V -> NP ->VPI ->RCl ; -- "who promises Mary to leave" + RPredObjV2V : RP -> V2V -> NP -> VPI -> RCl ; -- "who asks me to come" + RPredV2S : RP -> V2S -> NP -> S -> RCl ; -- "who told me that it is good" + RPredV2Q : RP -> V2Q -> NP -> QS -> RCl ; -- "who asked me if it is good" + RPredAP : RP -> AP -> RCl ; -- "who is old" + RPredCN : RP -> CN -> RCl ; -- "who is a man" + RPredNP : RP -> NP -> RCl ; -- "who is Bill" + RPredAdv : RP -> Adv -> RCl ; -- "who is in France" + + RPredProgVP : RP -> VPI -> RCl ; -- "who is eating" +-} IPredV : Ant -> V -> VPI ; -- "walk" IPredPassV : Ant -> V -> VPI ; -- "be seen" IPredV2 : Ant -> V2 -> NP -> VPI ; -- "see Mary" diff --git a/lib/resource/finnish/CategoriesFin.gf b/lib/resource/finnish/CategoriesFin.gf index 2be88803e..283bb27f3 100644 --- a/lib/resource/finnish/CategoriesFin.gf +++ b/lib/resource/finnish/CategoriesFin.gf @@ -82,7 +82,7 @@ lincat Slash = Sentence ** {s2 : Str ; c : Case} ; RP = {s : Number => Case => Str} ; ----- RCl = {s : Bool => SForm => Agr => Str} ; + RCl = {s : Bool => SForm => Number => Str} ; RS = {s : Number => Str} ; IP = {s : NPForm => Str ; n : Number} ; diff --git a/lib/resource/finnish/RulesFin.gf b/lib/resource/finnish/RulesFin.gf index 075813cd2..96a1d8bf1 100644 --- a/lib/resource/finnish/RulesFin.gf +++ b/lib/resource/finnish/RulesFin.gf @@ -56,7 +56,7 @@ lin NoNum = noNum ; UseA = adj2adjPhrase ; ------ ComplA2 = complAdj ; + ComplA2 = complAdj ; ---- ComplAV av vpi = {s = \\_,a => av.s ! a ++ vpi.s ! VIInfinit} ; ---- ComplObjA2V av obj vpi = {s = \\_,a => av.s ! a ++ obj.s ! complCase @@ -125,8 +125,8 @@ lin IdRP = identRelPron ; FunRP = funRelPron ; ---- RelSlash = relSlash ; ----- ModRS = modRelClause ; ----- RelCl = relSuch ; + ModRS = modRelClause ; + RelCl = relSuch ; --! diff --git a/lib/resource/finnish/SyntaxFin.gf b/lib/resource/finnish/SyntaxFin.gf index afe016ac9..360958dec 100644 --- a/lib/resource/finnish/SyntaxFin.gf +++ b/lib/resource/finnish/SyntaxFin.gf @@ -10,6 +10,10 @@ resource SyntaxFin = MorphoFin ** open Prelude, (CO = Coordination) in { + flags +---- optimize=noexpand ; + optimize=all ; + -- To glue a particle to the preceding word. The lexer and unlexer -- are expected to deal with actual gluing and vowel harmony. @@ -366,8 +370,8 @@ oper -- The order of the adjective and its argument depends on the case: the local -- cases favour Adj + Noun in the predicative position ("hyvä painissa", -- "tyytyväinen vaalitulokseen", "jaollinen kolmella"), which is not a possible --- order for the accusative case. A preposition seems not to seem affect --- the rule: ("yhtäsuuri kuin sinä", "sinua vastaan suunnattu"). +-- order for the accusative case. A preposition seems not to affect +-- the rule: "yhtäsuuri kuin sinä", "sinua vastaan suunnattu". AdjCompl = Adjective ** {s3 : Str ; p : Bool ; c : ComplCase} ; @@ -377,7 +381,7 @@ oper hyvat : AForm => Str = \\a => hyva.s ! a ; c : NPForm = complCase True hyva.c (SVI VIInf3Iness) ; painissa : Str = pPosit hyva.s3 hyva.p (paini.s ! c) ; - haspp : Bool = notB (isNil hyva.s3) + haspp : Bool = notB hyva.p in {s = table { AAttr => \\a => painissa ++ hyvat ! a ; @@ -958,6 +962,8 @@ oper (complementCase b ostaa.c (Pres jussi.n (np2Person jussi.p))) } ; -} + + --2 Relative pronouns and relative clauses -- -- As described in $types.Fin.gf$, relative pronouns are inflected like @@ -970,23 +976,30 @@ oper funRelPron : Function -> RelPron -> RelPron = \vaimo, joka -> {s = \\n,c => joka.s ! n ! npForm2Case n vaimo.c ++ vaimo.s ! False ! n ! c} ; +-- To use a relative pronoun as a noun phrase. + + relNounPhrase : Number -> RelPron -> NounPhrase = \n,rel -> + {s = \\f => rel.s ! n ! npForm2Case n f ; n = n ; p = NP3} ; + + -- Relative clauses can be formed from both verb phrases ("joka ui") and -- slash expressions ("jonka sinä näet", "jonka kautta sinä käyt"). - RelClause : Type = {s : Number => Str} ; + RelClause : Type = {s : Bool => SForm => Number => Str} ; + RelSentence : Type = {s : Number => Str} ; {- relVerbPhrase : RelPron -> VerbPhrase -> RelClause = \joka,ui -> {s = \\n => joka.s ! n ! npForm2Case n (complementCase True ui.c Inf) ++ ui.s ! Pres n P3 ++ ui.s2 ! Pres n P3} ; --} + relSlash : RelPron -> SentenceSlashNounPhrase -> RelClause = \joka,saat -> {s = \\n => joka.s ! n ! saat.c ++ saat.s2 ++ saat.s} ; - +-} -- A 'degenerate' relative clause is the one often used in mathematics, e.g. -- "luku x siten että x on parillinen". - relSuch : Sentence -> RelClause = \A -> - {s = \\_ => advSiten ++ conjEtta ++ A.s} ; + relSuch : Clause -> RelClause = \A -> + {s = \\b,s,_ => advSiten ++ conjEtta ++ A.s ! b ! s} ; -- N.B. the construction "sellainen että" is not possible with the present -- typing of the relative clause, since it should also be inflected in @@ -997,7 +1010,7 @@ oper -- by determiners. We use no comma before these relative clauses, even though -- conservative standard Finnish does. - modRelClause : CommNounPhrase -> RelClause -> CommNounPhrase = \mies,jokaui -> + modRelClause : CommNounPhrase -> RelSentence -> CommNounPhrase = \mies,jokaui -> {s = \\b,n,c => mies.s ! b ! n ! c ++ jokaui.s ! n ; g = mies.g } ;