Add proper DFA-style parser