Produced by gfdoc - a rudimentary GF document generator. (c) Aarne Ranta (aarne@cs.chalmers.se) 2002 under GNU GPL.
Aarne Ranta 2003--2005
This is an API to the user of the resource grammar for adding lexical items. It gives functions for forming expressions of open categories: nouns, adjectives, verbs.
Closed categories (determiners, pronouns, conjunctions) are
accessed through the resource syntax API, Structural.gf
.
The main difference with MorphoFin.gf
is that the types
referred to are compiled resource grammar types. We have moreover
had the design principle of always having existing forms, rather
than stems, as string arguments of the paradigms.
The structure of functions for each word class C
is the following:
first we give a handful of patterns that aim to cover all
regular cases. Then we give a worst-case function mkC
, which serves as an
escape to construct the most irregular words of type C
.
However, this function should only seldom be needed.
resource ParadigmsFin = open (Predef=Predef), Prelude, MorphoFin, CatFin in { flags optimize=noexpand ;
To abstract over gender, number, and (some) case names,
we define the following identifiers. The application programmer
should always use these constants instead of the constructors
defined in ResFin
.
oper Number : Type ; singular : Number ; plural : Number ; Case : Type ; nominative : Case ; genitive : Case ; partitive : Case ; translative : Case ; inessive : Case ; elative : Case ; illative : Case ; adessive : Case ; ablative : Case ; allative : Case ;
The following type is used for defining rection, i.e. complements of many-place verbs and adjective. A complement can be defined by just a case, or a pre/postposition and a case.
prePrep : Case -> Str -> Prep ; -- ilman, partitive postPrep : Case -> Str -> Prep ; -- takana, genitive postGenPrep : Str -> Prep ; -- takana casePrep : Case -> Prep ; -- adessive
The worst case gives ten forms. In practice just a couple of forms are needed to define the different stems, vowel alternation, and vowel harmony.
oper
The regular noun heuristic takes just one form (singular nominative) and analyses it to pick the correct paradigm. It does automatic grade alternation, and is hence not usable for words like auto (whose genitive would become audon).
If the one-argument paradigm does not give the correct result, one can try and give two or three forms. Most notably, the two-argument variant is used for nouns like kivi - kiviä, which would otherwise become like rivi - rivejä. Three arguments are used e.g. for sydän - sydämen - sydämiä, which would otherwise become sydän - sytämen.
mkN : overload { mkN : (talo : Str) -> N ; mkN : (savi,savia : Str) -> N ; mkN : (vesi,veden,vesiä : Str) -> N ; mkN : (olo,oln,olona,oloa,oloon,oloina,oloissa,olojen,oloja,oloihin : Str) -> N } ;
Some nouns have an unexpected singular partitive, e.g. meri, lumi.
sgpartN : (meri : N) -> (merta : Str) -> N ; nMeri : (meri : Str) -> N ;
The rest of the noun paradigms are mostly covered by the three heuristics.
Nouns with partitive a,ä are a large group. To determine for grade and vowel alternation, three forms are usually needed: singular nominative and genitive, and plural partitive. Examples: talo, kukko, huippu, koira, kukka, syylä, särki...
nKukko : (kukko,kukon,kukkoja : Str) -> N ;
A special case: the vowel harmony is inferred from the last letter, which must be one of o, u, ö, y. Regular weak-grade alternation is performed.
nTalo : (talo : Str) -> N ;
Another special case are nouns where the last two consonants undergo regular weak-grade alternation: kukko - kukon, rutto - ruton, hyppy - hypyn, sampo - sammon, kunto - kunnon, sisältö - sisällön, .
nLukko : (lukko : Str) -> N ;
arpi - arven, sappi - sapen, kampi - kammen;sylki - syljen
nArpi : (arpi : Str) -> N ; nSylki : (sylki : Str) -> N ;
Foreign words ending in consonants are actually similar to words like malli-mallin-malleja, with the exception that the i is not attached to the singular nominative. Examples: linux, savett, screen. The singular partitive form is used to get the vowel harmony. (N.B. more than 1-syllabic words ending in n would have variant plural genitive and partitive forms, like sultanien, sultaneiden, which are not covered.)
nLinux : (linuxia : Str) -> N ;
Nouns of at least 3 syllables ending with a or ä, like peruna, tavara, rytinä.
nPeruna : (peruna : Str) -> N ;
The following paradigm covers both nouns ending in an aspirated e, such as rae, perhe, savuke, and also many ones ending in a consonant (rengas, kätkyt). The singular nominative and essive are given.
nRae : (rae, rakeena : Str) -> N ;
The following covers nouns with partitive ta,tä, such as susi, vesi, pieni. To get all stems and the vowel harmony, it takes the singular nominative, genitive, and essive.
nSusi : (susi,suden,sutta : Str) -> N ;
Nouns ending with a long vowel, such as puu, pää, pii, leikkuu, are inflected according to the following.
nPuu : (puu : Str) -> N ;
One-syllable diphthong nouns, such as suo, tie, työ, are inflected by the following.
nSuo : (suo : Str) -> N ;
Many adjectives but also nouns have the nominative ending nen which in other cases becomes s: nainen, ihminen, keltainen. To capture the vowel harmony, we use the partitive form as the argument.
nNainen : (naista : Str) -> N ;
The following covers some nouns ending with a consonant, e.g. tilaus, kaulin, paimen, laidun.
nTilaus : (tilaus,tilauksena : Str) -> N ;
Special case:
nKulaus : (kulaus : Str) -> N ;
The following covers nouns like nauris and adjectives like kallis, tyyris. The partitive form is taken to get the vowel harmony.
nNauris : (naurista : Str) -> N ;
Separately-written compound nouns, like sambal oelek, Urho Kekkonen, have only their last part inflected.
compN : Str -> N -> N ;
Nouns used as functions need a case, of which the default is the genitive.
mkN2 = overload { mkN2 : N -> N2 = genN2 ; mkN2 : N -> Prep -> N2 = mmkN2 } ; mkN3 : N -> Prep -> Prep -> N3 ;
Proper names can be formed by using declensions for nouns. The plural forms are filtered away by the compiler.
mkPN : overload { mkPN : Str -> PN ; mkPN : N -> PN } ;
Non-comparison one-place adjectives are just like nouns.
The regular adjectives are based on regN
in the positive.
Comparison adjectives have three forms.
The comparative and the superlative
are always inflected in the same way, so the nominative of them is actually
enough (except for the superlative paras of hyvä).
mkA : overload { mkA : Str -> A ; mkA : N -> A ; mkA : N -> (kivempaa,kivinta : Str) -> A } ;
Two-place adjectives need a case for the second argument.
mkA2 : A -> Prep -> A2 ;
The grammar does not cover the potential mood and some nominal forms. One way to see the coverage is to linearize a verb to a table. The worst case needs twelve forms, as shown in the following. The following heuristics cover more and more verbs.
mkV : overload { mkV : (soutaa : Str) -> V ; mkV : (soutaa,souti : Str) -> V ; mkV : (soutaa,soudan,souti : Str) -> V ; mkV : (tulla,tulee,tulen,tulevat,tulkaa,tullaan,tuli,tulin,tulisi,tullut,tultu,tullun : Str) -> V ;
The subject case of verbs is by default nominative. This function can change it.
mkV : 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.
vValua : (valua : Str) -> V ;
With two forms, the following function covers a variety of verbs, such as ottaa, käyttää, löytää, huoltaa, hiihtää, siirtää.
vKattaa : (kattaa, katan : Str) -> V ;
When grade alternation is not present, just a one-form special case is needed (poistaa, ryystää).
vOstaa : (ostaa : Str) -> V ;
The following covers juosta, piestä, nousta, rangaista, kävellä, surra, panna.
vNousta : (nousta, nousen : Str) -> V ;
This is for one-syllable diphthong verbs like juoda, syödä.
vTuoda : (tuoda : Str) -> V ;
All the patterns above have nominative
as subject case.
If another case is wanted, use the following.
caseV : Case -> V -> V ;
The verbs be is special.
vOlla : V ;
Two-place verbs need an object case, and can have a pre- or postposition. The default is direct (accusative) object. There is also a special case with case only. The string-only argument case yields a regular verb with accusative object.
mkV2 : overload { mkV2 : Str -> V2 ; mkV2 : V -> V2 ; mkV2 : V -> Case -> V2 ; mkV2 : V -> Prep -> V2 ; } ;
Three-place (ditransitive) verbs need two prepositions, of which the first one or both can be absent.
mkV3 : V -> Prep -> Prep -> V3 ; -- puhua, allative, elative dirV3 : V -> Case -> V3 ; -- siirtää, (accusative), illative dirdirV3 : V -> V3 ; -- antaa, (accusative), (allative)
Verbs and adjectives can take complements such as sentences, questions, verb phrases, and adjectives.
mkV0 : V -> V0 ; mkVS : V -> VS ; mkV2S : V -> Prep -> V2S ; mkVV : V -> VV ; mkV2V : V -> Prep -> V2V ; mkVA : V -> Prep -> VA ; mkV2A : V -> Prep -> Prep -> V2A ; mkVQ : V -> VQ ; mkV2Q : V -> Prep -> V2Q ; mkAS : A -> AS ; mkA2S : A -> Prep -> A2S ; mkAV : A -> AV ; mkA2V : A -> Prep -> A2V ;
Notice: categories V2S, V2V, V2Q
are in v 1.0 treated
just as synonyms of V2
, and the second argument is given
as an adverb. Likewise AS, A2S, AV, A2V
are just A
.
V0
is just V
.
V0, V2S, V2V, V2Q : Type ; AS, A2S, AV, A2V : Type ;