I've recently completely refactored the project to give it a more modular, loosely coupled structure. This will make it very much easier to extend the implementation with new bits of theory.
It does, however, make the code structure quite complex.
The parser is structured like this:
I will at some point explain more fully why this is so and how the pieces fit together.
The following diagram is annotated with the notional modules' corresponding packages in the code: