Lexer now has range interface, can extract keywords and issues an error if incorrect lexeme found.