Mike Diehl pondered:

> Well, I've continued to think about this and I've got some more questions.
>
> I did read up on the <defer: directive.  I don't think that will help me.  If
> I'm missing something, please let me know.

No, it won't help. The problem is that you want to *parse* every command, but
not *execute* every command (only the ones in the correct branches of the if).


> So, I've come up with two different ways to handle this situation:
>
> 1.  Pass in a boolean areguement to each production, and if that arguement
> is "true" process the action, otherwise, simply return the TEXT of the
> matched expression.
>
> This way, my if statement passes [1] and [0] to the two clauses.  This
> introduces substantial logic into my grammar, though.
>
> 2.  The other way is to build the "parse tree" inside the grammar and
> then "walk" the tree.  This would entail almost completely rewriting my
> grammar actions.  But this way would also, potentially?, allow me to compile
> my language and forgo the parser step alltogether.
>
> Which method would you recommend?

Definitely, the second approach. There's a good reason that people
usually separate compilation and execution: namely that mixing them is
both vastly more complex and considerably more error-prone.

Damian

Reply via email to