<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 -> 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 -> 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)=>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">-                -> ^(CLASS_DEF {$mods} CLASS <span id="removedchars">IDENT</span> classExtendsClause implementsClause typeBlock)
</pre><pre class="diff" id="added">+                -> ^(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">-                -> ^(CLASS_DEF {$mods} CLASS <span id="removedchars">IDENT</span> classExtendsClause implementsClause typeBlock)
</pre><pre class="diff" id="added">+                -> ^(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">-                -> ^(INTERFACE_DEF INTERFACE <span id="removedchars">IDENT</span> interfaceExtendsClause typeBlock) // TODO: mods?
</pre><pre class="diff" id="added"><a name="task1" />+                -> ^(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">-                -> ^(INTERFACE_DEF INTERFACE <span id="removedchars">IDENT</span> interfaceExtendsClause typeBlock) // TODO: mods?
</pre><pre class="diff" id="added"><a name="task2" />+                -> ^(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)=>*/ 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">                 -> ^(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
-                -> GET[$i]
-       
-
-setKeyword
-        :        {input.LT(1).getText().equals("set")}? i=IDENT
-                -> SET[$i]
-       
-
</pre><pre class="diff" id="context"> namespaceDefinition[LinkedListTree annos, Tree mods]
</pre><pre class="diff" id="removed">-        :        namespaceKeyword IDENT
-                -> ^(NAMESPACE_DEF {$annos} {$mods} namespaceKeyword IDENT)
</pre><pre class="diff" id="added">+        :        NAMESPACE ident
+                -> ^(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
-                -> 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">                 -> ^(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?
-                -> ^(PARAM CONST? IDENT typeExpression? parameterDefault?)
</pre><pre class="diff" id="added">+        :        CONST? ident typeExpression? parameterDefault?
+                -> ^(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
-                -> ^(PARAM REST CONST? IDENT)
</pre><pre class="diff" id="added">+        :        REST CONST? ident
+                -> ^(PARAM REST CONST? ident)
</pre><pre class="diff" id="context">        
block
</pre><pre class="diff" id="removed">-        :        LCURLY (statement)* RCURLY
-                -> ^(BLOCK statement*)
</pre><pre class="diff" id="added">+        :        LCURLY blockEntry* RCURLY
+                -> ^(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)=> 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)=>forInClause
</pre><pre class="diff" id="added">+                (        (forInClauseDecl IN)=>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">                 -> ^(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->namespaceName)
-                (DBL_COLON IDENT -> ^(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">-                -> ^(IDENTIFIER <span id="removedchars">IDENT</span>+ STAR?)
</pre><pre class="diff" id="added">+                -> ^(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">-                -> ^(ANNOTATION <span id="removedchars">IDENT</span> annotationParamList?)
</pre><pre class="diff" id="added">+                -> ^(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 -> ^(ASSIGN IDENT constant)
</pre><pre class="diff" id="added">+                ident ASSIGN constant -> ^(ASSIGN ident constant)
</pre><pre class="diff" id="context">         |        constant -> constant
</pre><pre class="diff" id="removed">-        |        IDENT -> IDENT
</pre><pre class="diff" id="added">+        |        ident -> 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
-                -> 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
-                -> ^(ELIST $arguments)
</pre><pre class="diff" id="added">+        :        LPAREN expressionList RPAREN
+                -> ^(ELIST expressionList)
+        |        LPAREN RPAREN
+                -> 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
-                -> ^(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 '&&'/'||' ?
// logical or (||) (level 11)
logicalOrExpression
</pre><pre class="diff" id="removed">-        :        (logicalAndExpression -> logicalAndExpression)
-                (logicalOrOperator logicalAndExpression -> ^(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 (&&) (level 10)
logicalAndExpression
</pre><pre class="diff" id="removed">-        :        (bitwiseOrExpression -> bitwiseOrExpression)
-                (logicalAndOperator rhs=bitwiseOrExpression -> ^(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 -> bitwiseXorExpression)
-                (BOR bitwiseXorExpression -> ^(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 -> bitwiseAndExpression)
-                (BXOR bitwiseAndExpression -> ^(BXOR $bitwiseXorExpression bitwiseAndExpression))*
</pre><pre class="diff" id="added">+        :        bitwiseAndExpression
+                (BXOR^ bitwiseAndExpression)*
</pre><pre class="diff" id="context">        
// bitwise or non-short-circuiting and (&) (level 7)
bitwiseAndExpression
</pre><pre class="diff" id="removed">-        :        (equalityExpression -> equalityExpression)
-                (BAND equalityExpression -> ^(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 -> relationalExpression)
-        (        equalityOperator
-                rhs=relationalExpression
-                -> ^(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
-                        -> shiftExpression
-                )
-                (        (relationalOperator)=> relationalOperator shiftExpression
-                        -> ^(relationalOperator $relationalExpression
-                         shiftExpression)
-                )*
</pre><pre class="diff" id="added">+        :        shiftExpression
+                ((relationalOperator)=> 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
-                -> IS[$i]
-       
-
-asKeyword
-        :        {input.LT(1).getText().equals("as")}? i=IDENT
-                -> IS[$i]
-       
-
</pre><pre class="diff" id="context"> // bit shift expressions (level 4)
shiftExpression
</pre><pre class="diff" id="removed">-        :        (additiveExpression -> additiveExpression)
-                (shiftOperator additiveExpression -> ^(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 -> multiplicativeExpression)
-                ((additiveOperator)=> additiveOperator multiplicativeExpression -> ^(additiveOperator $additiveExpression multiplicativeExpression))*
</pre><pre class="diff" id="added">+        :        multiplicativeExpression
+                ((additiveOperator)=> 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 -> unaryExpression)
-                ((multiplicativeOperator)=> multiplicativeOperator unaryExpression -> ^(multiplicativeOperator $multiplicativeExpression unaryExpression))*
</pre><pre class="diff" id="added">+        :        unaryExpression
+                (        (multiplicativeOperator)=>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
-                -> ^(FUNC_DEF IDENT? parameterDeclarationList typeExpression? block)
</pre><pre class="diff" id="added">+        :        FUNCTION parameterDeclarationList typeExpression? block
+                -> ^(FUNC_DEF parameterDeclarationList typeExpression? block)
</pre><pre class="diff" id="context">        
</pre><pre class="diff" id="added">+ident
+        :        IDENT
+        |        i=USE -> IDENT[$i]
+        |        i=XML -> IDENT[$i]
+        |        i=DYNAMIC -> IDENT[$i]
+        |        i=NAMESPACE -> IDENT[$i]
+        |        i=IS -> IDENT[$i]
+        |        i=AS -> IDENT[$i]
+        |        i=GET -> IDENT[$i]
+        |        i=SET -> 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 -> email">CVSspam</a> 0.2.12</small></center>
</body></html>