- NP: added field isLight in order to push negation behind light nps;
this had been done in gf-3.9 using field isPron, but isPron is now
used to put accusative pronoun before dative pronoun. Removed field
adv: adverbial extensions cannot be extracted (todo: also for CN).
Reduced isLight*isPron to w:Weight with 3 values: WPron, WLight, WHeavy.
- added param Control and field ctrl:Control to classify V2V-verbs into
subject- and object-contol verbs, use ctrl to make reflexives agree
with subject resp. object in VPSlash, and refine ComplSlash.
- Verb: new versions of ComplVV, SlashV2V and SlashVV to give better
(nested) infinitives (extracting infzu and correcting object order).
a) nested SlashVV doesn't work properly;
b) SlashV2VNP may have to be commented out to prevent a stack overflow
when compiling.
Intended change of SlashV2VNP in tests/german/TestLangGer could not
be tested due to size problems with the compiler.
- VP: changed field a1 : Polarity => Str to a1:Str to collect the adverbs
coming before negation, using (negation : Polarity => Str) in mkClause.
Use objCtrl:Bool instead of missingAdv to let reflexives agree with object.
- ResGer: insertObjNP reorganized, infzuVP added
- DictVerbsGer: some corrections (helft -> hilft, *sprecht -> *spricht)
- Some potential passive rules in tests/german/TestLangGer|Eng
- ExtraGer needs to be cleaned up with repect to the modified mkClause.
Usage like before, but add -only-cc as one of the arguments. For example:
`python3 unittest/unittest.py src/somali/unittest/vp.gftest -only-cc`
In order for it to work, the test file has to only contain test cases like this:
```
LangSom: isku BIND ma barto
Lang: PhrUtt NoPConj (UttS (UseCl (TTAnt TPres ASimul) PNeg (PredVP (UsePron youSg_Pron) (ReflVP (SlashV2a teach_V2))))) NoVoc
```
&+ needs to be written as BIND.
ParadigmsGer had two constructions of verbs v:V3 with dat- and acc-object nps,
(1) mkV3 : V -> V3 = \v -> mkV3 v accPrep datPrep ;
(2) accdatV3 : V -> V3 = \v -> mkV3 v datPrep accPrep ; -- (no prepositions)
In a previous patch, I had replaced (accdatV3 v) to (mkV3 v accPrep datPrep), as the
name suggested. (This actually was the meaning of accdatV3 in gf-3.2, which had only
a non-overloaded mkV3 : V -> Prep -> Prep -> V3.)
The reason for having two constructions for dat+acc-verbs in Ger seems to be *Eng*:
for English, ditransitive V3-verbs are defined by
(2') mkV3 : V -> V3 = \v -> mkV3 v noPrep noPrep ;
like "to give sb sth", where the indirect argument comes first (c2=indir), the direct
second (c3=dir), corresponding to c2=datPrep, c3=accPrep in Ger; apparently, this was
meant by the comment (no prepositions) in (2). Other V3-verbs in Eng are defined by
(1') mkV3 : V -> Prep -> V3 = \v,p -> mkV3 v noPrep p ;
like "to give sth to sb", so that (c2=dir), (c3=indir-with preposition),
corresponding to c2=acc,c3=dat in Ger, i.e. (1).
In order to get trees with equal meaning in Ger and Eng, the direct and indirect
arguments of corresponding verbs must match. Therefore, some V3-verbs in Ger have to
be defined using (1), others using (2), although they syntactically behave similar.
This patch therefore reinstalls (1) and (2), and changes the V3 in LexiconGer to:
give_V3 = accdatV3 Irreg.geben_V ; -- c2=datPrep, c3=accPrep, to fit
-- to Eng ditransitive: give sb(indir) sth(dir) (no preposition)
sell_V3 = mkV3 (no_geV (regV "verkaufen")) ; -- Eng: mkV3 v noPrep toPrep
send_V3 = mkV3 (regV "schicken") ; -- Ger mkV3 v = Ger: mkV3 v accPrep datPrep
The inf part of VPC is split into inf,inf2:Str to correct
hat ... wollen lesen => hat ... lesen wollen
wird ... wollen haben lesen => wird ... haben lesen wollen
(for: lesen wollen|gewollt haben)
Changed useVP and mkClause of ResGer and MkVPS of ExtraGer.
(ExtraGer.DisToCl needs to be adapted, but best by unification with mkClause.)
See also tests/german/vp-paradigm.*
Eventual TODO: restructure the whole agreement system, there are other
complications not present in the grammar currently and too much
redundancy in NTable.
The semantics is "the head word takes ezafe". This is a bit confusing
compared to other Preps, where it means that the preposition takes
ezafe. But this ezafePrep is not exported to the public API.
- needs Extend's EmbedSSlash
* (Por) add EmbedSSlash
* (Por) change verb form for RPasse AAnter
the current linearization of RPasse Anter tense combination is not
grammatical Portuguese, while the auxiliar in the present + participle
past form is not available anywhere (it is grammatical Portuguese but
not as common as simple past, which gets the RPast ASimul
linearization)
* Add linearization for `AdAdv` which is just `cc2`
* Add rudimentary linearization for `AdnCAdv`
* Add rudimentary linearization for `UseCl`
* Add trivial linearization for `SubjS`
* Add forgotten semicolon
* Override the lintype of CAdv from CommonX
* Add cases for `CAdv`s
* Augment the linearization of `AdnCAdv` with case information coming from the `CAdv`
* Override the lintype for `AdN`
* Implement linearizations for `AdN` and `AdnCAdv`
* Fix the linearization for `more_CAdv`
* Implment the linearization for `ComparAdvAdj`
* Add a rudimentary linearizations for `ComparAdvAdjS`
* Add rudimentary linearization for `BaseAP`
* Add linearization for `BaseAdV`
* Add linearization for `BaseAdv`
* Add a new param `Gerundification`
* Add a new `VForm` `VNoun` for verbal nouns
* Parameterize the lintypes of S and Cl by the new `Gerundification` param
* Update everything to work with the `Gerundification` parameterization
* Account for the `VNoun` case in `makeVerb`
* Revise the TODO for `ComparAdvAdjS`
* Add the subordination suffix dik in SuffixTur (not used yet)
* Formatting
* Start implementing the suffix -dik in `makeVerb`
* Add TODO for `ComplVS`
* Fix `mkClause`
* Implement a rudimentary linearization for `ComplVS`
Keep VerbForm at VP level, and rename VPHTense to use Tense and
Anteriority instead of custom names that are then mapped to Tense and
Anteriority in Use*Cl functions.
WIP: Remove Aux type and use beVerb instead of beAux. There were a lot
of comments along the lines "check the right form"; will do that with a
native speaker.
* Add an mkN instance for nouns with unexpected possessive stem
* Rename inanimate and animate to nonhuman and human (old ones kept in
the hidden part of API)
* Fix john_PN's animacy
* Add an instance of cmpdN with ezafe
* Add ApposNP + some lex. fixes
- add compN and compNN as mkN paradigms
- rm tossir_V from Irreg since it is very wrong
- fix oper `a` (contraction of preposition a + definite articles)
* Corrected mixed up order of arguments to mkAdj'
* Revert "Corrected mixed up order of arguments to mkAdj'"
This reverts commit eea4f791e4.
* Corrected mixed up order of arguments to mkAdj'.
- couldn't get a functor on top of another working in GFSS2018, so now
we just copy the relevant definitions from ExtendFunctor and add the
Romance-specific ones
- add stare_V to DiffRomance (and essere_V for symmetry) so that we
can use it in ExtendRomance; using Latin verb name for fairness;
- add two missing lins to ExtendFunctor
+ related changes
- reflexive pronoun is before the verb in the negative, not after
- verb form is not the same as positive imperative, but the same as
present subjunctive
thanks to @inariksit for catching this bug!
(Por) handle politeness better
formal -> 2nd person singular (tu)
informal sg -> 3rd person singular (você, conjugated correctly)
informal pl -> 3rd person plural (vocês, conjugated correctly)
unlike Spa, Por uses 2nd person as polite form; the PorRG thus would
have no direct access to vós (second person plural), which is rather
rare (in Brazilian Por, at least). colloquial speech in Brazil
actually mangles both, using tu with você conjugation, etc; but this
out of scope for the RGL.
(Por) fix imperative
- should use hyphen to bind the reflexive pronoun
-- opening new PR to save space (dictionary diffs are big!)
- don't add gender information to noun fun names if uneeded
- update README with this info
- update gfdoc sections in MorphoPor
See https://sites.la.utexas.edu/persian_online_resources/nouns/
"A noun modified by a number is never pluralized; that is to say, it is
invariably singular"
In the old grammar, DetQuant would always make the Det into numeral, and
so Sg was always chosen in DetCN.
* is copula / is have_V2 / is neither
There is no difference; all three options are is mutually exclusive.
There 2 params in the first place only by accident. First one was added
by AED 10 years agon, second by me only some weeks ago, without thinking
that the params are mutually exclusive.
Also tested with gftest, no difference found after 2 hours of running.
Remove some mkNs from public API, but keep them in the hidden part. This
way old code won't break, but the dubious constructors aren't shown in
the synopsis.
Portuguese actually has several verbs that can act as copulas,
although the main ones are ser and estar. this allows other types of
copulas to be added.
* Dict
- Dict only contains nouns and adjectives using the full-form
paradigms^1 (for stability and because generating the minimal ones
would take longer)
- verbs can be found in Irreg, using bescherelle paradigms -- the
full-form ones would make the file too big!
- adverbs are just {s : Str}, so if you know their names you can make
them yourself, no need to include them (but I can if it's best)
^1: adjectives actually use the almost full-form paradigm, but they
should be correct except for a couple of cases
* Irreg
- renamed IrregBesch to Irreg
- added more verbs (there are still quite a few missing)
(Ara) Add new mkV2V constructors + better comments for degrA
(Ara) Add new paradigm for assimilated+defective FormI verbs
(Ara) misc. small fixes/additions
- make it about guessing feminine form from the lemma (masculine form)
- this way one can reuse the noun paradigm in the adjective paradigms,
simplifying it and improving it at the same time
- add cases for 'mente'
obs: works but doesn't compile?
ImpersCl (VP -> Cl) used to check whether the VP is predicative, and
in the positive case, force the dummy subject to not be a pronoun.
This has been wrong since the time I changed prodrop rules in PredVP.
The error that followed manifested when the Cl was put in subordinate
position: the subject pronoun did not attach to the conjunction.
An example follows.
Lang: SubjS that_Subj (UseCl (TTAnt TPres ASimul) PPos (ImpersCl (UseComp (CompNP (DetCN (DetQuant IndefArt NumSg) (UseN girl_N))))))
LangEng: that it is a girl
Old LangAra: أنَّ ها بِنتٌ (wrong)
New LangAra: أنَّ &+ ها بِنتٌ (correct)
This makes a difference in word order; default is VSO, but if the
subject NP is complex, e.g. coming from RelNP or SentCN,
the more natural word order is SVO.
Example that triggered the change comes from an application grammar:
Gold standard by informant: مَا تَوَصْلّنَا إلَيهِ يَبْدُو مَنْطِقِيَّاً
Grammar before change: يَشْعُرُ مَاً نَتَوَصَّلُ إِلَىهُ مَنْطِقِيّاً
Grammar after change: مَاً نَتَوَصَّلُ إِلَىهُ يَشْعُرُ مَنْطِقِيّاً
- so that one can force the use of a copula verb
- before this, a sentence like "he was ready when I saw him" would be
translated as "ele era pronto quando eu o via" in Portuguese,
instead of using the estar copula
* (Fre,Por) accomodate changes to Romance adjectives
- to support Spanish buen/bueno, gran/grande and catalan bo/bon
* (Cat) Update paradigms to allow predicative and attributive forms of adj
* (Spa) fix argument order in Spanish adjective paradigms
* (Eng) fix missing paradigm invarA
* (Spa) Flip order of args in mkAdj constructor
This fixes a build problem (either a type error, if doing an incremental
rebuild, or a failure to find SyntaxAra.gf if building from scratch.)
I wonder why the Travis build didn't catch this?
- add ubuntu, mac, and windows builds
add travis build with mac and ubuntu
- fix signature in Make.hs for compatibility with ghc<8
add windows build to travis
using haskell and bash scripts
(travis) use env variable
Make.bat works
(Make.bar) [temporary] comment some Langs
merge upstream and uncomment langs
For some reason second inner loop was never reached,
this is a simple solution.
Also remove stderr redirection as it didn't seem to work.
--verbose now names each module individually
Explanation by Thomas Hallgren:
These MIN_VERSION macros are traditionally provided by Cabal, in dist/build/autogen/cabal_macros.h. It is only with ghc>=8.0 that ghc itself provides them, so with ghc<8, runghc Make.hs fails, as can be seen in the included message.
Incidentally, ghc-8.0.1 also comes with directory-1.3, so I suggest using
#if __GLASGOW_HASKELL__>=800
instead. Then Make.hs will work with older versions of ghc, and set the modification times if you are using ghc>=8.0.
(such that the second argument is the adverb string, not the feminine
form, which is easier to predict)
- fix bug in adjVo paradigm
- add two cases to mkAdjReg smart paradigm
- update lexicon
tbh, it is much more common to need to correct the adverbial form
because it doesn't have the accents that the adjectival forms may
have, so if there's a way of removing accents easily, that might be
better.
Enough dependencies have been added so that
* If nothing has changed, MkSynopsis.hs will not be run, so synopisis.html
will not be needlessly regenerated.
* You can use 'make -j' to build examples for different languages in parallel.
Hopefully 'make synopsis' produces the exact same result as before, but if
it turns out that some dependencies are missing and something is not
rebuilt despite of changes, 'make clean' can be used to force a full rebuild.
- update V2A linref
- add overloaded mkV2A with backwards-compatible signature
- update lexicon V2A example
- remove old comment with Verb lincat
thanks to @inariksit for guidance!
* added Bantu functor
* added egekusii language based on Bantu functor
* added kikamba language based on Bantu functor
* added kiswahili language based on Bantu functor
(Dut) Fix ordinals and superlatives
ik wil roodst worden --> ik wil het roodst worden ('I want to become reddest')
ik wil tiend worden --> ik wil tiende worden ('I want to become tenth')
ik wil linker worden --> ik wil de linker worden ('I want to become left')
* Fix the classic "a 1 house" bug (was handled in DetQuant but still present in DetQuantOrd)
* In DetQuantOrd, choose quant.s for both s and sp, to prevent "*yours 5 youngest"
* add two new nominal modifiers of type NP -> CN -> CN
* change married_A2 to invariant adjective
* rename CommonNoun to Noun
* change type of relPron
* merge CompAP and ICompAP using the same oper ; fix reflPron (ise, enda, ...) and add a helper function fixPlNom
* minor cleanup
* change in who_RP, reflecting the change of relative pronouns in ResEst
* Add new functions to ExtendEst ; update comments in ResEst
* fix linearization of either/or
* (Por) minor updates
- correction in Lexicon
- documentation in Morpho
- rm variants from Structural
* (Por) correct references to extinct opers
* (Por) rm Spa remnants
* (Abs) rm reference to Extra in Structural -- use Extend instead
* (Por) ExtendPor
- use Extend instead of Extra in All
- use Extend funs in Extra whenever possible
* trigger CI
* (Por) Diff
- sort opers
- rm old commented code
- tidy things up
- no semantic changes
* (Por) add IrregBesch module with verbs using Besch paradigms
- Besch :
- use hack to prevent runtime failure with glue in in vars output
- rm paradigm numbers
- add IrregBeschPor, verbs that use only bescherelle paradigms
- use them in Construction, Structural, Idiom, Extra
- Diff and Paradigms had (almost) the same oper (verboV/verbBeschH),
so combine them into one and use it
* (Por) update functions to use new Irreg suffix and resolve name conflicts
* fix linearization of either/or
* (Por) minor updates
- correction in Lexicon
- documentation in Morpho
- rm variants from Structural
* (Por) correct references to extinct opers
- Besch :
- use hack to prevent runtime failure with glue in in vars output
- rm paradigm numbers
- add IrregBeschPor, verbs that use only bescherelle paradigms
- use them in Construction, Structural, Idiom, Extra
- Diff and Paradigms had (almost) the same oper (verboV/verbBeschH),
so combine them into one and use it
- Based on Malin Ahlberg's SALDO to GF import script
- Latest version of SALDO, with roughly 10,000 new words
- Updated identifier syntax: `aangkoek_nn_1_1_N` -> `ångkök_1_N` - Original `DictSwe` moved to `OldDictSwe`
- New `DictSwe` inherits `OldDictSwe` for backwards compatibility
- add time linearizations
- rm Spa from RNeg lin and Refl and pronouns
- use constructors (mkV, mkA, etc) when possible
- update Lexicon
- update Numeral
* remove unnecessary flags from GrammarTur.gf
* Add linearization for `alas_Interj`
* Add linearization for `already_Adv`
* Implement linearization for `easy_A2V`
* Implement linearization for `far_Adv`
* Implement a rudimentary linearization for `easy_A2V`
* Implement linearization for `now_Adv`
* Add implementation stubs for the linearizations of `left_Ord` and `right_Ord`
* Add linearization for `today_Adv`
* Define type aliases AS = AV = A
* Define `mkAS` and `mkAV` trivially
* Add linearization for `probable_AS`
* Rudimentary linearization for `fun_AV`
* Add linearization for `know_VQ`
* Bit of alignment
* Define the `mkAdv` function in `ParadigmsTur`
* Improve the comment regarding `easy_A2V`
* Make use of `mkAdv`
A few additions and fixes in the Basque grammar, specifically
* Verb morphology (missing forms & bug fixes)
* Reflexives: VP and A2 "sees herself", "married to myself" work now properly.
* Add Agr to AP
* A few lexical changes + other small fixes
* Make adjectives depend on agreement; Fix reflexives
* fix typo and remove commented out line
* small fixes and additions
* fix linVP: use the same functions as mkClause
* Add new forms to zaio and dio
* Fix bug in chooseAuxPol
* fix some bugs in synthetic verbs
* Add some simple tests for the Basque grammar
* Update README.md
* formatting
* Fix the RE in the grep
* fixes/additions to tests
* small fixes
* change beautiful_A
* use linCN in UttCN
* remove unnecessary flags from GrammarTur.gf
* Implement the linearization for UseA2
* Minor formatting fixes
* Manually specify the preposition "ile" for married_A2
* Implement the linearization for ComplA2
* Implement the linearization for ReflA2 ("kendi ile evli")
* Fix ReflA2 adjective case to Nom
* Add a TODO comment
* Add a linearization for AdAP
* Implement the linearization for UseA2
* Minor formatting fixes
* Manually specify the preposition "ile" for married_A2
* Implement the linearization for ComplA2
* Implement the linearization for ReflA2 ("kendi ile evli")
* Fix ReflA2 adjective case to Nom
* Add a TODO comment
* Add a linearization for AdAP
* Fix AdAP
* Add linearization for at_most_AdN
* Add linearization for at_least_AdN
* added dummies for the missing modules in Turkish
* Add the linearization for as_CAdv
* Add rudimentary linearization for UsePN
* Add the linearization for CAdvAP
* Add preliminary linearization for EmbedVP
* Add linearization stub for SentAP
* Fix code-formatting and indentation in HarmonyTur
* Patterns for front and back vowels
* Add an oper for attaching the -mA suffix
* Formatting fixes in ParadigmsTur
* Attempt to implement attachMe
* Almost-working linearization for SentAP
* Update TODO for SentAP
* Move the addition of suffix si to the linearization of EmbedVP
* Import PhraseTur in GrammarTur
* Fix the duplication of PhraseTur in GrammarTur
* Start working on PhraseTur
* Fix formatting of makeH4Table
* Formatting
* Begin implementing the gerund inflection `makeVerb`
* Attach Number and Case data to the Gerund constructor of param VForm
* Get rid of hacky appending of "si" in EmbedVP
- small improvements to noun smart paradigms (originally done 3 years ago, something to do with syllable/stress detection)
- two words corrected
- some typos fixed in source code comments
The GF Resource Grammar Library is the standard library for Grammatical Framework. It covers the morphology and basic syntax of over 30 languages.
For more about the RGL, see the [synopsis page](http://www.grammaticalframework.org/lib/doc/synopsis/).
## Choose your build method
There are 3 ways to build and install the RGL:
- Haskell script `Setup.hs`
- Shell script `Setup.sh` (does not require Haskell)
- Windows batch file `Setup.bat` (does not require Haskell)
## Install locations
The install scripts will try to determine where to copy the compiled RGL modules.
It will look for, in this order:
- the `--dest=` flag (see below)
- the `GF_LIB_PATH` environment variable
- the file `../gf-core/DATA_DIR` (relative to this directory). This only works if you have the `gf-core` and `gf-rgl` repositories in the same top-level directory **and** you have already compiled GF from source.
(This is considered a bit hacky and will probably disappear in the future).
## Language config
A list of all languages and their properties is maintained centrally in [`languages.csv`](languages.csv).
This file should be kept up-to-date and all build methods should read this config file.
**If you see something wrong, please report/fix it.**
or an explicit module name (e.g. `ExtraEng.gf`. You don't need to specify to language subdirectory, but there is a restriction that the module must exist in a **direct** subdirectory of `src`).
If ommitted, the default command is `prelude all`.
-`MODE` is one of:
`present`,
`alltenses`
(default is both).
-`LANG` is a 3-letter language code, e.g. `Eng`, `Swe` etc.
- You can _override_ the default language list with `--langs=...`
- ~~You can _add_ languages to the default list with `--langs=+...`~~
- You can _remove_ languages from the default list with `langs=-...`
- The path to GF installed on your system can be specified via the `--gf` flag (default is that the `gf` executable is in the global system path).
- The `--dest` flag can be used to manually specify where the compiled RGL modules should be copied/installed. This is the same place as `GF_LIB_PATH`.
## Shell script: `Setup.sh`
This method is provided as an alternative for those who don't have Haskell installed.
Simply run the script to build the entire RGL and install in the default location.
You can pass the following flags:
-`--dest=...` to manually specify the install location
-`--gf=...` to specify the path to the `gf` executable, if not available on the system path
-`--verbose` or `-v` to show a list of files being built (errors will always be shown)
## Windows batch file: `Setup.bat`
This method is provided as an alternative for Windows users who don't have Haskell or Bash installed.
It is supposed to be a port of `Setup.sh` and works in largely the same way.
In particular, it accepts the same flags (in the same format) as described above.
However it currently tries to build all modules for all languages and doesn't consider the details of which modules should be compiled for each language (specified in `languages.csv`)
## About this repository
On 2018-07-25, the monolithic [GF repository](https://github.com/GrammaticalFramework/GF)
was split in two:
1. [gf-core](https://github.com/GrammaticalFramework/gf-core) — the GF compiler, shell and runtimes
2. [gf-rgl](https://github.com/GrammaticalFramework/gf-rgl) — the resource grammar library
The former repository is now archived and no longer updated.
The split was performed using [this script](https://github.com/GrammaticalFramework/GF/blob/30ae1b5a5f73513ac5825ca6712186ef8afe9fd4/split/run.sh)
and the output of that script is [here](https://gist.github.com/johnjcamilleri/a6c43ff61f15a9657b457ac94ab7db61).
REM Non-Haskell RGL build script for Windows machines
REM ---
REM Modules to compile for each language
REM TODO read from languages.csv
setlangs=Afr Amh Ara Eus Bul Cat Chi Cze Dan Dut Eng Est Fin Fre Grc Gre Heb Hin Hun Ger Ice Ina Ita Jpn Lat Lav Mlt Mon Nep Nor Nno Pes Pol Por Pnb Ron Rus Slo Snd Spa Swe Tha Tur Urd
setmodules_langs=All Symbol Compatibility
setmodules_api=Try Symbolic
REM Defaults (may be overridden by options)
setgf=gf
setdest=
setverbose=false
REM Check command line options
:Loop
if '%1'=='' gotoContinue
if%1==-v setverbose=true
if%1==--verbose setverbose=true
if%1==--gf setgf=%2
if%1==--dest setdest=%2
shift
gotoLoop
:Continue
REM Try to determine install location
if"%dest%"==""(
REM Separate paths with search path separator ; and pick first one
for%%p in("%GF_LIB_PATH:;=";"%")do(
setdest=%%~p
gotoBreakLibPath
)
)
:BreakLibPath
setDATA_DIR=..\gf-core\DATA_DIR
if"%dest%"==""(
REM Look in already compiled GF folder
ifexist%DATA_DIR%(
for/f"delims="%%x in(%DATA_DIR%)do(
ifnot"%%x"==""(
setdest=%%x\lib
gotoBreakDataDir
)
)
)
)
:BreakDataDir
if"%dest%"==""(
echo Unable to determine where to install the RGL. Please do one of the following:
echo - Pass the --dest=... flag to this script
echo - Set the GF_LIB_PATH environment variable
REM echo - Compile & install GF from the gf-core repository (must be in same directory as gf-rgl)
m);varr=s.createElement("OL");r.className="linenums";for(varn=Math.max(0,m-1|0)||0,g=0,z=d.length;g<z;++g)l=d[g],l.className="L"+(g+n)%10,l.firstChild||l.appendChild(s.createTextNode("\xa0")),r.appendChild(l);a.appendChild(r)}functionk(a,m){for(vare=m.length;--e>=0;){varh=m[e];A.hasOwnProperty(h)?window.console&&console.warn("cannot override language handler %s",h):A[h]=a}}functionC(a,m){if(!a||!A.hasOwnProperty(a))a=/^\s*</.test(m)?"default-markup":"default-code";returnA[a]}functionE(a){varm=
<p>A basic tool for looking through scopes and quickly jumping to code within GF's resource grammar library (RGL), created out of necessity. All feedback is welcome.</p>
<h3>Understanding the scope information</h3>
<p>The scope information shown by this tool is basically the output of running GF with the <code>--tags</code> flag. This lists all the functions visible in the scope of a module, one per line. Each line can have two possible forms:</p>
<p>For locally defined functions, the second column <code>oper-type</code> indicates the judgement type, followed by the location in the souce file and its type information.</p>
<h4>2. External functions</h4>
<pre>Number indir ResEng R /lib/doc/browse/tags/ParamX.gf-tags</pre>
<p>The <code>indir</code> indicates this function is defined in an external module (note that no distinction is made between functions from opened modules and inherited ones.) <code>ResEng</code> is the name of the opened or inherited module, while <code>R</code> is the alias under which it was opened. The final column points to another tags file where the type information for this function can be found. Note that though the function is available in the given context via the <code>ResEng</code> module, it is actually originally defined in <code>ParamX</code>.</p>
<h3>The RGL directory structure</h3>
<p>The drop-down at the top left lists all child directories under <code><ahref="http://www.grammaticalframework.org/lib/src/">/lib/src</a></code> in the GF source code repository. Most directories represent individual languages, however many have special functions:</p>
<dl>
<dt><code>abstract</code></dt><dd>Abstract syntaxes shared by all resource grammars</dd>
<dt><code>api</code></dt><dd>The RGL API and instantiations of the API modules in all languages</dd>
<dt><code>common</code></dt><dd>Resource modules common to all languages</dd>
In addition, the following directories are not individual languages but language functors, shared by resource grammars for related language families:
<dl>
<dt><code>hindustani</code></dt><dd>Used by Hindi, Persian, Punjabi, Urdu</dd>
<dt><code>romance</code></dt><dd>Used by Catalan, French, Italian, Romanian, Spanish</dd>
<dt><code>scandinavian</code></dt><dd>Used by Danish, Norwegian, Swedish</dd>
</dl>
<h3>Issues</h3>
<h4>Something is missing or out of date</h4>
<p>All the scoping information shown is not read directly from the RGL on-demand. There is an in-between processing stage which must be run, so if something seems out of date just let me know and I can udpate things manually.</p>
</div><!-- panel help -->
</div><!-- ui-layout-center -->
<divclass="ui-layout-north">
<header>
<imgsrc="../../../doc/Logos/gf0.png"alt=""/>
<h1title="...or ‘GFRGLSB’ as we like to call it">GF Resource Grammar Library Source Browser</h1>
;(function(e,t){varn=function(t){vari=e.Event("push");n.context.trigger(i,[t,u]);if(i.isDefaultPrevented())returnn;if(u==="pathname"){if(c!==t)window.history.pushState({},null,c=t)}elseif(u==="hash"){if(c!==t){location.hash=c=t;if(o){if(!e("#jQueryHistory").length)thrownewError("jQuery."+r+".push: iframe not found.");if(l){l=0;f.contentWindow.document.open().close();f.contentWindow.location.hash="/"}f.contentWindow.document.open().close();f.contentWindow.location.hash=t}}}else{thrownewError("jQuery."+r+".push: the listening is not active.")}n.context.trigger("pushed",[t,u]);returnn},r="history";n.context=e({});e.each(["on","off","trigger"],function(e,t){n[t]=function(){n.context[t].apply(n.context,arguments);returnn}});n.push=n;n.type=function(){returnu};n.url=function(e){e=e||location;if(u===null)thrownewError("jQuery."+r+".url: the listening has not started.");if(u==="pathname")returne.pathname+e.search+e.hash;if(e.hash.length>1){spl=e.href.split("#");spl.shift();spl=spl.join("#");returnspl}return""};n.listen=function(l,h){n.unlisten();varp=arguments.length;if(!p||l==="auto"){l=i?"pathname":"hash";p=1}elseif(l!=="pathname"&&l!=="hash"){thrownewError("jQuery."+r+".listen: type is not valid.")}if(l==="hash"){if(!s&&p===1||h===true){h=n.config.interval;p=2}if(p===2&&(isNaN(h)||h<1))thrownewError("jQuery."+r+".listen: interval delay is not valid.")}if((u=l)==="pathname"){if(!i)thrownewError("jQuery."+r+".listen: this browser has not support to pushState.");e(window).on("popstate.history",function(e){if(e.originalEvent&&e.originalEvent.state&&c!==location.pathname)n.trigger("change",[c=n.url(),"pathname"])});if(location.pathname.length>1)n.trigger("load",[n.url(),"pathname"])}else{if(s&&!h){e(window).on("hashchange.history",function(e){vart=n.url();if(c!==t)n.trigger("change",[c=t,"hash"])})}else{if(o===t)o=n.ieCondition("lte IE 7");if(o){if(!(p=e("body")).length)thrownewError("jQuery."+r+".listen: document is not ready.");f=e('<iframe id="jQueryHistory" style="display:none" src="javascript:void(0);" />').appendTo(p)[0];vard=f.contentWindow;if(location.hash.length>1){d.document.open().close();d.location.hash="#"+n.url()}a=setInterval(function(){if((c="#"+n.url())!=="#"+n.url(d.location)){d.document.open().close();d.location.hash=c;n.trigger("change",[c.substr(1),"hash"])}},h)}else{c=n.url();a=setInterval(function(){vare=n.url();if(c!==e)n.trigger("change",[c=e,"hash"])},h)}}if(location.hash.length>1){n.trigger("load",[n.url(),"hash"])}}returnn};n.unlisten=function(){u=c=f=null;e(window).off("popstate.history hashchange.history");e("#jQueryHistory").remove();clearInterval(a);returnn};n.getSupports=function(e){varn={},r=arguments.length,i;if(!r||e==="pushState")n.pushState="pushState"inwindow.history;if(!r||e==="onhashchange")n.onhashchange="onhashchange"inwindow&&((i=document.documentMode)===t||i>7);if(r)returnn[e];returnn};n.ieCondition=function(n){varr=Math.random().toString(36).substring(2),i="_ie_condition_"+r,s,o;s=e("<span><!--[if "+e("<i/>").html(n).text()+']><script type="text/javascript">window.'+i+"=true;</script><![endif]--></span>").appendTo(document.body);o=window[i]===true;try{deletewindow[i]}catch(u){window[i]=t}s.remove();returno};n.supports=n.getSupports();n.config={interval:100};vari=n.supports.pushState,s=n.supports.onhashchange,o=n.ieCondition("lte IE 7"),u=null,a,f,l=1,c;e[r]=n})(jQuery);
These morphological dictionaries are extracted from open source lexica by using the resource grammar paradigms. The figures give the approximate number of lemmas.
@@ -17,26 +17,26 @@ Also available for [Chinese gf-chinese.html] [Finnish gf-finnish.html] [French g
#HR
#HR
**Digital grammars** are grammars usable by computers, so that they can mechanically perform
**Digital grammars** are grammars usable by computers, so that they can mechanically perform
tasks like interpreting, producing, and translating languages. The **GF Resource Grammar Library**
tasks like interpreting, producing, and translating languages. The **GF Resource Grammar Library**
(RGL) is a set of digital grammars which, at the time of writing, covers 28 languages. These grammars
(RGL) is a set of digital grammars which, at the time of writing, covers 28 languages. These grammars
are written in GF, **Grammatical Framework**, which is a programming language designed for
are written in GF, **Grammatical Framework**, which is a programming language designed for
writing digital grammars.
writing digital grammars.
The grammars in the RGL have been written by linguists, computer scientists, and
The grammars in the RGL have been written by linguists, computer scientists, and
programmers who know the languages thoroughly, both in practice and in theory. Almost 50 persons from
programmers who know the languages thoroughly, both in practice and in theory. Almost 50 persons from
around the world have contributed to this work, and ongoing projects are expected to give us many new
around the world have contributed to this work, and ongoing projects are expected to give us many new
languages soon.
languages soon.
The leading idea of the RGL is that different languages share large parts of their grammars, despite
The leading idea of the RGL is that different languages share large parts of their grammars, despite
their observed differences. One important thing that is shared are the **categories**, that is, the
their observed differences. One important thing that is shared are the **categories**, that is, the
types of words and expressions. For instance, every language in RGL has a category of **nouns**, but
types of words and expressions. For instance, every language in RGL has a category of **nouns**, but
what exactly a noun is varies from language to language. Thus English nouns have four forms
what exactly a noun is varies from language to language. Thus English nouns have four forms
(singular and plural, nominative and genitive, as in //house, houses, house's, houses'//)
(singular and plural, nominative and genitive, as in //house, houses, house's, houses'//)
whereas French nouns have just two forms (singular and plural //maison, maisons//, "house"), but they also
whereas French nouns have just two forms (singular and plural //maison, maisons//, "house"), but they also
have a piece of information that English nouns don't have, namely gender (masculine and feminine).
have a piece of information that English nouns don't have, namely gender (masculine and feminine).
Chinese nouns have just one form (房子 //fangzi// "house"), which is used for both singular and plural, but in
Chinese nouns have just one form (房子 //fangzi// "house"), which is used for both singular and plural, but in
addition, a little bit like the French gender, they have a **classifier** (间 //jian// for the word
addition, a little bit like the French gender, they have a **classifier** (间 //jian// for the word
"house"). German nouns have 8 forms and a gender, Finnish nouns have 26 forms, and so on.
"house"). German nouns have 8 forms and a gender, Finnish nouns have 26 forms, and so on.
This document provides a tour of the digital grammars in the RGL. It is intended to serve at least three kinds of readers.
This document provides a tour of the digital grammars in the RGL. It is intended to serve at least three kinds of readers.
@@ -50,8 +50,8 @@ The document has two main parts: **Words** and **Syntax**. Both parts have a **g
explaining the RGL structure from a multilingual perspective, followed by a **specific section**,
explaining the RGL structure from a multilingual perspective, followed by a **specific section**,
going into the details of the grammar in a particular language. The general sections are the same
going into the details of the grammar in a particular language. The general sections are the same
in all languages. The specific sections differ in length and detail, depending on the complexity of
in all languages. The specific sections differ in length and detail, depending on the complexity of
the language and on what aspects are particularly interesting or problematic for the language
the language and on what aspects are particularly interesting or problematic for the language
in question.
in question.
@@ -68,7 +68,7 @@ of their morphological aspects. Details of morphology for each language is given
++Main parts of speech: content words++
++Main parts of speech: content words++
The most important categories of words are given in the following table. More precisely, we will give the
The most important categories of words are given in the following table. More precisely, we will give the
categories of **content words**, which, so so say, describe things and events in the real world.
categories of **content words**, which, so so say, describe things and events in the real world.
Content words are distinguished from **structural words**, whose purpose is to combine words into syntactic
Content words are distinguished from **structural words**, whose purpose is to combine words into syntactic
structures. Each category of content words may have thousands of words, and new words can be introduced
structures. Each category of content words may have thousands of words, and new words can be introduced
continuously; therefore, these categories are also called **open categories**. In contrast, structural
continuously; therefore, these categories are also called **open categories**. In contrast, structural
@@ -92,10 +92,10 @@ give us a short and precise way to state grammatical rules.
In addition to the names and examples, the table lists the **inflectional features** and **inherent features**
In addition to the names and examples, the table lists the **inflectional features** and **inherent features**
typical of each category. Inflectional features are those that create different forms of words. For instance,
typical of each category. Inflectional features are those that create different forms of words. For instance,
French nouns have forms for number (singular and plural) - or, as one often says,
French nouns have forms for number (singular and plural) - or, as one often says,
French nouns are //inflected for number//. In contrast to number, the gender does not give rise to different forms
French nouns are //inflected for number//. In contrast to number, the gender does not give rise to different forms
of French nouns: //maison// ("house") //is// feminine, inherently, and there is no masculine form of //maison//.
of French nouns: //maison// ("house") //is// feminine, inherently, and there is no masculine form of //maison//.
(Of course, there are some nouns that do have masculine and feminine forms, such as //étudiant, étudiante//
(Of course, there are some nouns that do have masculine and feminine forms, such as //étudiant, étudiante//
"male/female student", but this only applies to a minority of French nouns and shouldn't be taken as an
"male/female student", but this only applies to a minority of French nouns and shouldn't be taken as an
indication of an inflectional gender.)
indication of an inflectional gender.)
@@ -103,11 +103,11 @@ indication of an inflectional gender.)
++Syntactic implications++
++Syntactic implications++
The features given in the table are rough indications for what one can expect in different languages. Thus,
The features given in the table are rough indications for what one can expect in different languages. Thus,
for instance, some languages have no gender at all, and hence their nouns and adjectives won't have
for instance, some languages have no gender at all, and hence their nouns and adjectives won't have
genders either. But the table is a rather good generalization from the 28 language of the RGL: we can
genders either. But the table is a rather good generalization from the 28 language of the RGL: we can
safely say that, if a language //does// have gender, then nouns have an inherent gender and adjectives have
safely say that, if a language //does// have gender, then nouns have an inherent gender and adjectives have
a variable gender. This is not a coincidence but has to do with **syntax**, that is, the combination of words
a variable gender. This is not a coincidence but has to do with **syntax**, that is, the combination of words
into complex expressions. Thus, for instance, nouns are combined with adjectives that modify them, so that
into complex expressions. Thus, for instance, nouns are combined with adjectives that modify them, so that
#BECE
#BECE
//blue// + //house// = //blue house//
//blue// + //house// = //blue house//
@@ -140,8 +140,8 @@ words depend on each other in combinations.
//express logical relations, ontologies, etc//
//express logical relations, ontologies, etc//
The last column in the category table shows the **semantic type** corresponding to each category. This type gives an indication
The last column in the category table shows the **semantic type** corresponding to each category. This type gives an indication
of the kind of meaning that the word of each type has. Starting from the simplest meanings, ``e`` is the type of **entities** that serve as meanings of proper names. Nouns, adjectives, and verbs have the type ``e -> t``, which means
of the kind of meaning that the word of each type has. Starting from the simplest meanings, ``e`` is the type of **entities** that serve as meanings of proper names. Nouns, adjectives, and verbs have the type ``e -> t``, which means
**functions from entities to propositions** (where the symbol ``t`` for propositions comes from **truth values**). Such a function can be **applied** to an entity to yield a proposition.
**functions from entities to propositions** (where the symbol ``t`` for propositions comes from **truth values**). Such a function can be **applied** to an entity to yield a proposition.
The type ``t`` itself is reserved for sentences, which are formed in syntax by putting words together.
The type ``t`` itself is reserved for sentences, which are formed in syntax by putting words together.
For example, the sentence //Paris is large//
For example, the sentence //Paris is large//
involves an application of the adjective //large// to //Paris//, and yields the value true if //large// applies to //Paris//.
involves an application of the adjective //large// to //Paris//, and yields the value true if //large// applies to //Paris//.
@@ -153,15 +153,15 @@ refers to an entity but an ``N`` expresses a property of an entity. Of course, t
all distinctions of categories: nouns, verbs, and adjectives have the same semantic type, but different syntactic properties.
all distinctions of categories: nouns, verbs, and adjectives have the same semantic type, but different syntactic properties.
We will occasionally use the **type synonyms** ``n``, ``a``, and ``v`` instead of ``e -> t``, to give a clearer structure to some semantic types. But from the semantic point of view, all these types are one and the same.
We will occasionally use the **type synonyms** ``n``, ``a``, and ``v`` instead of ``e -> t``, to give a clearer structure to some semantic types. But from the semantic point of view, all these types are one and the same.
We should notice that the semantic types given here are quite rough and do not give a full picture of the nuances. For instance, many adjectives work in a different way than straightforwardly yielding truth values from entities. An example is
We should notice that the semantic types given here are quite rough and do not give a full picture of the nuances. For instance, many adjectives work in a different way than straightforwardly yielding truth values from entities. An example is
the adjective //large//. Being a //large mouse// is different (in terms of absolute size) from being //a large elephant//,
the adjective //large//. Being a //large mouse// is different (in terms of absolute size) from being //a large elephant//,
and a logical type for expressing this is ``n -> e -> t``, with an argument ``n`` indicating the domain of comparison (such as
and a logical type for expressing this is ``n -> e -> t``, with an argument ``n`` indicating the domain of comparison (such as
mice or elephants).
mice or elephants).
Another problem is that defining
Another problem is that defining
verbs as ``e -> t`` suggests that all verbs apply to all kinds of entities. But there are combinations of entities and
verbs as ``e -> t`` suggests that all verbs apply to all kinds of entities. But there are combinations of entities and
verbs that make no sense semantically. For example, the verb //sleep// is only meaningful for animate entities, and
verbs that make no sense semantically. For example, the verb //sleep// is only meaningful for animate entities, and
a sentence like //this book sleeps//, if not senseless, requires some kind of a metaphorical interpretation
a sentence like //this book sleeps//, if not senseless, requires some kind of a metaphorical interpretation
of //sleep//.
of //sleep//.
The following table summarizes the most important semantic types that will be used. We use more primitive types than most traditional approaches, which reduce everything to ``e`` and ``t``. For instance, we can't see any way to reduce the top-level category ``p`` of phrases to these types. From a type-theoretical perspective, ``p`` is the category of **judgements**, whereas
The following table summarizes the most important semantic types that will be used. We use more primitive types than most traditional approaches, which reduce everything to ``e`` and ``t``. For instance, we can't see any way to reduce the top-level category ``p`` of phrases to these types. From a type-theoretical perspective, ``p`` is the category of **judgements**, whereas
@@ -174,10 +174,10 @@ The following table summarizes the most important semantic types that will be us
@@ -187,8 +187,8 @@ In addition to the features needed for inflection and agreement, the lexicon mus
combinations are possible with each word. For most nouns and adjective, this is simple: a noun can be modified
combinations are possible with each word. For most nouns and adjective, this is simple: a noun can be modified
by an adjective, for instance, and there is a uniform syntax rule for this. However, there are some nouns and adjectives
by an adjective, for instance, and there is a uniform syntax rule for this. However, there are some nouns and adjectives
that are trickier, because they don't correspond to simple things but to **relations**. For instance, //brother// is
that are trickier, because they don't correspond to simple things but to **relations**. For instance, //brother// is
a **relational noun**, since its primary usage is not alone bur in phrases like //brother of this man//.
a **relational noun**, since its primary usage is not alone bur in phrases like //brother of this man//.
In the same way, //similar//
In the same way, //similar//
is a **relational adjective**, since its primary use is in phrases like //similar to this//. The additional
is a **relational adjective**, since its primary use is in phrases like //similar to this//. The additional
term attached to these words is called its **complement**; thus //this// is the complement in //similar to this//.
term attached to these words is called its **complement**; thus //this// is the complement in //similar to this//.
The categories of words that take complements are called **subcategories**. They are morphologically similar to
The categories of words that take complements are called **subcategories**. They are morphologically similar to
@@ -202,11 +202,11 @@ argument places in semantic types. Thus the number of places
is one plus the number of complements, so that the first place is reserved for the subject of a sentence
is one plus the number of complements, so that the first place is reserved for the subject of a sentence
and the rest of the places for the complements.
and the rest of the places for the complements.
The following table shows the categories of relational nouns and adjectives in the RGL. The inflectional and
The following table shows the categories of relational nouns and adjectives in the RGL. The inflectional and
inherent features are the same as for one-place nouns and adjectives, but for each complement, the lexicon
inherent features are the same as for one-place nouns and adjectives, but for each complement, the lexicon
must tell what preposition, if any, is needed to attach that complement. For instance, the preposition for
must tell what preposition, if any, is needed to attach that complement. For instance, the preposition for
//similar// is //to//, whereas the preposition for //different// is //from//. In languages with richer case
//similar// is //to//, whereas the preposition for //different// is //from//. In languages with richer case
systems (such as German, Latin, and Finnish), the complement information also determines the case (genitive,
systems (such as German, Latin, and Finnish), the complement information also determines the case (genitive,
dative, ablative, and so on).
dative, ablative, and so on).
@@ -220,15 +220,15 @@ dative, ablative, and so on).
Verbs show a particularly rich variation in subcategorization. The most familiar distinction is the one between
Verbs show a particularly rich variation in subcategorization. The most familiar distinction is the one between
**intransitive** and **transitive** verbs: intransitive verbs need only a **subject** (like //she// in //she sleeps//),
**intransitive** and **transitive** verbs: intransitive verbs need only a **subject** (like //she// in //she sleeps//),
whereas transitive verbs also need an **object** (like //him// in //she loves him//). Our category ``V`` obviously includes
whereas transitive verbs also need an **object** (like //him// in //she loves him//). Our category ``V`` obviously includes
intransitive verbs. But there is no category for transitive verbs in the RGL. Instead, we have a more general category of
intransitive verbs. But there is no category for transitive verbs in the RGL. Instead, we have a more general category of
**two-place verbs**, which includes transitive verbs but also verbs that need a preposition (such as //at// in
**two-place verbs**, which includes transitive verbs but also verbs that need a preposition (such as //at// in
//she looks at him//). Just like for relational nouns and adjectives, the complement of a two-place verb has variations
//she looks at him//). Just like for relational nouns and adjectives, the complement of a two-place verb has variations
in cases and prepositions.
in cases and prepositions.
The following table shows the subcategories of verbs in the RGL. The list is long but it may still be incomplete. For
The following table shows the subcategories of verbs in the RGL. The list is long but it may still be incomplete. For
example, there are no four-place verbs (//she paid him one million pounds for the house//). Such constructions can
example, there are no four-place verbs (//she paid him one million pounds for the house//). Such constructions can
be built, as we will see later, by using for instance a ``V3`` verb with an additional adverb. But we can envisage
be built, as we will see later, by using for instance a ``V3`` verb with an additional adverb. But we can envisage
future additions of more subcategories for verbs.
future additions of more subcategories for verbs.
@@ -263,9 +263,9 @@ Semantically, the type ``e -> e -> v -> t`` works for both of them. However, if
them, then the two kinds of verbs apply their argument verb to different arguments:
them, then the two kinds of verbs apply their argument verb to different arguments:
- ``promise subj obj verb`` is about the proposition ``verb subj``
- ``promise subj obj verb`` is about the proposition ``verb subj``
- ``force subj obj verb`` is about the proposition ``verb obj``
- ``force subj obj verb`` is about the proposition ``verb obj``
Hence it would make sense to distinguish between subject-control and object-control ``V2V``'s on the category level rather
Hence it would make sense to distinguish between subject-control and object-control ``V2V``'s on the category level rather
than with a complement feature. The agreement behaviour would them become simpler to describe, and, what is more important,
than with a complement feature. The agreement behaviour would them become simpler to describe, and, what is more important,
the semantic behaviour would be predictable from the category alone.
the semantic behaviour would be predictable from the category alone.
@@ -274,7 +274,7 @@ table, //ask// appears in both ``VQ`` and ``V2Q``. Now, these uses are related,
the same as to //ask someone something//. But in some other cases, the meaning can be completely different. For instance,
the same as to //ask someone something//. But in some other cases, the meaning can be completely different. For instance,
//walk// in ``V2`` (as in //I walk the dog//) is different from //walk// in ``V`` (as in //the dog walks//). The ``V2`` is in
//walk// in ``V2`` (as in //I walk the dog//) is different from //walk// in ``V`` (as in //the dog walks//). The ``V2`` is in
this case **causative** with respect to the ``V``: I cause the walking of the dog. From the multilingual perspective, it is
this case **causative** with respect to the ``V``: I cause the walking of the dog. From the multilingual perspective, it is
just a coincidence that English uses the same verb for the intransitive and the causative meanings. In many other languages,
just a coincidence that English uses the same verb for the intransitive and the causative meanings. In many other languages,
different words would be used. And so would English do for many other verbs: one cannot say //I eat the dog// to express that I make the dog eat; the verb //feed// is used instead.
different words would be used. And so would English do for many other verbs: one cannot say //I eat the dog// to express that I make the dog eat; the verb //feed// is used instead.
@@ -287,13 +287,13 @@ We have defined the categories of content along three criteria:
- **semantic**: words belonging to the same category must have the same semantic type
- **semantic**: words belonging to the same category must have the same semantic type
Thus morphological criteria are, in most languages, enough to tell apart ``N``, ``A``, ``V``, and ``Adv``.
Thus morphological criteria are, in most languages, enough to tell apart ``N``, ``A``, ``V``, and ``Adv``.
Syntactic criteria are appealed to when distinguishing the subcategories of nouns, adjectives, and verbs.
Syntactic criteria are appealed to when distinguishing the subcategories of nouns, adjectives, and verbs.
Semantic criteria are often obeyed as well, although we have noticed that finer distinctions could be useful
Semantic criteria are often obeyed as well, although we have noticed that finer distinctions could be useful
for subject vs. object control verbs and for different kinds of adjectives.
for subject vs. object control verbs and for different kinds of adjectives.
For structural words, following the same criteria leads to a high number of categories, higher than in many traditional
For structural words, following the same criteria leads to a high number of categories, higher than in many traditional
grammars. Thus, for instance the category of **pronouns** is divided to at least,
grammars. Thus, for instance the category of **pronouns** is divided to at least,
personal pronouns (//he//), determiners (//this//),
personal pronouns (//he//), determiners (//this//),
interrogative pronouns (//who//), and relative pronouns (//that//). There is no way to see all these classes as subcategories
interrogative pronouns (//who//), and relative pronouns (//that//). There is no way to see all these classes as subcategories
of a uniform class of pronouns, as we did with the verb subcategories: for verbs, there was a uniform
of a uniform class of pronouns, as we did with the verb subcategories: for verbs, there was a uniform
@@ -317,21 +317,21 @@ i.e. on how the structural words are actually used for building structures.
|| GF name | text name | example | inflectional features | inherent features | semantics ||
|| GF name | text name | example | inflectional features | inherent features | semantics ||
draft version <AHREF="http://www.cse.chalmers.se/~aarne/articles/discourse-clitics.pdf">http://www.cse.chalmers.se/~aarne/articles/discourse-clitics.pdf</A>
<P></P>
A. Ranta.
How predictable is Finnish morphology? An experiment on lexicon construction.
In J. Nivre, M. Dahllöf and B. Megyesi (eds),
<I>Resourceful Language Technology: Festschrift in Honor of Anna Sågvall Hein</I>,
<LI><B>Source</B>: <AHREF="http://www.grammaticalframework.org/lib/src/german">http://www.grammaticalframework.org/lib/src/german</A> (Aarne Ranta, Harald Hammarström, Erzsébet Galgóczy)
Verb Morphology of Hebrew and Maltese - Towards an Open Source Type Theoretical Resource Grammar in GF.
<I>Proceedings of the Language Resources (LRs) and Human Language Technologies (HLT) for Semitic Languages Status, Updates, and Prospects, LREC-2010 Workshop</I>,
<LI><B>Source</B>: <AHREF="http://www.grammaticalframework.org/lib/src/hindi">http://www.grammaticalframework.org/lib/src/hindi</A><AHREF="http://www.grammaticalframework.org/lib/src/hindustani">http://www.grammaticalframework.org/lib/src/hindustani</A> (Shafqat Virk, K.V.S. Prasad, Muhammad Humayoun, Aarne Ranta)
<P></P>
<LI><B>Publications</B>
<P></P>
Shafqat Virk.
<I>Computational Linguistics Resources for Indo-Iranian Languages</I>,
<LI><B>Source</B>: <AHREF="http://www.grammaticalframework.org/lib/src/maltese">http://www.grammaticalframework.org/lib/src/maltese</A> (John J. Camilleri)
<P></P>
<LI><B>Publications</B>
<P></P>
John J. Camilleri,
MSc thesis, Chalmers University of Technology, 2013.
<P></P>
John J. Camilleri.
A computational grammar for Maltese: Talk at the 4th International Conference on Maltese Linguistics (GĦILM 2013). Lyon, France, 2013.
Verb Morphology of Hebrew and Maltese - Towards an Open Source Type Theoretical Resource Grammar in GF.
<I>Proceedings of the Language Resources (LRs) and Human Language Technologies (HLT) for Semitic Languages Status, Updates, and Prospects, LREC-2010 Workshop</I>,
Corrections and additions are welcome! Notice that only those parts of implementations
that are currently available via <AHREF="http://grammaticalframework.org">http://grammaticalframework.org</A>
are marked in the table
</P>
<TABLEBORDER="1"CELLPADDING="4">
<TR>
<TH>ISO</TH>
<TH>Language</TH>
<TH>Darcs</TH>
<TH>Mini</TH>
<TH>Parad</TH>
<TH>Lex</TH>
<TH>Lang</TH>
<TH>API</TH>
<TH>Symb</TH>
<TH>Irreg</TH>
<TH>Dict</TH>
<TH>Trans</TH>
<TH>tested</TH>
<TH>publ</TH>
<THCOLSPAN="2">authors</TH>
</TR>
<TR>
<TD>Afr</TD>
<TD>Afrikaans</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>*LP,LM</TD>
</TR>
<TR>
<TD>Amh</TD>
<TD>Amharic</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*MK</TD>
</TR>
<TR>
<TD>Ara</TD>
<TD>Arabic</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>AD</TD>
</TR>
<TR>
<TD>Bul</TD>
<TD>Bulgarian</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>*KA</TD>
</TR>
<TR>
<TD>Cat</TD>
<TD>Catalan</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>+</TD>
<TD>++</TD>
<TD>-</TD>
<TD>*JS,*IL</TD>
</TR>
<TR>
<TD>Chi</TD>
<TD>Chinese</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>+</TD>
<TD>ZL,*AR,*CP,QH</TD>
</TR>
<TR>
<TD>Dan</TD>
<TD>Danish</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>-</TD>
<TD>*AR</TD>
</TR>
<TR>
<TD>Dut</TD>
<TD>Dutch</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>*AR,FJ</TD>
</TR>
<TR>
<TD>Eng</TD>
<TD>English</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>*AR,BB,KA</TD>
</TR>
<TR>
<TD>Est</TD>
<TD>Estonian</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>*KK,*IL</TD>
</TR>
<TR>
<TD>Fin</TD>
<TD>Finnish</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>*AR,*IL</TD>
</TR>
<TR>
<TD>Fre</TD>
<TD>French</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>-</TD>
<TD>*AR,RE</TD>
</TR>
<TR>
<TD>Ger</TD>
<TD>German</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>-</TD>
<TD>*AR,HH,EG</TD>
</TR>
<TR>
<TD>Gre</TD>
<TD>Greek(mod)</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*IP</TD>
</TR>
<TR>
<TD>Grc</TD>
<TD>Greek(anc)</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*HLe</TD>
</TR>
<TR>
<TD>Heb</TD>
<TD>Hebrew</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*DD</TD>
</TR>
<TR>
<TD>Hin</TD>
<TD>Hindi</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>*SV,*KP,MH,AR,PK</TD>
</TR>
<TR>
<TD>Ice</TD>
<TD>Icelandic</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*BT</TD>
</TR>
<TR>
<TD>Ina</TD>
<TD>Interlingua</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>JB</TD>
</TR>
<TR>
<TD>Ita</TD>
<TD>Italian</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>++</TD>
<TD>-</TD>
<TD>*AR,*RE,GP</TD>
</TR>
<TR>
<TD>Jpn</TD>
<TD>Japanese</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>*LZ</TD>
</TR>
<TR>
<TD>Lat</TD>
<TD>Latin</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>*AR,*HLa</TD>
</TR>
<TR>
<TD>Lav</TD>
<TD>Latvian</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>*NG,*PP</TD>
</TR>
<TR>
<TD>Mlt</TD>
<TD>Maltese</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*JC</TD>
</TR>
<TR>
<TD>Mon</TD>
<TD>Mongolian</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*NE</TD>
</TR>
<TR>
<TD>Nep</TD>
<TD>Nepali</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*DS</TD>
</TR>
<TR>
<TD>Nno</TD>
<TD>Norwegian(n)</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>*SRE</TD>
</TR>
<TR>
<TD>Nor</TD>
<TD>Norwegian(b)</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>-</TD>
<TD>*AR</TD>
</TR>
<TR>
<TD>Pes</TD>
<TD>Persian</TD>
<TD>+</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>*SV,*EA,SM</TD>
</TR>
<TR>
<TD>Pnb</TD>
<TD>Punjabi</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*SV,MH</TD>
</TR>
<TR>
<TD>Pol</TD>
<TD>Polish</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>IN,*AS</TD>
</TR>
<TR>
<TD>Ron</TD>
<TD>Romanian</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>*RE</TD>
</TR>
<TR>
<TD>Rus</TD>
<TD>Russian</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>+</TD>
<TD>JK,*NF</TD>
</TR>
<TR>
<TD>Snd</TD>
<TD>Sindhi</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*SV,*JD</TD>
</TR>
<TR>
<TD>Spa</TD>
<TD>Spanish</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>+</TD>
<TD>++</TD>
<TD>-</TD>
<TD>*AR,IA,TS,*IL</TD>
</TR>
<TR>
<TD>Swa</TD>
<TD>Swahili</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>*WN,JM</TD>
</TR>
<TR>
<TD>Swe</TD>
<TD>Swedish</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>*MA,*AR,MF</TD>
</TR>
<TR>
<TD>Tha</TD>
<TD>Thai</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>*AR,CK</TD>
</TR>
<TR>
<TD>Tsn</TD>
<TD>Tswana</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>*LPs,AB</TD>
</TR>
<TR>
<TD>Tur</TD>
<TD>Turkish</TD>
<TD>+</TD>
<TD>-</TD>
<TD>++</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>*SC,KA</TD>
</TR>
<TR>
<TD>Urd</TD>
<TD>Urdu</TD>
<TD>+</TD>
<TD>+</TD>
<TD>++</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>+</TD>
<TD>-</TD>
<TD>-</TD>
<TD>-</TD>
<TD>+</TD>
<TD>+</TD>
<TD>*SV,MH</TD>
</TR>
</TABLE>
<P>
ISO = 3-letter ISO language code, used in library file names
(mostly ISO 639-2 B (bibliographic))
</P>
<P>
Darcs = available in the darcs repository of <S><AHREF="http://code.haskell.org/gf">http://code.haskell.org/gf</A></S><AHREF="http://www.grammaticalframework.org/">http://www.grammaticalframework.org/</A>
</P>
<P>
Mini = minimal resource, compiles with <CODE>make minimal</CODE> (obsolete)
</P>
<P>
Parad = <CODE>Paradigms</CODE> file complete for major POS, ++ means with smart paradigms
</P>
<P>
Lex = the resource <CODE>Lexicon</CODE> (nearly) complete
</P>
<P>
Lang = the resource <CODE>Syntax</CODE> (nearly) complete
</P>
<P>
API = the <CODE>Syntax</CODE> compiles
</P>
<P>
API = the <CODE>Symbolic</CODE> API compiles
</P>
<P>
Irreg = the <CODE>Irreg</CODE> module with irregular verbs exists
</P>
<P>
Dict = the <CODE>Dict</CODE> module, large-scale morphological lexicon, exists
</P>
<P>
Trans = large-scale translation module and dictionary exists
</P>
<P>
tested = tested in some applications, ++ means extensively tested with no major issues
</P>
<P>
publ = publications available, see <AHREF="./rgl-publications.html">RGL publication list</A>
</P>
<P>
authors = main contributors, * means still active
(ready to fix bugs, answer to questions, etc)
</P>
<H3>Author codes</H3>
<P>
AB Ansu Berg,
AD Ali El Dada,
AR Aarne Ranta,
AS Adam Slaski,
BB Björn Bringert,
BT Bjarki Traustason,
CK Chotiros Kairoje,
CP Chen Peng,
DD Dana Dannélls,
DS Dinesh Simk,
EA Elnaz Abolahrar,
EG Erzsébet Galgóczy
FJ Femke Johansson,
HH Harald Hammarström,
HLa Herbert Lange,
HLe Hans Leiss,
GP Gabriele Paganelli,
IA Ingrid Andersson,
IL Inari Listenmaa,
IN Ilona Novak,
IP Ioanna Papadopoulou,
JB Jean-Philippe Bernardy,
JC John J. Camilleri,
JD Jherna Devi,
JK Janna Khegai,
JM Juliet Mutahi,
JS Jordi Saludes,
KA Krasimir Angelov,
KK Kaarel Kaljurand,
KP Kuchi Prasad,
LM Laurette Marais,
LP Laurette Pretorius,
LZ Liza Zimina,
MA Malin Ahlberg,
MF Markus Forsberg,
MK Markos Kassa Gobena,
MH Muhammad Humayoun,
NE Nyamsuren Erdenebadrakh,
NF Nick Frolov,
NG Normunds Gruzitis,
QH Qiao Haiyan,
RE Ramona Enache,
PP Peteris Paikens,
SC Server Cimen,
SM Sofy Moradi,
SRE Stian Rødven Eide,
SV Shafqat Virk,
TH Therese Söderberg,
WN Wanjiku Ng'ang'a,
ZL Zhuo Lin Qiqige
</P>
<H2>Rules</H2>
<P>
Only components available at <AHREF="http://grammaticalframework.org">http://grammaticalframework.org</A> are indicated in the table
(exceptions: Ancient Greek, Mongolian, to appear soon).
</P>
<P>
If you want to work on a language already in the table, please be kind and contact the
active authors of it.
</P>
<P>
Feel free to start a new language that is not yet in the table - but let us know and
contribute some code as soon as you can!
</P>
<!-- html code generated by txt2tags 2.6 (http://txt2tags.org) -->
@@ -8,12 +8,9 @@ of //C// that takes //D// as an argument. What the constructors exactly are,
and what other arguments they take, is described by separate tables for
and what other arguments they take, is described by separate tables for
each category.
each category.
| [categories.png] |
%!include(html): ''categories-imagemap.html''
%!include(html): ''categories-imagemap.html''
The rectangular boxes mark open lexical categories, which have constructors
The rectangular boxes mark open lexical categories, which have constructors
also in the ``Paradigms`` modules.
also in the ``Paradigms`` modules.
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.