Use some compile-time magic to generate lookup functions in the lexer instead of building lists.
Add a raise_error/2 function to the lexer to reduce code noise.
Also generate lookup functions for keywords.