Why doesn't my header show up in the lexer as well as the parser?
Actions are specific to one grammar. When using a combined parser/lexer grammar, use
// applies only to the parser: @header {package foo;} // applies only to the lexer: @lexer::header {package foo;}
not just the @header.
When using a separate (non-combined) parser, @header applies to the parser. Likewise, when using a separate (non-combined) lexer, @header applies to the lexer (it is not necessary to use @lexer::header in this case).