The grammar productions are defined in EBNF. This is a common notation for grammars, and is described elsewhere. Please be aware of that the grammar files use their own "dialect" of EBNF, explained below.
Each production definition consists of a production name and a set of production alternatives. Each alternative in turn contains references to tokens or other productions. Self-referencing is also accepted. A simple example of a production definition is shown in the figure below.
Prod = "TokenString" OtherProd | TOKEN_NAME OtherProd ;
Figure 1. A simple example production. This production contains two alternatives illustrating all the valid ways of referring to a token or a production.
In the example above "=" is used for separating the production
name from the definition, instead of the standard EBNF ":=". Also
the definition must end with a ";" character. The production name
follows the same restrictions as the token name, i.e. it may only
contain characters from the set [a-zA-Z0-9_]
.
The grammar files also allow some constructs that are not part of standard BNF or EBNF. In particular this include parenthesizing with the "{", "}", "[", and "]" characters. See the figure below for an example of this. Normal grouping with "(" and ")" is of course also allowed.
Prod = "1"? | "2"* | "3"+ | {"4"} | ["5"] ;
Figure 2.
An example of the accepted forms of grouping and
repetitions allowed. The "?", "*", and "+" characters are
allowed after productions, tokens or normal parenthesis. The
"{...}
" parenthesis is a shortform for
"(...)*
", and the "[...]
" parenthesis
is a shortform for "(...)?
".