On Monday 07 September 2009 16:52:31 Damian Conway wrote:
> 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

I did finally, rewrite the whole thing using the second approach.  This was 
CONSIDERABLY more complex, as I had to navigate a fairly complex parse tree.  
I think I've done something wrong, as I'm still finding bugs...  I'll do some 
more reading, though.

Anyway, this is a nice final design, though.  Because I now have a parse tree, 
I have the potential of serializing that data structure to an external file 
and saving the expense of launching the parser each time my program runs.  
This amounts to creating a JIT compiler!  Should be MUCH more efficient, 
right?

Any recommendations between the various modules for this purpose?  
Data::Dumper, Storable, Serialize?

BTW Damian, RD is a nice piece of work.  It's almost FUN to use.

-- 

Take care and have fun,
Mike Diehl.

Reply via email to