cleanup
refactor lexer to have a stack state which is easier to work with.
handle multiple keyword definitions