For the bovinator, lexical token matching patterns are inlined. When the grammar-to-lisp converter encounters a lexical token declaration of the form:
%token <type> token-name match-value
It substitutes every occurrences of token-name in rules, by its expanded form:
%token <symbol> MOOSE "moose" find_a_moose: MOOSE ;
Will generate this pseudo equivalent-rule:
find_a_moose: symbol "moose" ;; invalid syntax! ;
Thus, from the bovinator point of view, the components part of a rule is made up of symbols and strings. A string in the mix means that the previous symbol must have the additional constraint of exactly matching it, as described in How Lexical Tokens Match.
For the bovinator, this task was mixed into the language definition to simplify implementation, though Bison’s technique is more efficient.