summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/gf-index.html17
-rw-r--r--doc/tutorial/Fish.gf4
-rw-r--r--doc/tutorial/FishEng.gf5
-rw-r--r--doc/tutorial/Gatherer.gf5
-rw-r--r--doc/tutorial/Gatherer.gifbin0 -> 12415 bytes
-rw-r--r--doc/tutorial/GathererEng.gf5
-rw-r--r--doc/tutorial/Mushrooms.gf4
-rw-r--r--doc/tutorial/MushroomsEng.gf5
-rw-r--r--doc/tutorial/Neolithic.gf5
-rw-r--r--doc/tutorial/NeolithicEng.gf6
-rw-r--r--doc/tutorial/gf-tutorial2.html168
11 files changed, 201 insertions, 23 deletions
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 @@
<h2>Version 2.1</h2>
November 8, 2004.
+
+<p>
+
+<b>Version 2.2 scheduled to be released May 16, 2005!</b> See
+<a href="doc/gf2.2-highlights.html">highlights</a>.
+
</center>
<p>
</p><h2>News</h2>
-<!--
-<i>May 9, 2005</i>. Version 2.2 coming soon. Here is a
-<a href="download-2.2/GF-2.2.tgz">preliminary source release</a>.
-Here are the <a href="doc/gf2.2-highlights.html">highlights</a>.
+<i>May 12, 2005</i>. GF now has a mailing list, to which you can register
+<a href="https://lists.sourceforge.net/lists/listinfo/gf-tools-users">here</a>.
+GF also has a project page on SourceForge,
+<a
+href="https://sourceforge.net/projects/gf-tools">https://sourceforge.net/projects/gf-tools</a>,
+but this page does not yet have much content.
<p>
--->
<i>May 9, 2005</i>.
PhD Thesis by
diff --git a/doc/tutorial/Fish.gf b/doc/tutorial/Fish.gf
new file mode 100644
index 000000000..c404115e9
--- /dev/null
+++ b/doc/tutorial/Fish.gf
@@ -0,0 +1,4 @@
+abstract Fish = {
+ cat Fish ;
+ fun Salmon, Perch : Fish ;
+}
diff --git a/doc/tutorial/FishEng.gf b/doc/tutorial/FishEng.gf
new file mode 100644
index 000000000..560f6cda4
--- /dev/null
+++ b/doc/tutorial/FishEng.gf
@@ -0,0 +1,5 @@
+concrete FishEng of Fish = {
+ lin
+ Salmon = {s = "salmon"} ;
+ Perch = {s = "perch"} ;
+}
diff --git a/doc/tutorial/Gatherer.gf b/doc/tutorial/Gatherer.gf
new file mode 100644
index 000000000..254a46ec0
--- /dev/null
+++ b/doc/tutorial/Gatherer.gf
@@ -0,0 +1,5 @@
+abstract Gatherer = Paleolithic, Fish, Mushrooms ** {
+ fun
+ UseFish : Fish -> CN ;
+ UseMushroom : Mushroom -> CN ;
+} \ No newline at end of file
diff --git a/doc/tutorial/Gatherer.gif b/doc/tutorial/Gatherer.gif
new file mode 100644
index 000000000..758b8ea8b
--- /dev/null
+++ b/doc/tutorial/Gatherer.gif
Binary files differ
diff --git a/doc/tutorial/GathererEng.gf b/doc/tutorial/GathererEng.gf
new file mode 100644
index 000000000..3dfc7c8fd
--- /dev/null
+++ b/doc/tutorial/GathererEng.gf
@@ -0,0 +1,5 @@
+concrete GathererEng of Gatherer = PaleolithicEng, FishEng, MushroomsEng ** {
+ lin
+ UseFish x = x ;
+ UseMushroom x = x ;
+}
diff --git a/doc/tutorial/Mushrooms.gf b/doc/tutorial/Mushrooms.gf
new file mode 100644
index 000000000..87f14de96
--- /dev/null
+++ b/doc/tutorial/Mushrooms.gf
@@ -0,0 +1,4 @@
+abstract Mushrooms = {
+ cat Mushroom ;
+ fun Cep, Agaric : Mushroom ;
+}
diff --git a/doc/tutorial/MushroomsEng.gf b/doc/tutorial/MushroomsEng.gf
new file mode 100644
index 000000000..d4e18d6d4
--- /dev/null
+++ b/doc/tutorial/MushroomsEng.gf
@@ -0,0 +1,5 @@
+concrete MushroomsEng of Mushrooms = {
+ lin
+ Cep = {s = "cep"} ;
+ Agaric = {s = "agaric"} ;
+}
diff --git a/doc/tutorial/Neolithic.gf b/doc/tutorial/Neolithic.gf
new file mode 100644
index 000000000..2f5c6d116
--- /dev/null
+++ b/doc/tutorial/Neolithic.gf
@@ -0,0 +1,5 @@
+abstract Neolithic = Paleolithic ** {
+ fun
+ Fire, Wheel : CN ;
+ Think : V ;
+}
diff --git a/doc/tutorial/NeolithicEng.gf b/doc/tutorial/NeolithicEng.gf
new file mode 100644
index 000000000..005781a7e
--- /dev/null
+++ b/doc/tutorial/NeolithicEng.gf
@@ -0,0 +1,6 @@
+concrete NeolithicEng of Neolithic = PaleolithicEng ** {
+ lin
+ Fire = {s = "fire"} ;
+ Wheel = {s = "wheel"} ;
+ Think = {s = "thinks"} ;
+}
diff --git a/doc/tutorial/gf-tutorial2.html b/doc/tutorial/gf-tutorial2.html
index 18e5342ab..51b300cd1 100644
--- a/doc/tutorial/gf-tutorial2.html
+++ b/doc/tutorial/gf-tutorial2.html
@@ -11,15 +11,18 @@
<b>3rd Edition, for GF version 2.2 or later</b>
-</p><p>
+<p>
<a href="http://www.cs.chalmers.se/~aarne">Aarne Ranta</a>
-</p>
<p>
<tt>aarne@cs.chalmers.se</tt>
-</p></center>
+
+<p>
+
+12 May 2005
+</center>
<!-- NEW -->
@@ -29,12 +32,13 @@ The term GF is used for different things:
<ul>
<li> a <b>program</b> used for working with grammars
<li> a <b>programming language</b> in which grammars can be written
-<li> a <b>theory</b> about the concepts of grammars and languages
+<li> a <b>theory</b> about grammars and languages
</ul>
<p>
-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
<ul>
<li> to use the GF program
@@ -43,8 +47,9 @@ It will guide you
</ul>
+
<!-- NEW -->
-<h3>The GF program</h3>
+<h3>Getting the GF program</h3>
The program is open-source free software, which you can download from the
GF Homepage:<br>
@@ -60,8 +65,8 @@ There you can download
<li> grammar libraries and examples
</ul>
If you want to compile GF from source, you need Haskell and Java
-compilers. But normally you don't have to compile, and you don't
-need to know Haskell or Java to use GF.
+compilers. But normally you don't have to compile, and you definitely
+don't need to know Haskell or Java to use GF.
<p>
@@ -127,7 +132,7 @@ you imported. Try parsing something else, and you fail
> p "hello world"
No success in cf parsing
no tree found
-<pre>
+</pre>
<!-- NEW -->
@@ -183,6 +188,7 @@ generate ten strings with one and the same command:
To generate <i>all</i> sentence that a grammar
can generate, use the command <tt>generate_trees = gt</tt>.
<pre>
+ > 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
<b>depth</b> of trees. To see how you can get more, use the
<tt>help = h</tt> command,
<pre>
- h gr
+ help gr
</pre>
<b>Quiz</b>. If the command <tt>gt</tt> generated all
trees in your grammar, it would never terminate. Why?
+
<!-- NEW -->
<h3>More on pipes; tracing</h3>
@@ -509,10 +516,38 @@ Each module is compiled into a <tt>.gfc</tt> file.
Import <tt>PaleolithicEng.gf</tt> and try what happens
<pre>
-
+ > i PaleolithicEng.gf
</pre>
-Nothing more than before, except that the GFC files
-are generated.
+The GF program does not only read the file
+<tt>PaleolithicEng.gf</tt>, but also all other files that it
+depends on - in this case, <tt>Paleolithic.gf</tt>.
+
+<p>
+
+For each file that is compiles, a <tt>.gfc</tt> 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 <tt>.gfc</tt> file or to generate
+a new one, by looking at modification times.
+
+
+
+<!-- NEW -->
+<h4>Multilingual grammar</h4>
+
+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 <b>multilingual grammar</b>.
+
+<p>
+
+Multilingual grammars can be used for applications such as
+translation. Let us buid an Italian concrete syntax for
+<tt>Paleolithic</tt> and then test the resulting
+multilingual grammar.
+
+
<!-- NEW -->
@@ -554,17 +589,39 @@ lin
Import without first emptying
<pre>
-
+ > i PaleolithicEng.gf
+ > i PaleolithicIta.gf
</pre>
Try generation now:
<pre>
+ > gr | l
+ un pidocchio uccide questo ragazzo
+ > gr | l -lang=PaleolithicEng
+ that louse eats a louse
</pre>
Translate by using a pipe:
<pre>
-
+ > p -lang=PaleolithicEng "the boy eats the snake" | l -lang=PaleolithicIta
+ il ragazzo mangia il serpente
</pre>
-Inspect the shell state (<tt>print_options = po</tt>):
+
+
+<!-- NEW -->
+<h4>The multilingual shell state</h4>
+
+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 <tt>lang</tt> flag
+can be used to change the linearization and parsing grammar.
+
+<p>
+
+To see what the multilingual grammar is (as well as some other
+things), you can use the command
+<tt>print_options = po</tt>:
<pre>
> print_options
main abstract : Paleolithic
@@ -574,11 +631,86 @@ Inspect the shell state (<tt>print_options = po</tt>):
<!-- NEW -->
-<h4>Extending the grammar</h4>
+<h4>Extending a grammar</h4>
+
+The module system of GF makes it possible to <b>extend</b> a
+grammar in different ways. The syntax of extension is
+shown by the following example.
+<pre>
+ abstract Neolithic = Paleolithic ** {
+ fun
+ Fire, Wheel : CN ;
+ Think : V ;
+ }
+</pre>
+Parallel to the abstract syntax, extensions can
+be built for concrete syntaxes:
+<pre>
+ concrete NeolithicEng of Neolithic = PaleolithicEng ** {
+ lin
+ Fire = {s = "fire"} ;
+ Wheel = {s = "wheel"} ;
+ Think = {s = "thinks"} ;
+ }
+</pre>
+The effect of extension is that all of the contents of the extended
+and extending module are put together.
-Neolithic: fire, wheel, think,...
+<!-- NEW -->
+<h4>Multiple inheritance</h4>
+
+Specialized vocabularies can be represented as small grammars that
+only do "one thing" each, e.g.
+<pre>
+ abstract Fish = {
+ cat Fish ;
+ fun Salmon, Perch : Fish ;
+ }
+
+ abstract Mushrooms = {
+ cat Mushroom ;
+ fun Cep, Agaric : Mushroom ;
+ }
+</pre>
+They can afterwards be combined in bigger grammars by using
+<b>multiple inheritance</b>, i.e. extension of several grammars at the
+same time:
+<pre>
+ abstract Gatherer = Paleolithic, Fish, Mushrooms ** {
+ fun
+ UseFish : Fish -> CN ;
+ UseMushroom : Mushroom -> CN ;
+ }
+</pre>
+
+
+
+<!-- NEW -->
+<h4>Visualizing module structure</h4>
+
+When you have created all the abstract syntaxes and
+one set of concrete syntaxes needed for <tt>Gatherer</tt>,
+your grammar consists of eight GF modules. To see how their
+dependences look like, you can use the command
+<tt>visualize_graph = vg</tt>,
+<pre>
+ > visualize_graph
+</pre>
+and the graph will pop up in a separate window. It can also
+be printed out into a file, e.g. a <tt>.gif</tt> file that
+can be included in an HTML document
+<pre>
+ > pm -printer=graph | wf Gatherer.dot
+ > ! dot -Tgif Gatherer.dot > Gatherer.gif
+</pre>
+The latter command is a Unix command, issued from GF by using the
+shell escape symbol <tt>!</tt>. The resulting graph is shown below.
+
+<p>
+
+<img src="Gatherer.gif">
</body>
</html> \ No newline at end of file