lexer restructure
a