forked from GitHub/gf-core
main problems of Finnish solved
This commit is contained in:
@@ -7,7 +7,7 @@
|
|||||||
<P ALIGN="center"><CENTER><H1>Resource grammar writing HOWTO</H1>
|
<P ALIGN="center"><CENTER><H1>Resource grammar writing HOWTO</H1>
|
||||||
<FONT SIZE="4">
|
<FONT SIZE="4">
|
||||||
<I>Author: Aarne Ranta <aarne (at) cs.chalmers.se></I><BR>
|
<I>Author: Aarne Ranta <aarne (at) cs.chalmers.se></I><BR>
|
||||||
Last update: Thu Feb 2 00:04:00 2006
|
Last update: Sun Feb 5 15:22:34 2006
|
||||||
</FONT></CENTER>
|
</FONT></CENTER>
|
||||||
|
|
||||||
<P></P>
|
<P></P>
|
||||||
@@ -336,8 +336,7 @@ API was changed during the actual process to make it more intuitive.)
|
|||||||
These modules will be written by you.
|
These modules will be written by you.
|
||||||
</P>
|
</P>
|
||||||
<UL>
|
<UL>
|
||||||
<LI><CODE>ParamGer</CODE>: parameter types
|
<LI><CODE>ResGer</CODE>: parameter types and auxiliary operations (a resource for the resource grammar!)
|
||||||
<LI><CODE>ResGer</CODE>: auxiliary operations (a resource for the resource grammar!)
|
|
||||||
<LI><CODE>MorphoGer</CODE>: complete inflection engine
|
<LI><CODE>MorphoGer</CODE>: complete inflection engine
|
||||||
</UL>
|
</UL>
|
||||||
|
|
||||||
@@ -561,7 +560,6 @@ are only found in the comments of the modules.
|
|||||||
<A NAME="toc17"></A>
|
<A NAME="toc17"></A>
|
||||||
<H3>Resource modules</H3>
|
<H3>Resource modules</H3>
|
||||||
<UL>
|
<UL>
|
||||||
<LI><A HREF="../german/ParamGer.gf">ParamGer</A>
|
|
||||||
<LI><A HREF="../german/ResGer.gf">ResGer</A>
|
<LI><A HREF="../german/ResGer.gf">ResGer</A>
|
||||||
<LI><A HREF="../german/MorphoGer.gf">MorphoGer</A>
|
<LI><A HREF="../german/MorphoGer.gf">MorphoGer</A>
|
||||||
<LI><A HREF="gfdoc/ParadigmsGer.html">ParadigmsGer</A>, <A HREF="../german/ParadigmsGer.gf">ParadigmsGer.gf</A>
|
<LI><A HREF="gfdoc/ParadigmsGer.html">ParadigmsGer</A>, <A HREF="../german/ParadigmsGer.gf">ParadigmsGer.gf</A>
|
||||||
|
|||||||
@@ -281,8 +281,7 @@ API was changed during the actual process to make it more intuitive.)
|
|||||||
|
|
||||||
These modules will be written by you.
|
These modules will be written by you.
|
||||||
|
|
||||||
- ``ParamGer``: parameter types
|
- ``ResGer``: parameter types and auxiliary operations (a resource for the resource grammar!)
|
||||||
- ``ResGer``: auxiliary operations (a resource for the resource grammar!)
|
|
||||||
- ``MorphoGer``: complete inflection engine
|
- ``MorphoGer``: complete inflection engine
|
||||||
|
|
||||||
|
|
||||||
@@ -486,7 +485,6 @@ are only found in the comments of the modules.
|
|||||||
|
|
||||||
===Resource modules===
|
===Resource modules===
|
||||||
|
|
||||||
- [ParamGer ../german/ParamGer.gf]
|
|
||||||
- [ResGer ../german/ResGer.gf]
|
- [ResGer ../german/ResGer.gf]
|
||||||
- [MorphoGer ../german/MorphoGer.gf]
|
- [MorphoGer ../german/MorphoGer.gf]
|
||||||
- [ParadigmsGer gfdoc/ParadigmsGer.html], [ParadigmsGer.gf ../german/ParadigmsGer.gf]
|
- [ParadigmsGer gfdoc/ParadigmsGer.html], [ParadigmsGer.gf ../german/ParadigmsGer.gf]
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
concrete AdverbFin of Adverb = CatFin ** open ResFin, Prelude in {
|
concrete AdverbFin of Adverb = CatFin ** open ResFin, Prelude in {
|
||||||
|
|
||||||
lin
|
lin
|
||||||
PositAdvAdj a = {s = a.s ! AAdv} ;
|
PositAdvAdj a = {s = a.s ! Posit ! AAdv} ;
|
||||||
ComparAdvAdj cadv a np = {
|
ComparAdvAdj cadv a np = {
|
||||||
s = cadv.s ++ a.s ! AAdv ++ "than" ++ np.s ! Nom
|
s = cadv.s ++ a.s ! Posit ! AAdv ++ "kuin" ++ np.s ! NPCase Nom
|
||||||
} ;
|
} ;
|
||||||
ComparAdvAdjS cadv a s = {
|
ComparAdvAdjS cadv a s = {
|
||||||
s = cadv.s ++ a.s ! AAdv ++ "than" ++ s.s
|
s = cadv.s ++ a.s ! Posit ! AAdv ++ "kuin" ++ s.s
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
PrepNP prep np = {s = prep.s ++ np.s ! Acc} ;
|
PrepNP prep np = {s = preOrPost prep.isPre prep.s (np.s ! prep.c)} ;
|
||||||
|
|
||||||
AdAdv = cc2 ;
|
AdAdv = cc2 ;
|
||||||
|
|
||||||
SubjS = cc2 ;
|
SubjS = cc2 ;
|
||||||
AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
|
AdvSC s = s ; --- this rule give stack overflow in ordinary parsing
|
||||||
|
|
||||||
AdnCAdv cadv = {s = cadv.s ++ "than"} ;
|
AdnCAdv cadv = {s = cadv.s ++ "kuin"} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,10 +34,7 @@ concrete CatFin of Cat = TenseX ** open ResFin, Prelude in {
|
|||||||
|
|
||||||
-- Verb
|
-- Verb
|
||||||
|
|
||||||
VP = {
|
VP = ResFin.VP ;
|
||||||
s : Tense => Anteriority => Polarity => Agr => {fin, inf : Str} ;
|
|
||||||
s2 : Agr => Str
|
|
||||||
} ;
|
|
||||||
Comp = {s : Agr => Str} ;
|
Comp = {s : Agr => Str} ;
|
||||||
SC = {s : Str} ;
|
SC = {s : Str} ;
|
||||||
|
|
||||||
@@ -49,7 +46,7 @@ concrete CatFin of Cat = TenseX ** open ResFin, Prelude in {
|
|||||||
|
|
||||||
CN = {s : Bool => Number => Case => Str} ;
|
CN = {s : Bool => Number => Case => Str} ;
|
||||||
Pron = {s : NPForm => Str ; a : Agr} ;
|
Pron = {s : NPForm => Str ; a : Agr} ;
|
||||||
NP = {s : NPForm => Str ; a : Agr} ;
|
NP = {s : NPForm => Str ; a : Agr ; isPron : Bool} ;
|
||||||
Det = {s : Case => Str ; n : Number ; isNum : Bool} ;
|
Det = {s : Case => Str ; n : Number ; isNum : Bool} ;
|
||||||
QuantSg, QuantPl = {s : Case => Str} ;
|
QuantSg, QuantPl = {s : Case => Str} ;
|
||||||
Predet, Quant, Ord = {s : Number => Case => Str} ;
|
Predet, Quant, Ord = {s : Number => Case => Str} ;
|
||||||
|
|||||||
@@ -11,19 +11,17 @@ concrete ConjunctionFin of Conjunction =
|
|||||||
ConjAdv = conjunctSS ;
|
ConjAdv = conjunctSS ;
|
||||||
DConjAdv = conjunctDistrSS ;
|
DConjAdv = conjunctDistrSS ;
|
||||||
|
|
||||||
ConjNP conj ss = conjunctTable Case conj ss ** {
|
ConjNP conj ss = conjunctTable NPForm conj ss ** {
|
||||||
a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
|
a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p} ;
|
||||||
|
isPron = False
|
||||||
} ;
|
} ;
|
||||||
DConjNP conj ss = conjunctDistrTable Case conj ss ** {
|
DConjNP conj ss = conjunctDistrTable NPForm conj ss ** {
|
||||||
a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p}
|
a = {n = conjNumber conj.n ss.a.n ; p = ss.a.p} ;
|
||||||
|
isPron = False
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
ConjAP conj ss = conjunctTable Agr conj ss ** {
|
-- ConjAP conj ss = conjunctTable Agr conj ss ;
|
||||||
isPre = ss.isPre
|
-- DConjAP conj ss = conjunctDistrTable Agr conj ss ;
|
||||||
} ;
|
|
||||||
DConjAP conj ss = conjunctDistrTable Agr conj ss ** {
|
|
||||||
isPre = ss.isPre
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- These fun's are generated from the list cat's.
|
-- These fun's are generated from the list cat's.
|
||||||
|
|
||||||
@@ -31,15 +29,15 @@ concrete ConjunctionFin of Conjunction =
|
|||||||
ConsS = consrSS comma ;
|
ConsS = consrSS comma ;
|
||||||
BaseAdv = twoSS ;
|
BaseAdv = twoSS ;
|
||||||
ConsAdv = consrSS comma ;
|
ConsAdv = consrSS comma ;
|
||||||
BaseNP x y = twoTable Case x y ** {a = conjAgr x.a y.a} ;
|
BaseNP x y = twoTable NPForm x y ** {a = conjAgr x.a y.a} ;
|
||||||
ConsNP xs x = consrTable Case comma xs x ** {a = conjAgr xs.a x.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} ;
|
-- 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} ;
|
-- ConsAP xs x = consrTable Agr comma xs x ** {isPre = andB xs.isPre x.isPre} ;
|
||||||
|
|
||||||
lincat
|
lincat
|
||||||
[S] = {s1,s2 : Str} ;
|
[S] = {s1,s2 : Str} ;
|
||||||
[Adv] = {s1,s2 : Str} ;
|
[Adv] = {s1,s2 : Str} ;
|
||||||
[NP] = {s1,s2 : Case => Str ; a : Agr} ;
|
[NP] = {s1,s2 : NPForm => Str ; a : Agr} ;
|
||||||
[AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;
|
-- [AP] = {s1,s2 : Agr => Str ; isPre : Bool} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,12 +3,12 @@
|
|||||||
concrete LangFin of Lang =
|
concrete LangFin of Lang =
|
||||||
NounFin,
|
NounFin,
|
||||||
VerbFin,
|
VerbFin,
|
||||||
AdjectiveFin,
|
-- AdjectiveFin,
|
||||||
AdverbFin,
|
AdverbFin,
|
||||||
NumeralFin,
|
-- NumeralFin,
|
||||||
SentenceFin,
|
SentenceFin,
|
||||||
QuestionFin,
|
-- QuestionFin,
|
||||||
RelativeFin,
|
-- RelativeFin,
|
||||||
ConjunctionFin,
|
ConjunctionFin,
|
||||||
PhraseFin,
|
PhraseFin,
|
||||||
StructuralFin,
|
StructuralFin,
|
||||||
|
|||||||
@@ -136,6 +136,7 @@ lin
|
|||||||
open_V2 = dirV2 (regV "avata") ;
|
open_V2 = dirV2 (regV "avata") ;
|
||||||
paint_V2A = mkV2A (regV "maalata") accPrep (casePrep translative) ;
|
paint_V2A = mkV2A (regV "maalata") accPrep (casePrep translative) ;
|
||||||
paper_N = reg2N "paperi" "papereita" ;
|
paper_N = reg2N "paperi" "papereita" ;
|
||||||
|
paris_PN = mkPN (regN "Pariisi") ;
|
||||||
peace_N = nLukko "rauha" ;
|
peace_N = nLukko "rauha" ;
|
||||||
pen_N = nLukko "kynä" ;
|
pen_N = nLukko "kynä" ;
|
||||||
planet_N = nLukko "planeetta" ;
|
planet_N = nLukko "planeetta" ;
|
||||||
|
|||||||
@@ -19,81 +19,6 @@ resource MorphoFin = ResFin ** open Prelude in {
|
|||||||
|
|
||||||
oper
|
oper
|
||||||
|
|
||||||
NounH : Type = {
|
|
||||||
a,vesi,vede,vete,vetta,veteen,vetii,vesii,vesien,vesia,vesiin : Str
|
|
||||||
} ;
|
|
||||||
|
|
||||||
CommonNoun = {s : NForm => Str} ;
|
|
||||||
|
|
||||||
-- worst-case macro
|
|
||||||
|
|
||||||
mkSubst : Str -> (_,_,_,_,_,_,_,_,_,_ : Str) -> NounH =
|
|
||||||
\a,vesi,vede,vete,vetta,veteen,vetii,vesii,vesien,vesia,vesiin ->
|
|
||||||
{a = a ;
|
|
||||||
vesi = vesi ;
|
|
||||||
vede = vede ;
|
|
||||||
vete = vete ;
|
|
||||||
vetta = vetta ;
|
|
||||||
veteen = veteen ;
|
|
||||||
vetii = vetii ;
|
|
||||||
vesii = vesii ;
|
|
||||||
vesien = vesien ;
|
|
||||||
vesia = vesia ;
|
|
||||||
vesiin = vesiin
|
|
||||||
} ;
|
|
||||||
|
|
||||||
nhn : NounH -> CommonNoun = \nh ->
|
|
||||||
let
|
|
||||||
a = nh.a ;
|
|
||||||
vesi = nh.vesi ;
|
|
||||||
vede = nh.vede ;
|
|
||||||
vete = nh.vete ;
|
|
||||||
vetta = nh.vetta ;
|
|
||||||
veteen = nh.veteen ;
|
|
||||||
vetii = nh.vetii ;
|
|
||||||
vesii = nh.vesii ;
|
|
||||||
vesien = nh.vesien ;
|
|
||||||
vesia = nh.vesia ;
|
|
||||||
vesiin = nh.vesiin
|
|
||||||
in
|
|
||||||
{s = table {
|
|
||||||
NCase Sg Nom => vesi ;
|
|
||||||
NCase Sg Gen => vede + "n" ;
|
|
||||||
NCase Sg Part => vetta ;
|
|
||||||
NCase Sg Transl => vede + "ksi" ;
|
|
||||||
NCase Sg Ess => vete + ("n" + a) ;
|
|
||||||
NCase Sg Iness => vede + ("ss" + a) ;
|
|
||||||
NCase Sg Elat => vede + ("st" + a) ;
|
|
||||||
NCase Sg Illat => veteen ;
|
|
||||||
NCase Sg Adess => vede + ("ll" + a) ;
|
|
||||||
NCase Sg Ablat => vede + ("lt" + a) ;
|
|
||||||
NCase Sg Allat => vede + "lle" ;
|
|
||||||
NCase Sg Abess => vede + ("tt" + a) ;
|
|
||||||
|
|
||||||
NCase Pl Nom => vede + "t" ;
|
|
||||||
NCase Pl Gen => vesien ;
|
|
||||||
NCase Pl Part => vesia ;
|
|
||||||
NCase Pl Transl => vesii + "ksi" ;
|
|
||||||
NCase Pl Ess => vetii + ("n" + a) ;
|
|
||||||
NCase Pl Iness => vesii + ("ss" + a) ;
|
|
||||||
NCase Pl Elat => vesii + ("st" + a) ;
|
|
||||||
NCase Pl Illat => vesiin ;
|
|
||||||
NCase Pl Adess => vesii + ("ll" + a) ;
|
|
||||||
NCase Pl Ablat => vesii + ("lt" + a) ;
|
|
||||||
NCase Pl Allat => vesii + "lle" ;
|
|
||||||
NCase Pl Abess => vesii + ("tt" + a) ;
|
|
||||||
|
|
||||||
NComit => vetii + "ne" ;
|
|
||||||
NInstruct => vesii + "n" ;
|
|
||||||
|
|
||||||
NPossNom => vete ;
|
|
||||||
NPossGenPl => Predef.tk 1 vesien ;
|
|
||||||
NPossTransl Sg => vede + "kse" ;
|
|
||||||
NPossTransl Pl => vesii + "kse" ;
|
|
||||||
NPossIllat Sg => Predef.tk 1 veteen ;
|
|
||||||
NPossIllat Pl => Predef.tk 1 vesiin
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- A user-friendly variant takes existing forms and infers the vowel harmony.
|
-- A user-friendly variant takes existing forms and infers the vowel harmony.
|
||||||
|
|
||||||
@@ -167,33 +92,6 @@ oper
|
|||||||
|
|
||||||
-- Here some useful special cases; more will be given in $paradigms.Fin.gf$.
|
-- Here some useful special cases; more will be given in $paradigms.Fin.gf$.
|
||||||
--
|
--
|
||||||
-- Nouns with partitive "a"/"ä" ;
|
|
||||||
-- to account for grade and vowel alternation, three forms are usually enough
|
|
||||||
-- Examples: "talo", "kukko", "huippu", "koira", "kukka", "syylä",...
|
|
||||||
|
|
||||||
sKukko : (_,_,_ : Str) -> NounH = \kukko,kukon,kukkoja ->
|
|
||||||
let {
|
|
||||||
o = Predef.dp 1 kukko ;
|
|
||||||
a = Predef.dp 1 kukkoja ;
|
|
||||||
kukkoj = Predef.tk 1 kukkoja ;
|
|
||||||
i = Predef.dp 1 kukkoj ;
|
|
||||||
ifi = ifTok Str i "i" ;
|
|
||||||
kukkoi = ifi kukkoj (Predef.tk 1 kukkoj) ;
|
|
||||||
e = Predef.dp 1 kukkoi ;
|
|
||||||
kukoi = Predef.tk 2 kukon + Predef.dp 1 kukkoi
|
|
||||||
}
|
|
||||||
in
|
|
||||||
mkSubst a
|
|
||||||
kukko
|
|
||||||
(Predef.tk 1 kukon)
|
|
||||||
kukko
|
|
||||||
(kukko + a)
|
|
||||||
(kukko + o + "n")
|
|
||||||
(kukkoi + ifi "" "i")
|
|
||||||
(kukoi + ifi "" "i")
|
|
||||||
(ifTok Str e "e" (Predef.tk 1 kukkoi + "ien") (kukkoi + ifi "en" "jen"))
|
|
||||||
kukkoja
|
|
||||||
(kukkoi + ifi "in" "ihin") ;
|
|
||||||
|
|
||||||
sLukko : Str -> NounH = \lukko ->
|
sLukko : Str -> NounH = \lukko ->
|
||||||
let
|
let
|
||||||
@@ -336,28 +234,6 @@ oper
|
|||||||
(radioi + "t" + a)
|
(radioi + "t" + a)
|
||||||
(radioi + "hin") ;
|
(radioi + "hin") ;
|
||||||
|
|
||||||
-- Surpraisingly, making the test for the partitive, this not only covers
|
|
||||||
-- "rae", "perhe", "savuke", but also "rengas", "lyhyt" (except $Sg Illat$), etc.
|
|
||||||
|
|
||||||
sRae : (_,_ : Str) -> NounH = \rae,rakeena ->
|
|
||||||
let {
|
|
||||||
a = Predef.dp 1 rakeena ;
|
|
||||||
rakee = Predef.tk 2 rakeena ;
|
|
||||||
rakei = Predef.tk 1 rakee + "i" ;
|
|
||||||
raet = rae + (ifTok Str (Predef.dp 1 rae) "e" "t" [])
|
|
||||||
}
|
|
||||||
in
|
|
||||||
mkSubst a
|
|
||||||
rae
|
|
||||||
rakee
|
|
||||||
rakee
|
|
||||||
(raet + ("t" + a))
|
|
||||||
(rakee + "seen")
|
|
||||||
rakei
|
|
||||||
rakei
|
|
||||||
(rakei + "den")
|
|
||||||
(rakei + ("t" + a))
|
|
||||||
(rakei + "siin") ;
|
|
||||||
|
|
||||||
sSusi : (_,_,_ : Str) -> NounH = \susi,suden,sutena ->
|
sSusi : (_,_,_ : Str) -> NounH = \susi,suden,sutena ->
|
||||||
let
|
let
|
||||||
@@ -730,23 +606,11 @@ vowelHarmony : Str -> Str = \liitin ->
|
|||||||
NPCase Ablat => minu + ("lt" + a) ;
|
NPCase Ablat => minu + ("lt" + a) ;
|
||||||
NPCase Allat => minu + "lle" ;
|
NPCase Allat => minu + "lle" ;
|
||||||
NPCase Abess => minu + ("tt" + a) ;
|
NPCase Abess => minu + ("tt" + a) ;
|
||||||
NPAccNom | NPAccGen => Predef.tk 1 minun + "t"
|
NPAcc => Predef.tk 1 minun + "t"
|
||||||
} ;
|
} ;
|
||||||
a = {n = n ; p = p}
|
a = {n = n ; p = p}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
pronMina = mkPronoun "minä" "minun" "minua" "minuna" "minuun" Sg P1 ;
|
|
||||||
pronSina = mkPronoun "sinä" "sinun" "sinua" "sinuna" "sinuun" Sg P2 ;
|
|
||||||
pronHan = mkPronoun "hän" "hänen" "häntä" "hänenä" "häneen" Sg P3 ;
|
|
||||||
pronMe = mkPronoun "me" "meidän" "meitä" "meinä" "meihin" Pl P1 ;
|
|
||||||
pronTe = mkPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 ;
|
|
||||||
pronHe = mkPronoun "he" "heidän" "heitä" "heinä" "heihin" Pl P3 ;
|
|
||||||
pronNe = mkPronoun "ne" "niiden" "niitä" "niinä" "niihin" Pl P3 ;
|
|
||||||
|
|
||||||
pronTama = mkPronoun "tämä" "tämän" "tätä" "tänä" "tähän" Sg P3 ;
|
|
||||||
pronNama = mkPronoun "nämä" "näiden" "näitä" "näinä" "näihin" Pl P3 ;
|
|
||||||
pronTuo = mkPronoun "tuo" "tuon" "tuota" "tuona" "tuohon" Sg P3 ;
|
|
||||||
pronNuo = mkPronoun "nuo" "noiden" "noita" "noina" "noihin" Pl P3 ;
|
|
||||||
|
|
||||||
-- The non-human pronoun "se" ('it') is even more irregular,
|
-- The non-human pronoun "se" ('it') is even more irregular,
|
||||||
-- Its accusative cases do not
|
-- Its accusative cases do not
|
||||||
@@ -919,22 +783,7 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
|||||||
|
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
--
|
--
|
||||||
-- To form an adjective, it is usually enough to give a noun declension: the
|
|
||||||
-- adverbial form is regular.
|
|
||||||
|
|
||||||
Adj : Type = {s : AForm => Str} ;
|
|
||||||
|
|
||||||
noun2adj : CommonNoun -> Adj = noun2adjComp True ;
|
|
||||||
|
|
||||||
noun2adjComp : Bool -> CommonNoun -> Adj = \isPos,tuore ->
|
|
||||||
let
|
|
||||||
tuoreesti = Predef.tk 1 (tuore.s ! NCase Sg Gen) + "sti" ;
|
|
||||||
tuoreemmin = Predef.tk 2 (tuore.s ! NCase Sg Gen) + "in"
|
|
||||||
in {s = table {
|
|
||||||
AN f => tuore.s ! f ;
|
|
||||||
AAdv => if_then_Str isPos tuoreesti tuoreemmin
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
-- For the comparison of adjectives, three noun declensions
|
-- For the comparison of adjectives, three noun declensions
|
||||||
-- are needed in the worst case.
|
-- are needed in the worst case.
|
||||||
@@ -957,106 +806,6 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
|||||||
(noun2adjComp False (nhn (sSuurin kivinta))) ;
|
(noun2adjComp False (nhn (sSuurin kivinta))) ;
|
||||||
|
|
||||||
|
|
||||||
--3 Verbs
|
|
||||||
--
|
|
||||||
-- The present, past, conditional. and infinitive stems, acc. to Koskenniemi.
|
|
||||||
-- Unfortunately not enough (without complicated processes).
|
|
||||||
-- We moreover give grade alternation forms as arguments, since it does not
|
|
||||||
-- happen automatically.
|
|
||||||
--- A problem remains with the verb "seistä", where the infinitive
|
|
||||||
--- stem has vowel harmony "ä" but the others "a", thus "seisoivat" but "seiskää".
|
|
||||||
|
|
||||||
|
|
||||||
mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
|
|
||||||
\tulla,tulee,tulen,tulevat,tulkaa,tullaan,tuli,tulin,tulisi,tullut,tultu,tullun ->
|
|
||||||
v2v (mkVerbH
|
|
||||||
tulla tulee tulen tulevat tulkaa tullaan tuli tulin tulisi tullut tultu tullun
|
|
||||||
) ;
|
|
||||||
|
|
||||||
v2v : VerbH -> Verb = \vh ->
|
|
||||||
let
|
|
||||||
tulla = vh.tulla ;
|
|
||||||
tulee = vh.tulee ;
|
|
||||||
tulen = vh.tulen ;
|
|
||||||
tulevat = vh.tulevat ;
|
|
||||||
tulkaa = vh.tulkaa ;
|
|
||||||
tullaan = vh.tullaan ;
|
|
||||||
tuli = vh.tuli ;
|
|
||||||
tulin = vh.tulin ;
|
|
||||||
tulisi = vh.tulisi ;
|
|
||||||
tullut = vh.tullut ;
|
|
||||||
tultu = vh.tultu ;
|
|
||||||
tultu = vh.tultu ;
|
|
||||||
tullun = vh.tullun ;
|
|
||||||
tuje = init tulen ;
|
|
||||||
tuji = init tulin ;
|
|
||||||
a = Predef.dp 1 tulkaa ;
|
|
||||||
tulko = Predef.tk 2 tulkaa + (ifTok Str a "a" "o" "ö") ;
|
|
||||||
o = last tulko ;
|
|
||||||
tulleena = Predef.tk 2 tullut + ("een" + a) ;
|
|
||||||
tulleen = (noun2adj (nhn (sRae tullut tulleena))).s ;
|
|
||||||
tullun = (noun2adj (nhn (sKukko tultu tullun (tultu + ("j"+a))))).s ;
|
|
||||||
tulema = tuje + "m" + a ;
|
|
||||||
vat = "v" + a + "t"
|
|
||||||
in
|
|
||||||
{s = table {
|
|
||||||
Inf => tulla ;
|
|
||||||
Presn Sg P1 => tuje + "n" ;
|
|
||||||
Presn Sg P2 => tuje + "t" ;
|
|
||||||
Presn Sg P3 => tulee ;
|
|
||||||
Presn Pl P1 => tuje + "mme" ;
|
|
||||||
Presn Pl P2 => tuje + "tte" ;
|
|
||||||
Presn Pl P3 => tulevat ;
|
|
||||||
Impf Sg P1 => tuji + "n" ;
|
|
||||||
Impf Sg P2 => tuji + "t" ;
|
|
||||||
Impf Sg P3 => tuli ;
|
|
||||||
Impf Pl P1 => tuji + "mme" ;
|
|
||||||
Impf Pl P2 => tuji + "tte" ;
|
|
||||||
Impf Pl P3 => tuli + vat ;
|
|
||||||
Condit Sg P1 => tulisi + "n" ;
|
|
||||||
Condit Sg P2 => tulisi + "t" ;
|
|
||||||
Condit Sg P3 => tulisi ;
|
|
||||||
Condit Pl P1 => tulisi + "mme" ;
|
|
||||||
Condit Pl P2 => tulisi + "tte" ;
|
|
||||||
Condit Pl P3 => tulisi + vat ;
|
|
||||||
Imper Sg => tuje ;
|
|
||||||
Imper Pl => tulkaa ;
|
|
||||||
ImperP3 Sg => tulko + o + "n" ;
|
|
||||||
ImperP3 Pl => tulko + o + "t" ;
|
|
||||||
ImperP1Pl => tulkaa + "mme" ;
|
|
||||||
ImpNegPl => tulko ;
|
|
||||||
Pass True => tullaan ;
|
|
||||||
Pass False => Predef.tk 2 tullaan ;
|
|
||||||
PastPartAct n => tulleen ! n ;
|
|
||||||
PastPartPass n => tullun ! n ;
|
|
||||||
Inf3Iness => tulema + "ss" + a ;
|
|
||||||
Inf3Elat => tulema + "st" + a ;
|
|
||||||
Inf3Illat => tulema + a + "n" ;
|
|
||||||
Inf3Adess => tulema + "ll" + a ;
|
|
||||||
Inf3Abess => tulema + "tt" + a
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
VerbH : Type = {
|
|
||||||
tulla,tulee,tulen,tulevat,tulkaa,tullaan,tuli,tulin,tulisi,tullut,tultu,tullun
|
|
||||||
: Str
|
|
||||||
} ;
|
|
||||||
|
|
||||||
mkVerbH : (_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> VerbH =
|
|
||||||
\tulla,tulee,tulen,tulevat,tulkaa,tullaan,tuli,tulin,tulisi,tullut,tultu,tullun ->
|
|
||||||
{tulla = tulla ;
|
|
||||||
tulee = tulee ;
|
|
||||||
tulen = tulen ;
|
|
||||||
tulevat = tulevat ;
|
|
||||||
tulkaa = tulkaa ;
|
|
||||||
tullaan = tullaan ;
|
|
||||||
tuli = tuli ;
|
|
||||||
tulin = tulin ;
|
|
||||||
tulisi = tulisi ;
|
|
||||||
tullut = tullut ;
|
|
||||||
tultu = tultu ;
|
|
||||||
tullun = tullun
|
|
||||||
} ;
|
|
||||||
|
|
||||||
regVerbH : Str -> VerbH = \soutaa ->
|
regVerbH : Str -> VerbH = \soutaa ->
|
||||||
let
|
let
|
||||||
@@ -1315,50 +1064,6 @@ caseTable : Number -> CommonNoun -> Case => Str = \n,cn ->
|
|||||||
(juo + "t" + u)
|
(juo + "t" + u)
|
||||||
(juo + "d" + u + "n") ;
|
(juo + "d" + u + "n") ;
|
||||||
|
|
||||||
verbOlla : Verb =
|
|
||||||
mkVerb
|
|
||||||
"olla" "on" "olen" "ovat" "olkaa" "ollaan"
|
|
||||||
"oli" "olin" "olisi" "ollut" "oltu" "ollun" ;
|
|
||||||
|
|
||||||
-- The negating operator "ei" is actually a verb, which has present
|
|
||||||
-- active indicative and imperative forms, but no infinitive.
|
|
||||||
|
|
||||||
verbEi : Verb =
|
|
||||||
let ei =
|
|
||||||
mkVerb
|
|
||||||
"ei" "ei" "en" "eivät" "älkää"
|
|
||||||
"ei" "e" "en" "e" "ei" "ei" "ei"
|
|
||||||
in
|
|
||||||
{s = table {
|
|
||||||
Imper Sg => "älä" ;
|
|
||||||
-- Impf n p | Condit n p => ei.s ! Presn n p ;
|
|
||||||
Impf n p => ei.s ! Presn n p ;
|
|
||||||
Condit n p => ei.s ! Presn n p ;
|
|
||||||
v => ei.s ! v
|
|
||||||
}
|
|
||||||
} ;
|
|
||||||
|
|
||||||
--2 Some structural words
|
|
||||||
|
|
||||||
kuinConj = "kuin" ;
|
|
||||||
|
|
||||||
conjEtta = "että" ;
|
|
||||||
advSiten = "siten" ;
|
|
||||||
|
|
||||||
|
|
||||||
kaikkiPron : Number -> Case => Str = \n ->
|
|
||||||
let {kaiket = caseTable n (nhn (sKorpi "kaikki" "kaiken" "kaikkena"))} in
|
|
||||||
table {
|
|
||||||
Nom => "kaikki" ;
|
|
||||||
c => kaiket ! c
|
|
||||||
} ;
|
|
||||||
|
|
||||||
stopPunct = "." ;
|
|
||||||
commaPunct = "," ;
|
|
||||||
questPunct = "?" ;
|
|
||||||
exclPunct = "!" ;
|
|
||||||
|
|
||||||
koPart = suff "ko" ;
|
|
||||||
|
|
||||||
-- For $NumeralsFin$.
|
-- For $NumeralsFin$.
|
||||||
|
|
||||||
|
|||||||
@@ -3,13 +3,19 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
|
|||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
|
{-
|
||||||
DetCN det cn = {
|
DetCN det cn = {
|
||||||
s = \\c => det.s ++ cn.s ! det.n ! c ;
|
s = \\c => det.s ++ cn.s ! det.n ! c ;
|
||||||
a = agrP3 det.n
|
a = agrP3 det.n
|
||||||
} ;
|
} ;
|
||||||
UsePN pn = pn ** {a = agrP3 Sg} ;
|
-}
|
||||||
UsePron p = p ;
|
UsePN pn = {
|
||||||
|
s = \\c => pn.s ! npform2case c ;
|
||||||
|
a = agrP3 Sg ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
UsePron p = p ** {isPron = True} ;
|
||||||
|
{-
|
||||||
PredetNP pred np = {
|
PredetNP pred np = {
|
||||||
s = \\c => pred.s ++ np.s ! c ;
|
s = \\c => pred.s ++ np.s ! c ;
|
||||||
a = np.a
|
a = np.a
|
||||||
@@ -67,5 +73,5 @@ concrete NounFin of Noun = CatFin ** open ResFin, Prelude in {
|
|||||||
AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s} ;
|
AdvCN cn ad = {s = \\n,c => cn.s ! n ! c ++ ad.s} ;
|
||||||
|
|
||||||
SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s} ;
|
SentCN cn sc = {s = \\n,c => cn.s ! n ! c ++ sc.s} ;
|
||||||
|
-}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,9 +65,10 @@ oper
|
|||||||
-- of many-place verbs and adjective. A complement can be defined by
|
-- of many-place verbs and adjective. A complement can be defined by
|
||||||
-- just a case, or a pre/postposition and a case.
|
-- just a case, or a pre/postposition and a case.
|
||||||
|
|
||||||
prePrep : Case -> Str -> Prep ;
|
prePrep : Case -> Str -> Prep ; -- ilman, partitive
|
||||||
postPrep : Case -> Str -> Prep ;
|
postPrep : Case -> Str -> Prep ; -- takana, genitive
|
||||||
casePrep : Case -> Prep ;
|
postGenPrep : Str -> Prep ; -- takana
|
||||||
|
casePrep : Case -> Prep ; -- adessive
|
||||||
accusative : Prep ;
|
accusative : Prep ;
|
||||||
|
|
||||||
--2 Nouns
|
--2 Nouns
|
||||||
@@ -277,10 +278,9 @@ oper
|
|||||||
|
|
||||||
caseV : Case -> V -> V ;
|
caseV : Case -> V -> V ;
|
||||||
|
|
||||||
-- The verbs "be" and the negative auxiliary are special.
|
-- The verbs "be" is special.
|
||||||
|
|
||||||
vOlla : V ;
|
vOlla : V ;
|
||||||
vEi : V ;
|
|
||||||
|
|
||||||
-- Two-place verbs need a case, and can have a pre- or postposition.
|
-- Two-place verbs need a case, and can have a pre- or postposition.
|
||||||
|
|
||||||
@@ -360,9 +360,10 @@ oper
|
|||||||
\c,p -> {c = NPCase c ; s = p ; isPre = True ; lock_Prep = <>} ;
|
\c,p -> {c = NPCase c ; s = p ; isPre = True ; lock_Prep = <>} ;
|
||||||
postPrep : Case -> Str -> Prep =
|
postPrep : Case -> Str -> Prep =
|
||||||
\c,p -> {c = NPCase c ; s = p ; isPre = False ; lock_Prep = <>} ;
|
\c,p -> {c = NPCase c ; s = p ; isPre = False ; lock_Prep = <>} ;
|
||||||
|
postGenPrep p = {c = NPCase genitive ; s = p ; isPre = False ; lock_Prep = <>} ;
|
||||||
casePrep : Case -> Prep =
|
casePrep : Case -> Prep =
|
||||||
\c -> {c = NPCase c ; s = [] ; isPre = True ; lock_Prep = <>} ;
|
\c -> {c = NPCase c ; s = [] ; isPre = True ; lock_Prep = <>} ;
|
||||||
accPrep = {c = NPAccNom ; s = [] ; isPre = True ; lock_Prep = <>} ;
|
accPrep = {c = NPAcc ; s = [] ; isPre = True ; lock_Prep = <>} ;
|
||||||
|
|
||||||
mkN = \a,b,c,d,e,f,g,h,i,j ->
|
mkN = \a,b,c,d,e,f,g,h,i,j ->
|
||||||
mkNoun a b c d e f g h i j ** {lock_N = <>} ;
|
mkNoun a b c d e f g h i j ** {lock_N = <>} ;
|
||||||
@@ -511,7 +512,6 @@ reg3N = \vesi,veden,vesi
|
|||||||
caseV c v = {s = v.s ; sc = NPCase c ; lock_V = <>} ;
|
caseV c v = {s = v.s ; sc = NPCase c ; lock_V = <>} ;
|
||||||
|
|
||||||
vOlla = verbOlla ** {sc = NPCase Nom ; lock_V = <>} ;
|
vOlla = verbOlla ** {sc = NPCase Nom ; lock_V = <>} ;
|
||||||
vEi = verbEi ** {sc = NPCase Nom ; lock_V = <>} ;
|
|
||||||
|
|
||||||
vHuoltaa : (_,_,_,_ : Str) -> Verb = \ottaa,otan,otti,otin ->
|
vHuoltaa : (_,_,_,_ : Str) -> Verb = \ottaa,otan,otti,otin ->
|
||||||
v2v (MorphoFin.vHuoltaa ottaa otan otti otin) ** {sc = NPCase Nom ; lock_V = <>} ;
|
v2v (MorphoFin.vHuoltaa ottaa otan otti otin) ** {sc = NPCase Nom ; lock_V = <>} ;
|
||||||
|
|||||||
@@ -4,20 +4,20 @@ concrete PhraseFin of Phrase = CatFin ** open ResFin in {
|
|||||||
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
PhrUtt pconj utt voc = {s = pconj.s ++ utt.s ++ voc.s} ;
|
||||||
|
|
||||||
UttS s = s ;
|
UttS s = s ;
|
||||||
UttQS qs = {s = qs.s ! QDir} ;
|
UttQS qs = {s = qs.s} ;
|
||||||
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
|
UttImpSg pol imp = {s = pol.s ++ imp.s ! pol.p ! Sg} ;
|
||||||
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
|
UttImpPl pol imp = {s = pol.s ++ imp.s ! pol.p ! Pl} ;
|
||||||
|
|
||||||
UttIP ip = {s = ip.s ! Nom} ; --- Acc also
|
UttIP ip = {s = ip.s ! NPCase Nom} ;
|
||||||
UttIAdv iadv = iadv ;
|
UttIAdv iadv = iadv ;
|
||||||
UttNP np = {s = np.s ! Acc} ;
|
UttNP np = {s = np.s ! NPCase Nom} ;
|
||||||
UttVP vp = {s = "to" ++ infVP vp (agrP3 Sg)} ;
|
-- UttVP vp = {s = "to" ++ infVP vp (agrP3 Sg)} ;
|
||||||
UttAdv adv = adv ;
|
UttAdv adv = adv ;
|
||||||
|
|
||||||
NoPConj = {s = []} ;
|
NoPConj = {s = []} ;
|
||||||
PConjConj conj = conj ;
|
PConjConj conj = conj ;
|
||||||
|
|
||||||
NoVoc = {s = []} ;
|
NoVoc = {s = []} ;
|
||||||
VocNP np = {s = "," ++ np.s ! Nom} ;
|
VocNP np = {s = "," ++ np.s ! NPCase Nom} ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ resource ResFin = ParamX ** open Prelude in {
|
|||||||
oper
|
oper
|
||||||
Agr = {n : Number ; p : Person} ;
|
Agr = {n : Number ; p : Person} ;
|
||||||
|
|
||||||
|
NP = {s : NPForm => Str ; a : Agr ; isPron : Bool} ;
|
||||||
|
|
||||||
--
|
--
|
||||||
--2 Adjectives
|
--2 Adjectives
|
||||||
--
|
--
|
||||||
@@ -50,8 +52,13 @@ oper
|
|||||||
-- have a uniform, special accusative form ("minut", etc).
|
-- have a uniform, special accusative form ("minut", etc).
|
||||||
|
|
||||||
param
|
param
|
||||||
NPForm = NPCase Case | NPAccNom | NPAccGen ;
|
NPForm = NPCase Case | NPAcc ;
|
||||||
|
|
||||||
|
oper
|
||||||
|
npform2case : NPForm -> Case = \f -> case f of {
|
||||||
|
NPCase c => c ;
|
||||||
|
NPAcc => Gen -- appCompl does the job
|
||||||
|
} ;
|
||||||
|
|
||||||
--2 For $Verb$
|
--2 For $Verb$
|
||||||
|
|
||||||
@@ -59,7 +66,7 @@ param
|
|||||||
|
|
||||||
param
|
param
|
||||||
VForm =
|
VForm =
|
||||||
Inf
|
Inf InfForm
|
||||||
| Presn Number Person
|
| Presn Number Person
|
||||||
| Impf Number Person
|
| Impf Number Person
|
||||||
| Condit Number Person
|
| Condit Number Person
|
||||||
@@ -70,6 +77,10 @@ param
|
|||||||
| Pass Bool
|
| Pass Bool
|
||||||
| PastPartAct AForm
|
| PastPartAct AForm
|
||||||
| PastPartPass AForm
|
| PastPartPass AForm
|
||||||
|
;
|
||||||
|
|
||||||
|
InfForm =
|
||||||
|
Inf1
|
||||||
| Inf3Iness -- 5 forms acc. to Karlsson
|
| Inf3Iness -- 5 forms acc. to Karlsson
|
||||||
| Inf3Elat
|
| Inf3Elat
|
||||||
| Inf3Illat
|
| Inf3Illat
|
||||||
@@ -103,60 +114,101 @@ param
|
|||||||
|
|
||||||
Compl : Type = {s : Str ; c : NPForm ; isPre : Bool} ;
|
Compl : Type = {s : Str ; c : NPForm ; isPre : Bool} ;
|
||||||
|
|
||||||
|
appCompl : Bool -> Polarity -> Compl -> NP -> Str = \isFin,b,co,np ->
|
||||||
|
let
|
||||||
|
c = case <isFin, b, co.c, np.isPron,np.a.n> of {
|
||||||
|
<_, Neg, NPAcc,_,_> => NPCase Part ; -- en näe taloa/sinua
|
||||||
|
<_, Pos, NPAcc,True,_> => NPAcc ; -- näen/täytyy sinut
|
||||||
|
<True, Pos, NPAcc,False,Sg> => NPCase Gen ; -- näen talon
|
||||||
|
<False,Pos, NPAcc,_,Pl> => NPCase Nom ; -- täytyy talo/sinut; näen talot
|
||||||
|
<_,_,coc,_,_> => coc
|
||||||
|
} ;
|
||||||
|
nps = np.s ! c
|
||||||
|
in
|
||||||
|
preOrPost co.isPre co.s nps ;
|
||||||
|
|
||||||
-- For $Verb$.
|
-- For $Verb$.
|
||||||
|
|
||||||
Verb : Type = {
|
Verb : Type = {
|
||||||
s : VForm => Str
|
s : VForm => Str
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
param
|
||||||
|
VIForm =
|
||||||
|
VIFin Tense
|
||||||
|
| VIInf InfForm
|
||||||
|
| VIImper
|
||||||
|
;
|
||||||
|
|
||||||
VP : Type = {
|
oper
|
||||||
s : Tense => Anteriority => Polarity => Agr => {fin, inf : Str} ;
|
VP = {
|
||||||
s2 : Agr => Str
|
s : VIForm => Anteriority => Polarity => Agr => {fin, inf : Str} ;
|
||||||
|
s2 : Polarity => Agr => Str ; -- itseni/itseäni
|
||||||
|
ext : Str ;
|
||||||
|
sc : NPForm
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
predV : Verb -> VP = \verb -> {
|
predV : (Verb ** {sc : NPForm}) -> VP = \verb -> {
|
||||||
s = \\t,ant,b,agr => {fin = verb.s ! Presn agr.n agr.p ; inf = []} ;
|
s = \\vi,ant,b,agr =>
|
||||||
s2 = \\_ => []
|
|
||||||
} ;
|
|
||||||
{-
|
|
||||||
let
|
let
|
||||||
inf = verb.s ! VInf ;
|
|
||||||
fin = presVerb verb agr ;
|
verbs = verb.s ;
|
||||||
past = verb.s ! VPast ;
|
part : Str = verbs ! PastPartAct (AN (NCase agr.n Nom)) ;
|
||||||
part = verb.s ! VPPart ;
|
|
||||||
|
eiv : Str = case agr of {
|
||||||
|
{n = Sg ; p = P1} => "en" ;
|
||||||
|
{n = Sg ; p = P2} => "et" ;
|
||||||
|
{n = Sg ; p = P3} => "ei" ;
|
||||||
|
{n = Pl ; p = P1} => "emme" ;
|
||||||
|
{n = Pl ; p = P2} => "ette" ;
|
||||||
|
{n = Pl ; p = P3} => "eivät"
|
||||||
|
} ;
|
||||||
|
|
||||||
|
einegole : Str * Str * Str = case <vi,agr.n> of {
|
||||||
|
<VIFin (Pres | Fut),_> => <eiv, verbs ! Imper Sg, "ole"> ;
|
||||||
|
<VIFin Cond, _> => <eiv, verbs ! Condit Sg P3, "olisi"> ;
|
||||||
|
<VIFin Past, Sg> => <eiv, part, "ollut"> ;
|
||||||
|
<VIFin Past, Pl> => <eiv, part, "olleet"> ;
|
||||||
|
<VIImper, Sg> => <"älä", verbs ! Imper Sg, "ole"> ;
|
||||||
|
<VIImper, Pl> => <"älkää", verbs ! ImpNegPl, "olko"> ;
|
||||||
|
<VIInf i, _> => <"ei", verbs ! Inf i, "olla"> ----
|
||||||
|
} ;
|
||||||
|
|
||||||
|
ei : Str = einegole.p1 ;
|
||||||
|
neg : Str = einegole.p2 ;
|
||||||
|
ole : Str = einegole.p3 ;
|
||||||
|
|
||||||
|
olla : VForm => Str = verbOlla.s ;
|
||||||
|
|
||||||
vf : Str -> Str -> {fin, inf : Str} = \x,y ->
|
vf : Str -> Str -> {fin, inf : Str} = \x,y ->
|
||||||
{fin = x ; inf = y} ;
|
{fin = x ; inf = y} ;
|
||||||
|
mkvf : VForm -> {fin, inf : Str} = \p -> case <ant,b> of {
|
||||||
|
<Simul,Pos> => vf (verbs ! p) [] ;
|
||||||
|
<Simul,Neg> => vf ei neg ;
|
||||||
|
<Anter,Pos> => vf (olla ! p) part ;
|
||||||
|
<Anter,Neg> => vf ei (ole ++ part)
|
||||||
|
}
|
||||||
in
|
in
|
||||||
case <t,ant,b,ord> of {
|
case vi of {
|
||||||
<Pres,Simul,Pos,ODir> => vf fin [] ;
|
VIFin Past => mkvf (Impf agr.n agr.p) ;
|
||||||
<Pres,Simul,Pos,OQuest> => vf (does agr) inf ;
|
VIFin Cond => mkvf (Condit agr.n agr.p) ;
|
||||||
<Pres,Simul,Neg,_> => vf (doesnt agr) inf ;
|
_ => mkvf (Presn agr.n agr.p)
|
||||||
<Pres,Anter,Pos,_> => vf (have agr) part ;
|
|
||||||
<Pres,Anter,Neg,_> => vf (havent agr) part ;
|
|
||||||
<Past,Simul,Pos,ODir> => vf past [] ;
|
|
||||||
<Past,Simul,Pos,OQuest> => vf "did" inf ;
|
|
||||||
<Past,Simul,Neg,_> => vf "didn't" inf ;
|
|
||||||
<Past,Anter,Pos,_> => vf "had" part ;
|
|
||||||
<Past,Anter,Neg,_> => vf "hadn't" part ;
|
|
||||||
<Fut, Simul,Pos,_> => vf "will" inf ;
|
|
||||||
<Fut, Simul,Neg,_> => vf "won't" inf ;
|
|
||||||
<Fut, Anter,Pos,_> => vf "will" ("have" ++ part) ;
|
|
||||||
<Fut, Anter,Neg,_> => vf "won't" ("have" ++ part) ;
|
|
||||||
<Cond,Simul,Pos,_> => vf "would" inf ;
|
|
||||||
<Cond,Simul,Neg,_> => vf "wouldn't" inf ;
|
|
||||||
<Cond,Anter,Pos,_> => vf "would" ("have" ++ part) ;
|
|
||||||
<Cond,Anter,Neg,_> => vf "wouldn't" ("have" ++ part)
|
|
||||||
} ;
|
} ;
|
||||||
s2 = \\a => if_then_Str verb.isRefl (reflPron ! a) []
|
|
||||||
|
s2 = \\_,_ => [] ;
|
||||||
|
ext = [] ;
|
||||||
|
sc = verb.sc
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
insertObj : (Agr => Str) -> VP -> VP = \obj,vp -> {
|
insertObj : (Polarity => Agr => Str) -> VP -> VP = \obj,vp -> {
|
||||||
s = vp.s ;
|
s = vp.s ;
|
||||||
s2 = \\a => vp.s2 ! a ++ obj ! a
|
s2 = \\b,a => vp.s2 ! b ! a ++ obj ! b ! a ;
|
||||||
|
ext = vp.ext ;
|
||||||
|
sc = vp.sc
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
{-
|
||||||
--- This is not functional.
|
--- This is not functional.
|
||||||
|
|
||||||
insertAdV : Str -> VP -> VP = \adv,vp -> {
|
insertAdV : Str -> VP -> VP = \adv,vp -> {
|
||||||
@@ -219,21 +271,24 @@ param
|
|||||||
s : Tense => Anteriority => Polarity => SType => Str
|
s : Tense => Anteriority => Polarity => SType => Str
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
{-
|
|
||||||
mkClause : Str -> Agr -> VP -> Clause =
|
mkClause : Str -> Agr -> VP -> Clause =
|
||||||
\subj,agr,vp -> {
|
\subj,agr,vp -> {
|
||||||
s = \\t,a,b,o =>
|
s = \\t,a,b,o =>
|
||||||
let
|
let
|
||||||
verb = vp.s ! t ! a ! b ! o ! agr ;
|
verb = vp.s ! VIFin t ! a ! b ! agr ;
|
||||||
compl = vp.s2 ! agr
|
compl = vp.s2 ! b ! agr ++ vp.ext
|
||||||
in
|
in
|
||||||
case o of {
|
case o of {
|
||||||
ODir => subj ++ verb.fin ++ verb.inf ++ compl ;
|
SDecl => subj ++ verb.fin ++ verb.inf ++ compl ;
|
||||||
OQuest => verb.fin ++ subj ++ verb.inf ++ compl
|
SQuest => questPart verb.fin ++ subj ++ verb.inf ++ compl
|
||||||
}
|
}
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
questPart : Str -> Str = \on -> on ++ BIND ++ "ko" ; ----
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
{-
|
||||||
-- For $Numeral$.
|
-- For $Numeral$.
|
||||||
|
|
||||||
mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} =
|
mkNum : Str -> Str -> Str -> Str -> {s : DForm => CardOrd => Str} =
|
||||||
@@ -260,4 +315,256 @@ param
|
|||||||
_ => ten + "th"
|
_ => ten + "th"
|
||||||
} ;
|
} ;
|
||||||
-}
|
-}
|
||||||
|
|
||||||
|
-- The definitions below were moved here from $MorphoFin$ so that we the
|
||||||
|
-- auxiliary of predication can be defined.
|
||||||
|
|
||||||
|
verbOlla : Verb =
|
||||||
|
mkVerb
|
||||||
|
"olla" "on" "olen" "ovat" "olkaa" "ollaan"
|
||||||
|
"oli" "olin" "olisi" "ollut" "oltu" "ollun" ;
|
||||||
|
|
||||||
|
--3 Verbs
|
||||||
|
--
|
||||||
|
-- The present, past, conditional. and infinitive stems, acc. to Koskenniemi.
|
||||||
|
-- Unfortunately not enough (without complicated processes).
|
||||||
|
-- We moreover give grade alternation forms as arguments, since it does not
|
||||||
|
-- happen automatically.
|
||||||
|
--- A problem remains with the verb "seistä", where the infinitive
|
||||||
|
--- stem has vowel harmony "ä" but the others "a", thus "seisoivat" but "seiskää".
|
||||||
|
|
||||||
|
|
||||||
|
mkVerb : (_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> Verb =
|
||||||
|
\tulla,tulee,tulen,tulevat,tulkaa,tullaan,tuli,tulin,tulisi,tullut,tultu,tullun ->
|
||||||
|
v2v (mkVerbH
|
||||||
|
tulla tulee tulen tulevat tulkaa tullaan tuli tulin tulisi tullut tultu tullun
|
||||||
|
) ;
|
||||||
|
|
||||||
|
v2v : VerbH -> Verb = \vh ->
|
||||||
|
let
|
||||||
|
tulla = vh.tulla ;
|
||||||
|
tulee = vh.tulee ;
|
||||||
|
tulen = vh.tulen ;
|
||||||
|
tulevat = vh.tulevat ;
|
||||||
|
tulkaa = vh.tulkaa ;
|
||||||
|
tullaan = vh.tullaan ;
|
||||||
|
tuli = vh.tuli ;
|
||||||
|
tulin = vh.tulin ;
|
||||||
|
tulisi = vh.tulisi ;
|
||||||
|
tullut = vh.tullut ;
|
||||||
|
tultu = vh.tultu ;
|
||||||
|
tultu = vh.tultu ;
|
||||||
|
tullun = vh.tullun ;
|
||||||
|
tuje = init tulen ;
|
||||||
|
tuji = init tulin ;
|
||||||
|
a = Predef.dp 1 tulkaa ;
|
||||||
|
tulko = Predef.tk 2 tulkaa + (ifTok Str a "a" "o" "ö") ;
|
||||||
|
o = last tulko ;
|
||||||
|
tulleena = Predef.tk 2 tullut + ("een" + a) ;
|
||||||
|
tulleen = (noun2adj (nhn (sRae tullut tulleena))).s ;
|
||||||
|
tullun = (noun2adj (nhn (sKukko tultu tullun (tultu + ("j"+a))))).s ;
|
||||||
|
tulema = tuje + "m" + a ;
|
||||||
|
vat = "v" + a + "t"
|
||||||
|
in
|
||||||
|
{s = table {
|
||||||
|
Inf Inf1 => tulla ;
|
||||||
|
Presn Sg P1 => tuje + "n" ;
|
||||||
|
Presn Sg P2 => tuje + "t" ;
|
||||||
|
Presn Sg P3 => tulee ;
|
||||||
|
Presn Pl P1 => tuje + "mme" ;
|
||||||
|
Presn Pl P2 => tuje + "tte" ;
|
||||||
|
Presn Pl P3 => tulevat ;
|
||||||
|
Impf Sg P1 => tuji + "n" ;
|
||||||
|
Impf Sg P2 => tuji + "t" ;
|
||||||
|
Impf Sg P3 => tuli ;
|
||||||
|
Impf Pl P1 => tuji + "mme" ;
|
||||||
|
Impf Pl P2 => tuji + "tte" ;
|
||||||
|
Impf Pl P3 => tuli + vat ;
|
||||||
|
Condit Sg P1 => tulisi + "n" ;
|
||||||
|
Condit Sg P2 => tulisi + "t" ;
|
||||||
|
Condit Sg P3 => tulisi ;
|
||||||
|
Condit Pl P1 => tulisi + "mme" ;
|
||||||
|
Condit Pl P2 => tulisi + "tte" ;
|
||||||
|
Condit Pl P3 => tulisi + vat ;
|
||||||
|
Imper Sg => tuje ;
|
||||||
|
Imper Pl => tulkaa ;
|
||||||
|
ImperP3 Sg => tulko + o + "n" ;
|
||||||
|
ImperP3 Pl => tulko + o + "t" ;
|
||||||
|
ImperP1Pl => tulkaa + "mme" ;
|
||||||
|
ImpNegPl => tulko ;
|
||||||
|
Pass True => tullaan ;
|
||||||
|
Pass False => Predef.tk 2 tullaan ;
|
||||||
|
PastPartAct n => tulleen ! n ;
|
||||||
|
PastPartPass n => tullun ! n ;
|
||||||
|
Inf Inf3Iness => tulema + "ss" + a ;
|
||||||
|
Inf Inf3Elat => tulema + "st" + a ;
|
||||||
|
Inf Inf3Illat => tulema + a + "n" ;
|
||||||
|
Inf Inf3Adess => tulema + "ll" + a ;
|
||||||
|
Inf Inf3Abess => tulema + "tt" + a
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
VerbH : Type = {
|
||||||
|
tulla,tulee,tulen,tulevat,tulkaa,tullaan,tuli,tulin,tulisi,tullut,tultu,tullun
|
||||||
|
: Str
|
||||||
|
} ;
|
||||||
|
|
||||||
|
mkVerbH : (_,_,_,_,_,_,_,_,_,_,_,_ : Str) -> VerbH =
|
||||||
|
\tulla,tulee,tulen,tulevat,tulkaa,tullaan,tuli,tulin,tulisi,tullut,tultu,tullun ->
|
||||||
|
{tulla = tulla ;
|
||||||
|
tulee = tulee ;
|
||||||
|
tulen = tulen ;
|
||||||
|
tulevat = tulevat ;
|
||||||
|
tulkaa = tulkaa ;
|
||||||
|
tullaan = tullaan ;
|
||||||
|
tuli = tuli ;
|
||||||
|
tulin = tulin ;
|
||||||
|
tulisi = tulisi ;
|
||||||
|
tullut = tullut ;
|
||||||
|
tultu = tultu ;
|
||||||
|
tullun = tullun
|
||||||
|
} ;
|
||||||
|
|
||||||
|
noun2adj : CommonNoun -> Adj = noun2adjComp True ;
|
||||||
|
|
||||||
|
noun2adjComp : Bool -> CommonNoun -> Adj = \isPos,tuore ->
|
||||||
|
let
|
||||||
|
tuoreesti = Predef.tk 1 (tuore.s ! NCase Sg Gen) + "sti" ;
|
||||||
|
tuoreemmin = Predef.tk 2 (tuore.s ! NCase Sg Gen) + "in"
|
||||||
|
in {s = table {
|
||||||
|
AN f => tuore.s ! f ;
|
||||||
|
AAdv => if_then_Str isPos tuoreesti tuoreemmin
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
|
||||||
|
CommonNoun = {s : NForm => Str} ;
|
||||||
|
|
||||||
|
-- To form an adjective, it is usually enough to give a noun declension: the
|
||||||
|
-- adverbial form is regular.
|
||||||
|
|
||||||
|
Adj : Type = {s : AForm => Str} ;
|
||||||
|
|
||||||
|
NounH : Type = {
|
||||||
|
a,vesi,vede,vete,vetta,veteen,vetii,vesii,vesien,vesia,vesiin : Str
|
||||||
|
} ;
|
||||||
|
|
||||||
|
-- worst-case macro
|
||||||
|
|
||||||
|
mkSubst : Str -> (_,_,_,_,_,_,_,_,_,_ : Str) -> NounH =
|
||||||
|
\a,vesi,vede,vete,vetta,veteen,vetii,vesii,vesien,vesia,vesiin ->
|
||||||
|
{a = a ;
|
||||||
|
vesi = vesi ;
|
||||||
|
vede = vede ;
|
||||||
|
vete = vete ;
|
||||||
|
vetta = vetta ;
|
||||||
|
veteen = veteen ;
|
||||||
|
vetii = vetii ;
|
||||||
|
vesii = vesii ;
|
||||||
|
vesien = vesien ;
|
||||||
|
vesia = vesia ;
|
||||||
|
vesiin = vesiin
|
||||||
|
} ;
|
||||||
|
|
||||||
|
nhn : NounH -> CommonNoun = \nh ->
|
||||||
|
let
|
||||||
|
a = nh.a ;
|
||||||
|
vesi = nh.vesi ;
|
||||||
|
vede = nh.vede ;
|
||||||
|
vete = nh.vete ;
|
||||||
|
vetta = nh.vetta ;
|
||||||
|
veteen = nh.veteen ;
|
||||||
|
vetii = nh.vetii ;
|
||||||
|
vesii = nh.vesii ;
|
||||||
|
vesien = nh.vesien ;
|
||||||
|
vesia = nh.vesia ;
|
||||||
|
vesiin = nh.vesiin
|
||||||
|
in
|
||||||
|
{s = table {
|
||||||
|
NCase Sg Nom => vesi ;
|
||||||
|
NCase Sg Gen => vede + "n" ;
|
||||||
|
NCase Sg Part => vetta ;
|
||||||
|
NCase Sg Transl => vede + "ksi" ;
|
||||||
|
NCase Sg Ess => vete + ("n" + a) ;
|
||||||
|
NCase Sg Iness => vede + ("ss" + a) ;
|
||||||
|
NCase Sg Elat => vede + ("st" + a) ;
|
||||||
|
NCase Sg Illat => veteen ;
|
||||||
|
NCase Sg Adess => vede + ("ll" + a) ;
|
||||||
|
NCase Sg Ablat => vede + ("lt" + a) ;
|
||||||
|
NCase Sg Allat => vede + "lle" ;
|
||||||
|
NCase Sg Abess => vede + ("tt" + a) ;
|
||||||
|
|
||||||
|
NCase Pl Nom => vede + "t" ;
|
||||||
|
NCase Pl Gen => vesien ;
|
||||||
|
NCase Pl Part => vesia ;
|
||||||
|
NCase Pl Transl => vesii + "ksi" ;
|
||||||
|
NCase Pl Ess => vetii + ("n" + a) ;
|
||||||
|
NCase Pl Iness => vesii + ("ss" + a) ;
|
||||||
|
NCase Pl Elat => vesii + ("st" + a) ;
|
||||||
|
NCase Pl Illat => vesiin ;
|
||||||
|
NCase Pl Adess => vesii + ("ll" + a) ;
|
||||||
|
NCase Pl Ablat => vesii + ("lt" + a) ;
|
||||||
|
NCase Pl Allat => vesii + "lle" ;
|
||||||
|
NCase Pl Abess => vesii + ("tt" + a) ;
|
||||||
|
|
||||||
|
NComit => vetii + "ne" ;
|
||||||
|
NInstruct => vesii + "n" ;
|
||||||
|
|
||||||
|
NPossNom => vete ;
|
||||||
|
NPossGenPl => Predef.tk 1 vesien ;
|
||||||
|
NPossTransl Sg => vede + "kse" ;
|
||||||
|
NPossTransl Pl => vesii + "kse" ;
|
||||||
|
NPossIllat Sg => Predef.tk 1 veteen ;
|
||||||
|
NPossIllat Pl => Predef.tk 1 vesiin
|
||||||
|
}
|
||||||
|
} ;
|
||||||
|
-- Surpraisingly, making the test for the partitive, this not only covers
|
||||||
|
-- "rae", "perhe", "savuke", but also "rengas", "lyhyt" (except $Sg Illat$), etc.
|
||||||
|
|
||||||
|
sRae : (_,_ : Str) -> NounH = \rae,rakeena ->
|
||||||
|
let {
|
||||||
|
a = Predef.dp 1 rakeena ;
|
||||||
|
rakee = Predef.tk 2 rakeena ;
|
||||||
|
rakei = Predef.tk 1 rakee + "i" ;
|
||||||
|
raet = rae + (ifTok Str (Predef.dp 1 rae) "e" "t" [])
|
||||||
|
}
|
||||||
|
in
|
||||||
|
mkSubst a
|
||||||
|
rae
|
||||||
|
rakee
|
||||||
|
rakee
|
||||||
|
(raet + ("t" + a))
|
||||||
|
(rakee + "seen")
|
||||||
|
rakei
|
||||||
|
rakei
|
||||||
|
(rakei + "den")
|
||||||
|
(rakei + ("t" + a))
|
||||||
|
(rakei + "siin") ;
|
||||||
|
-- Nouns with partitive "a"/"ä" ;
|
||||||
|
-- to account for grade and vowel alternation, three forms are usually enough
|
||||||
|
-- Examples: "talo", "kukko", "huippu", "koira", "kukka", "syylä",...
|
||||||
|
|
||||||
|
sKukko : (_,_,_ : Str) -> NounH = \kukko,kukon,kukkoja ->
|
||||||
|
let {
|
||||||
|
o = Predef.dp 1 kukko ;
|
||||||
|
a = Predef.dp 1 kukkoja ;
|
||||||
|
kukkoj = Predef.tk 1 kukkoja ;
|
||||||
|
i = Predef.dp 1 kukkoj ;
|
||||||
|
ifi = ifTok Str i "i" ;
|
||||||
|
kukkoi = ifi kukkoj (Predef.tk 1 kukkoj) ;
|
||||||
|
e = Predef.dp 1 kukkoi ;
|
||||||
|
kukoi = Predef.tk 2 kukon + Predef.dp 1 kukkoi
|
||||||
|
}
|
||||||
|
in
|
||||||
|
mkSubst a
|
||||||
|
kukko
|
||||||
|
(Predef.tk 1 kukon)
|
||||||
|
kukko
|
||||||
|
(kukko + a)
|
||||||
|
(kukko + o + "n")
|
||||||
|
(kukkoi + ifi "" "i")
|
||||||
|
(kukoi + ifi "" "i")
|
||||||
|
(ifTok Str e "e" (Predef.tk 1 kukkoi + "ien") (kukkoi + ifi "en" "jen"))
|
||||||
|
kukkoja
|
||||||
|
(kukkoi + ifi "in" "ihin") ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ concrete SentenceFin of Sentence = CatFin ** open ResFin in {
|
|||||||
|
|
||||||
lin
|
lin
|
||||||
|
|
||||||
PredVP np vp = mkClause (np.s ! Nom) np.a vp ;
|
PredVP np vp = mkClause (np.s ! vp.sc) np.a vp ;
|
||||||
|
{-
|
||||||
PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
|
PredSCVP sc vp = mkClause sc.s (agrP3 Sg) vp ;
|
||||||
|
|
||||||
ImpVP vp = {
|
ImpVP vp = {
|
||||||
@@ -42,5 +42,5 @@ concrete SentenceFin of Sentence = CatFin ** open ResFin in {
|
|||||||
UseCl t a p cl = {s = t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! ODir} ;
|
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} ;
|
UseQCl t a p cl = {s = \\q => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! q} ;
|
||||||
UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ;
|
UseRCl t a p cl = {s = \\r => t.s ++ a.s ++ p.s ++ cl.s ! t.t ! a.a ! p.p ! r} ;
|
||||||
|
-}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,106 +1,121 @@
|
|||||||
concrete StructuralFin of Structural = CatFin **
|
concrete StructuralFin of Structural = CatFin **
|
||||||
open MorphoFin, Prelude in {
|
open MorphoFin, ParadigmsFin, Prelude in {
|
||||||
|
|
||||||
flags optimize=all ;
|
flags optimize=all ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
above_Prep = ss "above" ;
|
above_Prep = postGenPrep "yläpuolella" ;
|
||||||
after_Prep = ss "after" ;
|
after_Prep = postGenPrep "jälkeen" ;
|
||||||
all_Predet = ss "all" ;
|
|
||||||
almost_AdA, almost_AdN = ss "almost" ;
|
|
||||||
although_Subj = ss "although" ;
|
|
||||||
always_AdV = ss "always" ;
|
|
||||||
and_Conj = ss "and" ** {n = Pl} ;
|
|
||||||
because_Subj = ss "because" ;
|
|
||||||
before_Prep = ss "before" ;
|
|
||||||
behind_Prep = ss "behind" ;
|
|
||||||
between_Prep = ss "between" ;
|
|
||||||
both7and_DConj = sd2 "both" "and" ** {n = Pl} ;
|
|
||||||
but_PConj = ss "but" ;
|
|
||||||
by8agent_Prep = ss "by" ;
|
|
||||||
by8means_Prep = ss "by" ;
|
|
||||||
can8know_VV = verbPart (mkVerbIrreg "know" "knew" "known") "how"** {c2 = "to"} ;---
|
|
||||||
can_VV = verbGen "manage" ** {c2 = "to"} ; ---
|
|
||||||
during_Prep = ss "during" ;
|
|
||||||
either7or_DConj = sd2 "either" "or" ** {n = Sg} ;
|
|
||||||
everybody_NP = regNP "everybody" Sg ;
|
|
||||||
every_Det = mkDeterminer Sg "every" ;
|
|
||||||
everything_NP = regNP "everything" Sg ;
|
|
||||||
everywhere_Adv = ss "everywhere" ;
|
|
||||||
first_Ord = ss "first" ;
|
|
||||||
from_Prep = ss "from" ;
|
|
||||||
he_Pron = mkNP "he" "him" "his" Sg P3 ;
|
|
||||||
here_Adv = ss "here" ;
|
|
||||||
here7to_Adv = ss ["to here"] ;
|
|
||||||
here7from_Adv = ss ["from here"] ;
|
|
||||||
how_IAdv = ss "how" ;
|
|
||||||
how8many_IDet = mkDeterminer Pl ["how many"] ;
|
|
||||||
if_Subj = ss "if" ;
|
|
||||||
in8front_Prep = ss ["in front of"] ;
|
|
||||||
i_Pron = mkNP "I" "me" "my" Sg P1 ;
|
|
||||||
in_Prep = ss "in" ;
|
|
||||||
it_Pron = mkNP "it" "it" "its" Sg P3 ;
|
|
||||||
less_CAdv = ss "less" ;
|
|
||||||
many_Det = mkDeterminer Pl "many" ;
|
|
||||||
more_CAdv = ss "more" ;
|
|
||||||
most_Predet = ss "most" ;
|
|
||||||
much_Det = mkDeterminer Sg "much" ;
|
|
||||||
must_VV = mkVerb4 "have" "has" "had" "had" ** {c2 = "to"} ; ---
|
|
||||||
no_Phr = ss "no" ;
|
|
||||||
on_Prep = ss "on" ;
|
|
||||||
one_Quant = mkDeterminer Sg "one" ;
|
|
||||||
only_Predet = ss "only" ;
|
|
||||||
or_Conj = ss "or" ** {n = Sg} ;
|
|
||||||
otherwise_PConj = ss "otherwise" ;
|
|
||||||
part_Prep = ss "of" ;
|
|
||||||
please_Voc = ss "please" ;
|
|
||||||
possess_Prep = ss "of" ;
|
|
||||||
quite_Adv = ss "quite" ;
|
|
||||||
she_Pron = mkNP "she" "her" "her" Sg P3 ;
|
|
||||||
so_AdA = ss "so" ;
|
|
||||||
somebody_NP = regNP "somebody" Sg ;
|
|
||||||
someSg_Det = mkDeterminer Sg "some" ;
|
|
||||||
somePl_Det = mkDeterminer Pl "some" ;
|
|
||||||
something_NP = regNP "something" Sg ;
|
|
||||||
somewhere_Adv = ss "somewhere" ;
|
|
||||||
that_Quant = mkQuant "that" "those" ;
|
|
||||||
that_NP = regNP "that" Sg ;
|
|
||||||
there_Adv = ss "there" ;
|
|
||||||
there7to_Adv = ss "there" ;
|
|
||||||
there7from_Adv = ss ["from there"] ;
|
|
||||||
therefore_PConj = ss "therefore" ;
|
|
||||||
they_Pron = mkNP "they" "them" "their" Pl P3 ;
|
|
||||||
this_Quant = mkQuant "this" "these" ;
|
|
||||||
this_NP = regNP "this" Sg ;
|
|
||||||
those_NP = regNP "those" Pl ;
|
|
||||||
through_Prep = ss "through" ;
|
|
||||||
too_AdA = ss "too" ;
|
|
||||||
to_Prep = ss "to" ;
|
|
||||||
under_Prep = ss "under" ;
|
|
||||||
very_AdA = ss "very" ;
|
|
||||||
want_VV = verbGen "want" ** {c2 = "to"} ;
|
|
||||||
we_Pron = mkNP "we" "us" "our" Pl P1 ;
|
|
||||||
whatPl_IP = mkIP "what" "what" "what's" Sg ;
|
|
||||||
whatSg_IP = mkIP "what" "what" "what's" Sg ;
|
|
||||||
when_IAdv = ss "when" ;
|
|
||||||
when_Subj = ss "when" ;
|
|
||||||
where_IAdv = ss "where" ;
|
|
||||||
whichPl_IDet = mkDeterminer Pl ["which"] ;
|
|
||||||
whichSg_IDet = mkDeterminer Sg ["which"] ;
|
|
||||||
whoSg_IP = mkIP "who" "whom" "whose" Sg ;
|
|
||||||
whoPl_IP = mkIP "who" "whom" "whose" Pl ;
|
|
||||||
why_IAdv = ss "why" ;
|
|
||||||
without_Prep = ss "without" ;
|
|
||||||
with_Prep = ss "with" ;
|
|
||||||
yes_Phr = ss "yes" ;
|
|
||||||
youSg_Pron = mkNP "you" "you" "your" Sg P2 ;
|
|
||||||
youPl_Pron = mkNP "you" "you" "your" Pl P2 ;
|
|
||||||
youPol_Pron = mkNP "you" "you" "your" Sg P2 ;
|
|
||||||
|
|
||||||
oper
|
all_Predet = {s = \\n,c =>
|
||||||
mkQuant : Str -> Str -> {s : Number => Str} = \x,y -> {
|
let
|
||||||
s = table Number [x ; y]
|
kaiket = caseTable n (nhn (sKorpi "kaikki" "kaiken" "kaikkena"))
|
||||||
|
in
|
||||||
|
case c of {
|
||||||
|
Nom => "kaikki" ;
|
||||||
|
_ => kaiket ! c
|
||||||
|
}
|
||||||
} ;
|
} ;
|
||||||
|
almost_AdA, almost_AdN = ss "melkein" ;
|
||||||
|
although_Subj = ss "vaikka" ;
|
||||||
|
always_AdV = ss "aina" ;
|
||||||
|
and_Conj = ss "ja" ** {n = Pl} ;
|
||||||
|
because_Subj = ss "koska" ;
|
||||||
|
before_Prep = prePrep partitive "ennen" ;
|
||||||
|
behind_Prep = postGenPrep "takana" ;
|
||||||
|
between_Prep = postGenPrep "välissä" ;
|
||||||
|
both7and_DConj = sd2 "sekä" "että" ** {n = Pl} ;
|
||||||
|
but_PConj = ss "mutta" ;
|
||||||
|
by8agent_Prep = postGenPrep "toimesta" ;
|
||||||
|
by8means_Prep = casePrep adessive ;
|
||||||
|
can8know_VV = reg2V "osata" "osasi" ;
|
||||||
|
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 ;
|
||||||
|
everywhere_Adv = ss "kaikkialla" ;
|
||||||
|
-- first_Ord = ss "first" ;
|
||||||
|
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"] ;
|
||||||
|
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 ;
|
||||||
|
a = agrP3 Sg ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
less_CAdv = ss "vähemmän" ;
|
||||||
|
-- many_Det = mkDeterminer Pl "many" ;
|
||||||
|
more_CAdv = ss "enemmän" ;
|
||||||
|
-- most_Predet = ss "eniten" ;
|
||||||
|
-- much_Det = mkDeterminer Sg "much" ;
|
||||||
|
-- must_VV = mkVerb4 "have" "has" "had" "had" ** {c2 = "to"} ; ---
|
||||||
|
no_Phr = ss "ei" ;
|
||||||
|
on_Prep = casePrep adessive ;
|
||||||
|
-- one_Quant = mkDeterminer Sg "one" ;
|
||||||
|
only_Predet = {s = \\_,_ => "vain"} ;
|
||||||
|
or_Conj = ss "tai" ** {n = Sg} ;
|
||||||
|
otherwise_PConj = ss "muuten" ;
|
||||||
|
part_Prep = casePrep partitive ;
|
||||||
|
please_Voc = ss ["ole hyvä"] ; --- number
|
||||||
|
possess_Prep = casePrep genitive ;
|
||||||
|
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 ;
|
||||||
|
somewhere_Adv = ss "jossain" ;
|
||||||
|
-- that_Quant = mkQuant "that" "those" ;
|
||||||
|
that_NP =
|
||||||
|
mkPronoun "tuo" "tuon" "tuota" "tuona" "tuohon" Sg P3 **
|
||||||
|
{isPron = False} ;
|
||||||
|
there_Adv = ss "siellä" ; --- tuolla
|
||||||
|
there7to_Adv = ss "sinne" ;
|
||||||
|
there7from_Adv = ss "sieltä" ;
|
||||||
|
therefore_PConj = ss "siksi" ;
|
||||||
|
they_Pron = mkPronoun "he" "heidän" "heitä" "heinä" "heihin" Pl P3 ; --- ne
|
||||||
|
-- this_Quant = mkQuant "this" "these" ;
|
||||||
|
this_NP =
|
||||||
|
mkPronoun "tämä" "tämän" "tätä" "tänä" "tähän" Sg P3 **
|
||||||
|
{isPron = False} ;
|
||||||
|
those_NP =
|
||||||
|
mkPronoun "nuo" "noiden" "noita" "noina" "noihin" Pl P3 **
|
||||||
|
{isPron = False} ;
|
||||||
|
through_Prep = postGenPrep "kautta" ;
|
||||||
|
too_AdA = ss "liian" ;
|
||||||
|
to_Prep = casePrep illative ; --- allative
|
||||||
|
under_Prep = postGenPrep "alla" ;
|
||||||
|
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 ;
|
||||||
|
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 ;
|
||||||
|
why_IAdv = ss "miksi" ;
|
||||||
|
without_Prep = prePrep partitive "ilman" ;
|
||||||
|
with_Prep = postGenPrep "kanssa" ;
|
||||||
|
yes_Phr = ss "kyllä" ;
|
||||||
|
youSg_Pron = mkPronoun "sinä" "sinun" "sinua" "sinuna" "sinuun" Sg P2 ;
|
||||||
|
youPl_Pron = mkPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 ;
|
||||||
|
youPol_Pron = mkPronoun "te" "teidän" "teitä" "teinä" "teihin" Pl P2 ; --- Sg
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,12 @@
|
|||||||
concrete VerbFin of Verb = CatFin ** open ResFin in {
|
concrete VerbFin of Verb = CatFin ** open Prelude, ResFin in {
|
||||||
|
|
||||||
flags optimize=all_subs ;
|
flags optimize=all_subs ;
|
||||||
|
|
||||||
lin
|
lin
|
||||||
UseV = predV ;
|
UseV = predV ;
|
||||||
ComplV2 v np = insertObj (\\_ => v.c2 ++ np.s ! Acc) (predV v) ;
|
|
||||||
|
ComplV2 v np = insertObj (\\b,_ => appCompl True b v.c2 np) (predV v) ; ----
|
||||||
|
{-
|
||||||
ComplV3 v np np2 =
|
ComplV3 v np np2 =
|
||||||
insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
|
insertObj (\\_ => v.c2 ++ np.s ! Acc ++ v.c3 ++ np2.s ! Acc) (predV v) ;
|
||||||
|
|
||||||
@@ -32,6 +34,6 @@ concrete VerbFin of Verb = CatFin ** open ResFin in {
|
|||||||
CompAP ap = ap ;
|
CompAP ap = ap ;
|
||||||
CompNP np = {s = \\_ => np.s ! Acc} ;
|
CompNP np = {s = \\_ => np.s ! Acc} ;
|
||||||
CompAdv a = {s = \\_ => a.s} ;
|
CompAdv a = {s = \\_ => a.s} ;
|
||||||
|
-}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user