diff --git a/lib/prelude/Coordination.gf b/lib/prelude/Coordination.gf
index 9e707faa1..bbc027048 100644
--- a/lib/prelude/Coordination.gf
+++ b/lib/prelude/Coordination.gf
@@ -120,5 +120,12 @@ oper
\P,c,x,xs ->
{s1 = table P {o => x.s ! o ++ c ++ xs.s1 ! o} ; s2 = xs.s2} ;
+ consrTable2 : (P,Q : Type) -> Str -> {s : P => Q => Str} ->
+ ListTable2 P Q -> ListTable2 P Q =
+ \P,Q,c,x,xs ->
+ {s1 = table P {p => table Q {q => x.s ! p ! q ++ c ++ xs.s1 ! p ! q}} ;
+ s2 = xs.s2
+ } ;
+
} ;
diff --git a/lib/resource-1.0/README b/lib/resource-1.0/README
index f6a3461f2..2d9d3aaca 100644
--- a/lib/resource-1.0/README
+++ b/lib/resource-1.0/README
@@ -58,6 +58,8 @@ When will it be ready? Hopefully around February 2005.
---------- later history and status:
+ 7/2 Finnish added.
+
3/2 Spanish added, except ordinal numerals. Much remains to do in Spa & Ita clitics.
1/2 Italian added.
diff --git a/lib/resource-1.0/TODO b/lib/resource-1.0/TODO
index a43e0815a..a72e7c8f8 100644
--- a/lib/resource-1.0/TODO
+++ b/lib/resource-1.0/TODO
@@ -38,4 +38,7 @@ API: swadesh/: build a swadesh-related API and migrate lexica
API: mathematical/: symbolic formulas as Cl
+API: text construction
+
+All: punctuation
diff --git a/lib/resource-1.0/doc/gfdoc/Adjective.html b/lib/resource-1.0/doc/gfdoc/Adjective.html
index e87145728..5e1b3aa6f 100644
--- a/lib/resource-1.0/doc/gfdoc/Adjective.html
+++ b/lib/resource-1.0/doc/gfdoc/Adjective.html
@@ -7,7 +7,7 @@
Adjectives and adjectival phrases
Author:
-Last update: Fri Feb 3 10:28:10 2006
+Last update: Tue Feb 7 19:04:48 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Adverb.html b/lib/resource-1.0/doc/gfdoc/Adverb.html
index f004c61a2..6b4c3b7a9 100644
--- a/lib/resource-1.0/doc/gfdoc/Adverb.html
+++ b/lib/resource-1.0/doc/gfdoc/Adverb.html
@@ -7,7 +7,7 @@
Adverbs and adverbial phrases
Author:
-Last update: Fri Feb 3 10:28:10 2006
+Last update: Tue Feb 7 19:04:48 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Cat.html b/lib/resource-1.0/doc/gfdoc/Cat.html
index 82269dd46..ea2d10b2e 100644
--- a/lib/resource-1.0/doc/gfdoc/Cat.html
+++ b/lib/resource-1.0/doc/gfdoc/Cat.html
@@ -7,7 +7,7 @@
The category system
Author:
-Last update: Fri Feb 3 10:28:10 2006
+Last update: Tue Feb 7 19:04:49 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Conjunction.html b/lib/resource-1.0/doc/gfdoc/Conjunction.html
index 3a3606de4..26709d54e 100644
--- a/lib/resource-1.0/doc/gfdoc/Conjunction.html
+++ b/lib/resource-1.0/doc/gfdoc/Conjunction.html
@@ -7,7 +7,7 @@
Coordination
Author:
-Last update: Fri Feb 3 10:28:10 2006
+Last update: Tue Feb 7 19:04:49 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Demonstrative.html b/lib/resource-1.0/doc/gfdoc/Demonstrative.html
index 0652a2e1d..4f83d397a 100644
--- a/lib/resource-1.0/doc/gfdoc/Demonstrative.html
+++ b/lib/resource-1.0/doc/gfdoc/Demonstrative.html
@@ -14,7 +14,7 @@
Author:
-Last update: Fri Feb 3 10:28:14 2006
+Last update: Tue Feb 7 19:04:53 2006
Produced by
diff --git a/lib/resource-1.0/doc/gfdoc/Lang.html b/lib/resource-1.0/doc/gfdoc/Lang.html
index 1d1ebd393..4c81cec31 100644
--- a/lib/resource-1.0/doc/gfdoc/Lang.html
+++ b/lib/resource-1.0/doc/gfdoc/Lang.html
@@ -7,7 +7,7 @@
The Main Module of the Resource Grammar
Author:
-Last update: Fri Feb 3 10:28:10 2006
+Last update: Tue Feb 7 19:04:49 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Mathematical.html b/lib/resource-1.0/doc/gfdoc/Mathematical.html
index e73ec96fd..e018465dd 100644
--- a/lib/resource-1.0/doc/gfdoc/Mathematical.html
+++ b/lib/resource-1.0/doc/gfdoc/Mathematical.html
@@ -7,7 +7,7 @@
The Mathematics API to the Resource Grammar
Author:
-Last update: Fri Feb 3 10:28:13 2006
+Last update: Tue Feb 7 19:04:53 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Multimodal.html b/lib/resource-1.0/doc/gfdoc/Multimodal.html
index f1da06bee..a8890de6f 100644
--- a/lib/resource-1.0/doc/gfdoc/Multimodal.html
+++ b/lib/resource-1.0/doc/gfdoc/Multimodal.html
@@ -14,7 +14,7 @@
Author:
-Last update: Fri Feb 3 10:28:14 2006
+Last update: Tue Feb 7 19:04:53 2006
Produced by
diff --git a/lib/resource-1.0/doc/gfdoc/Noun.html b/lib/resource-1.0/doc/gfdoc/Noun.html
index 5bd6ca134..77bf1aa6f 100644
--- a/lib/resource-1.0/doc/gfdoc/Noun.html
+++ b/lib/resource-1.0/doc/gfdoc/Noun.html
@@ -7,7 +7,7 @@
The construction of nouns, noun phrases, and determiners
Author:
-Last update: Fri Feb 3 10:28:11 2006
+Last update: Tue Feb 7 19:04:50 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Numeral.html b/lib/resource-1.0/doc/gfdoc/Numeral.html
index 039299c4b..2cfffa8e6 100644
--- a/lib/resource-1.0/doc/gfdoc/Numeral.html
+++ b/lib/resource-1.0/doc/gfdoc/Numeral.html
@@ -7,7 +7,7 @@
Numerals
Author:
-Last update: Fri Feb 3 10:28:11 2006
+Last update: Tue Feb 7 19:04:50 2006
diff --git a/lib/resource-1.0/doc/gfdoc/ParadigmsEng.html b/lib/resource-1.0/doc/gfdoc/ParadigmsEng.html
index 3f1d277cb..89c0eda59 100644
--- a/lib/resource-1.0/doc/gfdoc/ParadigmsEng.html
+++ b/lib/resource-1.0/doc/gfdoc/ParadigmsEng.html
@@ -43,7 +43,7 @@
Author:
-Last update: Fri Feb 3 10:28:12 2006
+Last update: Tue Feb 7 19:04:51 2006
Produced by
diff --git a/lib/resource-1.0/doc/gfdoc/ParadigmsFre.html b/lib/resource-1.0/doc/gfdoc/ParadigmsFre.html
index 5eb2a5b52..bd788334a 100644
--- a/lib/resource-1.0/doc/gfdoc/ParadigmsFre.html
+++ b/lib/resource-1.0/doc/gfdoc/ParadigmsFre.html
@@ -41,7 +41,7 @@
Author:
-Last update: Fri Feb 3 10:28:12 2006
+Last update: Tue Feb 7 19:04:52 2006
Produced by
diff --git a/lib/resource-1.0/doc/gfdoc/ParadigmsGer.html b/lib/resource-1.0/doc/gfdoc/ParadigmsGer.html
index 610e68c48..39fc6b7f0 100644
--- a/lib/resource-1.0/doc/gfdoc/ParadigmsGer.html
+++ b/lib/resource-1.0/doc/gfdoc/ParadigmsGer.html
@@ -35,7 +35,7 @@
Author:
-Last update: Fri Feb 3 10:28:13 2006
+Last update: Tue Feb 7 19:04:52 2006
Produced by
diff --git a/lib/resource-1.0/doc/gfdoc/ParadigmsIta.html b/lib/resource-1.0/doc/gfdoc/ParadigmsIta.html
index 249491e97..a3295f030 100644
--- a/lib/resource-1.0/doc/gfdoc/ParadigmsIta.html
+++ b/lib/resource-1.0/doc/gfdoc/ParadigmsIta.html
@@ -41,7 +41,7 @@
Author:
-Last update: Fri Feb 3 10:28:13 2006
+Last update: Tue Feb 7 19:04:52 2006
Produced by
diff --git a/lib/resource-1.0/doc/gfdoc/ParadigmsNor.html b/lib/resource-1.0/doc/gfdoc/ParadigmsNor.html
index d95fa61dd..22b6b8240 100644
--- a/lib/resource-1.0/doc/gfdoc/ParadigmsNor.html
+++ b/lib/resource-1.0/doc/gfdoc/ParadigmsNor.html
@@ -43,7 +43,7 @@
Author:
-Last update: Fri Feb 3 10:28:13 2006
+Last update: Tue Feb 7 19:04:52 2006
Produced by
diff --git a/lib/resource-1.0/doc/gfdoc/ParadigmsSpa.html b/lib/resource-1.0/doc/gfdoc/ParadigmsSpa.html
index f9849b50d..76b8015b3 100644
--- a/lib/resource-1.0/doc/gfdoc/ParadigmsSpa.html
+++ b/lib/resource-1.0/doc/gfdoc/ParadigmsSpa.html
@@ -41,7 +41,7 @@
Author:
-Last update: Fri Feb 3 10:28:13 2006
+Last update: Tue Feb 7 19:04:52 2006
Produced by
diff --git a/lib/resource-1.0/doc/gfdoc/ParadigmsSwe.html b/lib/resource-1.0/doc/gfdoc/ParadigmsSwe.html
index 68fe50f46..b73be52a1 100644
--- a/lib/resource-1.0/doc/gfdoc/ParadigmsSwe.html
+++ b/lib/resource-1.0/doc/gfdoc/ParadigmsSwe.html
@@ -43,7 +43,7 @@
Author:
-Last update: Fri Feb 3 10:28:13 2006
+Last update: Tue Feb 7 19:04:52 2006
Produced by
diff --git a/lib/resource-1.0/doc/gfdoc/Phrase.html b/lib/resource-1.0/doc/gfdoc/Phrase.html
index 6a6cec7da..8cb2731b0 100644
--- a/lib/resource-1.0/doc/gfdoc/Phrase.html
+++ b/lib/resource-1.0/doc/gfdoc/Phrase.html
@@ -7,7 +7,7 @@
Phrases and utterances
Author:
-Last update: Fri Feb 3 10:28:11 2006
+Last update: Tue Feb 7 19:04:50 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Predication.html b/lib/resource-1.0/doc/gfdoc/Predication.html
index f6424be3b..03a6e4e8f 100644
--- a/lib/resource-1.0/doc/gfdoc/Predication.html
+++ b/lib/resource-1.0/doc/gfdoc/Predication.html
@@ -7,7 +7,7 @@
A Small Predication Library
Author:
-Last update: Fri Feb 3 10:28:14 2006
+Last update: Tue Feb 7 19:04:53 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Question.html b/lib/resource-1.0/doc/gfdoc/Question.html
index f257da675..6ef994d05 100644
--- a/lib/resource-1.0/doc/gfdoc/Question.html
+++ b/lib/resource-1.0/doc/gfdoc/Question.html
@@ -7,7 +7,7 @@
Questions and interrogative pronouns
Author:
-Last update: Fri Feb 3 10:28:11 2006
+Last update: Tue Feb 7 19:04:50 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Relative.html b/lib/resource-1.0/doc/gfdoc/Relative.html
index c422611ee..92ca39433 100644
--- a/lib/resource-1.0/doc/gfdoc/Relative.html
+++ b/lib/resource-1.0/doc/gfdoc/Relative.html
@@ -7,7 +7,7 @@
Relative clauses and pronouns
Author:
-Last update: Fri Feb 3 10:28:11 2006
+Last update: Tue Feb 7 19:04:50 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Sentence.html b/lib/resource-1.0/doc/gfdoc/Sentence.html
index b7fb61982..c3f9beb7a 100644
--- a/lib/resource-1.0/doc/gfdoc/Sentence.html
+++ b/lib/resource-1.0/doc/gfdoc/Sentence.html
@@ -7,7 +7,7 @@
Sentences, clauses, imperatives, and sentential complements
Author:
-Last update: Fri Feb 3 10:28:12 2006
+Last update: Tue Feb 7 19:04:50 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Structural.html b/lib/resource-1.0/doc/gfdoc/Structural.html
index 3f3278c2b..b344945af 100644
--- a/lib/resource-1.0/doc/gfdoc/Structural.html
+++ b/lib/resource-1.0/doc/gfdoc/Structural.html
@@ -7,7 +7,7 @@
GF Resource Grammar API for Structural Words
Author:
-Last update: Fri Feb 3 10:28:12 2006
+Last update: Tue Feb 7 19:04:51 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Symbol.html b/lib/resource-1.0/doc/gfdoc/Symbol.html
index 5ac9b5894..37b4c5a85 100644
--- a/lib/resource-1.0/doc/gfdoc/Symbol.html
+++ b/lib/resource-1.0/doc/gfdoc/Symbol.html
@@ -7,7 +7,7 @@
Symbolic expressions
Author:
-Last update: Fri Feb 3 10:28:14 2006
+Last update: Tue Feb 7 19:04:53 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Tense.html b/lib/resource-1.0/doc/gfdoc/Tense.html
index c41f0544a..5ad23f01d 100644
--- a/lib/resource-1.0/doc/gfdoc/Tense.html
+++ b/lib/resource-1.0/doc/gfdoc/Tense.html
@@ -7,7 +7,7 @@
Tense, Polarity, and Anteriority
Author:
-Last update: Fri Feb 3 10:28:12 2006
+Last update: Tue Feb 7 19:04:51 2006
diff --git a/lib/resource-1.0/doc/gfdoc/Verb.html b/lib/resource-1.0/doc/gfdoc/Verb.html
index a42ae0d03..119b1ffad 100644
--- a/lib/resource-1.0/doc/gfdoc/Verb.html
+++ b/lib/resource-1.0/doc/gfdoc/Verb.html
@@ -7,7 +7,7 @@
The construction of verb phrases
Author:
-Last update: Fri Feb 3 10:28:12 2006
+Last update: Tue Feb 7 19:04:51 2006
diff --git a/lib/resource-1.0/doc/index.html b/lib/resource-1.0/doc/index.html
index 45a935381..05331eef9 100644
--- a/lib/resource-1.0/doc/index.html
+++ b/lib/resource-1.0/doc/index.html
@@ -7,7 +7,7 @@
GF Resource Grammar Library v. 1.0
Author: Aarne Ranta <aarne (at) cs.chalmers.se>
-Last update: Fri Feb 3 10:25:39 2006
+Last update: Tue Feb 7 19:05:12 2006
@@ -68,6 +68,7 @@ The documentation of the individual modules:
The language-dependent APIs
- ParadigmsEng: English lexical paradigms
+
- ParadigmsFin: Finnish lexical paradigms
- ParadigmsFre: French lexical paradigms
- ParadigmsIta: Italian lexical paradigms
- ParadigmsGer: German lexical paradigms
diff --git a/lib/resource-1.0/doc/index.txt b/lib/resource-1.0/doc/index.txt
index e54734a61..a097e2322 100644
--- a/lib/resource-1.0/doc/index.txt
+++ b/lib/resource-1.0/doc/index.txt
@@ -47,6 +47,7 @@ The documentation of the individual modules:
==The language-dependent APIs==
- [ParadigmsEng gfdoc/ParadigmsEng.html]: English lexical paradigms
+- [ParadigmsFin gfdoc/ParadigmsFin.html]: Finnish lexical paradigms
- [ParadigmsFre gfdoc/ParadigmsFre.html]: French lexical paradigms
- [ParadigmsIta gfdoc/ParadigmsIta.html]: Italian lexical paradigms
- [ParadigmsGer gfdoc/ParadigmsGer.html]: German lexical paradigms
diff --git a/lib/resource-1.0/finnish/AdjectiveFin.gf b/lib/resource-1.0/finnish/AdjectiveFin.gf
index 886601c0d..78e7d4a7c 100644
--- a/lib/resource-1.0/finnish/AdjectiveFin.gf
+++ b/lib/resource-1.0/finnish/AdjectiveFin.gf
@@ -1,6 +1,6 @@
concrete AdjectiveFin of Adjective = CatFin ** open ResFin, Prelude in {
- flags optimize=all_subs ; -- gfc size from 2864336 to 6786
+ flags optimize=all_subs ; -- gfc size from 2864336 to 6786 - i.e. factor 422
lin
@@ -20,17 +20,17 @@ concrete AdjectiveFin of Adjective = CatFin ** open ResFin, Prelude in {
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
+
+ ReflA2 adj = {
+ s = \\isMod,af =>
+ preOrPost isMod
+ (appCompl True Pos adj.c2 (reflPron (agrP3 Sg))) (adj.s ! Posit ! af)
} ;
SentAP ap sc = {
- s = \\a => ap.s ! a ++ sc.s ;
- isPre = False
+ s = \\b,a => ap.s ! b ! a ++ sc.s
} ;
--}
+
AdAP ada ap = {
s = \\b,af => ada.s ++ ap.s ! b ! af
} ;
diff --git a/lib/resource-1.0/finnish/CatFin.gf b/lib/resource-1.0/finnish/CatFin.gf
index 7a1cbb2fe..5df744765 100644
--- a/lib/resource-1.0/finnish/CatFin.gf
+++ b/lib/resource-1.0/finnish/CatFin.gf
@@ -57,11 +57,12 @@ concrete CatFin of Cat = TenseX ** open ResFin, Prelude in {
s2 : Str ; -- -ni
n : Number ; -- Pl (agreement feature for verb)
isNum : Bool ; -- True (a numeral is present)
- isPoss : Bool -- True (a possessive suffix is present)
+ isPoss : Bool ; -- True (a possessive suffix is present)
+ isDef : Bool -- True (verb agrees in Pl, Nom is not Part)
} ;
- QuantSg, QuantPl = {s1 : Case => Str ; s2 : Str ; isPoss : Bool} ;
+ QuantSg, QuantPl = {s1 : Case => Str ; s2 : Str ; isPoss, isDef : Bool} ;
Predet, Ord = {s : Number => Case => Str} ;
- Quant = {s1 : Number => Case => Str ; s2 : Str ; isPoss : Bool} ;
+ Quant = {s1 : Number => Case => Str ; s2 : Str ; isPoss, isDef : Bool} ;
Num = {s : Number => Case => Str ; isNum : Bool} ;
-- Adverb
@@ -83,13 +84,13 @@ concrete CatFin of Cat = TenseX ** open ResFin, Prelude in {
-- Open lexical classes, e.g. Lexicon
- V, VS, VQ, VA = Verb1 ; -- = {s : VForm => Str ; sc : Case} ;
- V2 = Verb1 ** {c2 : Compl} ;
+ V, VS, VQ = Verb1 ; -- = {s : VForm => Str ; sc : Case} ;
+ V2, VA = Verb1 ** {c2 : Compl} ;
V2A = Verb1 ** {c2, c3 : Compl} ;
VV = Verb1 ; ---- infinitive form
V3 = Verb1 ** {c2, c3 : Compl} ;
- A = {s : Degree => AForm => Str} ;
+ A = {s : Degree => AForm => Str} ;
A2 = {s : Degree => AForm => Str ; c2 : Compl} ;
N = {s : NForm => Str} ;
diff --git a/lib/resource-1.0/finnish/ConjunctionFin.gf b/lib/resource-1.0/finnish/ConjunctionFin.gf
index 1b8298d40..6bb5f53d5 100644
--- a/lib/resource-1.0/finnish/ConjunctionFin.gf
+++ b/lib/resource-1.0/finnish/ConjunctionFin.gf
@@ -20,8 +20,8 @@ concrete ConjunctionFin of Conjunction =
isPron = False
} ;
--- ConjAP conj ss = conjunctTable Agr conj ss ;
--- DConjAP conj ss = conjunctDistrTable Agr conj ss ;
+ ConjAP conj ss = conjunctTable2 Bool AForm conj ss ;
+ DConjAP conj ss = conjunctDistrTable2 Bool AForm conj ss ;
-- These fun's are generated from the list cat's.
@@ -31,13 +31,13 @@ concrete ConjunctionFin of Conjunction =
ConsAdv = consrSS comma ;
BaseNP x y = twoTable NPForm x y ** {a = conjAgr x.a y.a} ;
ConsNP xs x = consrTable NPForm comma xs x ** {a = conjAgr xs.a x.a} ;
--- BaseAP x y = twoTable Agr x y ** {isPre = andB x.isPre y.isPre} ;
--- ConsAP xs x = consrTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ;
+ BaseAP x y = twoTable2 Bool AForm x y ;
+ ConsAP xs x = consrTable2 Bool AForm comma xs x ;
lincat
[S] = {s1,s2 : Str} ;
[Adv] = {s1,s2 : Str} ;
[NP] = {s1,s2 : NPForm => Str ; a : Agr} ;
--- [AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;
+ [AP] = {s1,s2 : Bool => AForm => Str} ;
}
diff --git a/lib/resource-1.0/finnish/LexiconFin.gf b/lib/resource-1.0/finnish/LexiconFin.gf
index ba064c721..0bbe9d8b8 100644
--- a/lib/resource-1.0/finnish/LexiconFin.gf
+++ b/lib/resource-1.0/finnish/LexiconFin.gf
@@ -93,7 +93,7 @@ lin
harbour_N = nKukko "satama" "sataman" "satamia" ;
hate_V2 = dirV2 (regV "vihata") ;
hat_N = nLukko "hattu" ;
- have_V2 = caseV2 (caseV adessive vOlla) nominative ;
+ have_V2 = dirV2 (caseV adessive vOlla) ;
hear_V2 = dirV2 (regV "kuulla") ;
hill_N = nLukko "kukkula" ;
hope_VS = mkVS (regV "toivoa") ;
diff --git a/lib/resource-1.0/finnish/MorphoFin.gf b/lib/resource-1.0/finnish/MorphoFin.gf
index f2cc0f4ab..a0b269581 100644
--- a/lib/resource-1.0/finnish/MorphoFin.gf
+++ b/lib/resource-1.0/finnish/MorphoFin.gf
@@ -28,69 +28,8 @@ oper
talo (Predef.tk 1 talon) (Predef.tk 2 talona) taloa taloon
(Predef.tk 2 taloina) (Predef.tk 3 taloissa) talojen taloja taloihin) ;
--- Regular heuristics.
-{-
- regNounH : Str -> NounH = \vesi ->
- let
- esi = Predef.dp 3 vesi ; -- analysis: suffixes
- si = Predef.dp 2 esi ;
- i = last si ;
- s = init si ;
- a = if_then_Str (pbool2bool (Predef.occurs "aou" vesi)) "a" "ä" ;
- ves = init vesi ; -- synthesis: prefixes
- vet = strongGrade ves ;
- ve = init ves ;
- in
- case esi of {
- "uus" | "yys" => sRakkaus vesi ;
- "nen" => sNainen (Predef.tk 3 vesi + ("st" + a)) ;
-
- _ => case si of {
- "aa" | "ee" | "ii" | "oo" | "uu" | "yy" | "ää" | "öö" => sPuu vesi ;
- "ie" | "uo" | "yö" => sSuo vesi ;
- "ea" | "eä" =>
- mkSubst
- a
- vesi (vesi) (vesi) (vesi + a) (vesi + a+"n")
- (ves + "i") (ves + "i") (ves + "iden") (ves + "it"+a)
- (ves + "isiin") ;
- "is" => sNauris (vesi + ("t" + a)) ;
- "ut" | "yt" => sRae vesi (ves + ("en" + a)) ;
- "as" | "äs" => sRae vesi (vet + (a + "n" + a)) ;
- "ar" | "är" => sRae vesi (vet + ("ren" + a)) ;
- _ => case i of {
- "n" => sLiitin vesi (vet + "men") ;
- "s" => sTilaus vesi (ves + ("ksen" + a)) ;
- "i" => sBaari (vesi + a) ;
- "e" => sRae vesi (strongGrade vesi + "en" + a) ;
- "a" | "o" | "u" | "y" | "ä" | "ö" => sLukko vesi ;
- _ => sLinux (vesi + "i" + a)
- }
- }
- } ;
-
- reg2NounH : (savi,savia : Str) -> NounH = \savi,savia ->
- let
- savit = regNounH savi ;
- ia = Predef.dp 2 savia ;
- i = init ia ;
- a = last ia ;
- o = last savi ;
- savin = weakGrade savi + "n" ;
- in
- case of {
- <"i","ia"> => sArpi savi ;
- <"i","iä"> => sSylki savi ;
- <"i","ta"> | <"i","tä"> => sTohtori (savi + a) ;
- <"o","ta"> | <"ö","tä"> => sRadio savi ;
- <"a","ta"> | <"ä","tä"> => sPeruna savi ;
- <"a","ia"> | <"a","ja"> => sKukko savi savin savia ;
- _ => savit
- } ;
--}
-
--- Here some useful special cases; more will be given in $paradigms.Fin.gf$.
+-- Here some useful special cases; more are given in $ParadigmsFin.gf$.
--
sLukko : Str -> NounH = \lukko ->
@@ -612,51 +551,42 @@ vowelHarmony : Str -> Str = \liitin ->
} ;
--- The non-human pronoun "se" ('it') is even more irregular,
--- Its accusative cases do not
--- have a special form with "t", but have the normal genitive/nominative variation.
--- We use the type $ProperName$ for "se", because of the accusative but also
--- because the person and number are as for proper names.
- pronSe : ProperName = {
- s = table {
- Nom => "se" ;
- Gen => "sen" ;
- Part => "sitä" ;
- Transl => "siksi" ;
- Ess => "sinä" ;
- Iness => "siinä" ;
- Elat => "siitä" ;
- Illat => "siihen" ;
- Adess => "sillä" ;
- Ablat => "siltä" ;
- Allat => "sille" ;
- Abess => "sittä"
- } ;
+-- Determiners
+
+ mkDet : Number -> CommonNoun -> {
+ s1 : Case => Str ; -- minun kolme
+ s2 : Str ; -- -ni
+ n : Number ; -- Pl (agreement feature for verb)
+ isNum : Bool ; -- True (a numeral is present)
+ isPoss : Bool ; -- True (a possessive suffix is present)
+ isDef : Bool -- True (verb agrees in Pl, Nom is not Part)
+ } = \n, noun -> {
+ s1 = \\c => noun.s ! NCase n c ;
+ s2 = [] ;
+ n = n ;
+ isNum, isPoss = False ;
+ isDef = True --- does this hold for all new dets?
} ;
--- The possessive suffixes will be needed in syntax. It will show up
--- as a separate word ("auto &+ ni"), which needs unlexing. Unlexing also
--- has to fix the vowel harmony in cases like "äiti &+ nsä".
-
- suff : Str -> Str = \ni -> ni ;
-
- possSuffix : Number => Person => Str = \\n,p =>
- suff (case of {
- => "ni" ;
- => "si" ;
- => "nsa" ;
- => "mme" ;
- => "nne" ;
- => "nsa"
- } ) ;
+ mkQuant : CommonNoun -> {
+ s1 : Number => Case => Str ;
+ s2 : Str ;
+ isPoss, isDef : Bool
+ } = \noun -> {
+ s1 = \\n,c => noun.s ! NCase n c ;
+ s2 = [] ;
+ isPoss = False ;
+ isDef = True --- does this hold for all new dets?
+ } ;
-- The relative pronoun, "joka", is inflected in case and number,
-- like common nouns, but it does not take possessive suffixes.
-- The inflextion shows a surprising similarity with "suo".
- relPron : {s : Number => Case => Str} =
- let {jo = nhn (sSuo "jo")} in {s =
+oper
+ relPron : Number => Case => Str =
+ let {jo = nhn (sSuo "jo")} in
table {
Sg => table {
Nom => "joka" ;
@@ -667,116 +597,8 @@ vowelHarmony : Str -> Str = \liitin ->
Nom => "jotka" ;
c => "j" + (jo.s ! NCase Pl c)
}
- }
- } ;
+ } ;
- mikaInt : Number => Case => Str =
- let {
- mi = nhn (sSuo "mi")
- } in
- table {
- Sg => table {
- Nom => "mikä" ;
- Gen => "minkä" ;
- c => mi.s ! NCase Sg c
- } ;
- Pl => table {
- Nom => "mitkä" ;
- Gen => "mittenkä" ;
- c => mi.s ! NCase Sg c
- }
- } ;
-
- kukaInt : Number => Case => Str =
- let {
- ku = nhn (sRae "kuka" "kenenä") ;
- ket = nhn (sRae "kuka" "keinä")} in
- table {
- Sg => table {
- Nom => "kuka" ;
- Part => "ketä" ;
- Illat => "keneen" ;
- c => ku.s ! NCase Sg c
- } ;
- Pl => table {
- Nom => "ketkä" ;
- Illat => "keihin" ;
- c => ket.s ! NCase Pl c
- }
- } ;
-
- mikaanPron : Number => Case => Str = \\n,c =>
- case of {
- => "mikään" ;
- <_,Part> => "mitään" ;
- => "minkään" ;
- => "mitkään" ;
- => "mittenkään" ;
- <_,Ess> => "minään" ;
- <_,Iness> => "missään" ;
- <_,Elat> => "mistään" ;
- <_,Adess> => "millään" ;
- <_,Ablat> => "miltään" ;
- _ => mikaInt ! n ! c + "kään"
- } ;
-
- kukaanPron : Number => Case => Str =
- table {
- Sg => table {
- Nom => "kukaan" ;
- Part => "ketään" ;
- Ess => "kenään" ;
- Iness => "kessään" ;
- Elat => "kestään" ;
- Illat => "kehenkään" ;
- Adess => "kellään" ;
- Ablat => "keltään" ;
- c => kukaInt ! Sg ! c + "kään"
- } ;
- Pl => table {
- Nom => "ketkään" ;
- Part => "keitään" ;
- Ess => "keinään" ;
- Iness => "keissään" ;
- Elat => "keistään" ;
- Adess => "keillään" ;
- Ablat => "keiltään" ;
- c => kukaInt ! Pl ! c + "kään"
- }
- } ;
-
- jokuPron : Number => Case => Str =
- let
- ku = nhn (sPuu "ku") ;
- kui = nhn (sPuu "kuu")
- in
- table {
- Sg => table {
- Nom => "joku" ;
- Gen => "jonkun" ;
- c => relPron.s ! Sg ! c + ku.s ! NCase Sg c
- } ;
- Pl => table {
- Nom => "jotkut" ;
- c => relPron.s ! Pl ! c + kui.s ! NCase Pl c
- }
- } ;
-
- jokinPron : Number => Case => Str =
- table {
- Sg => table {
- Nom => "jokin" ;
- Gen => "jonkin" ;
- c => relPron.s ! Sg ! c + "kin"
- } ;
- Pl => table {
- Nom => "jotkin" ;
- c => relPron.s ! Pl ! c + "kin"
- }
- } ;
-
-moniPron : Case => Str = caseTable Sg (nhn (sSusi "moni" "monen" "monena")) ;
-
caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
\\c => cn.s ! NCase n c ;
diff --git a/lib/resource-1.0/finnish/NounFin.gf b/lib/resource-1.0/finnish/NounFin.gf
index 59870437a..4d25efb7f 100644
--- a/lib/resource-1.0/finnish/NounFin.gf
+++ b/lib/resource-1.0/finnish/NounFin.gf
@@ -13,21 +13,26 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
True => Sg ;
_ => det.n
} ;
- 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 : Case -> NForm = \c ->
+ case of {
+ <_, Nom, True,_,_> => NCase Sg Part ; -- kolme kytkintä(ni)
+ <_, _, True,False,_> => NCase Sg c ; -- kolmeksi kytkimeksi
+ => NCase Pl Part ; -- kytkimiä
+ <_, Nom,_,True,_> => NPossNom ; -- kytkime+ni on/ovat...
+ => NPossNom ; -- kytkime+ni vika
+ => NPossGenPl ; -- kytkimie+ni viat
+ <_, Transl,_,True,_> => NPossTransl n ; -- kytkim(e|i)kse+ni
+ <_, Illat,_,True,_> => NPossIllat n ; -- kytkim(ee|ii)+ni
- _ => NCase n c ----
- }
+ _ => NCase n c -- kytkin, kytkimen,...
+ }
in {
s = \\c => let k = npform2case c in
det.s1 ! k ++ cn.s ! ncase k ++ det.s2 ;
- a = agrP3 det.n ;
+ a = agrP3 (case det.isDef of {
+ False => Sg ; -- autoja menee; kolme autoa menee
+ _ => det.n
+ }) ;
isPron = False
} ;
@@ -49,36 +54,40 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
s2 = quant.s2 ;
n = Sg ;
isNum = False ;
- isPoss = quant.isPoss
+ isPoss = quant.isPoss ;
+ isDef = False -- doesn't matter with Sg
} ;
DetPl quant num ord = {
- s1 = \\c => quant.s1 ! c ++ num.s ! Sg ! c ++ ord.s ! Sg ! c ;
- s2 = quant.s2 ;
+ s1 = \\c => quant.s1 ! c ++ num.s ! Pl ! c ++ ord.s ! Pl ! c ;
+ s2 = quant.s2 ;
n = Pl ;
isNum = num.isNum ;
- isPoss = quant.isPoss
+ isPoss = quant.isPoss ;
+ isDef = quant.isDef
} ;
SgQuant quant = {
s1 = quant.s1 ! Sg ;
s2 = quant.s2 ;
isNum = quant.isNum ;
- isPoss = quant.isPoss
+ isPoss = quant.isPoss ;
+ isDef = quant.isDef -- doesn't matter with Sg
} ;
PlQuant quant = {
s1 = quant.s1 ! Pl ;
s2 = quant.s2 ;
isNum = quant.isNum ;
- isPoss = quant.isPoss
+ isPoss = quant.isPoss ;
+ isDef = quant.isDef
} ;
-
PossPron p = {
s1 = \\_,_ => p.s ! NPCase Gen ;
- s2 = BIND ++ table Agr ["ni" ; "si" ; "nsa" ; "mme" ; "nne" ; "nsa"] ! p.a ;
+ s2 = BIND ++ possSuffix p.a ;
isNum = False ;
- isPoss = True
+ isPoss = True ;
+ isDef = True --- "minun kolme autoani ovat" ; thus "...on" is missing
} ;
NoNum = {s = \\_,_ => [] ; isNum = False} ;
@@ -87,29 +96,30 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
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 = \\n,c => numeral.s ! NCard (NCase n c) ; isNum = True} ;
+ OrdNumeral numeral = {s = \\n,c => numeral.s ! NOrd (NCase n c)} ;
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 = \\n,c => a.s ! Superl ! AN (NCase n c)} ;
DefArt = {
s1 = \\_,_ => [] ;
s2 = [] ;
- isNum,isPoss = False
+ isNum,isPoss = False ;
+ isDef = True -- autot ovat
} ;
IndefArt = {
- s1 = \\_,_ => [] ; --- Nom is Part in Pl ?
+ s1 = \\_,_ => [] ; -- Nom is Part in Pl: use isDef in DetCN
s2 = [] ;
- isNum,isPoss = False
+ isNum,isPoss,isDef = False -- autoja on
} ;
MassDet = {
s1 = \\_ => [] ; --- Nom is Part ?
s2 = [] ;
- isNum,isPoss = False
+ isNum,isPoss,isDef = False
} ;
UseN n = n ;
@@ -117,6 +127,8 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
UseN2 n = n ;
UseN3 n = n ;
+--- If a possessive suffix is added here it goes after the complements...
+
ComplN2 f x = {
s = \\nf => appCompl True Pos f.c2 x ++ f.s ! nf
} ;
@@ -128,10 +140,16 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
AdjCN ap cn = {
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} ;
- SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s} ;
--}
+ RelCN cn rs = {s = \\nf => cn.s ! nf ++ rs.s ! agrP3 (numN nf)} ;
+ AdvCN cn ad = {s = \\nf => cn.s ! nf ++ ad.s} ;
+
+ SentCN cn sc = {s = \\nf=> cn.s ! nf ++ sc.s} ;
+
+ oper
+ numN : NForm -> Number = \nf -> case nf of {
+ NCase n _ => n ;
+ _ => Sg ---
+ } ;
+
}
diff --git a/lib/resource-1.0/finnish/ParadigmsFin.gf b/lib/resource-1.0/finnish/ParadigmsFin.gf
index 51e02d767..9e2d43bb3 100644
--- a/lib/resource-1.0/finnish/ParadigmsFin.gf
+++ b/lib/resource-1.0/finnish/ParadigmsFin.gf
@@ -210,7 +210,7 @@ oper
-- The plural forms are filtered away by the compiler.
mkPN : N -> PN ;
-
+ mkNP : N -> Number -> NP ;
--2 Adjectives
@@ -249,6 +249,10 @@ oper
reg2V : (soutaa,souti : Str) -> V ;
reg3V : (soutaa,soudan,souti : Str) -> V ;
+-- The subject case of verbs is by default nominative. This dunction can change it.
+
+ subjcaseV : V -> Case -> V ;
+
-- The rest of the paradigms are special cases mostly covered by the heuristics.
-- A simple special case is the one with just one stem and without grade alternation.
@@ -475,6 +479,12 @@ reg3N = \vesi,veden,vesi
mkN3 = \n,c,e -> n ** {c2 = c ; c3 = e ; lock_N3 = <>} ;
genN2 = \n -> mkN2 n (casePrep genitive) ;
mkPN n = mkProperName n ** {lock_PN = <>} ;
+ mkNP noun num = {
+ s = \\c => noun.s ! NCase num (npform2case c) ;
+ a = agrP3 num ;
+ isPron = False ;
+ lock_NP = <>
+ } ;
mkA = \x -> {s = \\_ => (noun2adj x).s ; lock_A = <>} ;
mkA2 = \x,c -> x ** {c2 = c ; lock_A2 = <>} ;
@@ -504,6 +514,8 @@ reg3N = \vesi,veden,vesi
reg3V soutaa soudan souti =
v2v (reg3VerbH soutaa soudan souti) ** {sc = NPCase Nom ; lock_V = <>} ;
+ subjcaseV v c = {s = v.s ; sc = NPCase c ; lock_V = v.lock_V} ;
+
vValua v = v2v (vSanoa v) ** {sc = NPCase Nom ; lock_V = <>} ;
vKattaa v u = v2v (vOttaa v u) ** {sc = NPCase Nom ; lock_V = <>} ;
vOstaa v = v2v (vPoistaa v) ** {sc = NPCase Nom ; lock_V = <>} ;
diff --git a/lib/resource-1.0/finnish/PhraseFin.gf b/lib/resource-1.0/finnish/PhraseFin.gf
index a02f55931..059d162c5 100644
--- a/lib/resource-1.0/finnish/PhraseFin.gf
+++ b/lib/resource-1.0/finnish/PhraseFin.gf
@@ -11,7 +11,7 @@ concrete PhraseFin of Phrase = CatFin ** open ResFin in {
UttIP ip = {s = ip.s ! NPCase Nom} ;
UttIAdv iadv = iadv ;
UttNP np = {s = np.s ! NPCase Nom} ;
--- UttVP vp = {s = "to" ++ infVP vp (agrP3 Sg)} ;
+ UttVP vp = {s = infVP (NPCase Nom) Pos (agrP3 Sg) vp} ;
UttAdv adv = adv ;
NoPConj = {s = []} ;
diff --git a/lib/resource-1.0/finnish/QuestionFin.gf b/lib/resource-1.0/finnish/QuestionFin.gf
index 04ee1e813..0dcf135a1 100644
--- a/lib/resource-1.0/finnish/QuestionFin.gf
+++ b/lib/resource-1.0/finnish/QuestionFin.gf
@@ -14,18 +14,16 @@ concrete QuestionFin of Question = CatFin ** open ResFin, Prelude in {
in {
s = \\t,a,p => cl.s ! t ! a ! p ! SDecl
} ;
-{-
+
QuestSlash ip slash = {
s = \\t,a,p =>
let
cls = slash.s ! t ! a ! p ;
- who = slash.c2 ++ ip.s ! Acc --- stranding in ExtFin
- in table {
- QDir => who ++ cls ! OQuest ;
- QIndir => who ++ cls ! ODir
- }
+ who = appCompl True p slash.c2 (ip ** {a = agrP3 ip.n ; isPron = False})
+ in
+ who ++ cls
} ;
--}
+
QuestIAdv iadv cl = {
s = \\t,a,p => iadv.s ++ cl.s ! t ! a ! p ! SDecl
} ;
@@ -37,11 +35,23 @@ concrete QuestionFin of Question = CatFin ** open ResFin, Prelude in {
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
+
+-- The computation of $ncase$ is a special case of that in $NounFin.DetCN$,
+-- since we don't have possessive suffixes or definiteness.
+--- It could still be nice to have a common oper...
+
+ IDetCN idet num ord cn = let n = idet.n in {
+ s = \\c =>
+ let
+ k = npform2case c ;
+ ncase = case of {
+ => NCase Sg Part ; -- mitkä kolme kytkintä
+ <_, True> => NCase Sg k ; -- miksi kolmeksi kytkimeksi
+ _ => NCase n k -- mitkä kytkimet
+ }
+ in
+ idet.s ! k ++ num.s ! Sg ! k ++ ord.s ! n ! k ++ cn.s ! ncase ;
+ n = n
} ;
--}
}
diff --git a/lib/resource-1.0/finnish/RelativeFin.gf b/lib/resource-1.0/finnish/RelativeFin.gf
index 5b0c50f51..1a56a51a9 100644
--- a/lib/resource-1.0/finnish/RelativeFin.gf
+++ b/lib/resource-1.0/finnish/RelativeFin.gf
@@ -1,4 +1,4 @@
-concrete RelativeFin of Relative = CatFin ** open ResFin in {
+concrete RelativeFin of Relative = CatFin ** open Prelude, ResFin, MorphoFin in {
flags optimize=all_subs ;
@@ -20,16 +20,31 @@ concrete RelativeFin of Relative = CatFin ** open ResFin in {
in
cl.s ! t ! ant ! b ! SDecl
} ;
-{-
+
RelSlash rp slash = {
- s = \\t,a,p,_ => slash.c2 ++ rp.s ! Acc ++ slash.s ! t ! a ! p ! ODir
+ s = \\t,a,p,ag =>
+ let
+ cls = slash.s ! t ! a ! p ;
+ who = appCompl True p slash.c2 (rp2np ag.n rp)
+ in
+ who ++ cls
} ;
FunRP p np rp = {
- s = \\c => np.s ! c ++ p.s ++ rp.s ! Acc ;
+ s = \\n,c => appCompl True Pos p (rp2np n rp) ++ np.s ! c ; --- is c OK?
a = RAg np.a
} ;
- IdRP = mkIP "which" "which" "whose" Sg ** {a = RNoAg} ;
--}
+ IdRP = {
+ s = \\n,c => relPron ! n ! npform2case c ;
+ a = RNoAg
+ } ;
+
+oper
+ rp2np : Number -> {s : Number => NPForm => Str ; a : RAgr} -> NP = \n,rp -> {
+ s = rp.s ! n ;
+ a = agrP3 Sg ; -- does not matter (--- at least in Slash)
+ isPron = False -- has no special accusative
+ } ;
+
}
diff --git a/lib/resource-1.0/finnish/ResFin.gf b/lib/resource-1.0/finnish/ResFin.gf
index 14458b69c..e44b7270b 100644
--- a/lib/resource-1.0/finnish/ResFin.gf
+++ b/lib/resource-1.0/finnish/ResFin.gf
@@ -117,10 +117,10 @@ param
appCompl : Bool -> Polarity -> Compl -> NP -> Str = \isFin,b,co,np ->
let
c = case of {
- <_, Neg, NPAcc,_,_> => NPCase Part ; -- en näe taloa/sinua
- <_, Pos, NPAcc,True,_> => NPAcc ; -- näen/täytyy sinut
+ <_, Neg, NPAcc,_,_> => NPCase Part ; -- en näe taloa/sinua
+ <_, Pos, NPAcc,True,_> => NPAcc ; -- näen/täytyy sinut
=> NPCase Gen ; -- näen talon
- => NPCase Nom ; -- täytyy talo/sinut; näen talot
+ => NPCase Nom ; -- täytyy talo/sinut; näen talot
<_,_,coc,_,_> => coc
} ;
nps = np.s ! c
@@ -135,15 +135,16 @@ param
param
VIForm =
- VIFin Tense
- | VIInf InfForm
+ VIFin Tense
+ | VIInf InfForm
+ | VIPass
| VIImper
;
oper
VP = {
s : VIForm => Anteriority => Polarity => Agr => {fin, inf : Str} ;
- s2 : Polarity => Agr => Str ; -- itseni/itseäni
+ s2 : Bool => Polarity => Agr => Str ; -- talo/talon/taloa
ext : Str ;
sc : NPForm
} ;
@@ -153,7 +154,10 @@ oper
let
verbs = verb.s ;
- part : Str = verbs ! PastPartAct (AN (NCase agr.n Nom)) ;
+ part : Str = case vi of {
+ VIPass => verbs ! PastPartPass (AN (NCase agr.n Nom)) ;
+ _ => verbs ! PastPartAct (AN (NCase agr.n Nom))
+ } ;
eiv : Str = case agr of {
{n = Sg ; p = P1} => "en" ;
@@ -171,6 +175,7 @@ oper
=> ;
=> <"älä", verbs ! Imper Sg, "ole"> ;
=> <"älkää", verbs ! ImpNegPl, "olko"> ;
+ => <"ei", verbs ! Pass False, "ole"> ;
=> <"ei", verbs ! Inf i, "olla"> ----
} ;
@@ -185,86 +190,39 @@ oper
mkvf : VForm -> {fin, inf : Str} = \p -> case of {
=> vf (verbs ! p) [] ;
=> vf ei neg ;
- => vf (olla ! p) part ;
+ => vf (olla ! p) part ;
=> vf ei (ole ++ part)
}
in
case vi of {
VIFin Past => mkvf (Impf agr.n agr.p) ;
VIFin Cond => mkvf (Condit agr.n agr.p) ;
- _ => mkvf (Presn agr.n agr.p)
+ VIFin (Pres | Fut) => mkvf (Presn agr.n agr.p) ;
+ VIImper => mkvf (Imper agr.n) ;
+ VIPass => mkvf (Pass True) ;
+ VIInf i => mkvf (Inf i)
} ;
- s2 = \\_,_ => [] ;
+ s2 = \\_,_,_ => [] ;
ext = [] ;
sc = verb.sc
} ;
- insertObj : (Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
+ insertObj : (Bool => Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
s = vp.s ;
- s2 = \\b,a => vp.s2 ! b ! a ++ obj ! b ! a ;
+ s2 = \\fin,b,a => vp.s2 ! fin ! b ! a ++ obj ! fin ! b ! a ;
ext = vp.ext ;
sc = vp.sc
} ;
-{-
---- This is not functional.
-
- insertAdV : Str -> VP -> VP = \adv,vp -> {
+ insertExtrapos : Str -> VP -> VP = \obj,vp -> {
s = vp.s ;
- s2 = vp.s2
+ s2 = vp.s2 ;
+ ext = vp.ext ++ obj ;
+ sc = vp.sc
} ;
- presVerb : {s : VForm => Str} -> Agr -> Str = \verb ->
- agrVerb (verb.s ! VPres) (verb.s ! VInf) ;
-
- infVP : VP -> Agr -> Str = \vp,a ->
- (vp.s ! Fut ! Simul ! Neg ! ODir ! a).inf ++ vp.s2 ! a ;
-
- agrVerb : Str -> Str -> Agr -> Str = \has,have,agr ->
- case agr of {
- {n = Sg ; p = P3} => has ;
- _ => have
- } ;
-
- have = agrVerb "has" "have" ;
- havent = agrVerb "hasn't" "haven't" ;
- does = agrVerb "does" "do" ;
- doesnt = agrVerb "doesn't" "don't" ;
-
- Aux = {pres,past : Polarity => Agr => Str ; inf,ppart : Str} ;
-
- auxBe : Aux = {
- pres = \\b,a => case of {
- => "am" ;
- => ["am not"] ; --- am not I
- _ => agrVerb (posneg b "is") (posneg b "are") a
- } ;
- past = \\b,a => case a of {
- {n = Sg ; p = P1|P3} => (posneg b "was") ;
- _ => (posneg b "were")
- } ;
- inf = "be" ;
- ppart = "been"
- } ;
-
- posneg : Polarity -> Str -> Str = \p,s -> case p of {
- Pos => s ;
- Neg => s + "n't"
- } ;
-
- conjThat : Str = "that" ;
-
- reflPron : Agr => Str = table {
- {n = Sg ; p = P1} => "myself" ;
- {n = Sg ; p = P2} => "yourself" ;
- {n = Sg ; p = P3} => "itself" ; ----
- {n = Pl ; p = P1} => "ourselves" ;
- {n = Pl ; p = P2} => "yourselves" ;
- {n = Pl ; p = P3} => "themselves"
- } ;
--}
-- For $Sentence$.
Clause : Type = {
@@ -275,8 +233,12 @@ oper
\subj,agr,vp -> {
s = \\t,a,b,o =>
let
- verb = vp.s ! VIFin t ! a ! b ! agr ;
- compl = vp.s2 ! b ! agr ++ vp.ext
+ agrfin = case vp.sc of {
+ NPCase Nom => ;
+ _ => -- minun täytyy, minulla on
+ } ;
+ verb = vp.s ! VIFin t ! a ! b ! agrfin.p1 ;
+ compl = vp.s2 ! agrfin.p2 ! b ! agr ++ vp.ext
in
case o of {
SDecl => subj ++ verb.fin ++ verb.inf ++ compl ;
@@ -286,6 +248,17 @@ oper
questPart : Str -> Str = \on -> on ++ BIND ++ "ko" ; ----
+ infVP : NPForm -> Polarity -> Agr -> VP -> Str =
+ \sc,pol,agr,vp ->
+ let
+ fin = case sc of { -- subject case
+ NPCase Nom => True ; -- minä tahdon nähdä auton
+ _ => False -- minun täytyy nähdä auto
+ } ;
+ verb = vp.s ! VIInf Inf1 ! Simul ! Pos ! agr ; -- no "ei"
+ compl = vp.s2 ! fin ! pol ! agr ++ vp.ext -- but compl. case propagated
+ in
+ verb.fin ++ verb.inf ++ compl ;
-- The definitions below were moved here from $MorphoFin$ so that we the
-- auxiliary of predication can be defined.
@@ -538,4 +511,26 @@ oper
kukkoja
(kukkoi + ifi "in" "ihin") ;
+-- Reflexive pronoun.
+--- Possessive could be shared with the more general $NounFin.DetCN$.
+
+oper
+ reflPron : Agr -> NP = \agr ->
+ let
+ itse = (nhn (sKukko "itse" "itsen" "itsejä")).s ;
+ nsa = possSuffix agr
+ in {
+ s = table {
+ NPCase (Nom | Gen) | NPAcc => itse ! NPossNom + nsa ;
+ NPCase Transl => itse ! NPossTransl Sg + nsa ;
+ NPCase Illat => itse ! NPossIllat Sg + nsa ;
+ NPCase c => itse ! NCase Sg c + nsa
+ } ;
+ a = agr ;
+ isPron = False -- no special acc form
+ } ;
+
+ possSuffix : Agr -> Str = \agr ->
+ table Agr ["ni" ; "si" ; "nsa" ; "mme" ; "nne" ; "nsa"] ! agr ;
+
}
diff --git a/lib/resource-1.0/finnish/SentenceFin.gf b/lib/resource-1.0/finnish/SentenceFin.gf
index b0835ed90..f0e19b80c 100644
--- a/lib/resource-1.0/finnish/SentenceFin.gf
+++ b/lib/resource-1.0/finnish/SentenceFin.gf
@@ -1,46 +1,64 @@
-concrete SentenceFin of Sentence = CatFin ** open ResFin in {
+concrete SentenceFin of Sentence = CatFin ** open Prelude, ResFin in {
flags optimize=all_subs ;
lin
PredVP np vp = mkClause (np.s ! vp.sc) np.a vp ;
-{-
+
PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
ImpVP vp = {
s = \\pol,n =>
let
agr = {n = n ; p = P2} ;
- verb = infVP vp agr ;
- dont = case pol of {
- Neg => "don't" ;
- _ => []
- }
+ verb = vp.s ! VIImper ! Simul ! pol ! agr ;
+ compl = vp.s2 ! False ! pol ! agr ++ vp.ext --- False = like inf (osta auto)
in
- dont ++ verb
+ verb.fin ++ verb.inf ++ compl ;
} ;
- SlashV2 np v2 =
- mkClause (np.s ! Nom) np.a (predV v2) ** {c2 = v2.c2} ;
+-- The object case is formed at the use site of $c2$, in $Relative$ and $Question$.
- SlashVVV2 np vv v2 =
- mkClause (np.s ! Nom) np.a (insertObj (\\_ => "to" ++ v2.s ! VInf) (predV vv)) **
- {c2 = v2.c2} ;
+ SlashV2 np v2 = {
+ s = \\t,a,p => (mkClause (np.s ! v2.sc) np.a (predV v2)).s ! t ! a ! p ! SDecl ;
+ c2 = v2.c2
+ } ;
+
+ SlashVVV2 np vv v2 =
+ let
+ sc = case v2.sc of {
+ NPCase Nom => vv.sc ; -- joka minun täytyy pestä
+ c => c -- joka minulla täytyy olla
+ }
+ in
+ {s = \\t,ag,p =>
+ (mkClause
+ (np.s ! sc) np.a
+ (insertObj
+ (\\_,b,a => infVP vv.sc b a (predV v2))
+ (predV vv)
+ )
+ ).s ! t ! ag ! p ! SDecl ;
+ c2 = v2.c2
+ } ;
AdvSlash slash adv = {
- s = \\t,a,b,o => slash.s ! t ! a ! b ! o ++ adv.s ;
+ s = \\t,a,b => slash.s ! t ! a ! b ++ adv.s ;
c2 = slash.c2
- } ;
+ } ;
- SlashPrep cl prep = cl ** {c2 = prep.s} ;
+ SlashPrep cl prep = {
+ s = \\t,a,p => cl.s ! t ! a ! p ! SDecl ;
+ c2 = prep
+ } ;
- EmbedS s = {s = conjThat ++ s.s} ;
- EmbedQS qs = {s = qs.s ! QIndir} ;
- EmbedVP vp = {s = "to" ++ infVP vp (agrP3 Sg)} ; --- agr
+ EmbedS s = {s = "että" ++ s.s} ;
+ EmbedQS qs = {s = qs.s} ;
+ EmbedVP vp = {s = infVP (NPCase Nom) Pos (agrP3 Sg) vp} ; --- case,pol,agr
- UseCl t a p cl = {s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! ODir} ;
- UseQCl t a p cl = {s = \\q => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! q} ;
+ UseCl t a p cl = {s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! SDecl} ;
+ UseQCl t a p cl = {s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p} ;
UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ;
--}
+
}
diff --git a/lib/resource-1.0/finnish/StructuralFin.gf b/lib/resource-1.0/finnish/StructuralFin.gf
index e78b3d940..5209ba8fa 100644
--- a/lib/resource-1.0/finnish/StructuralFin.gf
+++ b/lib/resource-1.0/finnish/StructuralFin.gf
@@ -32,36 +32,39 @@ concrete StructuralFin of Structural = CatFin **
can_VV = regV "voida" ;
during_Prep = postGenPrep "aikana" ;
either7or_DConj = sd2 "joko" "tai" ** {n = Sg} ;
--- everybody_NP = regNP "everybody" Sg ;
--- every_Det = mkDeterminer Sg "every" ;
--- everything_NP = regNP "everything" Sg ;
+ everybody_NP = mkNP (regN "jokainen") Sg ;
+ every_Det = mkDet Sg (regN "jokainen") ;
+ everything_NP = mkNP (nhn (sKorpi "kaikki" "kaiken" "kaikkena")) Sg ;
everywhere_Adv = ss "kaikkialla" ;
--- first_Ord = ss "first" ;
+ first_Ord = {s = \\n,c => (regN "ensimmäinen").s ! NCase n c} ;
from_Prep = casePrep elative ;
he_Pron = mkPronoun "hän" "hänen" "häntä" "hänenä" "häneen" Sg P3 ;
here_Adv = ss "täällä" ;
here7to_Adv = ss "tänne" ;
here7from_Adv = ss "täältä" ;
how_IAdv = ss "miten" ;
--- how8many_IDet = mkDeterminer Pl ["how many"] ;
+ how8many_IDet =
+ {s = \\c => "kuinka" ++ (reg2N "moni" "monia").s ! NCase Sg c ; n = Sg} ;
if_Subj = ss "jos" ;
in8front_Prep = postGenPrep "edessä" ;
i_Pron = mkPronoun "minä" "minun" "minua" "minuna" "minuun" Sg P1 ;
in_Prep = casePrep inessive ;
it_Pron = {
- s = \\c => MorphoFin.pronSe.s ! npform2case c ;
+ s = \\c => pronSe.s ! npform2case c ;
a = agrP3 Sg ;
isPron = False
} ;
less_CAdv = ss "vähemmän" ;
--- many_Det = mkDeterminer Pl "many" ;
+ many_Det = mkDet Sg (reg2N "moni" "monia") ;
more_CAdv = ss "enemmän" ;
--- most_Predet = ss "eniten" ;
--- much_Det = mkDeterminer Sg "much" ;
--- must_VV = mkVerb4 "have" "has" "had" "had" ** {c2 = "to"} ; ---
+ most_Predet = {s = \\n,c => (nhn (sSuurin "useinta")).s ! NCase n c} ;
+ much_Det = mkDet Sg {s = \\_ => "paljon"} ;
+ must_VV = subjcaseV (regV "täytyä") genitive ;
no_Phr = ss "ei" ;
on_Prep = casePrep adessive ;
--- one_Quant = mkDeterminer Sg "one" ;
+ one_Quant = mkDet Sg
+ (nhn (mkSubst "ä" "yksi" "yhde" "yhte" "yhtä" "yhteen" "yksi" "yksi"
+ "yksien" "yksiä" "yksiin")) ;
only_Predet = {s = \\_,_ => "vain"} ;
or_Conj = ss "tai" ** {n = Sg} ;
otherwise_PConj = ss "muuten" ;
@@ -71,12 +74,38 @@ concrete StructuralFin of Structural = CatFin **
quite_Adv = ss "melko" ;
she_Pron = mkPronoun "hän" "hänen" "häntä" "hänenä" "häneen" Sg P3 ;
so_AdA = ss "niin" ;
--- somebody_NP = regNP "somebody" Sg ;
--- someSg_Det = mkDeterminer Sg "some" ;
--- somePl_Det = mkDeterminer Pl "some" ;
--- something_NP = regNP "something" Sg ;
+ somebody_NP = {
+ s = \\c => jokuPron ! Sg ! npform2case c ;
+ a = agrP3 Sg ;
+ isPron = False
+ } ;
+ someSg_Det = {
+ s1 = jokuPron ! Sg ;
+ s2 = [] ;
+ isNum,isPoss = False ; isDef = True ; n = Sg
+ } ;
+ somePl_Det = {
+ s1 = jokuPron ! Pl ;
+ s2 = [] ; isNum,isPoss = False ; isDef = True ;
+ n = Pl
+ } ;
+ something_NP = {
+ s = \\c => jokinPron ! Sg ! npform2case c ;
+ a = agrP3 Sg ;
+ isPron = False
+ } ;
somewhere_Adv = ss "jossain" ;
--- that_Quant = mkQuant "that" "those" ;
+ that_Quant = {
+ s1 = table Number [
+ table Case {
+ c => (mkPronoun "tuo" "tuon" "tuota" "tuona" "tuohon" Sg P3).s ! NPCase c
+ } ;
+ table Case {
+ c => (mkPronoun "nuo" "noiden" "noita" "noina" "noihin" Sg P3).s ! NPCase c
+ }
+ ] ;
+ s2 = [] ; isNum,isPoss = False ; isDef = True ;
+ } ;
that_NP =
mkPronoun "tuo" "tuon" "tuota" "tuona" "tuohon" Sg P3 **
{isPron = False} ;
@@ -84,8 +113,21 @@ concrete StructuralFin of Structural = CatFin **
there7to_Adv = ss "sinne" ;
there7from_Adv = ss "sieltä" ;
therefore_PConj = ss "siksi" ;
+ these_NP =
+ mkPronoun "nämä" "näiden" "näitä" "näinä" "näihin" Pl P3 **
+ {isPron = False} ;
they_Pron = mkPronoun "he" "heidän" "heitä" "heinä" "heihin" Pl P3 ; --- ne
--- this_Quant = mkQuant "this" "these" ;
+ this_Quant = {
+ s1 = table Number [
+ table Case {
+ c => (mkPronoun "tämä" "tämän" "tätä" "tänä" "tähän" Sg P3).s ! NPCase c
+ } ;
+ table Case {
+ c => (mkPronoun "nuo" "noiden" "noita" "noina" "noihin" Sg P3).s ! NPCase c
+ }
+ ] ;
+ s2 = [] ; isNum,isPoss = False ; isDef = True ;
+ } ;
this_NP =
mkPronoun "tämä" "tämän" "tätä" "tänä" "tähän" Sg P3 **
{isPron = False} ;
@@ -99,15 +141,33 @@ concrete StructuralFin of Structural = CatFin **
very_AdA = ss "erittäin" ;
want_VV = regV "tahtoa" ;
we_Pron = mkPronoun "me" "meidän" "meitä" "meinä" "meihin" Pl P1 ;
--- whatPl_IP = mkIP "what" "what" "what's" Sg ;
--- whatSg_IP = mkIP "what" "what" "what's" Sg ;
+ whatPl_IP = {
+ s = \\c => mikaInt ! Pl ! npform2case c ;
+ n = Pl
+ } ;
+ whatSg_IP = {
+ s = \\c => mikaInt ! Sg ! npform2case c ;
+ n = Sg
+ } ;
when_IAdv = ss "milloin" ;
when_Subj = ss "kun" ;
where_IAdv = ss "missä" ;
--- whichPl_IDet = mkDeterminer Pl ["which"] ;
--- whichSg_IDet = mkDeterminer Sg ["which"] ;
--- whoSg_IP = mkIP "who" "whom" "whose" Sg ;
--- whoPl_IP = mkIP "who" "whom" "whose" Pl ;
+ whichPl_IDet = {
+ s = mikaInt ! Pl ;
+ n = Pl
+ } ;
+ whichSg_IDet = {
+ s = mikaInt ! Sg ;
+ n = Sg
+ } ;
+ whoSg_IP = {
+ s = \\c => kukaInt ! Sg ! npform2case c ;
+ n = Sg
+ } ;
+ whoPl_IP = {
+ s = \\c => kukaInt ! Pl ! npform2case c ;
+ n = Pl
+ } ;
why_IAdv = ss "miksi" ;
without_Prep = prePrep partitive "ilman" ;
with_Prep = postGenPrep "kanssa" ;
@@ -117,5 +177,128 @@ concrete StructuralFin of Structural = CatFin **
youPol_Pron = mkPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 ; --- Sg
+oper
+ jokuPron : Number => Case => Str =
+ let
+ ku = nhn (sPuu "ku") ;
+ kui = nhn (sPuu "kuu")
+ in
+ table {
+ Sg => table {
+ Nom => "joku" ;
+ Gen => "jonkun" ;
+ c => relPron ! Sg ! c + ku.s ! NCase Sg c
+ } ;
+ Pl => table {
+ Nom => "jotkut" ;
+ c => relPron ! Pl ! c + kui.s ! NCase Pl c
+ }
+ } ;
+
+ jokinPron : Number => Case => Str =
+ table {
+ Sg => table {
+ Nom => "jokin" ;
+ Gen => "jonkin" ;
+ c => relPron ! Sg ! c + "kin"
+ } ;
+ Pl => table {
+ Nom => "jotkin" ;
+ c => relPron ! Pl ! c + "kin"
+ }
+ } ;
+
+ mikaInt : Number => Case => Str =
+ let {
+ mi = nhn (sSuo "mi")
+ } in
+ table {
+ Sg => table {
+ Nom => "mikä" ;
+ Gen => "minkä" ;
+ c => mi.s ! NCase Sg c
+ } ;
+ Pl => table {
+ Nom => "mitkä" ;
+ Gen => "mittenkä" ;
+ c => mi.s ! NCase Sg c
+ }
+ } ;
+
+ kukaInt : Number => Case => Str =
+ let {
+ ku = nhn (sRae "kuka" "kenenä") ;
+ ket = nhn (sRae "kuka" "keinä")} in
+ table {
+ Sg => table {
+ Nom => "kuka" ;
+ Part => "ketä" ;
+ Illat => "keneen" ;
+ c => ku.s ! NCase Sg c
+ } ;
+ Pl => table {
+ Nom => "ketkä" ;
+ Illat => "keihin" ;
+ c => ket.s ! NCase Pl c
+ }
+ } ;
+ mikaanPron : Number => Case => Str = \\n,c =>
+ case of {
+ => "mikään" ;
+ <_,Part> => "mitään" ;
+ => "minkään" ;
+ => "mitkään" ;
+ => "mittenkään" ;
+ <_,Ess> => "minään" ;
+ <_,Iness> => "missään" ;
+ <_,Elat> => "mistään" ;
+ <_,Adess> => "millään" ;
+ <_,Ablat> => "miltään" ;
+ _ => mikaInt ! n ! c + "kään"
+ } ;
+
+ kukaanPron : Number => Case => Str =
+ table {
+ Sg => table {
+ Nom => "kukaan" ;
+ Part => "ketään" ;
+ Ess => "kenään" ;
+ Iness => "kessään" ;
+ Elat => "kestään" ;
+ Illat => "kehenkään" ;
+ Adess => "kellään" ;
+ Ablat => "keltään" ;
+ c => kukaInt ! Sg ! c + "kään"
+ } ;
+ Pl => table {
+ Nom => "ketkään" ;
+ Part => "keitään" ;
+ Ess => "keinään" ;
+ Iness => "keissään" ;
+ Elat => "keistään" ;
+ Adess => "keillään" ;
+ Ablat => "keiltään" ;
+ c => kukaInt ! Pl ! c + "kään"
+ }
+ } ;
+
+ pronSe : ProperName = {
+ s = table {
+ Nom => "se" ;
+ Gen => "sen" ;
+ Part => "sitä" ;
+ Transl => "siksi" ;
+ Ess => "sinä" ;
+ Iness => "siinä" ;
+ Elat => "siitä" ;
+ Illat => "siihen" ;
+ Adess => "sillä" ;
+ Ablat => "siltä" ;
+ Allat => "sille" ;
+ Abess => "sittä"
+ } ;
+ } ;
+
+
}
diff --git a/lib/resource-1.0/finnish/VerbFin.gf b/lib/resource-1.0/finnish/VerbFin.gf
index a8d48e403..b79b8fdc1 100644
--- a/lib/resource-1.0/finnish/VerbFin.gf
+++ b/lib/resource-1.0/finnish/VerbFin.gf
@@ -1,3 +1,5 @@
+--1 Verb Phrases in Finnish
+
concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
flags optimize=all_subs ;
@@ -5,32 +7,54 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
lin
UseV = predV ;
- ComplV2 v np = insertObj (\\b,_ => appCompl True b v.c2 np) (predV v) ; ----
-{-
+ ComplV2 v np = insertObj (\\fin,b,_ => appCompl fin b v.c2 np) (predV v) ;
+
ComplV3 v np np2 =
- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
+ insertObj
+ (\\fin,b,_ => appCompl fin b v.c2 np ++ appCompl fin b v.c3 np2) (predV v) ;
- ComplVV v vp = insertObj (\\a => v.c2 ++ infVP vp a) (predV v) ;
- ComplVS v s = insertObj (\\_ => conjThat ++ s.s) (predV v) ;
- ComplVQ v q = insertObj (\\_ => q.s ! QIndir) (predV v) ;
+ ComplVV v vp =
+ insertObj
+ (\\_,b,a => infVP v.sc b a vp)
+ (predV {s = v.s ;
+ sc = case vp.sc of {
+ NPCase Nom => v.sc ; -- minun täytyy pestä auto
+ c => c -- minulla täytyy olla auto
+ }
+ }
+ ) ;
- ComplVA v ap = insertObj (ap.s) (predV v) ;
+ ComplVS v s = insertExtrapos ("että" ++ s.s) (predV v) ;
+ ComplVQ v q = insertExtrapos ( q.s) (predV v) ;
+
+ ComplVA v ap =
+ insertObj
+ (\\_,b,agr =>
+ ap.s ! False ! AN (NCase agr.n (npform2case v.c2.c))) --- v.cs.s ignored
+ (predV v) ;
ComplV2A v np ap =
- insertObj (\\_ => v.c2 ++ np.s ! Acc ++ ap.s ! np.a) (predV v) ;
--}
+ insertObj
+ (\\fin,b,_ => appCompl fin b v.c2 np ++
+ ap.s ! False ! AN (NCase np.a.n (npform2case v.c2.c))) --agr to obj
+ (predV v) ;
UseComp comp =
- insertObj (\\_ => comp.s) (predV (verbOlla ** {sc = NPCase Nom})) ;
+ insertObj (\\_,_ => comp.s) (predV (verbOlla ** {sc = NPCase Nom})) ;
- AdvVP vp adv = insertObj (\\_,_ => adv.s) vp ;
+ AdvVP vp adv = insertObj (\\_,_,_ => adv.s) vp ;
----- AdVVP adv vp = insertAdV adv.s vp ;
+ AdVVP adv vp = insertObj (\\_,_,_ => adv.s) vp ;
--- ReflV2 v = insertObj (\\a => v.c2 ++ reflPron ! a) (predV v) ;
+ ReflV2 v = insertObj (\\fin,b,agr => appCompl fin b v.c2 (reflPron agr)) (predV v) ;
--- PassV2 v = insertObj (\\_ => v.s ! VPPart) (predAux auxBe) ;
+ PassV2 v = let vp = predV v in {
+ s = \\_ => vp.s ! VIPass ;
+ s2 = \\_,_,_ => [] ;
+ ext = [] ;
+ sc = v.c2.c -- minut valitaan ; minua rakastetaan ; minulle kuiskataan
+ } ; ---- talon valitaan: should be marked like inf.
--- UseVS, UseVQ = \vv -> {s = vv.s ; c2 = [] ; isRefl = vv.isRefl} ; -- no "to"
+ UseVS, UseVQ = \v -> v ** {c2 = {s = [] ; c = NPAcc ; isPre = True}} ;
CompAP ap = {
s = \\agr =>
@@ -45,5 +69,24 @@ concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
CompNP np = {s = \\_ => np.s ! NPCase Nom} ;
CompAdv a = {s = \\_ => a.s} ;
-
}
+
+
+--2 The object case
+--
+-- The rules involved are ComplV2 and ComplVV above.
+-- The work is done jointly in ResFin.infVP and appCompl.
+-- Cases to test: l -table (to see negated forms)
+--```
+-- minun täytyy ostaa auto
+-- PredVP (UsePron i_Pron) (ComplVV must_VV
+-- (ComplV2 buy_V2 (DetCN (DetSg (SgQuant DefArt) NoOrd) (UseN car_N))))
+-- minä tahdon ostaa auton
+-- PredVP (UsePron i_Pron) (ComplVV want_VV
+-- (ComplV2 buy_V2 (DetCN (DetSg (SgQuant DefArt) NoOrd) (UseN car_N))))
+-- minulla täytyy olla auto
+-- PredVP (UsePron i_Pron) (ComplVV must_VV
+-- (ComplV2 have_V2 (DetCN (DetSg (SgQuant DefArt) NoOrd) (UseN car_N))))
+--```
+-- Unfortunately, there is no nice way to say "I want to have a car".
+-- (Other than the paraphrases "I want a car" or "I want to own a car".)