From 862310b01a99972c96b211371a00a469c667ab12 Mon Sep 17 00:00:00 2001 From: aarne Date: Sat, 20 Sep 2008 08:51:39 +0000 Subject: [PATCH] new resource-howto --- doc/Resource-HOWTO.html | 546 +++++++++++++++++----------- doc/Resource-HOWTO.txt | 446 ++++++++++++----------- doc/Syntax.png | Bin 14804 -> 104604 bytes lib/next-resource/latin/ResLatin.gf | 221 ----------- 4 files changed, 585 insertions(+), 628 deletions(-) delete mode 100644 lib/next-resource/latin/ResLatin.gf diff --git a/doc/Resource-HOWTO.html b/doc/Resource-HOWTO.html index 1494e404a..74e095955 100644 --- a/doc/Resource-HOWTO.html +++ b/doc/Resource-HOWTO.html @@ -7,17 +7,63 @@

Resource grammar writing HOWTO

Author: Aarne Ranta <aarne (at) cs.chalmers.se>
-Last update: Tue Sep 16 09:58:01 2008 +Last update: Sat Sep 20 10:40:53 2008
+

+
+

+ + +

+
+

History

-September 2008: partly outdated - to be updated for API 1.5. +September 2008: updated for Version 1.5.

-October 2007: updated for API 1.2. +October 2007: updated for Version 1.2.

January 2006: first version. @@ -32,20 +78,31 @@ will give some hints how to extend the API. A manual for using the resource grammar is found in

-http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/synopsis.html. +www.cs.chalmers.se/Cs/Research/Language-technology/GF/lib/resource/doc/synopsis.html.

A tutorial on GF, also introducing the idea of resource grammars, is found in

-http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/gf-tutorial2.html. +www.cs.chalmers.se/Cs/Research/Language-technology/GF/doc/gf-tutorial.html.

-This document concerns the API v. 1.0. You can find the current code in +This document concerns the API v. 1.5, while the current stable release is 1.4. +You can find the code for the stable release in

-http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/ +www.cs.chalmers.se/Cs/Research/Language-technology/GF/lib/resource/

+

+and the next release in +

+

+www.cs.chalmers.se/Cs/Research/Language-technology/GF/lib/next-resource/ +

+

+It is recommended to build new grammars to match the next release. +

+

The resource grammar structure

The library is divided into a bunch of modules, whose dependencies @@ -54,8 +111,11 @@ are given in the following figure.

+

+Modules of different kinds are distinguished as follows: +

-The solid ellipses show the API as visible to the user of the library. The -dashed ellipses form the main of the implementation, on which the resource -grammar programmer has to work with. With the exception of the Paradigms -module, the visible API modules can be produced mechanically. +Put in another way:

+ +

- -

-

-Thus the API consists of a grammar and a lexicon, which is -provided for test purposes. +The dashed ellipses form the main parts of the implementation, on which the resource +grammar programmer has to work with. She also has to work on the Paradigms +module. The rest of the modules can be produced mechanically from corresponding +modules for other languages, by just changing the language codes appearing in +their module headers.

The module structure is rather flat: most modules are direct parents of Grammar. The idea -is that you can concentrate on one linguistic aspect at a time, or +is that the implementors can concentrate on one linguistic aspect at a time, or also distribute the work among several authors. The module Cat defines the "glue" that ties the aspects together - a type system to which all the other modules conform, so that e.g. NP means the same thing in those modules that use NPs and those that constructs them.

+ +

Library API modules

+

+For the user of the library, these modules are the most important ones. +In a typical application, it is enough to open Paradigms and Syntax. +The module Try combines these two, making it possible to experiment +with combinations of syntactic and lexical constructors by using the +cc command in the GF shell. Here are short explanations of each API module: +

+ + +

Phrase category modules

-The direct parents of the top will be called phrase category modules, +The immediate parents of Grammar will be called phrase category modules, since each of them concentrates on a particular phrase category (nouns, verbs, adjectives, sentences,...). A phrase category module tells how to construct phrases in that category. You will find out that @@ -106,9 +190,10 @@ one of a small number of different types). Thus we have

  • Conjunction: coordination of phrases
  • Phrase: construction of the major units of text and speech
  • Text: construction of texts as sequences of phrases -
  • Idiom: idiomatic phrases such as existentials +
  • Idiom: idiomatic expressions such as existentials +

    Infrastructure modules

    Expressions of each phrase category are constructed in the corresponding @@ -137,6 +222,7 @@ can skip the lincat definition of a category and use the default {s : Str} until you need to change it to something else. In English, for instance, many categories do have this linearization type.

    +

    Lexical modules

    What is lexical and what is syntactic is not as clearcut in GF as in @@ -162,41 +248,42 @@ samples than complete lists. There are two such modules:

    The module Structural aims for completeness, and is likely to be extended in future releases of the resource. The module Lexicon -gives a "random" list of words, which enable interesting testing of syntax, -and also a check list for morphology, since those words are likely to include +gives a "random" list of words, which enables testing the syntax. +It also provides a check list for morphology, since those words are likely to include most morphological patterns of the language.

    In the case of Lexicon it may come out clearer than anywhere else in the API that it is impossible to give exact translation equivalents in -different languages on the level of a resource grammar. In other words, -application grammars are likely to use the resource in different ways for +different languages on the level of a resource grammar. This is no problem, +since application grammars can use the resource in different ways for different languages.

    +

    Language-dependent syntax modules

    In addition to the common API, there is room for language-dependent extensions -of the resource. The top level of each languages looks as follows (with English as example): +of the resource. The top level of each languages looks as follows (with German +as example):

    -    abstract English = Grammar, ExtraEngAbs, DictEngAbs
    +    abstract AllGerAbs = Lang, ExtraGerAbs, IrregGerAbs
     

    -where ExtraEngAbs is a collection of syntactic structures specific to English, -and DictEngAbs is an English dictionary -(at the moment, it consists of IrregEngAbs, -the irregular verbs of English). Each of these language-specific grammars has +where ExtraGerAbs is a collection of syntactic structures specific to German, +and IrregGerAbs is a dictionary of irregular words of German +(at the moment, just verbs). Each of these language-specific grammars has the potential to grow into a full-scale grammar of the language. These grammar can also be used as libraries, but the possibility of using functors is lost.

    To give a better overview of language-specific structures, -modules like ExtraEngAbs +modules like ExtraGerAbs are built from a language-independent module ExtraAbs by restricted inheritance:

    -    abstract ExtraEngAbs = Extra [f,g,...]
    +    abstract ExtraGerAbs = Extra [f,g,...]
     

    Thus any category and function in Extra may be shared by a subset of all @@ -210,42 +297,15 @@ In a minimal resource grammar implementation, the language-dependent extensions are just empty modules, but it is good to provide them for the sake of uniformity.

    -

    The core of the syntax

    -

    -Among all categories and functions, a handful are -most important and distinct ones, of which the others are can be -seen as variations. The categories are -

    -
    -    Cl ; VP ; V2 ; NP ; CN ; Det ; AP ;
    -
    -

    -The functions are -

    -
    -    PredVP  : NP  -> VP -> Cl ;  -- predication
    -    ComplV2 : V2  -> NP -> VP ;  -- complementization
    -    DetCN   : Det -> CN -> NP ;  -- determination
    -    ModCN   : AP  -> CN -> CN ;  -- modification
    -
    -

    -This toy Latin grammar shows in a nutshell how these -rules relate the categories to each other. It is intended to be a -first approximation when designing the parameter system of a new -language. -

    -

    Another reduced API

    -

    -If you want to experiment with a small subset of the resource API first, -try out the module -Syntax -explained in the -GF Tutorial. -

    +

    The present-tense fragment

    Some lines in the resource library are suffixed with the comment -```--# notpresent +

    +
    +    --# notpresent
    +
    +

    which is used by a preprocessor to exclude those lines from a reduced version of the full resource. This present-tense-only version is useful for applications in most technical text, since @@ -254,10 +314,14 @@ be useful to exclude those lines in a first version of resource implementation. To compile a grammar with present-tense-only, use

    -    i -preproc=GF/lib/resource-1.0/mkPresent LangGer.gf
    +    make Present
     
    -

    +

    +with resource/Makefile. +

    +

    Phases of the work

    +

    Putting up a directory

    Unless you are writing an instance of a parametrized implementation @@ -265,7 +329,8 @@ Unless you are writing an instance of a parametrized implementation simplest way is to follow roughly the following procedure. Assume you are building a grammar for the German language. Here are the first steps, which we actually followed ourselves when building the German implementation -of resource v. 1.0. +of resource v. 1.0 at Ubuntu linux. We have slightly modified them to +match resource v. 1.5 and GF v. 3.0.

    1. Create a sister directory for GF/lib/resource/english, named @@ -279,6 +344,8 @@ of resource v. 1.0.
    2. Check out the [ISO 639 3-letter language code http://www.w3.org/WAI/ER/IG/ert/iso639.htm] for German: both Ger and Deu are given, and we pick Ger. + (We use the 3-letter codes rather than the more common 2-letter codes, + since they will suffice for many more languages!)

    3. Copy the *Eng.gf files from english german, and rename them: @@ -286,7 +353,10 @@ of resource v. 1.0. cp ../english/*Eng.gf . rename 's/Eng/Ger/' *Eng.gf -

      + If you don't have the rename command, you can use a bash script with mv. +
    + +
    1. Change the Eng module references to Ger references in all files:
      @@ -294,7 +364,8 @@ of resource v. 1.0.
                sed -i 's/Eng/Ger/g' *Ger.gf
       
      The first line prevents changing the word English, which appears - here and there in comments, to Gerlish. + here and there in comments, to Gerlish. The sed command syntax + may vary depending on your operating system.

    2. This may of course change unwanted occurrences of the string Eng - verify this by @@ -327,10 +398,10 @@ of resource v. 1.0. You will get lots of warnings on missing rules, but the grammar will compile.

      -
    3. At all following steps you will now have a valid, but incomplete +
    4. At all the following steps you will now have a valid, but incomplete GF grammar. The GF command
      -         pg -printer=missing
      +         pg -missing
       
      tells you what exactly is missing.
    @@ -338,14 +409,15 @@ of resource v. 1.0.

    Here is the module structure of LangGer. It has been simplified by leaving out the majority of the phrase category modules. Each of them has the same dependencies -as e.g. VerbGer. +as VerbGer, whose complete dependencies are shown as an example.

    +

    Direction of work

    -The real work starts now. There are many ways to proceed, the main ones being +The real work starts now. There are many ways to proceed, the most obvious ones being

    -In this chapter, we will look at an example: adding Italian to -the Romance family (to be completed). Here is a set of +Here is a set of slides on the topic.

    -

    Parametrizing a resource grammar implementation

    + +

    Parametrizing a resource grammar implementation

    This is the most demanding form of resource grammar writing. We do not recommend the method of parametrizing from the @@ -817,11 +908,60 @@ same family by aprametrization. This means that the copy and paste method is still used, but at this time the differences are put into an interface module.

    + +

    Character encoding and transliterations

    -This chapter will work out an example of how an Estonian grammar -is constructed from the Finnish grammar through parametrization. +This section is relevant for languages using a non-ASCII character set. +

    + +

    Coding conventions in GF

    +

    +From version 3.0, GF follows a simple encoding convention: +

    + + +

    +Most current resource grammars use isolatin-1 in the source, but this does +not affect their use in parallel with grammars written in other encodings. +In fact, a grammar can be put up from modules using different codings. +

    +

    +Warning. While string literals may contain any characters, identifiers +must be isolatin-1 letters (or digits, underscores, or dashes). This has to +do with the restrictions of the lexer tool that is used. +

    + +

    Transliterations

    +

    +While UTF-8 is well supported by most web browsers, its use in terminals and +text editors may cause disappointment. Many grammarians therefore prefer to +use ASCII transliterations. GF 3.0beta2 provides the following built-in +transliterations: +

    + + +

    +New transliterations can be defined in the GF source file +GF/Text/Transliterations.hs. +This file also gives instructions on how new ones are added.

    - + diff --git a/doc/Resource-HOWTO.txt b/doc/Resource-HOWTO.txt index e160232ca..4543be76f 100644 --- a/doc/Resource-HOWTO.txt +++ b/doc/Resource-HOWTO.txt @@ -10,9 +10,9 @@ Last update: %%date(%c) **History** -September 2008: partly outdated - to be updated for API 1.5. +September 2008: updated for Version 1.5. -October 2007: updated for API 1.2. +October 2007: updated for Version 1.2. January 2006: first version. @@ -24,15 +24,22 @@ will give some hints how to extend the API. A manual for using the resource grammar is found in -[``http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/synopsis.html`` http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/doc/synopsis.html]. +[``www.cs.chalmers.se/Cs/Research/Language-technology/GF/lib/resource/doc/synopsis.html`` ../lib/resource/doc/synopsis.html]. A tutorial on GF, also introducing the idea of resource grammars, is found in -[``http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/gf-tutorial2.html`` ../../../doc/tutorial/gf-tutorial2.html]. +[``www.cs.chalmers.se/Cs/Research/Language-technology/GF/doc/gf-tutorial.html`` ./gf-tutorial.html]. -This document concerns the API v. 1.0. You can find the current code in +This document concerns the API v. 1.5, while the current stable release is 1.4. +You can find the code for the stable release in -[``http://www.cs.chalmers.se/~aarne/GF/lib/resource-1.0/`` ..] +[``www.cs.chalmers.se/Cs/Research/Language-technology/GF/lib/resource/`` ../lib/resource] + +and the next release in + +[``www.cs.chalmers.se/Cs/Research/Language-technology/GF/lib/next-resource/`` ../lib/next-resource] + +It is recommended to build new grammars to match the next release. @@ -44,26 +51,29 @@ are given in the following figure. [Syntax.png] -- solid contours: module used by end users +Modules of different kinds are distinguished as follows: +- solid contours: module seen by end users - dashed contours: internal module - ellipse: abstract/concrete pair of modules - rectangle: resource or instance - diamond: interface -The solid ellipses show the API as visible to the user of the library. The -dashed ellipses form the main of the implementation, on which the resource -grammar programmer has to work with. With the exception of the ``Paradigms`` -module, the visible API modules can be produced mechanically. +Put in another way: +- solid rectangles and diamonds: user-accessible library API +- solid ellipses: user-accessible top-level grammar for parsing and linearization +- dashed contours: not visible to users -[Grammar.png] -Thus the API consists of a grammar and a lexicon, which is -provided for test purposes. +The dashed ellipses form the main parts of the implementation, on which the resource +grammar programmer has to work with. She also has to work on the ``Paradigms`` +module. The rest of the modules can be produced mechanically from corresponding +modules for other languages, by just changing the language codes appearing in +their module headers. The module structure is rather flat: most modules are direct parents of ``Grammar``. The idea -is that you can concentrate on one linguistic aspect at a time, or +is that the implementors can concentrate on one linguistic aspect at a time, or also distribute the work among several authors. The module ``Cat`` defines the "glue" that ties the aspects together - a type system to which all the other modules conform, so that e.g. ``NP`` means @@ -71,17 +81,34 @@ the same thing in those modules that use ``NP``s and those that constructs them. +===Library API modules=== + +For the user of the library, these modules are the most important ones. +In a typical application, it is enough to open ``Paradigms`` and ``Syntax``. +The module ``Try`` combines these two, making it possible to experiment +with combinations of syntactic and lexical constructors by using the +``cc`` command in the GF shell. Here are short explanations of each API module: +- ``Try``: the whole resource library for a language (``Paradigms``, ``Syntax``, + ``Irreg``, and ``Extra``); + produced mechanically as a collection of modules +- ``Syntax``: language-independent categories, syntax functions, and structural words; + produced mechanically as a collection of modules +- ``Constructors``: language-independent syntax functions and structural words; + produced mechanically via functor instantiation +- ``Paradigms``: language-dependent morphological paradigms + + + + ===Phrase category modules=== -The direct parents of the top will be called **phrase category modules**, +The immediate parents of ``Grammar`` will be called **phrase category modules**, since each of them concentrates on a particular phrase category (nouns, verbs, adjectives, sentences,...). A phrase category module tells //how to construct phrases in that category//. You will find out that all functions in any of these modules have the same value type (or maybe one of a small number of different types). Thus we have - - - ``Noun``: construction of nouns and noun phrases - ``Adjective``: construction of adjectival phrases - ``Verb``: construction of verb phrases @@ -93,7 +120,7 @@ one of a small number of different types). Thus we have - ``Conjunction``: coordination of phrases - ``Phrase``: construction of the major units of text and speech - ``Text``: construction of texts as sequences of phrases -- ``Idiom``: idiomatic phrases such as existentials +- ``Idiom``: idiomatic expressions such as existentials @@ -113,7 +140,6 @@ the linearization types of its value and argument categories. To achieve the division of the resource grammar to several parallel phrase category modules, what we need is an underlying definition of the linearization types. This definition is given as the implementation of - - ``Cat``: syntactic categories of the resource grammar @@ -140,44 +166,43 @@ Another characterization of lexical is that lexical units can be added almost //ad libitum//, and they cannot be defined in terms of already given rules. The lexical modules of the resource API are thus more like samples than complete lists. There are two such modules: - - ``Structural``: structural words (determiners, conjunctions,...) - ``Lexicon``: basic everyday content words (nouns, verbs,...) The module ``Structural`` aims for completeness, and is likely to be extended in future releases of the resource. The module ``Lexicon`` -gives a "random" list of words, which enable interesting testing of syntax, -and also a check list for morphology, since those words are likely to include +gives a "random" list of words, which enables testing the syntax. +It also provides a check list for morphology, since those words are likely to include most morphological patterns of the language. In the case of ``Lexicon`` it may come out clearer than anywhere else in the API that it is impossible to give exact translation equivalents in -different languages on the level of a resource grammar. In other words, -application grammars are likely to use the resource in different ways for +different languages on the level of a resource grammar. This is no problem, +since application grammars can use the resource in different ways for different languages. ==Language-dependent syntax modules== In addition to the common API, there is room for language-dependent extensions -of the resource. The top level of each languages looks as follows (with English as example): +of the resource. The top level of each languages looks as follows (with German +as example): ``` - abstract English = Grammar, ExtraEngAbs, DictEngAbs + abstract AllGerAbs = Lang, ExtraGerAbs, IrregGerAbs ``` -where ``ExtraEngAbs`` is a collection of syntactic structures specific to English, -and ``DictEngAbs`` is an English dictionary -(at the moment, it consists of ``IrregEngAbs``, -the irregular verbs of English). Each of these language-specific grammars has +where ``ExtraGerAbs`` is a collection of syntactic structures specific to German, +and ``IrregGerAbs`` is a dictionary of irregular words of German +(at the moment, just verbs). Each of these language-specific grammars has the potential to grow into a full-scale grammar of the language. These grammar can also be used as libraries, but the possibility of using functors is lost. To give a better overview of language-specific structures, -modules like ``ExtraEngAbs`` +modules like ``ExtraGerAbs`` are built from a language-independent module ``ExtraAbs`` by restricted inheritance: ``` - abstract ExtraEngAbs = Extra [f,g,...] + abstract ExtraGerAbs = Extra [f,g,...] ``` Thus any category and function in ``Extra`` may be shared by a subset of all languages. One can see this set-up as a matrix, which tells @@ -190,40 +215,13 @@ extensions are just empty modules, but it is good to provide them for the sake of uniformity. -==The core of the syntax== - -Among all categories and functions, a handful are -most important and distinct ones, of which the others are can be -seen as variations. The categories are -``` - Cl ; VP ; V2 ; NP ; CN ; Det ; AP ; -``` -The functions are -``` - PredVP : NP -> VP -> Cl ; -- predication - ComplV2 : V2 -> NP -> VP ; -- complementization - DetCN : Det -> CN -> NP ; -- determination - ModCN : AP -> CN -> CN ; -- modification -``` -This [toy Latin grammar latin.gf] shows in a nutshell how these -rules relate the categories to each other. It is intended to be a -first approximation when designing the parameter system of a new -language. - - -===Another reduced API=== - -If you want to experiment with a small subset of the resource API first, -try out the module -[Syntax http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/resource/Syntax.gf] -explained in the -[GF Tutorial http://www.cs.chalmers.se/~aarne/GF/doc/tutorial/gf-tutorial2.html]. - ===The present-tense fragment=== Some lines in the resource library are suffixed with the comment -```--# notpresent +``` + --# notpresent +``` which is used by a preprocessor to exclude those lines from a reduced version of the full resource. This present-tense-only version is useful for applications in most technical text, since @@ -231,8 +229,9 @@ they reduce the grammar size and compilation time. It can also be useful to exclude those lines in a first version of resource implementation. To compile a grammar with present-tense-only, use ``` - i -preproc=GF/lib/resource-1.0/mkPresent LangGer.gf + make Present ``` +with ``resource/Makefile``. @@ -245,7 +244,8 @@ Unless you are writing an instance of a parametrized implementation simplest way is to follow roughly the following procedure. Assume you are building a grammar for the German language. Here are the first steps, which we actually followed ourselves when building the German implementation -of resource v. 1.0. +of resource v. 1.0 at Ubuntu linux. We have slightly modified them to +match resource v. 1.5 and GF v. 3.0. + Create a sister directory for ``GF/lib/resource/english``, named ``german``. @@ -258,6 +258,8 @@ of resource v. 1.0. + Check out the [ISO 639 3-letter language code http://www.w3.org/WAI/ER/IG/ert/iso639.htm] for German: both ``Ger`` and ``Deu`` are given, and we pick ``Ger``. + (We use the 3-letter codes rather than the more common 2-letter codes, + since they will suffice for many more languages!) + Copy the ``*Eng.gf`` files from ``english`` ``german``, and rename them: @@ -265,6 +267,8 @@ of resource v. 1.0. cp ../english/*Eng.gf . rename 's/Eng/Ger/' *Eng.gf ``` + If you don't have the ``rename`` command, you can use a bash script with ``mv``. + + Change the ``Eng`` module references to ``Ger`` references in all files: @@ -273,7 +277,8 @@ of resource v. 1.0. sed -i 's/Eng/Ger/g' *Ger.gf ``` The first line prevents changing the word ``English``, which appears - here and there in comments, to ``Gerlish``. + here and there in comments, to ``Gerlish``. The ``sed`` command syntax + may vary depending on your operating system. + This may of course change unwanted occurrences of the string ``Eng`` - verify this by @@ -306,24 +311,24 @@ of resource v. 1.0. ``` You will get lots of warnings on missing rules, but the grammar will compile. -+ At all following steps you will now have a valid, but incomplete ++ At all the following steps you will now have a valid, but incomplete GF grammar. The GF command ``` - pg -printer=missing + pg -missing ``` tells you what exactly is missing. Here is the module structure of ``LangGer``. It has been simplified by leaving out the majority of the phrase category modules. Each of them has the same dependencies -as e.g. ``VerbGer``. +as ``VerbGer``, whose complete dependencies are shown as an example. [German.png] ===Direction of work=== -The real work starts now. There are many ways to proceed, the main ones being +The real work starts now. There are many ways to proceed, the most obvious ones being - Top-down: start from the module ``Phrase`` and go down to ``Sentence``, then ``Verb``, ``Noun``, and in the end ``Lexicon``. In this way, you are all the time building complete phrases, and add them with more content as you proceed. @@ -346,31 +351,34 @@ test data and enough general view at any point: lincat N = {s : Number => Case => Str ; g : Gender} ; ``` we need the parameter types ``Number``, ``Case``, and ``Gender``. The definition -of ``Number`` in [``common/ParamX`` ../common/ParamX.gf] works for German, so we +of ``Number`` in [``common/ParamX`` ../lib/resource/common/ParamX.gf] +works for German, so we use it and just define ``Case`` and ``Gender`` in ``ResGer``. -+ Define ``regN`` in ``ParadigmsGer``. In this way you can ++ Define some cases of ``mkN`` in ``ParadigmsGer``. In this way you can already implement a huge amount of nouns correctly in ``LexiconGer``. Actually -just adding ``mkN`` should suffice for every noun - but, +just adding the worst-case instance of ``mkN`` (the one taking the most +arguments) should suffice for every noun - but, since it is tedious to use, you might proceed to the next step before returning to morphology and defining the -real work horse ``reg2N``. +real work horse, ``mkN`` taking two forms and a gender. + While doing this, you may want to test the resource independently. Do this by + starting the GF shell in the ``resource`` directory, by the commands ``` - i -retain ParadigmsGer - cc regN "Kirche" + > i -retain german/ParadigmsGer + > cc -table mkN "Kirche" ``` + Proceed to determiners and pronouns in -``NounGer`` (``DetCN UsePron DetSg SgQuant NoNum NoOrd DefArt IndefArt UseN``)and -``StructuralGer`` (``i_Pron every_Det``). You also need some categories and +``NounGer`` (``DetCN UsePron DetQuant NumSg DefArt IndefArt UseN``) and +``StructuralGer`` (``i_Pron this_Quant``). You also need some categories and parameter types. At this point, it is maybe not possible to find out the final -linearization types of ``CN``, ``NP``, and ``Det``, but at least you should +linearization types of ``CN``, ``NP``, ``Det``, and ``Quant``, but at least you should be able to correctly inflect noun phrases such as //every airplane//: ``` - i LangGer.gf - l -table DetCN every_Det (UseN airplane_N) + > i german/LangGer.gf + > l -table DetCN every_Det (UseN airplane_N) Nom: jeder Flugzeug Acc: jeden Flugzeug @@ -379,16 +387,16 @@ be able to correctly inflect noun phrases such as //every airplane//: ``` + Proceed to verbs: define ``CatGer.V``, ``ResGer.VForm``, and -``ParadigmsGer.regV``. You may choose to exclude ``notpresent`` +``ParadigmsGer.mkV``. You may choose to exclude ``notpresent`` cases at this point. But anyway, you will be able to inflect a good number of verbs in ``Lexicon``, such as -``live_V`` (``regV "leven"``). +``live_V`` (``mkV "leben"``). + Now you can soon form your first sentences: define ``VP`` and ``Cl`` in ``CatGer``, ``VerbGer.UseV``, and ``SentenceGer.PredVP``. Even if you have excluded the tenses, you will be able to produce ``` - i -preproc=mkPresent LangGer.gf + > i -preproc=./mkPresent german/LangGer.gf > l -table PredVP (UsePron i_Pron) (UseV live_V) Pres Simul Pos Main: ich lebe @@ -398,19 +406,26 @@ Even if you have excluded the tenses, you will be able to produce Pres Simul Neg Inv: lebe ich nicht Pres Simul Neg Sub: ich nicht lebe ``` +You should also be able to parse: +``` + > p -cat=Cl "ich lebe" + PredVP (UsePron i_Pron) (UseV live_V) +``` -+ Transitive verbs (``CatGer.V2 ParadigmsGer.dirV2 VerbGer.ComplV2``) ++ Transitive verbs +(``CatGer.V2 CatGer.VPSlash ParadigmsGer.mkV2 VerbGer.ComplSlash VerbGer.SlashV2a``) are a natural next step, so that you can -produce ``ich liebe dich``. +produce ``ich liebe dich`` ("I love you"). -+ Adjectives (``CatGer.A ParadigmsGer.regA NounGer.AdjCN AdjectiveGer.PositA``) ++ Adjectives (``CatGer.A ParadigmsGer.mkA NounGer.AdjCN AdjectiveGer.PositA``) will force you to think about strong and weak declensions, so that you can -correctly inflect //my new car, this new car//. +correctly inflect //mein neuer Wagen, dieser neue Wagen// +("my new car, this new car"). + Once you have implemented the set -(``Noun.DetCN Noun.AdjCN Verb.UseV Verb.ComplV2 Sentence.PredVP), +(``Noun.DetCN Noun.AdjCN Verb.UseV Verb.ComplSlash Verb.SlashV2a Sentence.PredVP), you have overcome most of difficulties. You know roughly what parameters -and dependences there are in your language, and you can now produce very +and dependences there are in your language, and you can now proceed very much in the order you please. @@ -422,14 +437,13 @@ be applied most of the time, both in the first steps described above and in later steps where you are more on your own. + Select a phrase category module, e.g. ``NounGer``, and uncomment some - linearization rules (for instance, ``DefSg``, which is - not too complicated). + linearization rules (for instance, ``DetCN``, as above). + Write down some German examples of this rule, for instance translations of "the dog", "the house", "the big house", etc. Write these in all their different forms (two numbers and four cases). -+ Think about the categories involved (``CN, NP, N``) and the ++ Think about the categories involved (``CN, NP, N, Det``) and the variations they have. Encode this in the lincats of ``CatGer``. You may have to define some new parameter types in ``ResGer``. @@ -440,39 +454,39 @@ and in later steps where you are more on your own. + Test by parsing, linearization, and random generation. In particular, linearization to a table should - be used so that you see all forms produced: + be used so that you see all forms produced; the ``treebank`` option + preserves the tree ``` - gr -cat=NP -number=20 -tr | l -table + > gr -cat=NP -number=20 | l -table -treebank ``` -+ Spare some tree-linearization pairs for later regression testing. Use the - ``tree_bank`` command, ++ Save some tree-linearization pairs for later regression testing. You can save + a gold standard treebank and use the Unix ``diff`` command to compare later + linearizations produced from the same list of trees. If you save the trees + in a file ``trees``, you can do as follows: ``` - gr -cat=NP -number=20 | tb -xml | wf NP.tb + > rf -file=trees -tree -lines | l -table -treebank | wf -file=treebank ``` - You can later compared your modified grammar to this treebank by + ++ A file with trees testing all resource functions is included in the resource, + entitled ``resource/exx-resource.gft``. A treebank can be created from this by + the Unix command ``` - rf NP.tb | tb -c + % runghc Make.hs test langs=Ger ``` You are likely to run this cycle a few times for each linearization rule -you implement, and some hundreds of times altogether. There are 66 ``cat``s and -458 ``funs`` in ``Lang`` at the moment; 149 of the ``funs`` are outside the two +you implement, and some hundreds of times altogether. There are roughly +70 ``cat``s and +600 ``funs`` in ``Lang`` at the moment; 170 of the ``funs`` are outside the two lexicon modules). -Here is a [live log ../german/log.txt] of the actual process of -building the German implementation of resource API v. 1.0. -It is the basis of the more detailed explanations, which will -follow soon. (You will found out that these explanations involve -a rational reconstruction of the live process! Among other things, the -API was changed during the actual process to make it more intuitive.) +===Auxiliary modules=== -===Resource modules used=== - -These modules will be written by you. +These auxuliary ``resource`` modules will be written by you. - ``ResGer``: parameter types and auxiliary operations (a resource for the resource grammar!) @@ -491,28 +505,36 @@ package. - ``Coordination``: operations to deal with lists and coordination - ``Prelude``: general-purpose operations on strings, records, truth values, etc. -- ``Predefined``: general-purpose operations with hard-coded definitions +- ``Predef``: general-purpose operations with hard-coded definitions An important decision is what rules to implement in terms of operations in -``ResGer``. A golden rule of functional programming says that, whenever -you find yourself programming by copy and paste, you should write a function -instead. This indicates that an operation should be created if it is to be -used at least twice. At the same time, a sound principle of vicinity says that -it should not require too much browsing to understand what a rule does. +``ResGer``. The **golden rule of functional programming** says: +- //Whenever you find yourself programming by copy and paste, write a function instead!//. + + +This rule suggests that an operation should be created if it is to be +used at least twice. At the same time, a sound principle of **vicinity** says: +- //It should not require too much browsing to understand what a piece of code does.// + + From these two principles, we have derived the following practice: - If an operation is needed //in two different modules//, -it should be created in ``ResGer``. An example is ``mkClause``, -used in ``Sentence``, ``Question``, and ``Relative``- + it should be created in as an ``oper`` in ``ResGer``. An example is ``mkClause``, + used in ``Sentence``, ``Question``, and ``Relative``- - If an operation is needed //twice in the same module//, but never -outside, it should be created in the same module. Many examples are -found in ``Numerals``. -- If an operation is only needed once, it should not be created (but rather -inlined). Most functions in phrase category modules are implemented in this -way. + outside, it should be created in the same module. Many examples are + found in ``Numerals``. +- If an operation is needed //twice in the same judgement//, but never + outside, it should be created by a ``let`` definition. +- If an operation is only needed once, it should not be created as an ``oper``, + but rather inlined. However, a ``let`` definition may well be in place just + to make the readable. + Most functions in phrase category modules + are implemented in this way. -This discipline is very different from the one followed in earlier +This discipline is very different from the one followed in early versions of the library (up to 0.9). We then valued the principle of abstraction more than vicinity, creating layers of abstraction for almost everything. This led in practice to the duplication of almost @@ -530,45 +552,45 @@ This module provides high-level ways to define the linearization of lexical items, of categories ``N, A, V`` and their complement-taking variants. - - For ease of use, the ``Paradigms`` modules follow a certain naming convention. Thus they for each lexical category, such as ``N``, -the functions +the overloaded functions, such as ``mkN``, with the following cases: -- ``mkN``, for worst-case construction of ``N``. Its type signature +- the worst-case construction of ``N``. Its type signature has the form ``` mkN : Str -> ... -> Str -> P -> ... -> Q -> N ``` with as many string and parameter arguments as can ever be needed to construct an ``N``. -- ``regN``, for the most common cases, with just one string argument: +- the most regular cases, with just one string argument: ``` - regN : Str -> N + mkN : Str -> N ``` - A language-dependent (small) set of functions to handle mild irregularities and common exceptions. -For the complement-taking variants, such as ``V2``, we provide -- ``mkV2``, which takes a ``V`` and all necessary arguments, such +For the complement-taking variants, such as ``V2``, we provide +- a case that takes a ``V`` and all necessary arguments, such as case and preposition: ``` mkV2 : V -> Case -> Str -> V2 ; ``` -- A language-dependent (small) set of functions to handle common special cases, - such as direct transitive verbs: +- a case that takes a ``Str`` and produces a transitive verb with the direct + object case: ``` - dirV2 : V -> V2 ; - -- dirV2 v = mkV2 v accusative [] + mkV2 : Str -> V2 ; +``` +- A language-dependent (small) set of functions to handle common special cases, + such as transitive verbs that are not regular: +``` + mkV2 : V -> V2 ; ``` The golden rule for the design of paradigms is that - -- The user will only need function applications with constants and strings, - never any records or tables. +- //The user of the library will only need function applications with constants and strings, never any records or tables.// The discipline of data abstraction moreover requires that the user of the resource @@ -630,10 +652,9 @@ in her hidden definitions of constants in ``Paradigms``. For instance, ===Lexicon construction=== The lexicon belonging to ``LangGer`` consists of two modules: - -- ``StructuralGer``, structural words, built by directly using - ``MorphoGer``. -- ``BasicGer``, content words, built by using ``ParadigmsGer``. +- ``StructuralGer``, structural words, built by using both + ``ParadigmsGer`` and ``MorphoGer``. +- ``LexiconGer``, content words, built by using ``ParadigmsGer`` only. The reason why ``MorphoGer`` has to be used in ``StructuralGer`` @@ -648,60 +669,16 @@ those who want to build new lexica. - - -==Inside grammar modules== - -Detailed implementation tricks -are found in the comments of each module. - - -===The category system=== - -- [Common gfdoc/Common.html], [CommonX ../common/CommonX.gf] -- [Cat gfdoc/Cat.html], [CatGer gfdoc/CatGer.gf] - - -===Phrase category modules=== - -- [Noun gfdoc/Noun.html], [NounGer ../german/NounGer.gf] -- [Adjective gfdoc/Adjective.html], [AdjectiveGer ../german/AdjectiveGer.gf] -- [Verb gfdoc/Verb.html], [VerbGer ../german/VerbGer.gf] -- [Adverb gfdoc/Adverb.html], [AdverbGer ../german/AdverbGer.gf] -- [Numeral gfdoc/Numeral.html], [NumeralGer ../german/NumeralGer.gf] -- [Sentence gfdoc/Sentence.html], [SentenceGer ../german/SentenceGer.gf] -- [Question gfdoc/Question.html], [QuestionGer ../german/QuestionGer.gf] -- [Relative gfdoc/Relative.html], [RelativeGer ../german/RelativeGer.gf] -- [Conjunction gfdoc/Conjunction.html], [ConjunctionGer ../german/ConjunctionGer.gf] -- [Phrase gfdoc/Phrase.html], [PhraseGer ../german/PhraseGer.gf] -- [Text gfdoc/Text.html], [TextX ../common/TextX.gf] -- [Idiom gfdoc/Idiom.html], [IdiomGer ../german/IdiomGer.gf] -- [Lang gfdoc/Lang.html], [LangGer ../german/LangGer.gf] - - -===Resource modules=== - -- [ResGer ../german/ResGer.gf] -- [MorphoGer ../german/MorphoGer.gf] -- [ParadigmsGer gfdoc/ParadigmsGer.html], [ParadigmsGer.gf ../german/ParadigmsGer.gf] - - -===Lexicon=== - -- [Structural gfdoc/Structural.html], [StructuralGer ../german/StructuralGer.gf] -- [Lexicon gfdoc/Lexicon.html], [LexiconGer ../german/LexiconGer.gf] - - ==Lexicon extension== ===The irregularity lexicon=== -It may be handy to provide a separate module of irregular +It is useful in most languages to provide a separate module of irregular verbs and other words which are difficult for a lexicographer to handle. There are usually a limited number of such words - a few hundred perhaps. Building such a lexicon separately also makes it less important to cover //everything// by the -worst-case paradigms (``mkV`` etc). +worst-case variants of the paradigms ``mkV`` etc. @@ -709,11 +686,13 @@ worst-case paradigms (``mkV`` etc). You can often find resources such as lists of irregular verbs on the internet. For instance, the -[Irregular German Verbs http://www.iee.et.tu-dresden.de/~wernerr/grammar/verben_dt.html] +Irregular German Verb page +previously found in +``http://www.iee.et.tu-dresden.de/~wernerr/grammar/verben_dt.html`` page gives a list of verbs in the traditional tabular format, which begins as follows: ``` - backen (du bäckst, er bäckt) backte [buk] gebacken + backen (du bäckst, er bäckt) backte [buk] gebacken befehlen (du befiehlst, er befiehlt; befiehl!) befahl (beföhle; befähle) befohlen beginnen begann (begönne; begänne) begonnen beißen biß gebissen @@ -730,8 +709,8 @@ the table to ``` When using ready-made word lists, you should think about -coyright issues. Ideally, all resource grammar material should -be provided under GNU General Public License. +coyright issues. All resource grammar material should +be provided under GNU Lesser General Public License (LGPL). @@ -739,39 +718,55 @@ be provided under GNU General Public License. This is a cheap technique to build a lexicon of thousands of words, if text data is available in digital format. -See the [Functional Morphology http://www.cs.chalmers.se/~markus/FM/] +See the [Extract Homepage http://www.cs.chalmers.se/~markus/extract/] homepage for details. +===Bootstrapping with smart paradigms=== -===Extending the resource grammar API=== +This is another cheap technique, where you need as input a list of words with +part-of-speech marking. You initialize the lexicon by using the one-argument +``mkN`` etc paradigms, and add forms to those words that do not come out right. +This procedure is described in the paper + +A. Ranta. +How predictable is Finnish morphology? An experiment on lexicon construction. +In J. Nivre, M. Dahllöf and B. Megyesi (eds), +//Resourceful Language Technology: Festschrift in Honor of Anna Sågvall Hein//, +University of Uppsala, +2008. +Available from the [series homepage http://publications.uu.se/abstract.xsql?dbid=8933] + + + + +==Extending the resource grammar API== Sooner or later it will happen that the resource grammar API does not suffice for all applications. A common reason is that it does not include idiomatic expressions in a given language. The solution then is in the first place to build language-specific -extension modules. This chapter will deal with this issue (to be completed). +extension modules, like ``ExtraGer``. +==Using parametrized modules== -==Writing an instance of parametrized resource grammar implementation== +===Writing an instance of parametrized resource grammar implementation=== Above we have looked at how a resource implementation is built by the copy and paste method (from English to German), that is, formally speaking, from scratch. A more elegant solution available for families of languages such as Romance and Scandinavian is to use parametrized modules. The advantages are - - theoretical: linguistic generalizations and insights - practical: maintainability improves with fewer components -In this chapter, we will look at an example: adding Italian to -the Romance family (to be completed). Here is a set of +Here is a set of [slides http://www.cs.chalmers.se/~aarne/geocal2006.pdf] on the topic. -==Parametrizing a resource grammar implementation== +===Parametrizing a resource grammar implementation=== This is the most demanding form of resource grammar writing. We do //not// recommend the method of parametrizing from the @@ -782,8 +777,51 @@ paste method is still used, but at this time the differences are put into an ``interface`` module. +==Character encoding and transliterations== + +This section is relevant for languages using a non-ASCII character set. + +==Coding conventions in GF== + +From version 3.0, GF follows a simple encoding convention: +- GF source files may follow any encoding, such as isolatin-1 or UTF-8; + the default is isolatin-1, and UTF8 must be indicated by the judgement +``` + flags coding = utf8 ; +``` + in each source module. +- for internal processing, all characters are converted to 16-bit unicode, + as the first step of grammar compilation guided by the ``coding`` flag +- as the last step of compilation, all characters are converted to UTF-8 +- thus, GF object files (``gfo``) and the Portable Grammar Format (``pgf``) + are in UTF-8 + + +Most current resource grammars use isolatin-1 in the source, but this does +not affect their use in parallel with grammars written in other encodings. +In fact, a grammar can be put up from modules using different codings. + +**Warning**. While string literals may contain any characters, identifiers +must be isolatin-1 letters (or digits, underscores, or dashes). This has to +do with the restrictions of the lexer tool that is used. + + +==Transliterations== + +While UTF-8 is well supported by most web browsers, its use in terminals and +text editors may cause disappointment. Many grammarians therefore prefer to +use ASCII transliterations. GF 3.0beta2 provides the following built-in +transliterations: +- Arabic +- Devanagari (Hindi) +- Thai + + +New transliterations can be defined in the GF source file +[``GF/Text/Transliterations.hs`` ../src/GF/Text/Transliterations.hs]. +This file also gives instructions on how new ones are added. + + -This chapter will work out an example of how an Estonian grammar -is constructed from the Finnish grammar through parametrization. diff --git a/doc/Syntax.png b/doc/Syntax.png index 1cc8161b1a5691a34795c243583d87a34eaac6a0..f36c098f6a56e3c91b3771e69c87a9b76d703e0f 100644 GIT binary patch literal 104604 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 R0s{jBgQu&X%Q~loCIA#l3DE!m literal 14804 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 diff --git a/lib/next-resource/latin/ResLatin.gf b/lib/next-resource/latin/ResLatin.gf deleted file mode 100644 index fbe79be33..000000000 --- a/lib/next-resource/latin/ResLatin.gf +++ /dev/null @@ -1,221 +0,0 @@ ---# -path=.:common - -resource ResLatin = open Prelude in { - -param - Number = Sg | Pl ; - Gender = Masc | Fem | Neutr ; - Case = Nom | Acc | Gen | Dat | Abl | Voc ; - Degree = DPos | DComp | DSup ; - -oper - Noun : Type = {s : Number => Case => Str ; g : Gender} ; - Adjective : Type = {s : Gender => Number => Case => Str} ; - - -- worst case - - mkNoun : (n1,_,_,_,_,_,_,_,_,n10 : Str) -> Gender -> Noun = - \sn,sa,sg,sd,sab,sv,pn,pa,pg,pd, g -> { - s = table { - Sg => table { - Nom => sn ; - Acc => sa ; - Gen => sg ; - Dat => sd ; - Abl => sab ; - Voc => sv - } ; - Pl => table { - Nom | Voc => pn ; - Acc => pa ; - Gen => pg ; - Dat | Abl => pd - } - } ; - g = g - } ; - - -- declensions - - noun1 : Str -> Noun = \mensa -> - let - mensae = mensa + "a" ; - mensis = init mensa + "is" ; - in - mkNoun - mensa (mensa +"m") mensae mensae mensa mensa - mensae (mensa + "s") (mensa + "rum") mensis - Fem ; - - noun2us : Str -> Noun = \servus -> - let - serv = Predef.tk 2 servus ; - servum = serv + "um" ; - servi = serv + "i" ; - servo = serv + "o" ; - in - mkNoun - servus servum servi servo servo (serv + "e") - servi (serv + "os") (serv + "orum") (serv + "is") - Masc ; - - noun2er : Str -> Noun = \puer -> - let - puerum = puer + "um" ; - pueri = puer + "i" ; - puero = puer + "o" ; - in - mkNoun - puer puerum pueri puero puero (puer + "e") - pueri (puer + "os") (puer + "orum") (puer + "is") - Masc ; - - noun2um : Str -> Noun = \bellum -> - let - bell = Predef.tk 2 bellum ; - belli = bell + "i" ; - bello = bell + "o" ; - bella = bell + "a" ; - in - mkNoun - bellum bellum belli bello bello (bell + "e") - bella bella (bell + "orum") (bell + "is") - Neutr ; - --- smart paradigm for declensions 1&2 - - noun12 : Str -> Noun = \verbum -> - case verbum of { - _ + "a" => noun1 verbum ; - _ + "us" => noun2us verbum ; - _ + "um" => noun2um verbum ; - _ + "er" => noun2er verbum ; - _ => Predef.error ("noun12 does not apply to" ++ verbum) - } ; - - noun3c : Str -> Str -> Gender -> Noun = \rex,regis,g -> - let - reg = Predef.tk 2 regis ; - rege : Str = case rex of { - _ + "e" => reg + "i" ; - _ + ("al" | "ar") => rex + "i" ; - _ => reg + "e" - } ; - regemes : Str * Str = case g of { - Neutr => ; - _ => - } ; - in - mkNoun - rex regemes.p1 (reg + "is") (reg + "i") rege rex - regemes.p2 regemes.p2 (reg + "um") (reg + "ibus") - g ; - - - noun3 : Str -> Noun = \labor -> - case labor of { - _ + "r" => noun3c labor (labor + "is") Masc ; - fl + "os" => noun3c labor (fl + "oris") Masc ; - lim + "es" => noun3c labor (lim + "itis") Masc ; - cod + "ex" => noun3c labor (cod + "icis") Masc ; - poem + "a" => noun3c labor (poem + "atis") Neutr ; - calc + "ar" => noun3c labor (calc + "aris") Neutr ; - mar + "e" => noun3c labor (mar + "is") Neutr ; - car + "men" => noun3c labor (car + "minis") Neutr ; - rob + "ur" => noun3c labor (rob + "oris") Neutr ; - temp + "us" => noun3c labor (temp + "oris") Neutr ; - vers + "io" => noun3c labor (vers + "ionis") Fem ; - imag + "o" => noun3c labor (imag + "inis") Fem ; - ae + "tas" => noun3c labor (ae + "tatis") Fem ; - vo + "x" => noun3c labor (vo + "cis") Fem ; - pa + "rs" => noun3c labor (pa + "rtis") Fem ; - cut + "is" => noun3c labor (cut + "is") Fem ; - urb + "s" => noun3c labor (urb + "is") Fem ; - _ => Predef.error ("noun3 does not apply to" ++ labor) - } ; - - noun4us : Str -> Noun = \fructus -> - let - fructu = init fructus ; - fruct = init fructu - in - mkNoun - fructus (fructu + "m") fructus (fructu + "i") fructu fructus - fructus fructus (fructu + "um") (fruct + "ibus") - Masc ; - - noun4u : Str -> Noun = \cornu -> - let - corn = init cornu ; - cornua = cornu + "a" - in - mkNoun - cornu cornu (cornu + "s") (cornu + "i") cornu cornu - cornua cornua (cornu + "um") (corn + "ibus") - Neutr ; - - noun5 : Str -> Noun = \res -> - let - re = init res ; - rei = re + "i" - in - mkNoun - res (re+ "m") rei rei re res - res res (re + "rum") (re + "bus") - Fem ; - --- to change the default gender - - nounWithGen : Gender -> Noun -> Noun = \g,n -> - {s = n.s ; g = g} ; - --- smart paradigms - - noun_ngg : Str -> Str -> Gender -> Noun = \verbum,verbi,g -> - let s : Noun = case of { - <_ + "a", _ + "ae"> => noun1 verbum ; - <_ + "us", _ + "i"> => noun2us verbum ; - <_ + "um", _ + "i"> => noun2um verbum ; - <_ + "er", _ + "i"> => noun2er verbum ; - <_ + "us", _ + "us"> => noun4us verbum ; - <_ + "u", _ + "us"> => noun4u verbum ; - <_ + "es", _ + "ei"> => noun5 verbum ; - _ => noun3c verbum verbi g - } - in - nounWithGen g s ; - - noun : Str -> Noun = \verbum -> - case verbum of { - _ + "a" => noun1 verbum ; - _ + "us" => noun2us verbum ; - _ + "um" => noun2um verbum ; - _ + "er" => noun2er verbum ; - _ + "u" => noun4u verbum ; - _ + "es" => noun5 verbum ; - _ => noun3 verbum - } ; - - - --- adjectives - - mkAdjective : (_,_,_ : Noun) -> Adjective = \bonus,bona,bonum -> { - s = table { - Masc => bonus.s ; - Fem => bona.s ; - Neutr => bonum.s - } - } ; - - adj12 : Str -> Adjective = \bonus -> - let - bon : Str = case bonus of { - pulch + "er" => pulch + "r" ; - bon + "us" => bon ; - _ => Predef.error ("adj12 does not apply to" ++ bonus) - } - in - mkAdjective (noun12 bonus) (noun1 (bon + "a")) (noun2um (bon + "um")) ; - -}