<html>
<head>
<style><!--
  body {background-color:#ffffff;}
  .file {border:1px solid #eeeeee;margin-top:1em;margin-bottom:1em;}
  .pathname {font-family:monospace; float:right;}
  .fileheader {margin-bottom:.5em;}
  .diff {margin:0;}
  .tasklist {padding:4px;border:1px dashed #000000;margin-top:1em;}
  .tasklist ul {margin-top:0;margin-bottom:0;}
  tr.alt {background-color:#eeeeee}
  #added {background-color:#ddffdd;}
  #addedchars {background-color:#99ff99;font-weight:bolder;}
  tr.alt #added {background-color:#ccf7cc;}
  #removed {background-color:#ffdddd;}
  #removedchars {background-color:#ff9999;font-weight:bolder;}
  tr.alt #removed {background-color:#f7cccc;}
  #copied {background-color:#ccccff;}
  tr.alt #copied {background-color:#bbbbf7;}
  #info {color:#888888;}
  #context {background-color:#eeeeee;}
  td {padding-left:.3em;padding-right:.3em;}
  tr.head {border-bottom-width:1px;border-bottom-style:solid;}
  tr.head td {padding:0;padding-top:.2em;}
  .task {background-color:#ffff00;}
  .comment {white-space:-moz-pre-wrap;white-space:-pre-wrap;white-space:-o-pre-wrap;white-space:pre-wrap;word-wrap:break-word;padding:4px;border:1px dashed #000000;background-color:#ffffdd}
  .error {color:red;}
  hr {border-width:0px;height:2px;background:black;}
--></style>
</head>
<body>
<table cellspacing="0" cellpadding="0" border="0" rules="cols">
<tr class="head"><td colspan="5">Commit in <b><tt>metaas/trunk/src/main/antlr/org/asdt/core/internal/antlr</tt></b></td></tr>
<tr><td><tt><a href="#file1">AS3.g3</a></tt> </td><td></td><td align="right" id="added">+116</td><td align="right" id="removed">-118</td><td nowrap="nowrap" align="center">373 -&gt; 374</td></tr>
</table>
<div class="tasklist"><ul>
<li><a href="#task1">TODO: mods?
</a></li>
<li><a href="#task2">TODO: mods?
</a></li>
</ul></div>
<pre class="comment">
Cleanups to resolve ANTLR-reported ambiguities,
and switch back to tree-operaters (I got the tree rewrite stuff wrong)
</pre>
<hr /><a name="file1" /><div class="file">
<span class="pathname">metaas/trunk/src/main/antlr/org/asdt/core/internal/antlr</span><br />
<div class="fileheader"><big><b>AS3.g3</b></big> <small id="info">373 -&gt; 374</small></div>
<pre class="diff"><small id="info">--- trunk/src/main/antlr/org/asdt/core/internal/antlr/AS3.g3        2007-01-30 23:36:39 UTC (rev 373)
+++ trunk/src/main/antlr/org/asdt/core/internal/antlr/AS3.g3        2007-01-31 00:05:43 UTC (rev 374)
@@ -61,7 +61,6 @@
</small></pre><pre class="diff" id="context">         FOR_EACH;
         SWITCH_STATEMENT_LIST;
         IDENTIFIER;
</pre><pre class="diff" id="removed">-        GET; SET; IS; DYNAMIC; USE;
</pre><pre class="diff" id="context">         DEFAULT_XML_NAMESPACE;
 }
 
</pre><pre class="diff"><small id="info">@@ -121,6 +120,14 @@
</small></pre><pre class="diff" id="context">         private LinkedListTree parseRegexpLiteral(LinkedListToken startMarker) throws RecognitionException {
                 return RegexSimpleHelper.parseRegexpLiteral(startMarker, lexer, cs, (LinkedListTokenStream)input);
         }
</pre><pre class="diff" id="added">+
+        private boolean virtualSemi() {
+                LinkedListToken tok = ((LinkedListToken)input.LT(1)).getPrev();
+                while (tok.getType() == WS) {
+                        tok = tok.getPrev();
+                }
+                return tok.getType() == NL;
+        }
</pre><pre class="diff" id="context"> }
 
 
</pre><pre class="diff"><small id="info">@@ -188,15 +195,16 @@
</small></pre><pre class="diff" id="context">         
 
 semi
</pre><pre class="diff" id="removed">-        :        ((SEMI)=&gt;SEMI!)?
</pre><pre class="diff" id="added">+        :        SEMI
+//        |        { virtualSemi() }?
</pre><pre class="diff" id="context">                 
 
 classDefinition[LinkedListTree annos, LinkedListTree mods]
</pre><pre class="diff" id="removed">-        :        CLASS <span id="removedchars">IDENT</span>
</pre><pre class="diff" id="added">+        :        CLASS <span id="addedchars">ident</span>
</pre><pre class="diff" id="context">                 classExtendsClause
                 implementsClause
                 typeBlock
</pre><pre class="diff" id="removed">-                -&gt; ^(CLASS_DEF {$mods} CLASS <span id="removedchars">IDENT</span> classExtendsClause implementsClause typeBlock)
</pre><pre class="diff" id="added">+                -&gt; ^(CLASS_DEF {$mods} CLASS <span id="addedchars">ident</span> classExtendsClause implementsClause typeBlock)
</pre><pre class="diff" id="context">         
 
 as2ClassDefinition[LinkedListTree annos, LinkedListTree mods]
</pre><pre class="diff"><small id="info">@@ -204,21 +212,21 @@
</small></pre><pre class="diff" id="context">                 classExtendsClause
                 implementsClause
                 typeBlock
</pre><pre class="diff" id="removed">-                -&gt; ^(CLASS_DEF {$mods} CLASS <span id="removedchars">IDENT</span> classExtendsClause implementsClause typeBlock)
</pre><pre class="diff" id="added">+                -&gt; ^(CLASS_DEF {$mods} CLASS <span id="addedchars">identifier</span> classExtendsClause implementsClause typeBlock)
</pre><pre class="diff" id="context">         
 
 interfaceDefinition[LinkedListTree annos, Tree mods]
</pre><pre class="diff" id="removed">-        :        INTERFACE <span id="removedchars">IDENT</span>
</pre><pre class="diff" id="added">+        :        INTERFACE <span id="addedchars">ident</span>
</pre><pre class="diff" id="context">                 interfaceExtendsClause
                 typeBlock
</pre><pre class="diff" id="removed">-                -&gt; ^(INTERFACE_DEF INTERFACE <span id="removedchars">IDENT</span> interfaceExtendsClause typeBlock) // TODO: mods?
</pre><pre class="diff" id="added"><a name="task1" />+                -&gt; ^(INTERFACE_DEF INTERFACE <span id="addedchars">ident</span> interfaceExtendsClause typeBlock) // <span class="task">TODO</span>: mods?
</pre><pre class="diff" id="context">         
 
 as2InterfaceDefinition[LinkedListTree annos, Tree mods]
         :        INTERFACE identifier
                 interfaceExtendsClause
                 typeBlock
</pre><pre class="diff" id="removed">-                -&gt; ^(INTERFACE_DEF INTERFACE <span id="removedchars">IDENT</span> interfaceExtendsClause typeBlock) // TODO: mods?
</pre><pre class="diff" id="added"><a name="task2" />+                -&gt; ^(INTERFACE_DEF INTERFACE <span id="addedchars">identifier</span> interfaceExtendsClause typeBlock) // <span class="task">TODO</span>: mods?
</pre><pre class="diff" id="context">         
 
 classExtendsClause
</pre><pre class="diff"><small id="info">@@ -238,16 +246,19 @@
</small></pre><pre class="diff" id="context">         
 
 typeBlockEntry
</pre><pre class="diff" id="removed">-        :        annos=annotations! m=modifiers!
-                (        variableDefinition[$annos.tree,$m.tree]
-                |        methodDefinition[$annos.tree,$m.tree]
-                )
-        |        SEMI
</pre><pre class="diff" id="added">+        :        /*statement
+        |        (LBRACK)=&gt;*/ annotatableDirective
</pre><pre class="diff" id="context">         |        importDefinition
         |        as2IncludeDirective
 //        |        includeDirective  This is in 'annos' instead
         
 
</pre><pre class="diff" id="added">+annotatableDirective
+        :        a=annotations! m=modifiers!
+                (        variableDefinition[$a.tree,$m.tree]
+                |        methodDefinition[$a.tree,$m.tree]
+                )
+        
</pre><pre class="diff" id="context"> 
 as2IncludeDirective
         :        INCLUDE_DIRECTIVE
</pre><pre class="diff"><small id="info">@@ -262,12 +273,12 @@
</small></pre><pre class="diff" id="context"> 
 
 methodDefinition[LinkedListTree annos, Tree mods]
</pre><pre class="diff" id="removed">-        :        functionDecl <span id="removedchars">IDENT</span>
</pre><pre class="diff" id="added">+        :        functionDecl <span id="addedchars">ident</span>
</pre><pre class="diff" id="context">                 parameterDeclarationList
                 typeExpression?
</pre><pre class="diff" id="removed">-                (block)?
</pre><pre class="diff" id="added">+                (block|semi)
</pre><pre class="diff" id="context">                 -&gt; ^(METHOD_DEF {$annos} {$mods}
</pre><pre class="diff" id="removed">-                                functionDecl <span id="removedchars">IDENT</span>
</pre><pre class="diff" id="added">+                                functionDecl <span id="addedchars">ident</span>
</pre><pre class="diff" id="context">                                 parameterDeclarationList
                                 typeExpression?
                                 block?)
</pre><pre class="diff"><small id="info">@@ -278,40 +289,18 @@
</small></pre><pre class="diff" id="context">         
 
 accessorRole
</pre><pre class="diff" id="removed">-        :        getKeyword | setKeyword
</pre><pre class="diff" id="added">+        :        GET | SET
</pre><pre class="diff" id="context">         
 
</pre><pre class="diff" id="removed">-getKeyword
-        :        {input.LT(1).getText().equals("get")}? i=IDENT
-                -&gt; GET[$i]
-        
-
-setKeyword
-        :        {input.LT(1).getText().equals("set")}? i=IDENT
-                -&gt; SET[$i]
-        
-
</pre><pre class="diff" id="context"> namespaceDefinition[LinkedListTree annos, Tree mods]
</pre><pre class="diff" id="removed">-        :        namespaceKeyword IDENT
-                -&gt; ^(NAMESPACE_DEF {$annos} {$mods} namespaceKeyword IDENT)
</pre><pre class="diff" id="added">+        :        NAMESPACE ident
+                -&gt; ^(NAMESPACE_DEF {$annos} {$mods} NAMESPACE ident)
</pre><pre class="diff" id="context">         
</pre><pre class="diff" id="removed">-namespaceKeyword
-        :        {input.LT(1).getText().equals("namespace")}? IDENT
-        
</pre><pre class="diff" id="context"> 
 useNamespaceDirective
</pre><pre class="diff" id="removed">-        :        useKeyword namespaceKeyword IDENT semi
</pre><pre class="diff" id="added">+        :        USE NAMESPACE ident semi
</pre><pre class="diff" id="context">         
 
</pre><pre class="diff" id="removed">-useKeyword
-        :        {input.LT(1).getText().equals("use")}? i=IDENT
-                -&gt; USE[$i]
-        
-
-xmlKeyword
-        :        {input.LT(1).getText().equals("xml")}? IDENT
-        
-
</pre><pre class="diff" id="context"> variableDefinition[LinkedListTree annos, Tree mods]
 scope InOperator;
 @init {
</pre><pre class="diff"><small id="info">@@ -319,6 +308,7 @@
</small></pre><pre class="diff" id="context"> }
         :        decl=varOrConst variableDeclarator
                 (COMMA variableDeclarator)*
</pre><pre class="diff" id="added">+                semi
</pre><pre class="diff" id="context">                 -&gt; ^(VAR_DEF {$annos} {$mods} $decl variableDeclarator+)
         
 
</pre><pre class="diff"><small id="info">@@ -327,7 +317,7 @@
</small></pre><pre class="diff" id="context">         
 
 variableDeclarator
</pre><pre class="diff" id="removed">-        :        <span id="removedchars">IDENT</span>^ typeExpression? variableInitializer?
</pre><pre class="diff" id="added">+        :        <span id="addedchars">ident</span>^ typeExpression? variableInitializer?
</pre><pre class="diff" id="context">         
 declaration
         :        varOrConst^ variableDeclarator
</pre><pre class="diff"><small id="info">@@ -363,8 +353,8 @@
</small></pre><pre class="diff" id="context">         
 
 basicParameterDeclaration
</pre><pre class="diff" id="removed">-        :        CONST? IDENT typeExpression? parameterDefault?
-                -&gt; ^(PARAM CONST? IDENT typeExpression? parameterDefault?)
</pre><pre class="diff" id="added">+        :        CONST? ident typeExpression? parameterDefault?
+                -&gt; ^(PARAM CONST? ident typeExpression? parameterDefault?)
</pre><pre class="diff" id="context">         
 
 parameterDefault
</pre><pre class="diff"><small id="info">@@ -377,20 +367,30 @@
</small></pre><pre class="diff" id="context">         
 
 parameterRestDeclaration
</pre><pre class="diff" id="removed">-        :        REST CONST? IDENT
-                -&gt; ^(PARAM REST CONST? IDENT)
</pre><pre class="diff" id="added">+        :        REST CONST? ident
+                -&gt; ^(PARAM REST CONST? ident)
</pre><pre class="diff" id="context">         
 block
</pre><pre class="diff" id="removed">-        :        LCURLY (statement)* RCURLY
-                -&gt; ^(BLOCK statement*)
</pre><pre class="diff" id="added">+        :        LCURLY blockEntry* RCURLY
+                -&gt; ^(BLOCK blockEntry*)
</pre><pre class="diff" id="context">         
 
</pre><pre class="diff" id="added">+blockEntry
+        :
+/*options { k=*; }
+        :        a=annotations! m=modifiers!
+                (        variableDefinition[$a.tree,$m.tree]
+                |        methodDefinition[$a.tree,$m.tree]
+                )
+        |*/        statement
+        
+
</pre><pre class="diff" id="context"> condition
         :        LPAREN! expression RPAREN!
         
 
 statement
</pre><pre class="diff" id="removed">-        :        {input.LA(1)==LCURLY}?(block)
</pre><pre class="diff" id="added">+        :        (LCURLY)=&gt; block
</pre><pre class="diff" id="context">         |        declarationStatement
         |        expressionStatement
         |        ifStatement
</pre><pre class="diff"><small id="info">@@ -466,7 +466,7 @@
</small></pre><pre class="diff" id="context">         
 
 catchBlock
</pre><pre class="diff" id="removed">-        :        'catch' LPAREN! <span id="removedchars">IDENT</span> typeExpression? RPAREN!
</pre><pre class="diff" id="added">+        :        'catch' LPAREN! <span id="addedchars">ident</span> typeExpression? RPAREN!
</pre><pre class="diff" id="context">                 block
         
 
</pre><pre class="diff"><small id="info">@@ -526,7 +526,7 @@
</small></pre><pre class="diff" id="context"> }
         :        FOR^
                 LPAREN!
</pre><pre class="diff" id="removed">-                (        ((declaration | IDENT) IN)=&gt;forInClause
</pre><pre class="diff" id="added">+                (        (forInClauseDecl IN)=&gt;forInClause
</pre><pre class="diff" id="context">                 |        traditionalForClause
                 )
                 RPAREN!
</pre><pre class="diff"><small id="info">@@ -547,7 +547,7 @@
</small></pre><pre class="diff" id="context"> @init {
         $InOperator::allowed = false;
 }
</pre><pre class="diff" id="removed">-        :        declaration | <span id="removedchars">IDENT</span>
</pre><pre class="diff" id="added">+        :        declaration | <span id="addedchars">ident</span>
</pre><pre class="diff" id="context">         
 
 
</pre><pre class="diff"><small id="info">@@ -589,7 +589,7 @@
</small></pre><pre class="diff" id="context"> 
 
 defaultXMLNamespaceStatement
</pre><pre class="diff" id="removed">-        :        DEFAULT xmlKeyword namespaceKeyword ASSIGN expression semi
</pre><pre class="diff" id="added">+        :        DEFAULT XML NAMESPACE ASSIGN expression semi
</pre><pre class="diff" id="context">                 -&gt; ^(DEFAULT_XML_NAMESPACE expression)
         
 
</pre><pre class="diff"><small id="info">@@ -609,8 +609,7 @@
</small></pre><pre class="diff" id="context">         
 
 qualifiedIdent
</pre><pre class="diff" id="removed">-        :        (namespaceName-&gt;namespaceName)
-                (DBL_COLON IDENT -&gt; ^(DBL_COLON $qualifiedIdent IDENT))?
</pre><pre class="diff" id="added">+        :        (namespaceName DBL_COLON)? ident 
</pre><pre class="diff" id="context">         
 
 namespaceName
</pre><pre class="diff"><small id="info">@@ -625,13 +624,13 @@
</small></pre><pre class="diff" id="context">         
 
 identifierStar
</pre><pre class="diff" id="removed">-        :        IDENT
</pre><pre class="diff" id="added">+        :        ident
</pre><pre class="diff" id="context">                 (        options{greedy=true;}
</pre><pre class="diff" id="removed">-                :        DOT <span id="removedchars">IDENT</span>
</pre><pre class="diff" id="added">+                :        DOT <span id="addedchars">ident</span>
</pre><pre class="diff" id="context">                 )* 
                 (        DOT STAR
                 )?
</pre><pre class="diff" id="removed">-                -&gt; ^(IDENTIFIER <span id="removedchars">IDENT</span>+ STAR?)
</pre><pre class="diff" id="added">+                -&gt; ^(IDENTIFIER <span id="addedchars">ident</span>+ STAR?)
</pre><pre class="diff" id="context">         
 
 annotations
</pre><pre class="diff"><small id="info">@@ -643,10 +642,10 @@
</small></pre><pre class="diff" id="context"> 
 annotation
         :        LBRACK
</pre><pre class="diff" id="removed">-                IDENT
</pre><pre class="diff" id="added">+                ident
</pre><pre class="diff" id="context">                 annotationParamList?
                 RBRACK
</pre><pre class="diff" id="removed">-                -&gt; ^(ANNOTATION <span id="removedchars">IDENT</span> annotationParamList?)
</pre><pre class="diff" id="added">+                -&gt; ^(ANNOTATION <span id="addedchars">ident</span> annotationParamList?)
</pre><pre class="diff" id="context">         
 
 annotationParamList
</pre><pre class="diff"><small id="info">@@ -672,9 +671,9 @@
</small></pre><pre class="diff" id="context"> 
 annotationParam
         :
</pre><pre class="diff" id="removed">-                IDENT ASSIGN constant -&gt; ^(ASSIGN IDENT constant)
</pre><pre class="diff" id="added">+                ident ASSIGN constant -&gt; ^(ASSIGN ident constant)
</pre><pre class="diff" id="context">         |        constant -&gt; constant
</pre><pre class="diff" id="removed">-        |        IDENT -&gt; IDENT
</pre><pre class="diff" id="added">+        |        ident -&gt; ident
</pre><pre class="diff" id="context">         
 
 modifiers
</pre><pre class="diff"><small id="info">@@ -689,26 +688,19 @@
</small></pre><pre class="diff" id="context">         |        'enumerable'
         |        'explicit'
         |        'override'
</pre><pre class="diff" id="removed">-        |        dynamicKeyword
</pre><pre class="diff" id="added">+        |        DYNAMIC
</pre><pre class="diff" id="context">         |        'intrinsic'
         
 
</pre><pre class="diff" id="removed">-dynamicKeyword
-        :        {input.LT(1).getText().equals("dynamic")}? i=IDENT
-                -&gt; DYNAMIC[$i]
-        
-
</pre><pre class="diff" id="context"> arguments
 scope InOperator;
 @init {
         $InOperator::allowed = true;
 }
</pre><pre class="diff" id="removed">-        :        LPAREN
-                (        expressionList
-                |        /*nothing*/
-                )
-                RPAREN
-                -&gt; ^(ELIST $arguments)
</pre><pre class="diff" id="added">+        :        LPAREN expressionList RPAREN
+                -&gt; ^(ELIST expressionList)
+        |        LPAREN RPAREN
+                -&gt; ELIST
</pre><pre class="diff" id="context">         
 // This is an initializer used to set up an array.
 arrayLiteral
</pre><pre class="diff"><small id="info">@@ -753,7 +745,7 @@
</small></pre><pre class="diff" id="context">         
         
 fieldName
</pre><pre class="diff" id="removed">-        :        IDENT
</pre><pre class="diff" id="added">+        :        ident
</pre><pre class="diff" id="context">         |        number
         
 
</pre><pre class="diff"><small id="info">@@ -808,16 +800,15 @@
</small></pre><pre class="diff" id="context">                 )?
         
 conditionalSubExpression
</pre><pre class="diff" id="removed">-        :        l=assignmentExpression COLON r=assignmentExpression
-                -&gt; ^(COLON $l $r)
</pre><pre class="diff" id="added">+        :        assignmentExpression COLON^ assignmentExpression
</pre><pre class="diff" id="context">         
 
 // TODO: should 'and'/'or' have same precidence as '&amp;&amp;'/'||' ?
 
 // logical or (||)  (level 11)
 logicalOrExpression
</pre><pre class="diff" id="removed">-        :        (logicalAndExpression -&gt; logicalAndExpression)
-                (logicalOrOperator logicalAndExpression -&gt; ^(logicalOrOperator $logicalOrExpression logicalAndExpression))*
</pre><pre class="diff" id="added">+        :        logicalAndExpression
+                (logicalOrOperator^ logicalAndExpression)*
</pre><pre class="diff" id="context">         
 
 logicalOrOperator
</pre><pre class="diff"><small id="info">@@ -826,8 +817,8 @@
</small></pre><pre class="diff" id="context"> 
 // logical and (&amp;&amp;)  (level 10)
 logicalAndExpression
</pre><pre class="diff" id="removed">-        :        (bitwiseOrExpression -&gt; bitwiseOrExpression)
-                (logicalAndOperator rhs=bitwiseOrExpression -&gt; ^(logicalAndOperator $logicalAndExpression $rhs))*
</pre><pre class="diff" id="added">+        :        bitwiseOrExpression
+                (logicalAndOperator^ bitwiseOrExpression)*
</pre><pre class="diff" id="context">         
 
 logicalAndOperator
</pre><pre class="diff"><small id="info">@@ -836,28 +827,27 @@
</small></pre><pre class="diff" id="context"> 
 // bitwise or non-short-circuiting or (|)  (level 9)
 bitwiseOrExpression
</pre><pre class="diff" id="removed">-        :        (bitwiseXorExpression -&gt; bitwiseXorExpression)
-                (BOR bitwiseXorExpression -&gt; ^(BOR $bitwiseOrExpression bitwiseXorExpression))*
</pre><pre class="diff" id="added">+        :        bitwiseXorExpression
+                (BOR^ bitwiseXorExpression)*
</pre><pre class="diff" id="context">         
 
 // exclusive or (^)  (level 8)
 bitwiseXorExpression
</pre><pre class="diff" id="removed">-        :        (bitwiseAndExpression -&gt; bitwiseAndExpression)
-                (BXOR bitwiseAndExpression -&gt; ^(BXOR $bitwiseXorExpression bitwiseAndExpression))*
</pre><pre class="diff" id="added">+        :        bitwiseAndExpression
+                (BXOR^ bitwiseAndExpression)*
</pre><pre class="diff" id="context">         
 
 // bitwise or non-short-circuiting and (&amp;)  (level 7)
 bitwiseAndExpression
</pre><pre class="diff" id="removed">-        :        (equalityExpression -&gt; equalityExpression)
-                (BAND equalityExpression -&gt; ^(BAND $bitwiseAndExpression equalityExpression))*
</pre><pre class="diff" id="added">+        :        equalityExpression
+                (BAND^ equalityExpression)*
</pre><pre class="diff" id="context">         
 
 // equality/inequality (==/!=) (level 6)
 equalityExpression
</pre><pre class="diff" id="removed">-        :        (relationalExpression -&gt; relationalExpression)
-        (        equalityOperator
-                rhs=relationalExpression
-                -&gt; ^(equalityOperator $equalityExpression $rhs)
</pre><pre class="diff" id="added">+        :        relationalExpression
+        (        equalityOperator^
+                relationalExpression
</pre><pre class="diff" id="context">         )*
         
 
</pre><pre class="diff"><small id="info">@@ -867,34 +857,19 @@
</small></pre><pre class="diff" id="context">         
 // boolean relational expressions (level 5)
 relationalExpression
</pre><pre class="diff" id="removed">-        :        (        shiftExpression
-                        -&gt; shiftExpression
-                )
-                (        (relationalOperator)=&gt; relationalOperator shiftExpression
-                        -&gt; ^(relationalOperator $relationalExpression
-                                                shiftExpression)
-                )*
</pre><pre class="diff" id="added">+        :        shiftExpression
+                ((relationalOperator)=&gt; relationalOperator^ shiftExpression)*
</pre><pre class="diff" id="context">         
 
 relationalOperator
         :        {$InOperator::allowed}? IN
</pre><pre class="diff" id="removed">-        |        LT | GT | LE | GE | isKeyword | asKeyword | 'instanceof'
</pre><pre class="diff" id="added">+        |        LT | GT | LE | GE | IS | AS | 'instanceof'
</pre><pre class="diff" id="context">         
 
</pre><pre class="diff" id="removed">-isKeyword
-        :        {input.LT(1).getText().equals("is")}? i=IDENT
-                -&gt; IS[$i]
-        
-
-asKeyword
-        :        {input.LT(1).getText().equals("as")}? i=IDENT
-                -&gt; IS[$i]
-        
-
</pre><pre class="diff" id="context"> // bit shift expressions (level 4)
 shiftExpression
</pre><pre class="diff" id="removed">-        :        (additiveExpression -&gt; additiveExpression)
-                (shiftOperator additiveExpression -&gt; ^(shiftOperator $shiftExpression additiveExpression))*
</pre><pre class="diff" id="added">+        :        additiveExpression
+                (shiftOperator^ additiveExpression)*
</pre><pre class="diff" id="context">         
 
 shiftOperator
</pre><pre class="diff"><small id="info">@@ -903,8 +878,8 @@
</small></pre><pre class="diff" id="context"> 
 // binary addition/subtraction (level 3)
 additiveExpression
</pre><pre class="diff" id="removed">-        :        (multiplicativeExpression -&gt; multiplicativeExpression)
-                ((additiveOperator)=&gt; additiveOperator multiplicativeExpression -&gt; ^(additiveOperator $additiveExpression multiplicativeExpression))*
</pre><pre class="diff" id="added">+        :        multiplicativeExpression
+                ((additiveOperator)=&gt; additiveOperator^ multiplicativeExpression )*
</pre><pre class="diff" id="context">         
 
 additiveOperator
</pre><pre class="diff"><small id="info">@@ -913,8 +888,10 @@
</small></pre><pre class="diff" id="context"> 
 // multiplication/division/modulo (level 2)
 multiplicativeExpression
</pre><pre class="diff" id="removed">-        :        (unaryExpression -&gt; unaryExpression)
-                ((multiplicativeOperator)=&gt; multiplicativeOperator unaryExpression -&gt; ^(multiplicativeOperator $multiplicativeExpression unaryExpression))*
</pre><pre class="diff" id="added">+        :        unaryExpression
+                (        (multiplicativeOperator)=&gt;multiplicativeOperator^
+                        unaryExpression
+                )*
</pre><pre class="diff" id="context">         
 
 multiplicativeOperator
</pre><pre class="diff"><small id="info">@@ -1073,11 +1050,24 @@
</small></pre><pre class="diff" id="context"> // we can dissallow named functions in expressions?
 
 functionDefinition
</pre><pre class="diff" id="removed">-        :        FUNCTION IDENT? parameterDeclarationList typeExpression? block
-                -&gt; ^(FUNC_DEF IDENT? parameterDeclarationList typeExpression? block)
</pre><pre class="diff" id="added">+        :        FUNCTION parameterDeclarationList typeExpression? block
+                -&gt; ^(FUNC_DEF parameterDeclarationList typeExpression? block)
</pre><pre class="diff" id="context">         
 
 
</pre><pre class="diff" id="added">+ident
+        :        IDENT
+        |        i=USE -&gt; IDENT[$i]
+        |        i=XML -&gt; IDENT[$i]
+        |        i=DYNAMIC -&gt; IDENT[$i]
+        |        i=NAMESPACE -&gt; IDENT[$i]
+        |        i=IS -&gt; IDENT[$i]
+        |        i=AS -&gt; IDENT[$i]
+        |        i=GET -&gt; IDENT[$i]
+        |        i=SET -&gt; IDENT[$i]
+        
+
+
</pre><pre class="diff" id="context"> PACKAGE                :        'package';
 PUBLIC                :        'public';
 PRIVATE                :        'private';
</pre><pre class="diff"><small id="info">@@ -1102,6 +1092,14 @@
</small></pre><pre class="diff" id="context"> INTERFACE        :        'interface';
 TRUE                :        'true';
 FALSE                :        'false';
</pre><pre class="diff" id="added">+DYNAMIC                :        'dynamic';
+USE                :        'use';
+XML                :        'xml';
+NAMESPACE        :        'namespace';
+IS                :        'is';
+AS                :        'as';
+GET                :        'get';
+SET                :        'set';
</pre><pre class="diff" id="context"> 
 // OPERATORS
 QUESTION                :        '?'        
</pre></div>
<center><small><a href="http://www.badgers-in-foil.co.uk/projects/cvsspam/" title="commit -&gt; email">CVSspam</a> 0.2.12</small></center>
</body></html>