Next: Grammar-to-Lisp Details, Up: Bovine Grammar Rules [Contents]
A lexical rule must be used to define how to match a lexical token.
For instance:
%keyword FOO "foo"
Means that FOO
is a reserved language keyword, matched as such
by looking up into a keyword table. This is because "foo"
will be
converted to
FOO
in the lexical analysis stage. Thus the symbol FOO
won’t be available any other way.
If we specify our token in this way:
%token <symbol> FOO "foo"
then FOO
will match the string "foo"
explicitly, but it
won’t do so at the lexical level, allowing use of the text
"foo"
in other forms of regular expressions.
In that case, FOO
is a symbol
-type token. To match, a
symbol
must first be encountered, and then it must
string-match "foo"
.
Be especially careful to remember that "foo"
, and more
generally the %token’s match-value string, is a regular expression!
Non symbol tokens are also allowed. For example:
%token <punctuation> PERIOD "[.]" filename : symbol PERIOD symbol ;
PERIOD
is a punctuation
-type token that will explicitly
match one period when used in the above rule.
symbol
, punctuation
, etc., are predefined lexical token
types, based on the syntax class-character associations
currently in effect.