[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Line-by-line evaluation or all at once?



Michael Kerry wrote:
> My question is mostly conceptual, I think.  I believe that I have a two
> choices on how to implement this:...

Both approaches look OK to me.  I'm not so sure that creating a new
parser is very expensive.  The parse tables are loaded once [static
initializer], not on every instantiation.

> Specific questions:
> 1. How can I perform the short-circuit operation, above?  That is, is there
> a way to (in a caseTxxx() method I presume) return from the tree.apply()
> call?  Is this a (un)reasonable thing to do?

Throw a runtime exception and catch it out of the apply() call.  Not so
ugly, if you name your exception something like ProcessingDone.

e.g.

...
try
{ tree.apply();
} catch(ProcessingDone e) {}
...

> 2. Assuming that I cat my expressions together, I believe all of them have
> to parse before I can apply a transformation/evaluation on the tree,
> correct? 

Yep.

> 3. General comments on my problem?  Am I totally off-base in using a
> compiler-compiler for a problem like this?

You're right on track.

> 4. Does anyone know of a grammar that describes boolean + comparison
> operations?

Look at the Java and SimpleC grammars.  The "expression" part of these
grammars is a good template.

> 5. (unrelated) In Etienne's Ch. 3 example, he mentions that an EOF character
> ends the stream, saying that a CTRL-Z works on Windows 95.  I tried this on
> Windows 2000 (Adv. Server) and it didn't work!  I had to read the expression
> in from a File to get it to work.  Can anyone tell me what the EOF character
> is on Win 2000?!

I don't know, I didn't buy W2K...  Anyone else knows?

Have fun!

Etienne
-- 
----------------------------------------------------------------------
Etienne M. Gagnon, M.Sc.                     e-mail: egagnon@j-meg.com
Author of SableCC:                             http://www.sablecc.org/
and SableVM:                                   http://www.sablevm.org/