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

RE: Ignored alternatives

The method shown in SimpleC example is rather complicated. 
I think the better way would be adding to the SableCC grammar a speciall
operator, which  would tell parser to omit some parts of the alternative
(mainly some tokens, for example punctutation symbols). This approach is
implemented in ANTLR and works fine.

-----Original Message-----
From: Etienne M. Gagnon [mailto:egagnon@j-meg.com]
Sent: Wednesday, December 29, 1999 2:54 PM
To: Pawel Szymanski
Cc: sablecc-list
Subject: Re: Ignored alternatives

Pawel Szymanski wrote:
> Hi,
> I have a question concerning generating simpler AST trees:
> Is there any way to force SableCC to omit some parts alternative (i.e.
> tokens that are obvious) ? There is ignored alternatives mechanism, but it
> seemed not to impact shape of generated AST tree.
> For example:
> I have foolowing production:
> compiler_directive = {temp} pragma  [pragma_name]:identifier l_brack
> [pragma_parameter]:string_value r_brack ;
> I want that only pragma_name and pragma_parameter tokens will be included
> AST.
> Pawel

For an example of how to do this, look at the SimpleC example.  More
precisely, you need to look at two files:
1- the grammar file (simple.txt)
2- the class ModifyAST.java

You'll find some ignored alternatives in the grammar.  In the ModifyAST
class, the AST is modified to use the ignored alternatives.  For more
robustness, Walker.java is used to walk the transformed AST, throwing
exceptions if any "replaced" alternative is found.

If your goal is to build a smaller AST to reduce memory consumption, you
should look at appendix D of the thesis.  It shows how to make use of
hidden alternatives in a customized parser.  BEWARE: This approach is
dangerous, as errors will not be caught at compile time.  Furthermore,
if you get runtime errors, they will be very difficult to debug, as
exceptions will be thrown long after the fact.  You've been warned.

Have fun!

Etienne M. Gagnon, M.Sc.                     e-mail: egagnon@j-meg.com
Author of SableCC:                 http://www.sable.mcgill.ca/sablecc/