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