forked from GitHub/gf-core
some tutorial updates ; new structural words Italian and Finnish
This commit is contained in:
@@ -662,7 +662,7 @@ The GF system is an implementation
|
|||||||
of the GF programming language, which in turn is built on the ideas of the
|
of the GF programming language, which in turn is built on the ideas of the
|
||||||
GF theory.
|
GF theory.
|
||||||
|
|
||||||
The main focus of this tutorial is on using the GF programming language.
|
The focus of this tutorial is on using the GF programming language.
|
||||||
|
|
||||||
At the same time, we learn the way of thinking in the GF theory.
|
At the same time, we learn the way of thinking in the GF theory.
|
||||||
|
|
||||||
@@ -676,7 +676,7 @@ using the GF system.
|
|||||||
|
|
||||||
A GF program is called a **grammar**.
|
A GF program is called a **grammar**.
|
||||||
|
|
||||||
A grammar defines of a language.
|
A grammar defines a language.
|
||||||
|
|
||||||
From this definition, language processing components can be derived:
|
From this definition, language processing components can be derived:
|
||||||
- **parsing**: to analyse the language
|
- **parsing**: to analyse the language
|
||||||
@@ -875,8 +875,8 @@ into an internal representation and show the CPU time was consumed, followed
|
|||||||
by a new prompt:
|
by a new prompt:
|
||||||
```
|
```
|
||||||
> i HelloEng.gf
|
> i HelloEng.gf
|
||||||
- compiling Hello.gf... wrote file Hello.gfc 8 msec
|
- compiling Hello.gf... wrote file Hello.gfo 8 msec
|
||||||
- compiling HelloEng.gf... wrote file HelloEng.gfc 12 msec
|
- compiling HelloEng.gf... wrote file HelloEng.gfo 12 msec
|
||||||
|
|
||||||
12 msec
|
12 msec
|
||||||
>
|
>
|
||||||
@@ -1031,8 +1031,8 @@ Application programs, using techniques from #Rchapeight:
|
|||||||
- spoken language translators
|
- spoken language translators
|
||||||
- dialogue systems
|
- dialogue systems
|
||||||
- user interfaces
|
- user interfaces
|
||||||
- localization: parametrize the messages printed by a program
|
- localization: render the messages printed by a program
|
||||||
to support different languages
|
in different languages
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1386,12 +1386,12 @@ after having worked out #Rchapfour.
|
|||||||
|
|
||||||
Semantically indistinguishable ways of expressing a thing.
|
Semantically indistinguishable ways of expressing a thing.
|
||||||
|
|
||||||
The ``variants`` construct of GF expresses free variation. For example,
|
The **variants** construct of GF expresses free variation. For example,
|
||||||
```
|
```
|
||||||
lin Delicious = {s = variants {"delicious" ; "exquisit" ; "tasty"}} ;
|
lin Delicious = {s = "delicious" | "exquisit" | "tasty"} ;
|
||||||
```
|
```
|
||||||
By default, the ``linearize`` command
|
By default, the ``linearize`` command
|
||||||
shows only the first variant from each ``variants`` list; to see them
|
shows only the first variant from such lists; to see them
|
||||||
all, use the option ``-all``:
|
all, use the option ``-all``:
|
||||||
```
|
```
|
||||||
> p "this exquisit wine is delicious" | l -all
|
> p "this exquisit wine is delicious" | l -all
|
||||||
@@ -1399,14 +1399,21 @@ all, use the option ``-all``:
|
|||||||
this delicious wine is exquisit
|
this delicious wine is exquisit
|
||||||
...
|
...
|
||||||
```
|
```
|
||||||
Limiting case: an empty variant list
|
|
||||||
|
#NEW
|
||||||
|
|
||||||
|
An equivalent notation for variants is
|
||||||
|
```
|
||||||
|
lin Delicious = {s = variants {"delicious" ; "exquisit" ; "tasty"}} ;
|
||||||
|
```
|
||||||
|
This notation also allows the limiting case: an empty variant list,
|
||||||
```
|
```
|
||||||
variants {}
|
variants {}
|
||||||
```
|
```
|
||||||
It can be used e.g. if a word lacks a certain inflection form.
|
It can be used e.g. if a word lacks a certain inflection form.
|
||||||
|
|
||||||
Free variation works for all types in concrete syntax; all terms in
|
Free variation works for all types in concrete syntax; all terms in
|
||||||
a ``variants`` list must be of the same type.
|
a variant list must be of the same type.
|
||||||
|
|
||||||
|
|
||||||
#NEW
|
#NEW
|
||||||
@@ -1420,7 +1427,7 @@ a ``variants`` list must be of the same type.
|
|||||||
**Multilingual treebank**: a set of trees with their
|
**Multilingual treebank**: a set of trees with their
|
||||||
linearizations in different languages:
|
linearizations in different languages:
|
||||||
```
|
```
|
||||||
> gr -number=2 | tree_bank
|
> gr -number=2 | l -treebank
|
||||||
|
|
||||||
Is (That Cheese) (Very Boring)
|
Is (That Cheese) (Very Boring)
|
||||||
quel formaggio č molto noioso
|
quel formaggio č molto noioso
|
||||||
@@ -1430,8 +1437,6 @@ linearizations in different languages:
|
|||||||
quel formaggio č fresco
|
quel formaggio č fresco
|
||||||
that cheese is fresh
|
that cheese is fresh
|
||||||
```
|
```
|
||||||
There is also an XML format for treebanks and a set of commands
|
|
||||||
suitable for regression testing; see ``help tb`` for more details.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -1472,7 +1477,7 @@ answer given in another language.
|
|||||||
|
|
||||||
===The "cf" grammar format===
|
===The "cf" grammar format===
|
||||||
|
|
||||||
The grammar ``FoodEng`` could be written in a BNF format as follows:
|
The grammar ``FoodEng`` can be written in a BNF format as follows:
|
||||||
```
|
```
|
||||||
Is. Phrase ::= Item "is" Quality ;
|
Is. Phrase ::= Item "is" Quality ;
|
||||||
That. Item ::= "that" Kind ;
|
That. Item ::= "that" Kind ;
|
||||||
@@ -1489,12 +1494,12 @@ The grammar ``FoodEng`` could be written in a BNF format as follows:
|
|||||||
Very. Quality ::= "very" Quality ;
|
Very. Quality ::= "very" Quality ;
|
||||||
Warm. Quality ::= "warm" ;
|
Warm. Quality ::= "warm" ;
|
||||||
```
|
```
|
||||||
The GF system v 2.9 can be used for converting BNF grammars into GF.
|
GF can convert BNF grammars into GF.
|
||||||
BNF files are recognized by the file name suffix ``.cf``:
|
BNF files are recognized by the file name suffix ``.cf`` (for **context-free**):
|
||||||
```
|
```
|
||||||
> import food.cf
|
> import food.cf
|
||||||
```
|
```
|
||||||
It creates separate abstract and concrete modules.
|
The compiler creates separate abstract and concrete modules internally.
|
||||||
|
|
||||||
|
|
||||||
#NEW
|
#NEW
|
||||||
@@ -1520,7 +1525,7 @@ copy language ``{x x | x <- (a|b)*}`` in GF.
|
|||||||
|
|
||||||
GF uses suffixes to recognize different file formats:
|
GF uses suffixes to recognize different file formats:
|
||||||
- Source files: //Modulename//``.gf``
|
- Source files: //Modulename//``.gf``
|
||||||
- Target files: //Modulename//``.gfc``
|
- Target files: //Modulename//``.gfo``
|
||||||
|
|
||||||
|
|
||||||
Importing generates target from source:
|
Importing generates target from source:
|
||||||
@@ -1708,8 +1713,7 @@ A new module can **extend** an old one:
|
|||||||
Question ;
|
Question ;
|
||||||
fun
|
fun
|
||||||
QIs : Item -> Quality -> Question ;
|
QIs : Item -> Quality -> Question ;
|
||||||
Pizza : Kind ;
|
Pizza : Kind ;
|
||||||
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Parallel to the abstract syntax, extensions can
|
Parallel to the abstract syntax, extensions can
|
||||||
@@ -1875,6 +1879,8 @@ argument. For instance,
|
|||||||
```
|
```
|
||||||
case e of {...} === table {...} ! e
|
case e of {...} === table {...} ! e
|
||||||
```
|
```
|
||||||
|
Since they are familiar to Haskell and ML programmers, they can come out handy
|
||||||
|
when writing GF programs.
|
||||||
|
|
||||||
|
|
||||||
#NEW
|
#NEW
|
||||||
@@ -1916,7 +1922,7 @@ A morphological **paradigm** is a formula telling how a class of
|
|||||||
words is inflected.
|
words is inflected.
|
||||||
|
|
||||||
From the GF point of view, a paradigm is a function that takes
|
From the GF point of view, a paradigm is a function that takes
|
||||||
a **lemma** (**dictionary form**, **citation form**) and
|
a **lemma** (also known as a **dictionary form**, or a **citation form**) and
|
||||||
returns an inflection table.
|
returns an inflection table.
|
||||||
|
|
||||||
The following operation defines the regular noun paradigm of English:
|
The following operation defines the regular noun paradigm of English:
|
||||||
@@ -2741,8 +2747,6 @@ Thus
|
|||||||
artIndef ++ "apple" ---> "an" ++ "apple"
|
artIndef ++ "apple" ---> "an" ++ "apple"
|
||||||
```
|
```
|
||||||
|
|
||||||
//Prefix-dependent choice may be deprecated in GF version 3.//
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -292,6 +292,33 @@ oper
|
|||||||
lock_NP = <>
|
lock_NP = <>
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
lin
|
||||||
|
not_Predet = {s = \\_,_ => "vain"} ;
|
||||||
|
nothing_but_Predet =
|
||||||
|
{s = \\n,c => "ei" ++ mikaanPron ! n ! npform2case n c ++ "paitsi"} ;
|
||||||
|
nobody_but_Predet =
|
||||||
|
{s = \\n,c => "ei" ++ kukaanPron ! n ! npform2case n c ++ "paitsi"} ;
|
||||||
|
|
||||||
|
no_Quant = {
|
||||||
|
s1 = \\n,c => "ei" ++ mikaanPron ! n ! c ;
|
||||||
|
s2 = [] ; isNum,isPoss = False ; isDef = True ;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
if_then_Conj = {s1 = "jos" ; s2 = "niin" ; n = Sg} ;
|
||||||
|
nobody_NP = {
|
||||||
|
s = \\c => "ei" ++ kukaanPron ! Sg ! npform2case Sg c ;
|
||||||
|
a = agrP3 Sg ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
nothing_NP = {
|
||||||
|
s = \\c => "ei" ++ mikaanPron ! Sg ! npform2case Sg c ;
|
||||||
|
a = agrP3 Sg ;
|
||||||
|
isPron = False
|
||||||
|
} ;
|
||||||
|
|
||||||
|
at_least_AdN = ss "vähintään" ;
|
||||||
|
at_most_AdN = ss "enintään" ;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -152,6 +152,27 @@ lin
|
|||||||
mkPronoun
|
mkPronoun
|
||||||
"Lei" "La" "Le" "Glie" "Lei" "Suo" "Sua" "Suoi" "Sue"
|
"Lei" "La" "Le" "Glie" "Lei" "Suo" "Sua" "Suoi" "Sue"
|
||||||
Masc Sg P3 ;
|
Masc Sg P3 ;
|
||||||
|
not_Predet = {s = \\a,c => prepCase c ++ "pas" ; c = Nom} ;
|
||||||
|
nothing_but_Predet = {s = \\a,c => prepCase c ++ "rien excepté" ; c = Nom} ;
|
||||||
|
nobody_but_Predet = {s = \\a,c => prepCase c ++ "personne excepté" ; c = Nom} ;
|
||||||
|
|
||||||
|
|
||||||
|
no_Quant =
|
||||||
|
let aucun : ParadigmsIta.Number => ParadigmsIta.Gender => Case => Str = table {
|
||||||
|
Sg => \\g,c => prepCase c ++ genForms "nessuno" "nessuna" ! g ;
|
||||||
|
Pl => \\g,c => prepCase c ++ genForms "nessuni" "nessune" ! g ----
|
||||||
|
}
|
||||||
|
in {
|
||||||
|
s = \\_ => aucun ;
|
||||||
|
sp = aucun ;
|
||||||
|
s2 = []
|
||||||
|
} ;
|
||||||
|
if_then_Conj = {s1 = "si" ; s2 = "allora" ; n = Sg ; lock_Conj = <>} ;
|
||||||
|
nobody_NP = pn2np (mkPN ["nessuno"] Masc) ;
|
||||||
|
|
||||||
|
nothing_NP = pn2np (mkPN "niente" Masc) ;
|
||||||
|
at_least_AdN = ss "almeno" ;
|
||||||
|
at_most_AdN = ss "al massimo" ;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user