The source code of the tooling parser uses a lot of ps.next() and ps.peek(). Sometimes it's clear what characters they peek over or consume; other times it's hard to see right away and one needs to trace it back to some other part of the code. It might be helpful to use more explicit methods, like ps.expectChat(), instead.