improve lexer and lexer_test