lexer example more organized