diff options
| author | aarne <unknown> | 2005-05-12 16:12:03 +0000 |
|---|---|---|
| committer | aarne <unknown> | 2005-05-12 16:12:03 +0000 |
| commit | f496c49263c0eecd9e7288d8aeea48fac489bb5d (patch) | |
| tree | fb37f24c4b382dc958e84695b652455c006f6b5c /doc | |
| parent | 73a60aabf50488b34f7813036f20246aa702da80 (diff) | |
index and tutorial
Diffstat (limited to 'doc')
| -rw-r--r-- | doc/gf-index.html | 17 | ||||
| -rw-r--r-- | doc/tutorial/Fish.gf | 4 | ||||
| -rw-r--r-- | doc/tutorial/FishEng.gf | 5 | ||||
| -rw-r--r-- | doc/tutorial/Gatherer.gf | 5 | ||||
| -rw-r--r-- | doc/tutorial/Gatherer.gif | bin | 0 -> 12415 bytes | |||
| -rw-r--r-- | doc/tutorial/GathererEng.gf | 5 | ||||
| -rw-r--r-- | doc/tutorial/Mushrooms.gf | 4 | ||||
| -rw-r--r-- | doc/tutorial/MushroomsEng.gf | 5 | ||||
| -rw-r--r-- | doc/tutorial/Neolithic.gf | 5 | ||||
| -rw-r--r-- | doc/tutorial/NeolithicEng.gf | 6 | ||||
| -rw-r--r-- | doc/tutorial/gf-tutorial2.html | 168 |
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 Binary files differnew file mode 100644 index 000000000..758b8ea8b --- /dev/null +++ b/doc/tutorial/Gatherer.gif 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 |
