draft of lexer