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.