mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-09 13:09:33 -06:00
52 lines
1.0 KiB
Plaintext
52 lines
1.0 KiB
Plaintext
|
|
The standard way of building an application has the following modules.
|
|
|
|
An abstract syntax:
|
|
```
|
|
abstract Music = {
|
|
cat
|
|
Kind,
|
|
Property ;
|
|
fun
|
|
PropKind : Kind -> Property -> Kind ;
|
|
Song : Kind ;
|
|
American : Property ;
|
|
}
|
|
```
|
|
A domain lexicon interface:
|
|
```
|
|
interface LexMusic = open Cat in {
|
|
oper
|
|
song_N : N ;
|
|
american_A : A ;
|
|
}
|
|
```
|
|
A functor on ``Syntax`` and the domain lexicon interface:
|
|
```
|
|
incomplete concrete MusicI of Music = open Syntax, MusicLex in {
|
|
lincat
|
|
Kind = CN ;
|
|
Property = AP ;
|
|
lin
|
|
PropKind k p = mkCN p k ;
|
|
Song = mkCN song_N ;
|
|
American = mkAP american_A ;
|
|
}
|
|
```
|
|
For each language, an instance of the domain lexicon:
|
|
```
|
|
instance LexMusicGer of LexMusic = CatGer ** open ParadigmsGer in {
|
|
oper
|
|
song_N = mkN "Lied" "Lieder" neuter ;
|
|
american_A = mkA "amerikanisch" ;
|
|
}
|
|
```
|
|
For each language, an instantiation of the functor:
|
|
```
|
|
--# -path=.:present:prelude
|
|
|
|
concrete MusicGer of Music = MusicI with
|
|
(Syntax = SyntaxGer),
|
|
(LexMusic = LexMusicGer) ;
|
|
```
|