diff --git a/doc/gf-index.html b/doc/gf-index.html index 340f64f44..01397554b 100644 --- a/doc/gf-index.html +++ b/doc/gf-index.html @@ -12,20 +12,27 @@
+ +Version 2.2 scheduled to be released May 16, 2005! See +highlights. +
+
aarne@cs.chalmers.se -
+ ++ +12 May 2005 + @@ -29,12 +32,13 @@ The term GF is used for different things:
-This tutorial is about the GF program and the GF programming language. +This tutorial is primarily about the GF program and +the GF programming language. It will guide you
@@ -127,7 +132,7 @@ you imported. Try parsing something else, and you fail > p "hello world" No success in cf parsing no tree found -
+@@ -183,6 +188,7 @@ generate ten strings with one and the same command: To generate all sentence that a grammar can generate, use the command generate_trees = gt.
+ > generate_trees | l this louse laughs this louse sleeps this louse swims @@ -197,12 +203,13 @@ You get quite a few trees but not all of them: only up to a given depth of trees. To see how you can get more, use the help = h command,- h gr + help grQuiz. If the command gt generated all trees in your grammar, it would never terminate. Why? +More on pipes; tracing
@@ -509,10 +516,38 @@ Each module is compiled into a .gfc file. Import PaleolithicEng.gf and try what happens- + > i PaleolithicEng.gf-Nothing more than before, except that the GFC files -are generated. +The GF program does not only read the file +PaleolithicEng.gf, but also all other files that it +depends on - in this case, Paleolithic.gf. + ++ +For each file that is compiles, a .gfc file +is generated. The GFC format (="GF Canonical") is the +"machine code" of GF, which is faster to process than +GF source files. When reading a module, GF knows whether +to use an existing .gfc file or to generate +a new one, by looking at modification times. + + + + +
Multilingual grammar
+ +The main advantage of separating abstract from concrete syntax is that +one abstract syntax can be equipped with many concrete syntaxes. +A system with this property is called a multilingual grammar. + ++ +Multilingual grammars can be used for applications such as +translation. Let us buid an Italian concrete syntax for +Paleolithic and then test the resulting +multilingual grammar. + + @@ -554,17 +589,39 @@ lin Import without first emptying
- + > i PaleolithicEng.gf + > i PaleolithicIta.gfTry generation now:+ > gr | l + un pidocchio uccide questo ragazzo + > gr | l -lang=PaleolithicEng + that louse eats a louseTranslate by using a pipe:- + > p -lang=PaleolithicEng "the boy eats the snake" | l -lang=PaleolithicIta + il ragazzo mangia il serpente-Inspect the shell state (print_options = po): + + + +The multilingual shell state
+ +A GF shell is at any time in a state, which +contains a multilingual grammar. One of the concrete +syntaxes is the "main" one, which means that parsing and linearization +are performed by using it. By default, the main concrete syntax is the +last-imported one. As we saw on previous slide, the lang flag +can be used to change the linearization and parsing grammar. + ++ +To see what the multilingual grammar is (as well as some other +things), you can use the command +print_options = po:
> print_options main abstract : Paleolithic @@ -574,11 +631,86 @@ Inspect the shell state (print_options = po): -Extending the grammar
+Extending a grammar
-Neolithic: fire, wheel, think,... +The module system of GF makes it possible to extend a +grammar in different ways. The syntax of extension is +shown by the following example. ++ abstract Neolithic = Paleolithic ** { + fun + Fire, Wheel : CN ; + Think : V ; + } ++Parallel to the abstract syntax, extensions can +be built for concrete syntaxes: ++ concrete NeolithicEng of Neolithic = PaleolithicEng ** { + lin + Fire = {s = "fire"} ; + Wheel = {s = "wheel"} ; + Think = {s = "thinks"} ; + } ++The effect of extension is that all of the contents of the extended +and extending module are put together. + +Multiple inheritance
+ +Specialized vocabularies can be represented as small grammars that +only do "one thing" each, e.g. ++ abstract Fish = { + cat Fish ; + fun Salmon, Perch : Fish ; + } + + abstract Mushrooms = { + cat Mushroom ; + fun Cep, Agaric : Mushroom ; + } ++They can afterwards be combined in bigger grammars by using +multiple inheritance, i.e. extension of several grammars at the +same time: ++ abstract Gatherer = Paleolithic, Fish, Mushrooms ** { + fun + UseFish : Fish -> CN ; + UseMushroom : Mushroom -> CN ; + } ++ + + + +Visualizing module structure
+ +When you have created all the abstract syntaxes and +one set of concrete syntaxes needed for Gatherer, +your grammar consists of eight GF modules. To see how their +dependences look like, you can use the command +visualize_graph = vg, ++ > visualize_graph ++and the graph will pop up in a separate window. It can also +be printed out into a file, e.g. a .gif file that +can be included in an HTML document ++ > pm -printer=graph | wf Gatherer.dot + > ! dot -Tgif Gatherer.dot > Gatherer.gif ++The latter command is a Unix command, issued from GF by using the +shell escape symbol !. The resulting graph is shown below. + ++ +
+