lexer prototype