new lexer
improve new lexer and add tests