lexer completed, not tested