wrote a lexer