Doctrine Lexer
Base library for a lexer that can be used in Recursive Descent Parsers
...The low level API of the lexer is pretty simple. The setInput($input) option sets the input data to be tokenized. The Lexer is immediately reset and the new input tokenized. And the option glimpse(), peeks at the next token, returns it and immediately resets the peek.