Re: Deferred interpretation?
[email protected] (Damian Conway) Tue, 8 Sep 2009 08:52:31 +1000
| Newsgroups | perl.recdescent |
|---|---|
| Message-ID | <[email protected]> |
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. =A0I don't think that will help m= e. =A0If > I'm missing something, please let me know. No, it won't help. The problem is that you want to *parse* every command, b= ut not *execute* every command (only the ones in the correct branches of the i= f). > So, I've come up with two different ways to handle this situation: > > 1. =A0Pass in a boolean areguement to each production, and if that arguem= ent > 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. =A0This > introduces substantial logic into my grammar, though. > > 2. =A0The other way is to build the "parse tree" inside the grammar and > then "walk" the tree. =A0This would entail almost completely rewriting my > grammar actions. =A0But this way would also, potentially?, allow me to co= mpile > 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