Due to how the parser algorithm was designed I had initially presumed it didn't support correctly balancing expressions when they are parsed. I was wrong, it does if things like expressions are correctly broken into multiple stages.
The wikipedia page for parsing expression grammars has an example of this http://en.wikipedia.org/wiki/Parsing_expression_grammar
Tree balancing should be fully removed from the AST and implemented in the parser.
Test for performance changes though.