[antlr-interest] Re: Bounded Left Recursion

lgcraymer lgc at mail1.jpl.nasa.gov
Fri Mar 21 15:40:35 PST 2003


Brian--

The template idea is interesting and might be worth pursuing.

Ter--what do you think?

--Loring



--- In antlr-interest at yahoogroups.com, Brian Smith 
<brian-l-smith at u...> wrote:
> I will reply to both of you at once:
> 
> lgcraymer wrote:
> > Brian--
> > 
> > I would suggest taking a look at some of the ANTLR example 
grammars, 
> > particularly the one for the exprAST example and java.g (or 
Monty's C 
> > grammar).  ANTLR handles operator precedence in the same way that 
you 
> 
> Thanks. I already know this standard way of doings things. I was 
just 
> tired of seeing dozens of lines of (essentially) the same rule 
repeated. 
> Since I do not use ANTLR's AST's representation, I also have to to 
> duplicate the embedded code that constructs my AST.
> 
> > --- In antlr-interest at yahoogroups.com, mzukowski at y... wrote:
> >>Very interesting post.  Two main problems:
> >>1. PCCTS hoisted those sem preds.  ANTLR doesn't.  So if you have 
> 
> Ah, I see what is meant now by hoisted semantic predicates. Of 
course 
> this technique cannot work without that
> 
> >>2. It is infinite recursion there, and antlr's analysis won't 
allow 
> >>You're stuck with that one, I think.
> 
> I'm not sure what you meant by this.
> 
> >>I agree it would be nice to have such a compact representation of 
> > expression rules.  I can't think of an easy way to do that in 
antlr
>  > currently, and it's really not too difficult
>  > to do it the standard LL way.
> 
> How about supporting two-level grammars (i.e. grammars with 
> meta-rules/templates)? For example, you could define a rule like 
this:
> 
> // meta-rule
> infix<ops, nextLevel>
>         :: nextLevel (^ops infix<ops, nextLevel>)?
>         ;
> 
> and then use it like this:
> 
> expression:
> 	infix<IMPLIES,
>                infix<(AND|OR|XOR),
>                      infix<(EQUALS|NOT_EQUALS),
>                            infix<(LT|LE|GT|GE),
>                                  infix<(PLUS|MINUS),
>                                        infix<STAR|SLASH,
>                                              prefix<NOT, INTEGER>
>                                       >
>                                 >
>                           >
>                     >
>               >
> 
> prefixExp<ops, nextLevel>: OPS prefixExp<ops, nextLevel>
>                           | nextLevel
>                           ;
> 
> Maybe, you want to convert this grammar to construct AST's for 
binary 
> expressions with a different shape. Then you could do it by changing 
one 
> line in the grammar:
> 
>    infit<ops, nextLevel>
> -	:: nextLevel (^ops infix<ops, nextLevel>)?
> + 	:: nextLevel (^ops nextLevel)*
>          ;
> 
> Just a thought...
> 
> Regards,
> Brian


 

Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/ 



More information about the antlr-interest mailing list