4 state lexer