[antlr-interest] Re: native rules?

lgcraymer lgc at mail1.jpl.nasa.gov
Fri Oct 22 02:36:44 PDT 2004



Wolfgang--

Why not

COMMENT
    :
    "--"
    (   ~( '\n' | '-' )
    |   '-' ~'-'
    )*
    ( "--" )?  // NEWLINE or whatever picks up '\n'
    ;

The greedy/non-greedy stuff is much overused.

--Loring


--- In antlr-interest at yahoogroups.com, "whaefelinger"
<ora.et.labora at w...> wrote:
> 
> Hello,
> my language allows a comment to start with "--" and end with ither "-
> -" or with an EOL character ('\n'). So I wrote this two rules:
> 
> protected
> UNTIL_END_OF_COMMENT
>     : ( options {greedy=false;} : . )* ("--"|"\n")
>     ;
> 
> COMMENT
>     : "--" UNTIL_END_OF_COMMENT
>     ; 
> 
> ANTLR warns me then (as  written  in the manual)  about  "nongreedy 
> block may exit incorrectly due to limitations of linear approximate 
> lookahead [..].
> 
> Here's a snippet of what ANTLR generates for rule 
> UNTIL_END_OF_COMMENT
> 
>  _loop53:
>  do {
>    // nongreedy exit test
>    if ( (LA(1)=='\n'||LA(1)=='-') && (true)) 
>       break _loop53;
>    // ...
>  } while (true);
> 
> Hmm, that's almost fine. If I just could rewrite this as 
> 
>  _loop53:
>  do {
>    // nongreedy exit test
>    if ( LA(1)=='\n' || (LA(1)=='-' && LA(2)=='-') ) 
>       break _loop53;
>    // ...
>  } while (true);
> 
> then I would be done (BTW: I do have the feeling that I can attack 
> the problem with a predicate - but haven't found the right solution 
> yet).
> 
> Now I was wondering whether ANTLR would allow me to tweak in my own 
> handcraftet rules? What I'm thinking about is something like:
> 
> protected UNTIL_END_OF_COMMENT ;
> 
> That means: If a  protected  rule with no "body" exists then ANTLR 
> will not generate a method but will rather assume that such a method 
> already exists.
> 
> This seems trivial to implement but does not exist. Therefore I 
> assume that there must be specific reasons for not having this 
> native rule escape. 
> 
> Can someone give me a hint on this??
> 
> 
> Thanks,
> Wolfgang.





 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/antlr-interest/

<*> To unsubscribe from this group, send an email to:
    antlr-interest-unsubscribe at yahoogroups.com

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





More information about the antlr-interest mailing list