# -path=.:../abstract:../../prelude
Aarne Ranta 2003
This is an API to the user of the resource grammar for adding lexical items. It give shortcuts for forming expressions of basic categories: nouns, adjectives, verbs. Closed categories (determiners, pronouns, conjunctions) are accessed through the resource syntax API, Structural.gf.
The main difference with MorphoEng.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 following modules are presupposed:
resource ParadigmsEng = open (Predef=Predef), Prelude, SyntaxEng, ResourceEng in {
To abstract over gender names, we define the following identifiers.
oper
human : Gender ;
nonhuman : Gender ;
To abstract over number names, we define the following.
singular : Number ;
plural : Number ;
To abstract over case names, we define the following.
nominative : Case ;
genitive : Case ;
oper
mkN : (man,men,man's,men's : Str) -> Gender -> N ;
nMan : (man,men : Str) -> Gender -> N ;
Regular nouns, nouns ending with s, y, or o, and nouns with the same
plural form as the singular.
nReg : Str -> Gender -> N ; -- dog, dogs
nKiss : Str -> Gender -> N ; -- kiss, kisses
nFly : Str -> Gender -> N ; -- fly, flies
nHero : Str -> Gender -> N ; -- hero, heroes (= nKiss !)
nSheep : Str -> Gender -> N ; -- sheep, sheep
These use general heuristics, that recognizes the last letter. N.B it
does not get right with boy, rush, since it only looks at one letter.
nHuman : Str -> N ; -- gambler/actress/nanny
nNonhuman : Str -> N ; -- dog/kiss/fly
Nouns used as functions need a preposition. The most common is of.
mkFun : N -> Preposition -> Fun ;
funHuman : Str -> Fun ; -- the father/mistress/daddy of
funNonhuman : Str -> Fun ; -- the successor/address/copy of
Proper names, with their regular genitive.
pnReg : (John : Str) -> PN ; -- John, John's
The most common cases on the higher-level category CN have shortcuts.
The regular y/s variation is taken into account.
cnNonhuman : Str -> CN ;
cnHuman : Str -> CN ;
npReg : Str -> NP ;
In some cases, you may want to make a complex CN into a function.
mkFunCN : CN -> Preposition -> Fun ;
funOfCN : CN -> Fun ;
mkAdj1 : (even : Str) -> Adj1 ;
Two-place adjectives need a preposition as second argument.
mkAdj2 : (divisible, by : Str) -> Adj2 ;
Comparison adjectives have three forms. The common irregular
cases are ones ending with y and a consonant that is duplicated;
the y ending is recognized by the function aReg.
mkAdjDeg : (good,better,best : Str) -> AdjDeg ;
aReg : (long : Str) -> AdjDeg ; -- long, longer, longest
aFat : (fat : Str) -> AdjDeg ; -- fat, fatter, fattest
aRidiculous : (ridiculous : Str) -> AdjDeg ; -- -/more/most ridiculous
On higher level, there are adjectival phrases. The most common case is
just to use a one-place adjective.
apReg : Str -> AP ;
mkAdv : Str -> AdV ;
mkAdvPre : Str -> AdV ;
Adverbs modifying adjectives and sentences can also be formed.
mkAdA : Str -> AdA ;
mkAdS : Str -> AdS ;
Prepositional phrases are another productive form of adverbials.
mkPP : Str -> NP -> AdV ;
The fragment now has all verb forms, except the gerund/present participle. Except for be, the worst case needs four forms: the infinitive and the third person singular present, the past indicative, and the past participle.
mkV : (go, goes, went, gone : Str) -> V ;
vReg : (walk : Str) -> V ; -- walk, walks
vKiss : (kiss : Str) -> V ; -- kiss, kisses
vFly : (fly : Str) -> V ; -- fly, flies
vGo : (go : Str) -> V ; -- go, goes (= vKiss !)
This generic function recognizes the special cases where the last
character is y, s, or z. It is not right for finish and convey.
vGen : Str -> V ; -- walk/kiss/fly
The verbs be and have are special.
vBe : V ;
vHave : V ;
Verbs with a particle.
vPart : (go, goes, went, gone, up : Str) -> V ;
vPartReg : (get, up : Str) -> V ;
Two-place verbs, and the special case with direct object.
Notice that a particle can already be included in V.
mkTV : V -> Str -> TV ; -- look for, kill
tvGen : (look, for : Str) -> TV ; -- look for, talk about
tvDir : V -> TV ; -- switch off
tvGenDir : (kill : Str) -> TV ; -- kill
Regular two-place verbs with a particle.
tvPartReg : Str -> Str -> Str -> TV ; -- get, along, with
Ditransitive verbs.
mkV3 : V -> Str -> Str -> V3 ; -- speak, with, about
v3Dir : V -> Str -> V3 ; -- give,_,to
v3DirDir : V -> V3 ; -- give,_,_
The definitions should not bother the user of the API. So they are
hidden from the document.