Stages in Using Geyacc |

This section lists the steps to follow to produce a working parser using geyacc. First, you have to write a description of the parser you want to generate:

1. Formally specify the grammar in a form recognized by geyacc. For each grammatical rule in the language, describe the action that is to be taken when an instance of that rule is recognized. The action is described by a sequence of Eiffel instructions.
2. Write a lexical analyzer to process input and pass tokens to the parser. The lexical analyzer may be written by hand in Eiffel. It could also be produced using gelex.
3. Redefine features such as `report_error` `` or`` `clear_all` `` if necessary.

To turn the above parser specification into a runnable program, proceed as follows:

1. Run geyacc on the grammar to produce the parser class.
2. Add the following clusters to your Ace file (ISE Eiffel, SmartEiffel) or your ESD/Xace file (Visual Eiffel) depending on the Eiffel compiler you are using:

           $GOBO/library/parse/skeleton
           $GOBO/library/kernel
           $GOBO/library/kernel/spec/<compiler>

   where `<``compiler``>` is either `ise`, `se` or `ve`.

3. Compile the Eiffel class(es) generated by geyacc, as well as any other classes in your system.
4. In order to debug your grammar, the parser skeleton class is equipped with Eiffel debug instructions with the key `"GEYACC"`. For example with ISE Eiffel you just have to specify the following line in the default clause of the Ace file:

           debug ("GEYACC");

   Along with the verbose file generated with the `-v` option, this will help you to find out what is going on in the parser when it reads some input.

Note that contrary to false assumptions, there is no need to include in your system all libraries that come with Gobo Eiffel in order to take advantage of the facilities provided by geyacc. During the design of the parser skeleton, care has been taken to only use Kernel classes such as `ARRAY` or `STRING`, and therefore avoiding the unnecessary overhead of other library classes. As a consequence, only the three clusters listed above are required: the parser skeleton cluster and Kernel adaptation clusters allowing portability across various Eiffel compilers.