finished lexer