prototype of lexer