I had a 3 minute look at the code in the github repo.
The parser uses ~= (D's array concatenation operator) a lot. This always copies and will lead to quadratic performance for parsing e.g. blocks of statements. Similarly, the switch parser uses code like this:
curStmts.length += 1;
(*curStmts)[curStmts.length-1] = parseStmt(input);
This is similarly quadratic - it incrementally grows the statement array.Look at algorithm performance first.