Hi All, I'm very happy to report that the new parser now parses and compiles if-elseif statements! I think the code should be correct to handle multiple elseif's and else blocks if they are there but will be checking that with more test CSD's shortly. If so, what remains then is UDO parsing (which I do not expect to be diffcult for parsing but will take a little time to figure out how Csound handles UDO's), then Macro's, a few expression operators and a couple polymorphic opcode types. I think this is moving along quite well now! I do have to say that I was stuck for a few days on the the if-elseif problem, but the breakthrough today was a good one as the fix for the problem I had locally about a rule not reducing lead to a fix that removed all of the other reduce/reduce problems so that the only issues we have now in terms of the grammar are shift/reduce which is a good place to be I think. So, very excited! Otherwise, I've attached a python script I've been using that parses the output from a csound run and extracts the xml tree representation that is shown after the inital parse pass and after the expression expansion pass (which expands not only expressions but also handles converting if-elseif-else to goto-label's). I've also attached a copy of the xml output of the tree for tests/test18.csd in case one wants to see how the tree gets transformed (this happens in the old parser too but this easier to see in the XML in my opinion). I recommend looking at the xml trees in a web browser like firefox so that one can collapse nodes and see the hierarchy and how if-elseif trees can get parsed but then flattened into goto-label's. Thanks! steven p.s. - The if-elseif stuff will still need more work to handle that rates of conditions (i-time, k-time, etc.) are respected, but that will probably be best in a validation pass.