[antlr-interest] Somewhat tested optimizations to java.g - can anybody confirm correctness?

Sander Mägi sander at aqris.com
Fri Oct 5 06:52:01 PDT 2001


replyng again to my own message:

I made a mistake in testing - the castLookahead thing does not work :(

Sander

----- Original Message -----
From: "Sander Mägi" <sander at aqris.com>
To: "ANTLR" <antlr-interest at yahoogroups.com>
Sent: Friday, October 05, 2001 3:38 PM
Subject: [antlr-interest] Somewhat tested optimizations to java.g - can
anybody confirm correctness?


> Hi
>
> I tried to reduce semantic predicates in sample java.g.
>
> I am pretty new to ANTLR and grammars in general.
>
> Maybe somebody more experienced could confirm this is correct - (I have
> already tested it with hundreds of kilobytes of code, but still)
>
> thanks in advance,
> Sander Mägi
>
>
> change 1:
> WAS: (declaration)=> declaration SEMI!
> CHANGE TO: (modifiers typeSpec[false] IDENT)=> declaration SEMI!
> BENEFIT: it also did variable initializers, that sometimes were quite long
> (especially when defining anonymous inners, or ANTLR bitsets :)
>
> change 2:
> WAS:
> unaryExpressionNotPlusMinus
>  : BNOT^ unaryExpression
>  | LNOT^ unaryExpression
>
>  | ( // subrule allows option to shut off warnings
>    options {
>     // "(int" ambig with postfixExpr due to lack of sequence
>     // info in linear approximate LL(k).  It's ok.  Shut up.
>     generateAmbigWarnings=false;
>    }
>   : // If typecast is built in type, must be numeric operand
>    // Also, no reason to backtrack if type keyword like int, float...
>    lpb:LPAREN^ {#lpb.setType(TYPECAST);} builtInTypeSpec[true] RPAREN!
>    unaryExpression
>
>    // Have to backtrack to see if operator follows.  If no operator
>    // follows, it's a typecast.  No semantic checking needed to parse.
>    // if it _looks_ like a cast, it _is_ a cast; else it's a "(expr)"
>   | (LPAREN classTypeSpec[true] RPAREN unaryExpressionNotPlusMinus)=>
>    lp:LPAREN^ {#lp.setType(TYPECAST);} classTypeSpec[true] RPAREN!
>    unaryExpressionNotPlusMinus
>   | postfixExpression
>   )
>  ;
>
> CHANGED TO:
> castLookahead
>  :
>    LPAREN^ (typeSpec[true] LBRACE^ RBRACE^) |
>    ( classTypeSpec[true] RPAREN^ (BNOT^ | LNOT^ |LPAREN^ | IDENT^ | "this"
|
> "super" | "new" | NUM_INT^ | NUM_FLOAT^ | CHAR_LITERAL^ |STRING_LITERAL^ |
> "true" | "false" | "null"))
>  ;
>
> unaryExpressionNotPlusMinus
>  : BNOT^ unaryExpression
>  | LNOT^ unaryExpression
>
>  | ( // subrule allows option to shut off warnings
>    options {
>     // "(int" ambig with postfixExpr due to lack of sequence
>     // info in linear approximate LL(k).  It's ok.  Shut up.
>     generateAmbigWarnings=false;
>    }
>   : // If typecast is built in type, must be numeric operand
>    // Also, no reason to backtrack if type keyword like int, float...
>    lpb:LPAREN^ {#lpb.setType(TYPECAST);} builtInTypeSpec[true] RPAREN!
>    unaryExpression
>
>    // Have to backtrack to see if operator follows.  If no operator
>    // follows, it's a typecast.  No semantic checking needed to parse.
>    // if it _looks_ like a cast, it _is_ a cast; else it's a "(expr)"
>   | (castLookahead)=>
>    lp:LPAREN^ {#lp.setType(TYPECAST);} classTypeSpec[true] RPAREN!
>    unaryExpressionNotPlusMinus
>
>   | postfixExpression
>   )
>  ;
>
>
>
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>
>
>


 

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



More information about the antlr-interest mailing list