The manual states:
The syntax of the various directives to declare symbols is as follows.
@example
%token @var{tag}? ( @var{id} @var{number}? @var{string}? )+ ( @var{tag} (
@var{id} @var{number}? @var{string}? )+ )*
%left @var{tag}? ( @var{id} @var{number}?)+ ( @var{tag} ( @var{id}
@var{number}? )+ )*
%type @var{tag}? ( @var{id} | @var{char} | @var{string} )+ ( @var{tag} (
@var{id} | @var{char} | @var{string} )+ )*
%nterm @var{tag}? @var{id}+ ( @var{tag} @var{id}+ )*
@end example
I think the "@var{char}" option is missing in the "%token" and
"%left" cases.
Side note, I wonder if allowing string descriptions for chars is
really useful, but I don't really mind:
%token '.' "!"
Another thing, when running with "-Wcounterexamples", I sometimes
get messages like this:
Productions leading up to the conflict state found. Still finding a possible
unifying counterexample...time limit exceeded: 6,000000
Maybe it's because I'm not a native English speaker, but I've always
found the usage of "find" in the meaning of "search" confusing, but
especially here, as it ultimately does not find anything.
Initially I had read this message as "there were problems, but
still[in spite of that] did find something" so I wondered why it
doesn't show me what it found.
To avoid this confusion, I'd suggest to write "searching for" or
"looking for" instead.
Viele Grüße,
Frank