q2c
Input Structureq2c
input files are divided into two sections: the grammar rules
and the supporting code. The grammar rules, which make up the
first part of the input, are used to define the syntax of the
statistical procedure to be parsed. The supporting code,
following the grammar rules, are copied largely unchanged to the output
file, except for certain escapes.
The most important lines in the grammar rules are used for defining
procedure syntax. These lines can be prefixed with a dollar sign
($), which prevents Emacs' CC-mode from munging them. Besides
this, a bang (!) at the beginning of a line causes the line,
minus the bang, to be written verbatim to the output file (useful for
comments). As a third special case, any line that begins with the exact
characters /* *INDENT
is ignored and not written to the output.
This allows .q
files to be processed through indent
without being munged.
The syntax of the grammar rules themselves is given in the following sections.
The supporting code is passed into the output file largely unchanged. However, the following escapes are supported. Each escape must appear on a line by itself.
/* (header) */
#include
directives which include the
headers that are required for the parser generated by q2c
.
/* (decls
scope) */
enum
s input and output by the q2c
parser. scope
must be either local
or global
. local
causes the
declarations to be output as function locals. global
causes them
to be declared as static
module variables; thus, global
is
a bit of a misnomer.
/* (parser) */
/* (free) */
free
function for variables
declared by the parser. Only needs to be invoked if subcommands of type
string
are used in the grammar rules.