At the risk of oversimplifying your issue it may be that you can solve your if-then-else parsing with dispatch tables. If this is a new concept then give it a once over. The main link is here. The Author is Mark Jason Dominus++
If what you were really looking for is very open ended parsing of potentially diverse inputs this may not be the answer, but as Robert Morris implied even codeing in Common Lisp is suceptable to Greenspun's 10th rule.
As a consequence the solution may be a partial abstraction of input handling (dispatch tables) in combination with putting boundaries on the scope of the input.