# -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, sheepThese 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/flyNouns 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 ofProper names, with their regular genitive.
pnReg : (John : Str) -> PN ; -- John, John'sThe 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 ridiculousOn 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/flyThe 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 ; -- killRegular two-place verbs with a particle.
tvPartReg : Str -> Str -> Str -> TV ; -- get, along, withDitransitive 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.