Parser for the Game Description Language. Note that you can only run one parse at a time. This is to help save on memory allocation, by recycling the same data structures as much as possible.
The parser should be reset at the end of every game to clear the symbol table.
I'm not sure if it's actually necessary to reset the parser. Why not just let the symbol table grow? We have 2^31-256 values, so we'll only have overflow issues after seeing that many unique tokens. We should only get new tokens during game initializations. Assuming that every game creates 5,000 new tokens, we would need to play on the order of 429,496 games to fill up our symbol table...
@author Based on code by Team Camembert: David Haley, Pierre-Yves Laligand