parser: support keywords as property names
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JS.g b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JS.g
index 6f21b95..0e009a2 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JS.g
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JS.g
@@ -1038,6 +1038,7 @@
 
 propertyName
 	: identifier
+	| word=reservedWord -> Identifier[word.start]
 	| StringLiteral
 	| numericLiteral
 	;
@@ -1105,6 +1106,7 @@
 
 rightHandSideExpression
   : identifier
+  | word=reservedWord -> Identifier[word.start]
   | { isXmlEnabled() }?=> parenExpression 
   | { isXmlEnabled() }?=> xmlAttribute
   | { isXmlEnabled() }?=> MUL
diff --git a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSParser.java b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSParser.java
index c8f9402..be791ad 100644
--- a/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSParser.java
+++ b/plugins/org.eclipse.dltk.javascript.parser/src/org/eclipse/dltk/javascript/parser/JSParser.java
@@ -1,4 +1,4 @@
-// $ANTLR 3.0.1 JS.g 2013-02-04 18:32:02
+// $ANTLR 3.0.1 JS.g 2014-04-21 18:13:32
 
 package org.eclipse.dltk.javascript.parser;
 
@@ -1261,7 +1261,7 @@
                     stream_identifier.add(identifier21.getTree());
 
                     // AST REWRITE
-                    // elements: AT, identifier
+                    // elements: identifier, AT
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -2585,7 +2585,7 @@
             int alt14=2;
             int LA14_0 = input.LA(1);
 
-            if ( (LA14_0==EACH||(LA14_0>=GET && LA14_0<=SET)||(LA14_0>=WXML && LA14_0<=CLASS)||(LA14_0>=DEBUGGER && LA14_0<=VOLATILE)||LA14_0==StringLiteral||LA14_0==Identifier||(LA14_0>=DecimalLiteral && LA14_0<=HexIntegerLiteral)) ) {
+            if ( ((LA14_0>=BREAK && LA14_0<=CLASS)||(LA14_0>=DEBUGGER && LA14_0<=VOLATILE)||LA14_0==StringLiteral||LA14_0==Identifier||(LA14_0>=DecimalLiteral && LA14_0<=HexIntegerLiteral)) ) {
                 alt14=1;
             }
             switch (alt14) {
@@ -2606,7 +2606,7 @@
                         if ( (LA12_0==COMMA) ) {
                             int LA12_1 = input.LA(2);
 
-                            if ( (LA12_1==EACH||(LA12_1>=GET && LA12_1<=SET)||(LA12_1>=WXML && LA12_1<=CLASS)||(LA12_1>=DEBUGGER && LA12_1<=VOLATILE)||LA12_1==StringLiteral||LA12_1==Identifier||(LA12_1>=DecimalLiteral && LA12_1<=HexIntegerLiteral)) ) {
+                            if ( ((LA12_1>=BREAK && LA12_1<=CLASS)||(LA12_1>=DEBUGGER && LA12_1<=VOLATILE)||LA12_1==StringLiteral||LA12_1==Identifier||(LA12_1>=DecimalLiteral && LA12_1<=HexIntegerLiteral)) ) {
                                 alt12=1;
                             }
 
@@ -2751,7 +2751,33 @@
             // JS.g:1022:3: ( nameValuePair | getMethodDeclaration | setMethodDeclaration )
             int alt15=3;
             switch ( input.LA(1) ) {
+            case BREAK:
+            case CASE:
+            case CATCH:
+            case CONTINUE:
+            case DEFAULT:
+            case DELETE:
+            case DO:
+            case ELSE:
+            case FINALLY:
+            case FOR:
             case EACH:
+            case FUNCTION:
+            case IF:
+            case IN:
+            case INSTANCEOF:
+            case NEW:
+            case RETURN:
+            case SWITCH:
+            case THIS:
+            case THROW:
+            case TRY:
+            case TYPEOF:
+            case VAR:
+            case VOID:
+            case WHILE:
+            case WITH:
+            case YIELD:
             case WXML:
             case NAMESPACE:
             case ABSTRACT:
@@ -2797,12 +2823,12 @@
                 {
                 int LA15_2 = input.LA(2);
 
-                if ( (LA15_2==EACH||(LA15_2>=GET && LA15_2<=SET)||(LA15_2>=WXML && LA15_2<=CLASS)||(LA15_2>=DEBUGGER && LA15_2<=VOLATILE)||LA15_2==Identifier) ) {
-                    alt15=2;
-                }
-                else if ( (LA15_2==COLON) ) {
+                if ( (LA15_2==COLON) ) {
                     alt15=1;
                 }
+                else if ( (LA15_2==EACH||(LA15_2>=GET && LA15_2<=SET)||(LA15_2>=WXML && LA15_2<=CLASS)||(LA15_2>=DEBUGGER && LA15_2<=VOLATILE)||LA15_2==Identifier) ) {
+                    alt15=2;
+                }
                 else {
                     NoViableAltException nvae =
                         new NoViableAltException("1021:1: objectPropertyInitializer : ( nameValuePair | getMethodDeclaration | setMethodDeclaration );", 15, 2, input);
@@ -2815,12 +2841,12 @@
                 {
                 int LA15_3 = input.LA(2);
 
-                if ( (LA15_3==EACH||(LA15_3>=GET && LA15_3<=SET)||(LA15_3>=WXML && LA15_3<=CLASS)||(LA15_3>=DEBUGGER && LA15_3<=VOLATILE)||LA15_3==Identifier) ) {
-                    alt15=3;
-                }
-                else if ( (LA15_3==COLON) ) {
+                if ( (LA15_3==COLON) ) {
                     alt15=1;
                 }
+                else if ( (LA15_3==EACH||(LA15_3>=GET && LA15_3<=SET)||(LA15_3>=WXML && LA15_3<=CLASS)||(LA15_3>=DEBUGGER && LA15_3<=VOLATILE)||LA15_3==Identifier) ) {
+                    alt15=3;
+                }
                 else {
                     NoViableAltException nvae =
                         new NoViableAltException("1021:1: objectPropertyInitializer : ( nameValuePair | getMethodDeclaration | setMethodDeclaration );", 15, 3, input);
@@ -3078,7 +3104,7 @@
                      reportError("Comma or expression expected", colon); 
 
                     // AST REWRITE
-                    // elements: assignmentExpression, colon
+                    // elements: colon, assignmentExpression
                     // token labels: colon
                     // rule labels: retval
                     // token list labels: 
@@ -3182,7 +3208,7 @@
     };
 
     // $ANTLR start propertyName
-    // JS.g:1039:1: propertyName : ( identifier | StringLiteral | numericLiteral );
+    // JS.g:1039:1: propertyName : ( identifier | word= reservedWord -> Identifier[word.start] | StringLiteral | numericLiteral );
     public final propertyName_return propertyName() throws RecognitionException {
         propertyName_return retval = new propertyName_return();
         retval.start = input.LT(1);
@@ -3190,21 +3216,39 @@
         Object root_0 = null;
 
         Token StringLiteral72=null;
+        reservedWord_return word = null;
+
         identifier_return identifier71 = null;
 
         numericLiteral_return numericLiteral73 = null;
 
 
         Object StringLiteral72_tree=null;
-
+        RewriteRuleSubtreeStream stream_reservedWord=new RewriteRuleSubtreeStream(adaptor,"rule reservedWord");
         try {
-            // JS.g:1040:2: ( identifier | StringLiteral | numericLiteral )
-            int alt18=3;
+            // JS.g:1040:2: ( identifier | word= reservedWord -> Identifier[word.start] | StringLiteral | numericLiteral )
+            int alt18=4;
             switch ( input.LA(1) ) {
-            case EACH:
-            case GET:
-            case SET:
             case WXML:
+                {
+                alt18=1;
+                }
+                break;
+            case GET:
+                {
+                alt18=1;
+                }
+                break;
+            case SET:
+                {
+                alt18=1;
+                }
+                break;
+            case EACH:
+                {
+                alt18=1;
+                }
+                break;
             case NAMESPACE:
             case ABSTRACT:
             case BOOLEAN:
@@ -3241,21 +3285,51 @@
                 alt18=1;
                 }
                 break;
-            case StringLiteral:
+            case BREAK:
+            case CASE:
+            case CATCH:
+            case CONTINUE:
+            case DEFAULT:
+            case DELETE:
+            case DO:
+            case ELSE:
+            case FINALLY:
+            case FOR:
+            case FUNCTION:
+            case IF:
+            case IN:
+            case INSTANCEOF:
+            case NEW:
+            case RETURN:
+            case SWITCH:
+            case THIS:
+            case THROW:
+            case TRY:
+            case TYPEOF:
+            case VAR:
+            case VOID:
+            case WHILE:
+            case WITH:
+            case YIELD:
                 {
                 alt18=2;
                 }
                 break;
+            case StringLiteral:
+                {
+                alt18=3;
+                }
+                break;
             case DecimalLiteral:
             case OctalIntegerLiteral:
             case HexIntegerLiteral:
                 {
-                alt18=3;
+                alt18=4;
                 }
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1039:1: propertyName : ( identifier | StringLiteral | numericLiteral );", 18, 0, input);
+                    new NoViableAltException("1039:1: propertyName : ( identifier | word= reservedWord -> Identifier[word.start] | StringLiteral | numericLiteral );", 18, 0, input);
 
                 throw nvae;
             }
@@ -3266,7 +3340,7 @@
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_identifier_in_propertyName4089);
+                    pushFollow(FOLLOW_identifier_in_propertyName4087);
                     identifier71=identifier();
                     _fsp--;
 
@@ -3275,24 +3349,53 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1041:4: StringLiteral
+                    // JS.g:1041:4: word= reservedWord
+                    {
+                    pushFollow(FOLLOW_reservedWord_in_propertyName4094);
+                    word=reservedWord();
+                    _fsp--;
+
+                    stream_reservedWord.add(word.getTree());
+
+                    // AST REWRITE
+                    // elements: 
+                    // token labels: 
+                    // rule labels: retval
+                    // token list labels: 
+                    // rule list labels: 
+                    retval.tree = root_0;
+                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+                    root_0 = (Object)adaptor.nil();
+                    // 1041:22: -> Identifier[word.start]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(Identifier, word.start));
+
+                    }
+
+
+
+                    }
+                    break;
+                case 3 :
+                    // JS.g:1042:4: StringLiteral
                     {
                     root_0 = (Object)adaptor.nil();
 
                     StringLiteral72=(Token)input.LT(1);
-                    match(input,StringLiteral,FOLLOW_StringLiteral_in_propertyName4094); 
+                    match(input,StringLiteral,FOLLOW_StringLiteral_in_propertyName4104); 
                     StringLiteral72_tree = (Object)adaptor.create(StringLiteral72);
                     adaptor.addChild(root_0, StringLiteral72_tree);
 
 
                     }
                     break;
-                case 3 :
-                    // JS.g:1042:4: numericLiteral
+                case 4 :
+                    // JS.g:1043:4: numericLiteral
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_numericLiteral_in_propertyName4099);
+                    pushFollow(FOLLOW_numericLiteral_in_propertyName4109);
                     numericLiteral73=numericLiteral();
                     _fsp--;
 
@@ -3327,7 +3430,7 @@
     };
 
     // $ANTLR start memberExpression
-    // JS.g:1054:1: memberExpression : ( primaryExpression | functionExpression | newExpression );
+    // JS.g:1055:1: memberExpression : ( primaryExpression | functionExpression | newExpression );
     public final memberExpression_return memberExpression() throws RecognitionException {
         memberExpression_return retval = new memberExpression_return();
         retval.start = input.LT(1);
@@ -3343,7 +3446,7 @@
 
 
         try {
-            // JS.g:1055:2: ( primaryExpression | functionExpression | newExpression )
+            // JS.g:1056:2: ( primaryExpression | functionExpression | newExpression )
             int alt19=3;
             int LA19_0 = input.LA(1);
 
@@ -3364,17 +3467,17 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1054:1: memberExpression : ( primaryExpression | functionExpression | newExpression );", 19, 0, input);
+                    new NoViableAltException("1055:1: memberExpression : ( primaryExpression | functionExpression | newExpression );", 19, 0, input);
 
                 throw nvae;
             }
             switch (alt19) {
                 case 1 :
-                    // JS.g:1055:4: primaryExpression
+                    // JS.g:1056:4: primaryExpression
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_primaryExpression_in_memberExpression4117);
+                    pushFollow(FOLLOW_primaryExpression_in_memberExpression4127);
                     primaryExpression74=primaryExpression();
                     _fsp--;
 
@@ -3383,11 +3486,11 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1056:4: functionExpression
+                    // JS.g:1057:4: functionExpression
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_functionExpression_in_memberExpression4122);
+                    pushFollow(FOLLOW_functionExpression_in_memberExpression4132);
                     functionExpression75=functionExpression();
                     _fsp--;
 
@@ -3396,11 +3499,11 @@
                     }
                     break;
                 case 3 :
-                    // JS.g:1057:4: newExpression
+                    // JS.g:1058:4: newExpression
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_newExpression_in_memberExpression4127);
+                    pushFollow(FOLLOW_newExpression_in_memberExpression4137);
                     newExpression76=newExpression();
                     _fsp--;
 
@@ -3435,7 +3538,7 @@
     };
 
     // $ANTLR start newExpression
-    // JS.g:1060:1: newExpression : NEW newExpressionTail ;
+    // JS.g:1061:1: newExpression : NEW newExpressionTail ;
     public final newExpression_return newExpression() throws RecognitionException {
         newExpression_return retval = new newExpression_return();
         retval.start = input.LT(1);
@@ -3449,17 +3552,17 @@
         Object NEW77_tree=null;
 
         try {
-            // JS.g:1061:2: ( NEW newExpressionTail )
-            // JS.g:1061:4: NEW newExpressionTail
+            // JS.g:1062:2: ( NEW newExpressionTail )
+            // JS.g:1062:4: NEW newExpressionTail
             {
             root_0 = (Object)adaptor.nil();
 
             NEW77=(Token)input.LT(1);
-            match(input,NEW,FOLLOW_NEW_in_newExpression4138); 
+            match(input,NEW,FOLLOW_NEW_in_newExpression4148); 
             NEW77_tree = (Object)adaptor.create(NEW77);
             root_0 = (Object)adaptor.becomeRoot(NEW77_tree, root_0);
 
-            pushFollow(FOLLOW_newExpressionTail_in_newExpression4141);
+            pushFollow(FOLLOW_newExpressionTail_in_newExpression4151);
             newExpressionTail78=newExpressionTail();
             _fsp--;
 
@@ -3492,7 +3595,7 @@
     };
 
     // $ANTLR start arguments
-    // JS.g:1065:1: arguments : LPAREN ( assignmentExpression ( COMMA assignmentExpression )* )? RPAREN -> ^( CALL_ARGUMENTS ( assignmentExpression )* ) ;
+    // JS.g:1066:1: arguments : LPAREN ( assignmentExpression ( COMMA assignmentExpression )* )? RPAREN -> ^( CALL_ARGUMENTS ( assignmentExpression )* ) ;
     public final arguments_return arguments() throws RecognitionException {
         arguments_return retval = new arguments_return();
         retval.start = input.LT(1);
@@ -3515,14 +3618,14 @@
         RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
         RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
         try {
-            // JS.g:1066:2: ( LPAREN ( assignmentExpression ( COMMA assignmentExpression )* )? RPAREN -> ^( CALL_ARGUMENTS ( assignmentExpression )* ) )
-            // JS.g:1066:4: LPAREN ( assignmentExpression ( COMMA assignmentExpression )* )? RPAREN
+            // JS.g:1067:2: ( LPAREN ( assignmentExpression ( COMMA assignmentExpression )* )? RPAREN -> ^( CALL_ARGUMENTS ( assignmentExpression )* ) )
+            // JS.g:1067:4: LPAREN ( assignmentExpression ( COMMA assignmentExpression )* )? RPAREN
             {
             LPAREN79=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_arguments4154); 
+            match(input,LPAREN,FOLLOW_LPAREN_in_arguments4164); 
             stream_LPAREN.add(LPAREN79);
 
-            // JS.g:1066:11: ( assignmentExpression ( COMMA assignmentExpression )* )?
+            // JS.g:1067:11: ( assignmentExpression ( COMMA assignmentExpression )* )?
             int alt21=2;
             int LA21_0 = input.LA(1);
 
@@ -3537,14 +3640,14 @@
             }
             switch (alt21) {
                 case 1 :
-                    // JS.g:1066:13: assignmentExpression ( COMMA assignmentExpression )*
+                    // JS.g:1067:13: assignmentExpression ( COMMA assignmentExpression )*
                     {
-                    pushFollow(FOLLOW_assignmentExpression_in_arguments4158);
+                    pushFollow(FOLLOW_assignmentExpression_in_arguments4168);
                     assignmentExpression80=assignmentExpression();
                     _fsp--;
 
                     stream_assignmentExpression.add(assignmentExpression80.getTree());
-                    // JS.g:1066:34: ( COMMA assignmentExpression )*
+                    // JS.g:1067:34: ( COMMA assignmentExpression )*
                     loop20:
                     do {
                         int alt20=2;
@@ -3557,13 +3660,13 @@
 
                         switch (alt20) {
                     	case 1 :
-                    	    // JS.g:1066:36: COMMA assignmentExpression
+                    	    // JS.g:1067:36: COMMA assignmentExpression
                     	    {
                     	    COMMA81=(Token)input.LT(1);
-                    	    match(input,COMMA,FOLLOW_COMMA_in_arguments4162); 
+                    	    match(input,COMMA,FOLLOW_COMMA_in_arguments4172); 
                     	    stream_COMMA.add(COMMA81);
 
-                    	    pushFollow(FOLLOW_assignmentExpression_in_arguments4164);
+                    	    pushFollow(FOLLOW_assignmentExpression_in_arguments4174);
                     	    assignmentExpression82=assignmentExpression();
                     	    _fsp--;
 
@@ -3584,7 +3687,7 @@
             }
 
             RPAREN83=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_arguments4172); 
+            match(input,RPAREN,FOLLOW_RPAREN_in_arguments4182); 
             stream_RPAREN.add(RPAREN83);
 
 
@@ -3598,14 +3701,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1067:2: -> ^( CALL_ARGUMENTS ( assignmentExpression )* )
+            // 1068:2: -> ^( CALL_ARGUMENTS ( assignmentExpression )* )
             {
-                // JS.g:1067:5: ^( CALL_ARGUMENTS ( assignmentExpression )* )
+                // JS.g:1068:5: ^( CALL_ARGUMENTS ( assignmentExpression )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(CALL_ARGUMENTS, "CALL_ARGUMENTS"), root_1);
 
-                // JS.g:1067:23: ( assignmentExpression )*
+                // JS.g:1068:23: ( assignmentExpression )*
                 while ( stream_assignmentExpression.hasNext() ) {
                     adaptor.addChild(root_1, stream_assignmentExpression.next());
 
@@ -3646,7 +3749,7 @@
     };
 
     // $ANTLR start leftHandSideExpression
-    // JS.g:1070:1: leftHandSideExpression : ( memberExpression -> memberExpression ) ( arguments -> ^( CALL $leftHandSideExpression arguments ) | lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $leftHandSideExpression expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $leftHandSideExpression $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $leftHandSideExpression expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $leftHandSideExpression ( $ps)? ) )* ;
+    // JS.g:1071:1: leftHandSideExpression : ( memberExpression -> memberExpression ) ( arguments -> ^( CALL $leftHandSideExpression arguments ) | lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $leftHandSideExpression expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $leftHandSideExpression $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $leftHandSideExpression expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $leftHandSideExpression ( $ps)? ) )* ;
     public final leftHandSideExpression_return leftHandSideExpression() throws RecognitionException {
         leftHandSideExpression_return retval = new leftHandSideExpression_return();
         retval.start = input.LT(1);
@@ -3697,13 +3800,13 @@
         RewriteRuleSubtreeStream stream_propertySelector=new RewriteRuleSubtreeStream(adaptor,"rule propertySelector");
          pushState(JSParserRule.LEFT_HAND_SIDE_EXPRESSION); 
         try {
-            // JS.g:1072:3: ( ( memberExpression -> memberExpression ) ( arguments -> ^( CALL $leftHandSideExpression arguments ) | lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $leftHandSideExpression expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $leftHandSideExpression $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $leftHandSideExpression expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $leftHandSideExpression ( $ps)? ) )* )
-            // JS.g:1073:3: ( memberExpression -> memberExpression ) ( arguments -> ^( CALL $leftHandSideExpression arguments ) | lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $leftHandSideExpression expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $leftHandSideExpression $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $leftHandSideExpression expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $leftHandSideExpression ( $ps)? ) )*
+            // JS.g:1073:3: ( ( memberExpression -> memberExpression ) ( arguments -> ^( CALL $leftHandSideExpression arguments ) | lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $leftHandSideExpression expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $leftHandSideExpression $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $leftHandSideExpression expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $leftHandSideExpression ( $ps)? ) )* )
+            // JS.g:1074:3: ( memberExpression -> memberExpression ) ( arguments -> ^( CALL $leftHandSideExpression arguments ) | lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $leftHandSideExpression expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $leftHandSideExpression $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $leftHandSideExpression expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $leftHandSideExpression ( $ps)? ) )*
             {
-            // JS.g:1073:3: ( memberExpression -> memberExpression )
-            // JS.g:1074:5: memberExpression
+            // JS.g:1074:3: ( memberExpression -> memberExpression )
+            // JS.g:1075:5: memberExpression
             {
-            pushFollow(FOLLOW_memberExpression_in_leftHandSideExpression4210);
+            pushFollow(FOLLOW_memberExpression_in_leftHandSideExpression4220);
             memberExpression84=memberExpression();
             _fsp--;
 
@@ -3719,7 +3822,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1074:25: -> memberExpression
+            // 1075:25: -> memberExpression
             {
                 adaptor.addChild(root_0, stream_memberExpression.next());
 
@@ -3729,7 +3832,7 @@
 
             }
 
-            // JS.g:1076:3: ( arguments -> ^( CALL $leftHandSideExpression arguments ) | lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $leftHandSideExpression expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $leftHandSideExpression $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $leftHandSideExpression expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $leftHandSideExpression ( $ps)? ) )*
+            // JS.g:1077:3: ( arguments -> ^( CALL $leftHandSideExpression arguments ) | lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $leftHandSideExpression expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $leftHandSideExpression $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $leftHandSideExpression expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $leftHandSideExpression ( $ps)? ) )*
             loop22:
             do {
                 int alt22=7;
@@ -3763,9 +3866,9 @@
 
                 switch (alt22) {
             	case 1 :
-            	    // JS.g:1077:5: arguments
+            	    // JS.g:1078:5: arguments
             	    {
-            	    pushFollow(FOLLOW_arguments_in_leftHandSideExpression4231);
+            	    pushFollow(FOLLOW_arguments_in_leftHandSideExpression4241);
             	    arguments85=arguments();
             	    _fsp--;
 
@@ -3781,9 +3884,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1077:19: -> ^( CALL $leftHandSideExpression arguments )
+            	    // 1078:19: -> ^( CALL $leftHandSideExpression arguments )
             	    {
-            	        // JS.g:1077:22: ^( CALL $leftHandSideExpression arguments )
+            	        // JS.g:1078:22: ^( CALL $leftHandSideExpression arguments )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(CALL, "CALL"), root_1);
@@ -3801,24 +3904,24 @@
             	    }
             	    break;
             	case 2 :
-            	    // JS.g:1078:7: lb1= LBRACK expression RBRACK
+            	    // JS.g:1079:7: lb1= LBRACK expression RBRACK
             	    {
             	    lb1=(Token)input.LT(1);
-            	    match(input,LBRACK,FOLLOW_LBRACK_in_leftHandSideExpression4258); 
+            	    match(input,LBRACK,FOLLOW_LBRACK_in_leftHandSideExpression4268); 
             	    stream_LBRACK.add(lb1);
 
-            	    pushFollow(FOLLOW_expression_in_leftHandSideExpression4260);
+            	    pushFollow(FOLLOW_expression_in_leftHandSideExpression4270);
             	    expression86=expression();
             	    _fsp--;
 
             	    stream_expression.add(expression86.getTree());
             	    RBRACK87=(Token)input.LT(1);
-            	    match(input,RBRACK,FOLLOW_RBRACK_in_leftHandSideExpression4262); 
+            	    match(input,RBRACK,FOLLOW_RBRACK_in_leftHandSideExpression4272); 
             	    stream_RBRACK.add(RBRACK87);
 
 
             	    // AST REWRITE
-            	    // elements: expression, leftHandSideExpression
+            	    // elements: leftHandSideExpression, expression
             	    // token labels: 
             	    // rule labels: retval
             	    // token list labels: 
@@ -3827,9 +3930,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1078:37: -> ^( BYINDEX[$lb1] $leftHandSideExpression expression )
+            	    // 1079:37: -> ^( BYINDEX[$lb1] $leftHandSideExpression expression )
             	    {
-            	        // JS.g:1078:40: ^( BYINDEX[$lb1] $leftHandSideExpression expression )
+            	        // JS.g:1079:40: ^( BYINDEX[$lb1] $leftHandSideExpression expression )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(BYINDEX, lb1), root_1);
@@ -3847,20 +3950,20 @@
             	    }
             	    break;
             	case 3 :
-            	    // JS.g:1079:7: DOT r= rightHandSideExpression
+            	    // JS.g:1080:7: DOT r= rightHandSideExpression
             	    {
             	    DOT88=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_leftHandSideExpression4285); 
+            	    match(input,DOT,FOLLOW_DOT_in_leftHandSideExpression4295); 
             	    stream_DOT.add(DOT88);
 
-            	    pushFollow(FOLLOW_rightHandSideExpression_in_leftHandSideExpression4289);
+            	    pushFollow(FOLLOW_rightHandSideExpression_in_leftHandSideExpression4299);
             	    r=rightHandSideExpression();
             	    _fsp--;
 
             	    stream_rightHandSideExpression.add(r.getTree());
 
             	    // AST REWRITE
-            	    // elements: DOT, r, leftHandSideExpression
+            	    // elements: r, DOT, leftHandSideExpression
             	    // token labels: 
             	    // rule labels: retval, r
             	    // token list labels: 
@@ -3870,16 +3973,16 @@
             	    RewriteRuleSubtreeStream stream_r=new RewriteRuleSubtreeStream(adaptor,"token r",r!=null?r.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1079:37: -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? )
+            	    // 1080:37: -> ^( BYFIELD $leftHandSideExpression DOT ( $r)? )
             	    {
-            	        // JS.g:1079:40: ^( BYFIELD $leftHandSideExpression DOT ( $r)? )
+            	        // JS.g:1080:40: ^( BYFIELD $leftHandSideExpression DOT ( $r)? )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(BYFIELD, "BYFIELD"), root_1);
 
             	        adaptor.addChild(root_1, stream_retval.next());
             	        adaptor.addChild(root_1, stream_DOT.next());
-            	        // JS.g:1079:79: ( $r)?
+            	        // JS.g:1080:79: ( $r)?
             	        if ( stream_r.hasNext() ) {
             	            adaptor.addChild(root_1, stream_r.next());
 
@@ -3896,23 +3999,23 @@
             	    }
             	    break;
             	case 4 :
-            	    // JS.g:1080:7: {...}? => DOTDOT r2= rightHandSideExpression2
+            	    // JS.g:1081:7: {...}? => DOTDOT r2= rightHandSideExpression2
             	    {
             	    if ( !( isXmlEnabled() ) ) {
             	        throw new FailedPredicateException(input, "leftHandSideExpression", " isXmlEnabled() ");
             	    }
             	    DOTDOT89=(Token)input.LT(1);
-            	    match(input,DOTDOT,FOLLOW_DOTDOT_in_leftHandSideExpression4317); 
+            	    match(input,DOTDOT,FOLLOW_DOTDOT_in_leftHandSideExpression4327); 
             	    stream_DOTDOT.add(DOTDOT89);
 
-            	    pushFollow(FOLLOW_rightHandSideExpression2_in_leftHandSideExpression4321);
+            	    pushFollow(FOLLOW_rightHandSideExpression2_in_leftHandSideExpression4331);
             	    r2=rightHandSideExpression2();
             	    _fsp--;
 
             	    stream_rightHandSideExpression2.add(r2.getTree());
 
             	    // AST REWRITE
-            	    // elements: r2, leftHandSideExpression
+            	    // elements: leftHandSideExpression, r2
             	    // token labels: 
             	    // rule labels: retval, r2
             	    // token list labels: 
@@ -3922,9 +4025,9 @@
             	    RewriteRuleSubtreeStream stream_r2=new RewriteRuleSubtreeStream(adaptor,"token r2",r2!=null?r2.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1080:64: -> ^( ALLCHILDREN $leftHandSideExpression $r2)
+            	    // 1081:64: -> ^( ALLCHILDREN $leftHandSideExpression $r2)
             	    {
-            	        // JS.g:1080:67: ^( ALLCHILDREN $leftHandSideExpression $r2)
+            	        // JS.g:1081:67: ^( ALLCHILDREN $leftHandSideExpression $r2)
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(ALLCHILDREN, "ALLCHILDREN"), root_1);
@@ -3942,31 +4045,31 @@
             	    }
             	    break;
             	case 5 :
-            	    // JS.g:1081:7: {...}? => COLONCOLON LBRACK expression RBRACK
+            	    // JS.g:1082:7: {...}? => COLONCOLON LBRACK expression RBRACK
             	    {
             	    if ( !( isXmlEnabled() ) ) {
             	        throw new FailedPredicateException(input, "leftHandSideExpression", " isXmlEnabled() ");
             	    }
             	    COLONCOLON90=(Token)input.LT(1);
-            	    match(input,COLONCOLON,FOLLOW_COLONCOLON_in_leftHandSideExpression4344); 
+            	    match(input,COLONCOLON,FOLLOW_COLONCOLON_in_leftHandSideExpression4354); 
             	    stream_COLONCOLON.add(COLONCOLON90);
 
             	    LBRACK91=(Token)input.LT(1);
-            	    match(input,LBRACK,FOLLOW_LBRACK_in_leftHandSideExpression4346); 
+            	    match(input,LBRACK,FOLLOW_LBRACK_in_leftHandSideExpression4356); 
             	    stream_LBRACK.add(LBRACK91);
 
-            	    pushFollow(FOLLOW_expression_in_leftHandSideExpression4348);
+            	    pushFollow(FOLLOW_expression_in_leftHandSideExpression4358);
             	    expression92=expression();
             	    _fsp--;
 
             	    stream_expression.add(expression92.getTree());
             	    RBRACK93=(Token)input.LT(1);
-            	    match(input,RBRACK,FOLLOW_RBRACK_in_leftHandSideExpression4350); 
+            	    match(input,RBRACK,FOLLOW_RBRACK_in_leftHandSideExpression4360); 
             	    stream_RBRACK.add(RBRACK93);
 
 
             	    // AST REWRITE
-            	    // elements: leftHandSideExpression, expression
+            	    // elements: expression, leftHandSideExpression
             	    // token labels: 
             	    // rule labels: retval
             	    // token list labels: 
@@ -3975,9 +4078,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1081:65: -> ^( LOCALNAME $leftHandSideExpression expression )
+            	    // 1082:65: -> ^( LOCALNAME $leftHandSideExpression expression )
             	    {
-            	        // JS.g:1081:68: ^( LOCALNAME $leftHandSideExpression expression )
+            	        // JS.g:1082:68: ^( LOCALNAME $leftHandSideExpression expression )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(LOCALNAME, "LOCALNAME"), root_1);
@@ -3995,16 +4098,16 @@
             	    }
             	    break;
             	case 6 :
-            	    // JS.g:1082:7: {...}? => COLONCOLON ps= propertySelector
+            	    // JS.g:1083:7: {...}? => COLONCOLON ps= propertySelector
             	    {
             	    if ( !( isXmlEnabled() ) ) {
             	        throw new FailedPredicateException(input, "leftHandSideExpression", " isXmlEnabled() ");
             	    }
             	    COLONCOLON94=(Token)input.LT(1);
-            	    match(input,COLONCOLON,FOLLOW_COLONCOLON_in_leftHandSideExpression4372); 
+            	    match(input,COLONCOLON,FOLLOW_COLONCOLON_in_leftHandSideExpression4382); 
             	    stream_COLONCOLON.add(COLONCOLON94);
 
-            	    pushFollow(FOLLOW_propertySelector_in_leftHandSideExpression4376);
+            	    pushFollow(FOLLOW_propertySelector_in_leftHandSideExpression4386);
             	    ps=propertySelector();
             	    _fsp--;
 
@@ -4021,15 +4124,15 @@
             	    RewriteRuleSubtreeStream stream_ps=new RewriteRuleSubtreeStream(adaptor,"token ps",ps!=null?ps.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1082:60: -> ^( LOCALNAME $leftHandSideExpression ( $ps)? )
+            	    // 1083:60: -> ^( LOCALNAME $leftHandSideExpression ( $ps)? )
             	    {
-            	        // JS.g:1082:63: ^( LOCALNAME $leftHandSideExpression ( $ps)? )
+            	        // JS.g:1083:63: ^( LOCALNAME $leftHandSideExpression ( $ps)? )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(LOCALNAME, "LOCALNAME"), root_1);
 
             	        adaptor.addChild(root_1, stream_retval.next());
-            	        // JS.g:1082:99: ( $ps)?
+            	        // JS.g:1083:99: ( $ps)?
             	        if ( stream_ps.hasNext() ) {
             	            adaptor.addChild(root_1, stream_ps.next());
 
@@ -4079,7 +4182,7 @@
     };
 
     // $ANTLR start newExpressionTail
-    // JS.g:1089:1: newExpressionTail : ( memberExpression -> memberExpression ) (lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $newExpressionTail expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $newExpressionTail DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $newExpressionTail $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $newExpressionTail expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $newExpressionTail ( $ps)? ) )* ( arguments -> ^( CALL $newExpressionTail arguments ) )? ;
+    // JS.g:1090:1: newExpressionTail : ( memberExpression -> memberExpression ) (lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $newExpressionTail expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $newExpressionTail DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $newExpressionTail $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $newExpressionTail expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $newExpressionTail ( $ps)? ) )* ( arguments -> ^( CALL $newExpressionTail arguments ) )? ;
     public final newExpressionTail_return newExpressionTail() throws RecognitionException {
         newExpressionTail_return retval = new newExpressionTail_return();
         retval.start = input.LT(1);
@@ -4129,13 +4232,13 @@
         RewriteRuleSubtreeStream stream_rightHandSideExpression=new RewriteRuleSubtreeStream(adaptor,"rule rightHandSideExpression");
         RewriteRuleSubtreeStream stream_propertySelector=new RewriteRuleSubtreeStream(adaptor,"rule propertySelector");
         try {
-            // JS.g:1090:3: ( ( memberExpression -> memberExpression ) (lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $newExpressionTail expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $newExpressionTail DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $newExpressionTail $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $newExpressionTail expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $newExpressionTail ( $ps)? ) )* ( arguments -> ^( CALL $newExpressionTail arguments ) )? )
-            // JS.g:1091:3: ( memberExpression -> memberExpression ) (lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $newExpressionTail expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $newExpressionTail DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $newExpressionTail $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $newExpressionTail expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $newExpressionTail ( $ps)? ) )* ( arguments -> ^( CALL $newExpressionTail arguments ) )?
+            // JS.g:1091:3: ( ( memberExpression -> memberExpression ) (lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $newExpressionTail expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $newExpressionTail DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $newExpressionTail $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $newExpressionTail expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $newExpressionTail ( $ps)? ) )* ( arguments -> ^( CALL $newExpressionTail arguments ) )? )
+            // JS.g:1092:3: ( memberExpression -> memberExpression ) (lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $newExpressionTail expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $newExpressionTail DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $newExpressionTail $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $newExpressionTail expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $newExpressionTail ( $ps)? ) )* ( arguments -> ^( CALL $newExpressionTail arguments ) )?
             {
-            // JS.g:1091:3: ( memberExpression -> memberExpression )
-            // JS.g:1092:5: memberExpression
+            // JS.g:1092:3: ( memberExpression -> memberExpression )
+            // JS.g:1093:5: memberExpression
             {
-            pushFollow(FOLLOW_memberExpression_in_newExpressionTail4437);
+            pushFollow(FOLLOW_memberExpression_in_newExpressionTail4447);
             memberExpression95=memberExpression();
             _fsp--;
 
@@ -4151,7 +4254,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1092:25: -> memberExpression
+            // 1093:25: -> memberExpression
             {
                 adaptor.addChild(root_0, stream_memberExpression.next());
 
@@ -4161,7 +4264,7 @@
 
             }
 
-            // JS.g:1094:3: (lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $newExpressionTail expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $newExpressionTail DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $newExpressionTail $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $newExpressionTail expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $newExpressionTail ( $ps)? ) )*
+            // JS.g:1095:3: (lb1= LBRACK expression RBRACK -> ^( BYINDEX[$lb1] $newExpressionTail expression ) | DOT r= rightHandSideExpression -> ^( BYFIELD $newExpressionTail DOT ( $r)? ) | {...}? => DOTDOT r2= rightHandSideExpression2 -> ^( ALLCHILDREN $newExpressionTail $r2) | {...}? => COLONCOLON LBRACK expression RBRACK -> ^( LOCALNAME $newExpressionTail expression ) | {...}? => COLONCOLON ps= propertySelector -> ^( LOCALNAME $newExpressionTail ( $ps)? ) )*
             loop23:
             do {
                 int alt23=6;
@@ -4198,19 +4301,19 @@
 
                 switch (alt23) {
             	case 1 :
-            	    // JS.g:1095:5: lb1= LBRACK expression RBRACK
+            	    // JS.g:1096:5: lb1= LBRACK expression RBRACK
             	    {
             	    lb1=(Token)input.LT(1);
-            	    match(input,LBRACK,FOLLOW_LBRACK_in_newExpressionTail4460); 
+            	    match(input,LBRACK,FOLLOW_LBRACK_in_newExpressionTail4470); 
             	    stream_LBRACK.add(lb1);
 
-            	    pushFollow(FOLLOW_expression_in_newExpressionTail4462);
+            	    pushFollow(FOLLOW_expression_in_newExpressionTail4472);
             	    expression96=expression();
             	    _fsp--;
 
             	    stream_expression.add(expression96.getTree());
             	    RBRACK97=(Token)input.LT(1);
-            	    match(input,RBRACK,FOLLOW_RBRACK_in_newExpressionTail4464); 
+            	    match(input,RBRACK,FOLLOW_RBRACK_in_newExpressionTail4474); 
             	    stream_RBRACK.add(RBRACK97);
 
 
@@ -4224,9 +4327,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1095:35: -> ^( BYINDEX[$lb1] $newExpressionTail expression )
+            	    // 1096:35: -> ^( BYINDEX[$lb1] $newExpressionTail expression )
             	    {
-            	        // JS.g:1095:38: ^( BYINDEX[$lb1] $newExpressionTail expression )
+            	        // JS.g:1096:38: ^( BYINDEX[$lb1] $newExpressionTail expression )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(BYINDEX, lb1), root_1);
@@ -4244,20 +4347,20 @@
             	    }
             	    break;
             	case 2 :
-            	    // JS.g:1096:7: DOT r= rightHandSideExpression
+            	    // JS.g:1097:7: DOT r= rightHandSideExpression
             	    {
             	    DOT98=(Token)input.LT(1);
-            	    match(input,DOT,FOLLOW_DOT_in_newExpressionTail4487); 
+            	    match(input,DOT,FOLLOW_DOT_in_newExpressionTail4497); 
             	    stream_DOT.add(DOT98);
 
-            	    pushFollow(FOLLOW_rightHandSideExpression_in_newExpressionTail4491);
+            	    pushFollow(FOLLOW_rightHandSideExpression_in_newExpressionTail4501);
             	    r=rightHandSideExpression();
             	    _fsp--;
 
             	    stream_rightHandSideExpression.add(r.getTree());
 
             	    // AST REWRITE
-            	    // elements: DOT, r, newExpressionTail
+            	    // elements: DOT, newExpressionTail, r
             	    // token labels: 
             	    // rule labels: retval, r
             	    // token list labels: 
@@ -4267,16 +4370,16 @@
             	    RewriteRuleSubtreeStream stream_r=new RewriteRuleSubtreeStream(adaptor,"token r",r!=null?r.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1096:37: -> ^( BYFIELD $newExpressionTail DOT ( $r)? )
+            	    // 1097:37: -> ^( BYFIELD $newExpressionTail DOT ( $r)? )
             	    {
-            	        // JS.g:1096:40: ^( BYFIELD $newExpressionTail DOT ( $r)? )
+            	        // JS.g:1097:40: ^( BYFIELD $newExpressionTail DOT ( $r)? )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(BYFIELD, "BYFIELD"), root_1);
 
             	        adaptor.addChild(root_1, stream_retval.next());
             	        adaptor.addChild(root_1, stream_DOT.next());
-            	        // JS.g:1096:74: ( $r)?
+            	        // JS.g:1097:74: ( $r)?
             	        if ( stream_r.hasNext() ) {
             	            adaptor.addChild(root_1, stream_r.next());
 
@@ -4293,23 +4396,23 @@
             	    }
             	    break;
             	case 3 :
-            	    // JS.g:1097:7: {...}? => DOTDOT r2= rightHandSideExpression2
+            	    // JS.g:1098:7: {...}? => DOTDOT r2= rightHandSideExpression2
             	    {
             	    if ( !( isXmlEnabled() ) ) {
             	        throw new FailedPredicateException(input, "newExpressionTail", " isXmlEnabled() ");
             	    }
             	    DOTDOT99=(Token)input.LT(1);
-            	    match(input,DOTDOT,FOLLOW_DOTDOT_in_newExpressionTail4519); 
+            	    match(input,DOTDOT,FOLLOW_DOTDOT_in_newExpressionTail4529); 
             	    stream_DOTDOT.add(DOTDOT99);
 
-            	    pushFollow(FOLLOW_rightHandSideExpression2_in_newExpressionTail4523);
+            	    pushFollow(FOLLOW_rightHandSideExpression2_in_newExpressionTail4533);
             	    r2=rightHandSideExpression2();
             	    _fsp--;
 
             	    stream_rightHandSideExpression2.add(r2.getTree());
 
             	    // AST REWRITE
-            	    // elements: r2, newExpressionTail
+            	    // elements: newExpressionTail, r2
             	    // token labels: 
             	    // rule labels: retval, r2
             	    // token list labels: 
@@ -4319,9 +4422,9 @@
             	    RewriteRuleSubtreeStream stream_r2=new RewriteRuleSubtreeStream(adaptor,"token r2",r2!=null?r2.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1097:64: -> ^( ALLCHILDREN $newExpressionTail $r2)
+            	    // 1098:64: -> ^( ALLCHILDREN $newExpressionTail $r2)
             	    {
-            	        // JS.g:1097:67: ^( ALLCHILDREN $newExpressionTail $r2)
+            	        // JS.g:1098:67: ^( ALLCHILDREN $newExpressionTail $r2)
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(ALLCHILDREN, "ALLCHILDREN"), root_1);
@@ -4339,31 +4442,31 @@
             	    }
             	    break;
             	case 4 :
-            	    // JS.g:1098:7: {...}? => COLONCOLON LBRACK expression RBRACK
+            	    // JS.g:1099:7: {...}? => COLONCOLON LBRACK expression RBRACK
             	    {
             	    if ( !( isXmlEnabled() ) ) {
             	        throw new FailedPredicateException(input, "newExpressionTail", " isXmlEnabled() ");
             	    }
             	    COLONCOLON100=(Token)input.LT(1);
-            	    match(input,COLONCOLON,FOLLOW_COLONCOLON_in_newExpressionTail4546); 
+            	    match(input,COLONCOLON,FOLLOW_COLONCOLON_in_newExpressionTail4556); 
             	    stream_COLONCOLON.add(COLONCOLON100);
 
             	    LBRACK101=(Token)input.LT(1);
-            	    match(input,LBRACK,FOLLOW_LBRACK_in_newExpressionTail4548); 
+            	    match(input,LBRACK,FOLLOW_LBRACK_in_newExpressionTail4558); 
             	    stream_LBRACK.add(LBRACK101);
 
-            	    pushFollow(FOLLOW_expression_in_newExpressionTail4550);
+            	    pushFollow(FOLLOW_expression_in_newExpressionTail4560);
             	    expression102=expression();
             	    _fsp--;
 
             	    stream_expression.add(expression102.getTree());
             	    RBRACK103=(Token)input.LT(1);
-            	    match(input,RBRACK,FOLLOW_RBRACK_in_newExpressionTail4552); 
+            	    match(input,RBRACK,FOLLOW_RBRACK_in_newExpressionTail4562); 
             	    stream_RBRACK.add(RBRACK103);
 
 
             	    // AST REWRITE
-            	    // elements: newExpressionTail, expression
+            	    // elements: expression, newExpressionTail
             	    // token labels: 
             	    // rule labels: retval
             	    // token list labels: 
@@ -4372,9 +4475,9 @@
             	    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1098:65: -> ^( LOCALNAME $newExpressionTail expression )
+            	    // 1099:65: -> ^( LOCALNAME $newExpressionTail expression )
             	    {
-            	        // JS.g:1098:68: ^( LOCALNAME $newExpressionTail expression )
+            	        // JS.g:1099:68: ^( LOCALNAME $newExpressionTail expression )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(LOCALNAME, "LOCALNAME"), root_1);
@@ -4392,16 +4495,16 @@
             	    }
             	    break;
             	case 5 :
-            	    // JS.g:1099:7: {...}? => COLONCOLON ps= propertySelector
+            	    // JS.g:1100:7: {...}? => COLONCOLON ps= propertySelector
             	    {
             	    if ( !( isXmlEnabled() ) ) {
             	        throw new FailedPredicateException(input, "newExpressionTail", " isXmlEnabled() ");
             	    }
             	    COLONCOLON104=(Token)input.LT(1);
-            	    match(input,COLONCOLON,FOLLOW_COLONCOLON_in_newExpressionTail4574); 
+            	    match(input,COLONCOLON,FOLLOW_COLONCOLON_in_newExpressionTail4584); 
             	    stream_COLONCOLON.add(COLONCOLON104);
 
-            	    pushFollow(FOLLOW_propertySelector_in_newExpressionTail4578);
+            	    pushFollow(FOLLOW_propertySelector_in_newExpressionTail4588);
             	    ps=propertySelector();
             	    _fsp--;
 
@@ -4418,15 +4521,15 @@
             	    RewriteRuleSubtreeStream stream_ps=new RewriteRuleSubtreeStream(adaptor,"token ps",ps!=null?ps.tree:null);
 
             	    root_0 = (Object)adaptor.nil();
-            	    // 1099:60: -> ^( LOCALNAME $newExpressionTail ( $ps)? )
+            	    // 1100:60: -> ^( LOCALNAME $newExpressionTail ( $ps)? )
             	    {
-            	        // JS.g:1099:63: ^( LOCALNAME $newExpressionTail ( $ps)? )
+            	        // JS.g:1100:63: ^( LOCALNAME $newExpressionTail ( $ps)? )
             	        {
             	        Object root_1 = (Object)adaptor.nil();
             	        root_1 = (Object)adaptor.becomeRoot(adaptor.create(LOCALNAME, "LOCALNAME"), root_1);
 
             	        adaptor.addChild(root_1, stream_retval.next());
-            	        // JS.g:1099:94: ( $ps)?
+            	        // JS.g:1100:94: ( $ps)?
             	        if ( stream_ps.hasNext() ) {
             	            adaptor.addChild(root_1, stream_ps.next());
 
@@ -4448,7 +4551,7 @@
                 }
             } while (true);
 
-            // JS.g:1101:3: ( arguments -> ^( CALL $newExpressionTail arguments ) )?
+            // JS.g:1102:3: ( arguments -> ^( CALL $newExpressionTail arguments ) )?
             int alt24=2;
             int LA24_0 = input.LA(1);
 
@@ -4457,9 +4560,9 @@
             }
             switch (alt24) {
                 case 1 :
-                    // JS.g:1102:5: arguments
+                    // JS.g:1103:5: arguments
                     {
-                    pushFollow(FOLLOW_arguments_in_newExpressionTail4606);
+                    pushFollow(FOLLOW_arguments_in_newExpressionTail4616);
                     arguments105=arguments();
                     _fsp--;
 
@@ -4475,9 +4578,9 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1102:19: -> ^( CALL $newExpressionTail arguments )
+                    // 1103:19: -> ^( CALL $newExpressionTail arguments )
                     {
-                        // JS.g:1102:22: ^( CALL $newExpressionTail arguments )
+                        // JS.g:1103:22: ^( CALL $newExpressionTail arguments )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(CALL, "CALL"), root_1);
@@ -4525,7 +4628,7 @@
     };
 
     // $ANTLR start rightHandSideExpression
-    // JS.g:1106:1: rightHandSideExpression : ( identifier | {...}? => parenExpression | {...}? => xmlAttribute | {...}? => MUL );
+    // JS.g:1107:1: rightHandSideExpression : ( identifier | word= reservedWord -> Identifier[word.start] | {...}? => parenExpression | {...}? => xmlAttribute | {...}? => MUL );
     public final rightHandSideExpression_return rightHandSideExpression() throws RecognitionException {
         rightHandSideExpression_return retval = new rightHandSideExpression_return();
         retval.start = input.LT(1);
@@ -4533,6 +4636,8 @@
         Object root_0 = null;
 
         Token MUL109=null;
+        reservedWord_return word = null;
+
         identifier_return identifier106 = null;
 
         parenExpression_return parenExpression107 = null;
@@ -4541,37 +4646,52 @@
 
 
         Object MUL109_tree=null;
-
+        RewriteRuleSubtreeStream stream_reservedWord=new RewriteRuleSubtreeStream(adaptor,"rule reservedWord");
         try {
-            // JS.g:1107:3: ( identifier | {...}? => parenExpression | {...}? => xmlAttribute | {...}? => MUL )
-            int alt25=4;
+            // JS.g:1108:3: ( identifier | word= reservedWord -> Identifier[word.start] | {...}? => parenExpression | {...}? => xmlAttribute | {...}? => MUL )
+            int alt25=5;
             int LA25_0 = input.LA(1);
 
-            if ( (LA25_0==EACH||(LA25_0>=GET && LA25_0<=SET)||(LA25_0>=WXML && LA25_0<=CLASS)||(LA25_0>=DEBUGGER && LA25_0<=VOLATILE)||LA25_0==Identifier) ) {
+            if ( (LA25_0==WXML) ) {
                 alt25=1;
             }
-            else if ( (LA25_0==LPAREN) && ( isXmlEnabled() )) {
+            else if ( (LA25_0==GET) ) {
+                alt25=1;
+            }
+            else if ( (LA25_0==SET) ) {
+                alt25=1;
+            }
+            else if ( (LA25_0==EACH) ) {
+                alt25=1;
+            }
+            else if ( ((LA25_0>=NAMESPACE && LA25_0<=CLASS)||(LA25_0>=DEBUGGER && LA25_0<=VOLATILE)||LA25_0==Identifier) ) {
+                alt25=1;
+            }
+            else if ( ((LA25_0>=BREAK && LA25_0<=FOR)||(LA25_0>=FUNCTION && LA25_0<=WITH)||LA25_0==YIELD) ) {
                 alt25=2;
             }
-            else if ( (LA25_0==AT) && ( isXmlEnabled() )) {
+            else if ( (LA25_0==LPAREN) && ( isXmlEnabled() )) {
                 alt25=3;
             }
-            else if ( (LA25_0==MUL) && ( isXmlEnabled() )) {
+            else if ( (LA25_0==AT) && ( isXmlEnabled() )) {
                 alt25=4;
             }
+            else if ( (LA25_0==MUL) && ( isXmlEnabled() )) {
+                alt25=5;
+            }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1106:1: rightHandSideExpression : ( identifier | {...}? => parenExpression | {...}? => xmlAttribute | {...}? => MUL );", 25, 0, input);
+                    new NoViableAltException("1107:1: rightHandSideExpression : ( identifier | word= reservedWord -> Identifier[word.start] | {...}? => parenExpression | {...}? => xmlAttribute | {...}? => MUL );", 25, 0, input);
 
                 throw nvae;
             }
             switch (alt25) {
                 case 1 :
-                    // JS.g:1107:5: identifier
+                    // JS.g:1108:5: identifier
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_identifier_in_rightHandSideExpression4641);
+                    pushFollow(FOLLOW_identifier_in_rightHandSideExpression4651);
                     identifier106=identifier();
                     _fsp--;
 
@@ -4580,14 +4700,43 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1108:5: {...}? => parenExpression
+                    // JS.g:1109:5: word= reservedWord
+                    {
+                    pushFollow(FOLLOW_reservedWord_in_rightHandSideExpression4659);
+                    word=reservedWord();
+                    _fsp--;
+
+                    stream_reservedWord.add(word.getTree());
+
+                    // AST REWRITE
+                    // elements: 
+                    // token labels: 
+                    // rule labels: retval
+                    // token list labels: 
+                    // rule list labels: 
+                    retval.tree = root_0;
+                    RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
+
+                    root_0 = (Object)adaptor.nil();
+                    // 1109:23: -> Identifier[word.start]
+                    {
+                        adaptor.addChild(root_0, adaptor.create(Identifier, word.start));
+
+                    }
+
+
+
+                    }
+                    break;
+                case 3 :
+                    // JS.g:1110:5: {...}? => parenExpression
                     {
                     root_0 = (Object)adaptor.nil();
 
                     if ( !( isXmlEnabled() ) ) {
                         throw new FailedPredicateException(input, "rightHandSideExpression", " isXmlEnabled() ");
                     }
-                    pushFollow(FOLLOW_parenExpression_in_rightHandSideExpression4650);
+                    pushFollow(FOLLOW_parenExpression_in_rightHandSideExpression4673);
                     parenExpression107=parenExpression();
                     _fsp--;
 
@@ -4595,15 +4744,15 @@
 
                     }
                     break;
-                case 3 :
-                    // JS.g:1109:5: {...}? => xmlAttribute
+                case 4 :
+                    // JS.g:1111:5: {...}? => xmlAttribute
                     {
                     root_0 = (Object)adaptor.nil();
 
                     if ( !( isXmlEnabled() ) ) {
                         throw new FailedPredicateException(input, "rightHandSideExpression", " isXmlEnabled() ");
                     }
-                    pushFollow(FOLLOW_xmlAttribute_in_rightHandSideExpression4660);
+                    pushFollow(FOLLOW_xmlAttribute_in_rightHandSideExpression4683);
                     xmlAttribute108=xmlAttribute();
                     _fsp--;
 
@@ -4611,8 +4760,8 @@
 
                     }
                     break;
-                case 4 :
-                    // JS.g:1110:5: {...}? => MUL
+                case 5 :
+                    // JS.g:1112:5: {...}? => MUL
                     {
                     root_0 = (Object)adaptor.nil();
 
@@ -4620,7 +4769,7 @@
                         throw new FailedPredicateException(input, "rightHandSideExpression", " isXmlEnabled() ");
                     }
                     MUL109=(Token)input.LT(1);
-                    match(input,MUL,FOLLOW_MUL_in_rightHandSideExpression4669); 
+                    match(input,MUL,FOLLOW_MUL_in_rightHandSideExpression4692); 
                     MUL109_tree = (Object)adaptor.create(MUL109);
                     adaptor.addChild(root_0, MUL109_tree);
 
@@ -4654,7 +4803,7 @@
     };
 
     // $ANTLR start rightHandSideExpression2
-    // JS.g:1113:1: rightHandSideExpression2 : ( identifier | xmlAttribute | MUL );
+    // JS.g:1115:1: rightHandSideExpression2 : ( identifier | xmlAttribute | MUL );
     public final rightHandSideExpression2_return rightHandSideExpression2() throws RecognitionException {
         rightHandSideExpression2_return retval = new rightHandSideExpression2_return();
         retval.start = input.LT(1);
@@ -4670,7 +4819,7 @@
         Object MUL112_tree=null;
 
         try {
-            // JS.g:1114:3: ( identifier | xmlAttribute | MUL )
+            // JS.g:1116:3: ( identifier | xmlAttribute | MUL )
             int alt26=3;
             switch ( input.LA(1) ) {
             case EACH:
@@ -4725,18 +4874,18 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1113:1: rightHandSideExpression2 : ( identifier | xmlAttribute | MUL );", 26, 0, input);
+                    new NoViableAltException("1115:1: rightHandSideExpression2 : ( identifier | xmlAttribute | MUL );", 26, 0, input);
 
                 throw nvae;
             }
 
             switch (alt26) {
                 case 1 :
-                    // JS.g:1114:5: identifier
+                    // JS.g:1116:5: identifier
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_identifier_in_rightHandSideExpression24681);
+                    pushFollow(FOLLOW_identifier_in_rightHandSideExpression24704);
                     identifier110=identifier();
                     _fsp--;
 
@@ -4745,11 +4894,11 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1115:5: xmlAttribute
+                    // JS.g:1117:5: xmlAttribute
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_xmlAttribute_in_rightHandSideExpression24687);
+                    pushFollow(FOLLOW_xmlAttribute_in_rightHandSideExpression24710);
                     xmlAttribute111=xmlAttribute();
                     _fsp--;
 
@@ -4758,12 +4907,12 @@
                     }
                     break;
                 case 3 :
-                    // JS.g:1116:5: MUL
+                    // JS.g:1118:5: MUL
                     {
                     root_0 = (Object)adaptor.nil();
 
                     MUL112=(Token)input.LT(1);
-                    match(input,MUL,FOLLOW_MUL_in_rightHandSideExpression24693); 
+                    match(input,MUL,FOLLOW_MUL_in_rightHandSideExpression24716); 
                     MUL112_tree = (Object)adaptor.create(MUL112);
                     adaptor.addChild(root_0, MUL112_tree);
 
@@ -4797,7 +4946,7 @@
     };
 
     // $ANTLR start postfixExpression
-    // JS.g:1129:1: postfixExpression : leftHandSideExpression ( postfixOperator )? ;
+    // JS.g:1131:1: postfixExpression : leftHandSideExpression ( postfixOperator )? ;
     public final postfixExpression_return postfixExpression() throws RecognitionException {
         postfixExpression_return retval = new postfixExpression_return();
         retval.start = input.LT(1);
@@ -4811,18 +4960,18 @@
 
 
         try {
-            // JS.g:1130:2: ( leftHandSideExpression ( postfixOperator )? )
-            // JS.g:1130:4: leftHandSideExpression ( postfixOperator )?
+            // JS.g:1132:2: ( leftHandSideExpression ( postfixOperator )? )
+            // JS.g:1132:4: leftHandSideExpression ( postfixOperator )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_leftHandSideExpression_in_postfixExpression4709);
+            pushFollow(FOLLOW_leftHandSideExpression_in_postfixExpression4732);
             leftHandSideExpression113=leftHandSideExpression();
             _fsp--;
 
             adaptor.addChild(root_0, leftHandSideExpression113.getTree());
              if (input.LA(1) == INC || input.LA(1) == DEC) promoteEOL(null); 
-            // JS.g:1130:95: ( postfixOperator )?
+            // JS.g:1132:95: ( postfixOperator )?
             int alt27=2;
             int LA27_0 = input.LA(1);
 
@@ -4831,9 +4980,9 @@
             }
             switch (alt27) {
                 case 1 :
-                    // JS.g:1130:97: postfixOperator
+                    // JS.g:1132:97: postfixOperator
                     {
-                    pushFollow(FOLLOW_postfixOperator_in_postfixExpression4715);
+                    pushFollow(FOLLOW_postfixOperator_in_postfixExpression4738);
                     postfixOperator114=postfixOperator();
                     _fsp--;
 
@@ -4872,7 +5021,7 @@
     };
 
     // $ANTLR start postfixOperator
-    // JS.g:1133:1: postfixOperator : (op= INC | op= DEC );
+    // JS.g:1135:1: postfixOperator : (op= INC | op= DEC );
     public final postfixOperator_return postfixOperator() throws RecognitionException {
         postfixOperator_return retval = new postfixOperator_return();
         retval.start = input.LT(1);
@@ -4884,7 +5033,7 @@
         Object op_tree=null;
 
         try {
-            // JS.g:1134:2: (op= INC | op= DEC )
+            // JS.g:1136:2: (op= INC | op= DEC )
             int alt28=2;
             int LA28_0 = input.LA(1);
 
@@ -4896,18 +5045,18 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1133:1: postfixOperator : (op= INC | op= DEC );", 28, 0, input);
+                    new NoViableAltException("1135:1: postfixOperator : (op= INC | op= DEC );", 28, 0, input);
 
                 throw nvae;
             }
             switch (alt28) {
                 case 1 :
-                    // JS.g:1134:4: op= INC
+                    // JS.g:1136:4: op= INC
                     {
                     root_0 = (Object)adaptor.nil();
 
                     op=(Token)input.LT(1);
-                    match(input,INC,FOLLOW_INC_in_postfixOperator4733); 
+                    match(input,INC,FOLLOW_INC_in_postfixOperator4756); 
                     op_tree = (Object)adaptor.create(op);
                     adaptor.addChild(root_0, op_tree);
 
@@ -4916,12 +5065,12 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1135:4: op= DEC
+                    // JS.g:1137:4: op= DEC
                     {
                     root_0 = (Object)adaptor.nil();
 
                     op=(Token)input.LT(1);
-                    match(input,DEC,FOLLOW_DEC_in_postfixOperator4742); 
+                    match(input,DEC,FOLLOW_DEC_in_postfixOperator4765); 
                     op_tree = (Object)adaptor.create(op);
                     adaptor.addChild(root_0, op_tree);
 
@@ -4956,7 +5105,7 @@
     };
 
     // $ANTLR start unaryExpression
-    // JS.g:1142:1: unaryExpression : ( postfixExpression | unaryOperator unaryExpression );
+    // JS.g:1144:1: unaryExpression : ( postfixExpression | unaryOperator unaryExpression );
     public final unaryExpression_return unaryExpression() throws RecognitionException {
         unaryExpression_return retval = new unaryExpression_return();
         retval.start = input.LT(1);
@@ -4972,7 +5121,7 @@
 
 
         try {
-            // JS.g:1143:2: ( postfixExpression | unaryOperator unaryExpression )
+            // JS.g:1145:2: ( postfixExpression | unaryOperator unaryExpression )
             int alt29=2;
             int LA29_0 = input.LA(1);
 
@@ -4990,17 +5139,17 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1142:1: unaryExpression : ( postfixExpression | unaryOperator unaryExpression );", 29, 0, input);
+                    new NoViableAltException("1144:1: unaryExpression : ( postfixExpression | unaryOperator unaryExpression );", 29, 0, input);
 
                 throw nvae;
             }
             switch (alt29) {
                 case 1 :
-                    // JS.g:1143:4: postfixExpression
+                    // JS.g:1145:4: postfixExpression
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_postfixExpression_in_unaryExpression4759);
+                    pushFollow(FOLLOW_postfixExpression_in_unaryExpression4782);
                     postfixExpression115=postfixExpression();
                     _fsp--;
 
@@ -5009,16 +5158,16 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1144:4: unaryOperator unaryExpression
+                    // JS.g:1146:4: unaryOperator unaryExpression
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_unaryOperator_in_unaryExpression4764);
+                    pushFollow(FOLLOW_unaryOperator_in_unaryExpression4787);
                     unaryOperator116=unaryOperator();
                     _fsp--;
 
                     root_0 = (Object)adaptor.becomeRoot(unaryOperator116.getTree(), root_0);
-                    pushFollow(FOLLOW_unaryExpression_in_unaryExpression4767);
+                    pushFollow(FOLLOW_unaryExpression_in_unaryExpression4790);
                     unaryExpression117=unaryExpression();
                     _fsp--;
 
@@ -5053,7 +5202,7 @@
     };
 
     // $ANTLR start unaryOperator
-    // JS.g:1147:1: unaryOperator : ( DELETE | VOID | TYPEOF | INC | DEC | op= ADD | op= SUB | INV | NOT | YIELD );
+    // JS.g:1149:1: unaryOperator : ( DELETE | VOID | TYPEOF | INC | DEC | op= ADD | op= SUB | INV | NOT | YIELD );
     public final unaryOperator_return unaryOperator() throws RecognitionException {
         unaryOperator_return retval = new unaryOperator_return();
         retval.start = input.LT(1);
@@ -5081,7 +5230,7 @@
         Object YIELD125_tree=null;
 
         try {
-            // JS.g:1148:2: ( DELETE | VOID | TYPEOF | INC | DEC | op= ADD | op= SUB | INV | NOT | YIELD )
+            // JS.g:1150:2: ( DELETE | VOID | TYPEOF | INC | DEC | op= ADD | op= SUB | INV | NOT | YIELD )
             int alt30=10;
             switch ( input.LA(1) ) {
             case DELETE:
@@ -5136,19 +5285,19 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1147:1: unaryOperator : ( DELETE | VOID | TYPEOF | INC | DEC | op= ADD | op= SUB | INV | NOT | YIELD );", 30, 0, input);
+                    new NoViableAltException("1149:1: unaryOperator : ( DELETE | VOID | TYPEOF | INC | DEC | op= ADD | op= SUB | INV | NOT | YIELD );", 30, 0, input);
 
                 throw nvae;
             }
 
             switch (alt30) {
                 case 1 :
-                    // JS.g:1148:4: DELETE
+                    // JS.g:1150:4: DELETE
                     {
                     root_0 = (Object)adaptor.nil();
 
                     DELETE118=(Token)input.LT(1);
-                    match(input,DELETE,FOLLOW_DELETE_in_unaryOperator4779); 
+                    match(input,DELETE,FOLLOW_DELETE_in_unaryOperator4802); 
                     DELETE118_tree = (Object)adaptor.create(DELETE118);
                     adaptor.addChild(root_0, DELETE118_tree);
 
@@ -5156,12 +5305,12 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1149:4: VOID
+                    // JS.g:1151:4: VOID
                     {
                     root_0 = (Object)adaptor.nil();
 
                     VOID119=(Token)input.LT(1);
-                    match(input,VOID,FOLLOW_VOID_in_unaryOperator4784); 
+                    match(input,VOID,FOLLOW_VOID_in_unaryOperator4807); 
                     VOID119_tree = (Object)adaptor.create(VOID119);
                     adaptor.addChild(root_0, VOID119_tree);
 
@@ -5169,12 +5318,12 @@
                     }
                     break;
                 case 3 :
-                    // JS.g:1150:4: TYPEOF
+                    // JS.g:1152:4: TYPEOF
                     {
                     root_0 = (Object)adaptor.nil();
 
                     TYPEOF120=(Token)input.LT(1);
-                    match(input,TYPEOF,FOLLOW_TYPEOF_in_unaryOperator4789); 
+                    match(input,TYPEOF,FOLLOW_TYPEOF_in_unaryOperator4812); 
                     TYPEOF120_tree = (Object)adaptor.create(TYPEOF120);
                     adaptor.addChild(root_0, TYPEOF120_tree);
 
@@ -5182,12 +5331,12 @@
                     }
                     break;
                 case 4 :
-                    // JS.g:1151:4: INC
+                    // JS.g:1153:4: INC
                     {
                     root_0 = (Object)adaptor.nil();
 
                     INC121=(Token)input.LT(1);
-                    match(input,INC,FOLLOW_INC_in_unaryOperator4794); 
+                    match(input,INC,FOLLOW_INC_in_unaryOperator4817); 
                     INC121_tree = (Object)adaptor.create(INC121);
                     adaptor.addChild(root_0, INC121_tree);
 
@@ -5195,12 +5344,12 @@
                     }
                     break;
                 case 5 :
-                    // JS.g:1152:4: DEC
+                    // JS.g:1154:4: DEC
                     {
                     root_0 = (Object)adaptor.nil();
 
                     DEC122=(Token)input.LT(1);
-                    match(input,DEC,FOLLOW_DEC_in_unaryOperator4799); 
+                    match(input,DEC,FOLLOW_DEC_in_unaryOperator4822); 
                     DEC122_tree = (Object)adaptor.create(DEC122);
                     adaptor.addChild(root_0, DEC122_tree);
 
@@ -5208,12 +5357,12 @@
                     }
                     break;
                 case 6 :
-                    // JS.g:1153:4: op= ADD
+                    // JS.g:1155:4: op= ADD
                     {
                     root_0 = (Object)adaptor.nil();
 
                     op=(Token)input.LT(1);
-                    match(input,ADD,FOLLOW_ADD_in_unaryOperator4806); 
+                    match(input,ADD,FOLLOW_ADD_in_unaryOperator4829); 
                     op_tree = (Object)adaptor.create(op);
                     adaptor.addChild(root_0, op_tree);
 
@@ -5222,12 +5371,12 @@
                     }
                     break;
                 case 7 :
-                    // JS.g:1154:4: op= SUB
+                    // JS.g:1156:4: op= SUB
                     {
                     root_0 = (Object)adaptor.nil();
 
                     op=(Token)input.LT(1);
-                    match(input,SUB,FOLLOW_SUB_in_unaryOperator4815); 
+                    match(input,SUB,FOLLOW_SUB_in_unaryOperator4838); 
                     op_tree = (Object)adaptor.create(op);
                     adaptor.addChild(root_0, op_tree);
 
@@ -5236,12 +5385,12 @@
                     }
                     break;
                 case 8 :
-                    // JS.g:1155:4: INV
+                    // JS.g:1157:4: INV
                     {
                     root_0 = (Object)adaptor.nil();
 
                     INV123=(Token)input.LT(1);
-                    match(input,INV,FOLLOW_INV_in_unaryOperator4822); 
+                    match(input,INV,FOLLOW_INV_in_unaryOperator4845); 
                     INV123_tree = (Object)adaptor.create(INV123);
                     adaptor.addChild(root_0, INV123_tree);
 
@@ -5249,12 +5398,12 @@
                     }
                     break;
                 case 9 :
-                    // JS.g:1156:4: NOT
+                    // JS.g:1158:4: NOT
                     {
                     root_0 = (Object)adaptor.nil();
 
                     NOT124=(Token)input.LT(1);
-                    match(input,NOT,FOLLOW_NOT_in_unaryOperator4827); 
+                    match(input,NOT,FOLLOW_NOT_in_unaryOperator4850); 
                     NOT124_tree = (Object)adaptor.create(NOT124);
                     adaptor.addChild(root_0, NOT124_tree);
 
@@ -5262,12 +5411,12 @@
                     }
                     break;
                 case 10 :
-                    // JS.g:1157:4: YIELD
+                    // JS.g:1159:4: YIELD
                     {
                     root_0 = (Object)adaptor.nil();
 
                     YIELD125=(Token)input.LT(1);
-                    match(input,YIELD,FOLLOW_YIELD_in_unaryOperator4832); 
+                    match(input,YIELD,FOLLOW_YIELD_in_unaryOperator4855); 
                     YIELD125_tree = (Object)adaptor.create(YIELD125);
                     adaptor.addChild(root_0, YIELD125_tree);
 
@@ -5301,7 +5450,7 @@
     };
 
     // $ANTLR start namespaceStatement
-    // JS.g:1162:1: namespaceStatement : {...}? => DEFAULT WXML NAMESPACE ASSIGN expression semic -> ^( DEFAULT_XML_NAMESPACE DEFAULT WXML ASSIGN expression ) ;
+    // JS.g:1164:1: namespaceStatement : {...}? => DEFAULT WXML NAMESPACE ASSIGN expression semic -> ^( DEFAULT_XML_NAMESPACE DEFAULT WXML ASSIGN expression ) ;
     public final namespaceStatement_return namespaceStatement() throws RecognitionException {
         namespaceStatement_return retval = new namespaceStatement_return();
         retval.start = input.LT(1);
@@ -5328,41 +5477,41 @@
         RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
         RewriteRuleSubtreeStream stream_semic=new RewriteRuleSubtreeStream(adaptor,"rule semic");
         try {
-            // JS.g:1163:3: ({...}? => DEFAULT WXML NAMESPACE ASSIGN expression semic -> ^( DEFAULT_XML_NAMESPACE DEFAULT WXML ASSIGN expression ) )
-            // JS.g:1163:5: {...}? => DEFAULT WXML NAMESPACE ASSIGN expression semic
+            // JS.g:1165:3: ({...}? => DEFAULT WXML NAMESPACE ASSIGN expression semic -> ^( DEFAULT_XML_NAMESPACE DEFAULT WXML ASSIGN expression ) )
+            // JS.g:1165:5: {...}? => DEFAULT WXML NAMESPACE ASSIGN expression semic
             {
             if ( !( isXmlEnabled() ) ) {
                 throw new FailedPredicateException(input, "namespaceStatement", " isXmlEnabled() ");
             }
             DEFAULT126=(Token)input.LT(1);
-            match(input,DEFAULT,FOLLOW_DEFAULT_in_namespaceStatement4849); 
+            match(input,DEFAULT,FOLLOW_DEFAULT_in_namespaceStatement4872); 
             stream_DEFAULT.add(DEFAULT126);
 
             WXML127=(Token)input.LT(1);
-            match(input,WXML,FOLLOW_WXML_in_namespaceStatement4851); 
+            match(input,WXML,FOLLOW_WXML_in_namespaceStatement4874); 
             stream_WXML.add(WXML127);
 
             NAMESPACE128=(Token)input.LT(1);
-            match(input,NAMESPACE,FOLLOW_NAMESPACE_in_namespaceStatement4853); 
+            match(input,NAMESPACE,FOLLOW_NAMESPACE_in_namespaceStatement4876); 
             stream_NAMESPACE.add(NAMESPACE128);
 
             ASSIGN129=(Token)input.LT(1);
-            match(input,ASSIGN,FOLLOW_ASSIGN_in_namespaceStatement4855); 
+            match(input,ASSIGN,FOLLOW_ASSIGN_in_namespaceStatement4878); 
             stream_ASSIGN.add(ASSIGN129);
 
-            pushFollow(FOLLOW_expression_in_namespaceStatement4857);
+            pushFollow(FOLLOW_expression_in_namespaceStatement4880);
             expression130=expression();
             _fsp--;
 
             stream_expression.add(expression130.getTree());
-            pushFollow(FOLLOW_semic_in_namespaceStatement4859);
+            pushFollow(FOLLOW_semic_in_namespaceStatement4882);
             semic131=semic();
             _fsp--;
 
             stream_semic.add(semic131.getTree());
 
             // AST REWRITE
-            // elements: expression, DEFAULT, ASSIGN, WXML
+            // elements: WXML, DEFAULT, expression, ASSIGN
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -5371,9 +5520,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1164:5: -> ^( DEFAULT_XML_NAMESPACE DEFAULT WXML ASSIGN expression )
+            // 1166:5: -> ^( DEFAULT_XML_NAMESPACE DEFAULT WXML ASSIGN expression )
             {
-                // JS.g:1164:8: ^( DEFAULT_XML_NAMESPACE DEFAULT WXML ASSIGN expression )
+                // JS.g:1166:8: ^( DEFAULT_XML_NAMESPACE DEFAULT WXML ASSIGN expression )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(DEFAULT_XML_NAMESPACE, "DEFAULT_XML_NAMESPACE"), root_1);
@@ -5417,7 +5566,7 @@
     };
 
     // $ANTLR start multiplicativeExpression
-    // JS.g:1169:1: multiplicativeExpression : unaryExpression ( ( MUL | DIV | MOD ) unaryExpression )* ;
+    // JS.g:1171:1: multiplicativeExpression : unaryExpression ( ( MUL | DIV | MOD ) unaryExpression )* ;
     public final multiplicativeExpression_return multiplicativeExpression() throws RecognitionException {
         multiplicativeExpression_return retval = new multiplicativeExpression_return();
         retval.start = input.LT(1);
@@ -5433,17 +5582,17 @@
         Object set133_tree=null;
 
         try {
-            // JS.g:1170:2: ( unaryExpression ( ( MUL | DIV | MOD ) unaryExpression )* )
-            // JS.g:1170:4: unaryExpression ( ( MUL | DIV | MOD ) unaryExpression )*
+            // JS.g:1172:2: ( unaryExpression ( ( MUL | DIV | MOD ) unaryExpression )* )
+            // JS.g:1172:4: unaryExpression ( ( MUL | DIV | MOD ) unaryExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression4891);
+            pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression4914);
             unaryExpression132=unaryExpression();
             _fsp--;
 
             adaptor.addChild(root_0, unaryExpression132.getTree());
-            // JS.g:1170:20: ( ( MUL | DIV | MOD ) unaryExpression )*
+            // JS.g:1172:20: ( ( MUL | DIV | MOD ) unaryExpression )*
             loop31:
             do {
                 int alt31=2;
@@ -5456,7 +5605,7 @@
 
                 switch (alt31) {
             	case 1 :
-            	    // JS.g:1170:22: ( MUL | DIV | MOD ) unaryExpression
+            	    // JS.g:1172:22: ( MUL | DIV | MOD ) unaryExpression
             	    {
             	    set133=(Token)input.LT(1);
             	    if ( (input.LA(1)>=MUL && input.LA(1)<=MOD)||input.LA(1)==DIV ) {
@@ -5467,10 +5616,10 @@
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_multiplicativeExpression4895);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_multiplicativeExpression4918);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression4910);
+            	    pushFollow(FOLLOW_unaryExpression_in_multiplicativeExpression4933);
             	    unaryExpression134=unaryExpression();
             	    _fsp--;
 
@@ -5512,7 +5661,7 @@
     };
 
     // $ANTLR start additiveExpression
-    // JS.g:1177:1: additiveExpression : multiplicativeExpression ( ( ADD | SUB ) multiplicativeExpression )* ;
+    // JS.g:1179:1: additiveExpression : multiplicativeExpression ( ( ADD | SUB ) multiplicativeExpression )* ;
     public final additiveExpression_return additiveExpression() throws RecognitionException {
         additiveExpression_return retval = new additiveExpression_return();
         retval.start = input.LT(1);
@@ -5528,17 +5677,17 @@
         Object set136_tree=null;
 
         try {
-            // JS.g:1178:2: ( multiplicativeExpression ( ( ADD | SUB ) multiplicativeExpression )* )
-            // JS.g:1178:4: multiplicativeExpression ( ( ADD | SUB ) multiplicativeExpression )*
+            // JS.g:1180:2: ( multiplicativeExpression ( ( ADD | SUB ) multiplicativeExpression )* )
+            // JS.g:1180:4: multiplicativeExpression ( ( ADD | SUB ) multiplicativeExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression4928);
+            pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression4951);
             multiplicativeExpression135=multiplicativeExpression();
             _fsp--;
 
             adaptor.addChild(root_0, multiplicativeExpression135.getTree());
-            // JS.g:1178:29: ( ( ADD | SUB ) multiplicativeExpression )*
+            // JS.g:1180:29: ( ( ADD | SUB ) multiplicativeExpression )*
             loop32:
             do {
                 int alt32=2;
@@ -5551,7 +5700,7 @@
 
                 switch (alt32) {
             	case 1 :
-            	    // JS.g:1178:31: ( ADD | SUB ) multiplicativeExpression
+            	    // JS.g:1180:31: ( ADD | SUB ) multiplicativeExpression
             	    {
             	    set136=(Token)input.LT(1);
             	    if ( (input.LA(1)>=ADD && input.LA(1)<=SUB) ) {
@@ -5562,10 +5711,10 @@
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_additiveExpression4932);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_additiveExpression4955);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression4943);
+            	    pushFollow(FOLLOW_multiplicativeExpression_in_additiveExpression4966);
             	    multiplicativeExpression137=multiplicativeExpression();
             	    _fsp--;
 
@@ -5607,7 +5756,7 @@
     };
 
     // $ANTLR start shiftExpression
-    // JS.g:1185:1: shiftExpression : additiveExpression ( ( SHL | SHR | SHU ) additiveExpression )* ;
+    // JS.g:1187:1: shiftExpression : additiveExpression ( ( SHL | SHR | SHU ) additiveExpression )* ;
     public final shiftExpression_return shiftExpression() throws RecognitionException {
         shiftExpression_return retval = new shiftExpression_return();
         retval.start = input.LT(1);
@@ -5623,17 +5772,17 @@
         Object set139_tree=null;
 
         try {
-            // JS.g:1186:2: ( additiveExpression ( ( SHL | SHR | SHU ) additiveExpression )* )
-            // JS.g:1186:4: additiveExpression ( ( SHL | SHR | SHU ) additiveExpression )*
+            // JS.g:1188:2: ( additiveExpression ( ( SHL | SHR | SHU ) additiveExpression )* )
+            // JS.g:1188:4: additiveExpression ( ( SHL | SHR | SHU ) additiveExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_additiveExpression_in_shiftExpression4962);
+            pushFollow(FOLLOW_additiveExpression_in_shiftExpression4985);
             additiveExpression138=additiveExpression();
             _fsp--;
 
             adaptor.addChild(root_0, additiveExpression138.getTree());
-            // JS.g:1186:23: ( ( SHL | SHR | SHU ) additiveExpression )*
+            // JS.g:1188:23: ( ( SHL | SHR | SHU ) additiveExpression )*
             loop33:
             do {
                 int alt33=2;
@@ -5646,7 +5795,7 @@
 
                 switch (alt33) {
             	case 1 :
-            	    // JS.g:1186:25: ( SHL | SHR | SHU ) additiveExpression
+            	    // JS.g:1188:25: ( SHL | SHR | SHU ) additiveExpression
             	    {
             	    set139=(Token)input.LT(1);
             	    if ( (input.LA(1)>=SHL && input.LA(1)<=SHU) ) {
@@ -5657,10 +5806,10 @@
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_shiftExpression4966);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_shiftExpression4989);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_additiveExpression_in_shiftExpression4981);
+            	    pushFollow(FOLLOW_additiveExpression_in_shiftExpression5004);
             	    additiveExpression140=additiveExpression();
             	    _fsp--;
 
@@ -5702,7 +5851,7 @@
     };
 
     // $ANTLR start relationalExpression
-    // JS.g:1193:1: relationalExpression : shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression )* ;
+    // JS.g:1195:1: relationalExpression : shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression )* ;
     public final relationalExpression_return relationalExpression() throws RecognitionException {
         relationalExpression_return retval = new relationalExpression_return();
         retval.start = input.LT(1);
@@ -5718,17 +5867,17 @@
         Object set142_tree=null;
 
         try {
-            // JS.g:1194:2: ( shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression )* )
-            // JS.g:1194:4: shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression )*
+            // JS.g:1196:2: ( shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression )* )
+            // JS.g:1196:4: shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_shiftExpression_in_relationalExpression5000);
+            pushFollow(FOLLOW_shiftExpression_in_relationalExpression5023);
             shiftExpression141=shiftExpression();
             _fsp--;
 
             adaptor.addChild(root_0, shiftExpression141.getTree());
-            // JS.g:1194:20: ( ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression )*
+            // JS.g:1196:20: ( ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression )*
             loop34:
             do {
                 int alt34=2;
@@ -5741,7 +5890,7 @@
 
                 switch (alt34) {
             	case 1 :
-            	    // JS.g:1194:22: ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression
+            	    // JS.g:1196:22: ( LT | GT | LTE | GTE | INSTANCEOF | IN ) shiftExpression
             	    {
             	    set142=(Token)input.LT(1);
             	    if ( (input.LA(1)>=IN && input.LA(1)<=INSTANCEOF)||(input.LA(1)>=LT && input.LA(1)<=GTE) ) {
@@ -5752,10 +5901,10 @@
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_relationalExpression5004);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_relationalExpression5027);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_shiftExpression_in_relationalExpression5031);
+            	    pushFollow(FOLLOW_shiftExpression_in_relationalExpression5054);
             	    shiftExpression143=shiftExpression();
             	    _fsp--;
 
@@ -5797,7 +5946,7 @@
     };
 
     // $ANTLR start relationalExpressionNoIn
-    // JS.g:1197:1: relationalExpressionNoIn : shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression )* ;
+    // JS.g:1199:1: relationalExpressionNoIn : shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression )* ;
     public final relationalExpressionNoIn_return relationalExpressionNoIn() throws RecognitionException {
         relationalExpressionNoIn_return retval = new relationalExpressionNoIn_return();
         retval.start = input.LT(1);
@@ -5813,17 +5962,17 @@
         Object set145_tree=null;
 
         try {
-            // JS.g:1198:2: ( shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression )* )
-            // JS.g:1198:4: shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression )*
+            // JS.g:1200:2: ( shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression )* )
+            // JS.g:1200:4: shiftExpression ( ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_shiftExpression_in_relationalExpressionNoIn5045);
+            pushFollow(FOLLOW_shiftExpression_in_relationalExpressionNoIn5068);
             shiftExpression144=shiftExpression();
             _fsp--;
 
             adaptor.addChild(root_0, shiftExpression144.getTree());
-            // JS.g:1198:20: ( ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression )*
+            // JS.g:1200:20: ( ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression )*
             loop35:
             do {
                 int alt35=2;
@@ -5836,7 +5985,7 @@
 
                 switch (alt35) {
             	case 1 :
-            	    // JS.g:1198:22: ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression
+            	    // JS.g:1200:22: ( LT | GT | LTE | GTE | INSTANCEOF ) shiftExpression
             	    {
             	    set145=(Token)input.LT(1);
             	    if ( input.LA(1)==INSTANCEOF||(input.LA(1)>=LT && input.LA(1)<=GTE) ) {
@@ -5847,10 +5996,10 @@
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_relationalExpressionNoIn5049);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_relationalExpressionNoIn5072);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_shiftExpression_in_relationalExpressionNoIn5072);
+            	    pushFollow(FOLLOW_shiftExpression_in_relationalExpressionNoIn5095);
             	    shiftExpression146=shiftExpression();
             	    _fsp--;
 
@@ -5892,7 +6041,7 @@
     };
 
     // $ANTLR start equalityExpression
-    // JS.g:1205:1: equalityExpression : relationalExpression ( ( EQ | NEQ | SAME | NSAME ) relationalExpression )* ;
+    // JS.g:1207:1: equalityExpression : relationalExpression ( ( EQ | NEQ | SAME | NSAME ) relationalExpression )* ;
     public final equalityExpression_return equalityExpression() throws RecognitionException {
         equalityExpression_return retval = new equalityExpression_return();
         retval.start = input.LT(1);
@@ -5908,17 +6057,17 @@
         Object set148_tree=null;
 
         try {
-            // JS.g:1206:2: ( relationalExpression ( ( EQ | NEQ | SAME | NSAME ) relationalExpression )* )
-            // JS.g:1206:4: relationalExpression ( ( EQ | NEQ | SAME | NSAME ) relationalExpression )*
+            // JS.g:1208:2: ( relationalExpression ( ( EQ | NEQ | SAME | NSAME ) relationalExpression )* )
+            // JS.g:1208:4: relationalExpression ( ( EQ | NEQ | SAME | NSAME ) relationalExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_relationalExpression_in_equalityExpression5091);
+            pushFollow(FOLLOW_relationalExpression_in_equalityExpression5114);
             relationalExpression147=relationalExpression();
             _fsp--;
 
             adaptor.addChild(root_0, relationalExpression147.getTree());
-            // JS.g:1206:25: ( ( EQ | NEQ | SAME | NSAME ) relationalExpression )*
+            // JS.g:1208:25: ( ( EQ | NEQ | SAME | NSAME ) relationalExpression )*
             loop36:
             do {
                 int alt36=2;
@@ -5931,7 +6080,7 @@
 
                 switch (alt36) {
             	case 1 :
-            	    // JS.g:1206:27: ( EQ | NEQ | SAME | NSAME ) relationalExpression
+            	    // JS.g:1208:27: ( EQ | NEQ | SAME | NSAME ) relationalExpression
             	    {
             	    set148=(Token)input.LT(1);
             	    if ( (input.LA(1)>=EQ && input.LA(1)<=NSAME) ) {
@@ -5942,10 +6091,10 @@
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_equalityExpression5095);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_equalityExpression5118);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_relationalExpression_in_equalityExpression5114);
+            	    pushFollow(FOLLOW_relationalExpression_in_equalityExpression5137);
             	    relationalExpression149=relationalExpression();
             	    _fsp--;
 
@@ -5987,7 +6136,7 @@
     };
 
     // $ANTLR start equalityExpressionNoIn
-    // JS.g:1209:1: equalityExpressionNoIn : relationalExpressionNoIn ( ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn )* ;
+    // JS.g:1211:1: equalityExpressionNoIn : relationalExpressionNoIn ( ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn )* ;
     public final equalityExpressionNoIn_return equalityExpressionNoIn() throws RecognitionException {
         equalityExpressionNoIn_return retval = new equalityExpressionNoIn_return();
         retval.start = input.LT(1);
@@ -6003,17 +6152,17 @@
         Object set151_tree=null;
 
         try {
-            // JS.g:1210:2: ( relationalExpressionNoIn ( ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn )* )
-            // JS.g:1210:4: relationalExpressionNoIn ( ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn )*
+            // JS.g:1212:2: ( relationalExpressionNoIn ( ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn )* )
+            // JS.g:1212:4: relationalExpressionNoIn ( ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_relationalExpressionNoIn_in_equalityExpressionNoIn5128);
+            pushFollow(FOLLOW_relationalExpressionNoIn_in_equalityExpressionNoIn5151);
             relationalExpressionNoIn150=relationalExpressionNoIn();
             _fsp--;
 
             adaptor.addChild(root_0, relationalExpressionNoIn150.getTree());
-            // JS.g:1210:29: ( ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn )*
+            // JS.g:1212:29: ( ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn )*
             loop37:
             do {
                 int alt37=2;
@@ -6026,7 +6175,7 @@
 
                 switch (alt37) {
             	case 1 :
-            	    // JS.g:1210:31: ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn
+            	    // JS.g:1212:31: ( EQ | NEQ | SAME | NSAME ) relationalExpressionNoIn
             	    {
             	    set151=(Token)input.LT(1);
             	    if ( (input.LA(1)>=EQ && input.LA(1)<=NSAME) ) {
@@ -6037,10 +6186,10 @@
             	    else {
             	        MismatchedSetException mse =
             	            new MismatchedSetException(null,input);
-            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_equalityExpressionNoIn5132);    throw mse;
+            	        recoverFromMismatchedSet(input,mse,FOLLOW_set_in_equalityExpressionNoIn5155);    throw mse;
             	    }
 
-            	    pushFollow(FOLLOW_relationalExpressionNoIn_in_equalityExpressionNoIn5151);
+            	    pushFollow(FOLLOW_relationalExpressionNoIn_in_equalityExpressionNoIn5174);
             	    relationalExpressionNoIn152=relationalExpressionNoIn();
             	    _fsp--;
 
@@ -6082,7 +6231,7 @@
     };
 
     // $ANTLR start bitwiseANDExpression
-    // JS.g:1217:1: bitwiseANDExpression : equalityExpression ( AND equalityExpression )* ;
+    // JS.g:1219:1: bitwiseANDExpression : equalityExpression ( AND equalityExpression )* ;
     public final bitwiseANDExpression_return bitwiseANDExpression() throws RecognitionException {
         bitwiseANDExpression_return retval = new bitwiseANDExpression_return();
         retval.start = input.LT(1);
@@ -6098,17 +6247,17 @@
         Object AND154_tree=null;
 
         try {
-            // JS.g:1218:2: ( equalityExpression ( AND equalityExpression )* )
-            // JS.g:1218:4: equalityExpression ( AND equalityExpression )*
+            // JS.g:1220:2: ( equalityExpression ( AND equalityExpression )* )
+            // JS.g:1220:4: equalityExpression ( AND equalityExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_equalityExpression_in_bitwiseANDExpression5171);
+            pushFollow(FOLLOW_equalityExpression_in_bitwiseANDExpression5194);
             equalityExpression153=equalityExpression();
             _fsp--;
 
             adaptor.addChild(root_0, equalityExpression153.getTree());
-            // JS.g:1218:23: ( AND equalityExpression )*
+            // JS.g:1220:23: ( AND equalityExpression )*
             loop38:
             do {
                 int alt38=2;
@@ -6121,14 +6270,14 @@
 
                 switch (alt38) {
             	case 1 :
-            	    // JS.g:1218:25: AND equalityExpression
+            	    // JS.g:1220:25: AND equalityExpression
             	    {
             	    AND154=(Token)input.LT(1);
-            	    match(input,AND,FOLLOW_AND_in_bitwiseANDExpression5175); 
+            	    match(input,AND,FOLLOW_AND_in_bitwiseANDExpression5198); 
             	    AND154_tree = (Object)adaptor.create(AND154);
             	    root_0 = (Object)adaptor.becomeRoot(AND154_tree, root_0);
 
-            	    pushFollow(FOLLOW_equalityExpression_in_bitwiseANDExpression5178);
+            	    pushFollow(FOLLOW_equalityExpression_in_bitwiseANDExpression5201);
             	    equalityExpression155=equalityExpression();
             	    _fsp--;
 
@@ -6170,7 +6319,7 @@
     };
 
     // $ANTLR start bitwiseANDExpressionNoIn
-    // JS.g:1221:1: bitwiseANDExpressionNoIn : equalityExpressionNoIn ( AND equalityExpressionNoIn )* ;
+    // JS.g:1223:1: bitwiseANDExpressionNoIn : equalityExpressionNoIn ( AND equalityExpressionNoIn )* ;
     public final bitwiseANDExpressionNoIn_return bitwiseANDExpressionNoIn() throws RecognitionException {
         bitwiseANDExpressionNoIn_return retval = new bitwiseANDExpressionNoIn_return();
         retval.start = input.LT(1);
@@ -6186,17 +6335,17 @@
         Object AND157_tree=null;
 
         try {
-            // JS.g:1222:2: ( equalityExpressionNoIn ( AND equalityExpressionNoIn )* )
-            // JS.g:1222:4: equalityExpressionNoIn ( AND equalityExpressionNoIn )*
+            // JS.g:1224:2: ( equalityExpressionNoIn ( AND equalityExpressionNoIn )* )
+            // JS.g:1224:4: equalityExpressionNoIn ( AND equalityExpressionNoIn )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_equalityExpressionNoIn_in_bitwiseANDExpressionNoIn5192);
+            pushFollow(FOLLOW_equalityExpressionNoIn_in_bitwiseANDExpressionNoIn5215);
             equalityExpressionNoIn156=equalityExpressionNoIn();
             _fsp--;
 
             adaptor.addChild(root_0, equalityExpressionNoIn156.getTree());
-            // JS.g:1222:27: ( AND equalityExpressionNoIn )*
+            // JS.g:1224:27: ( AND equalityExpressionNoIn )*
             loop39:
             do {
                 int alt39=2;
@@ -6209,14 +6358,14 @@
 
                 switch (alt39) {
             	case 1 :
-            	    // JS.g:1222:29: AND equalityExpressionNoIn
+            	    // JS.g:1224:29: AND equalityExpressionNoIn
             	    {
             	    AND157=(Token)input.LT(1);
-            	    match(input,AND,FOLLOW_AND_in_bitwiseANDExpressionNoIn5196); 
+            	    match(input,AND,FOLLOW_AND_in_bitwiseANDExpressionNoIn5219); 
             	    AND157_tree = (Object)adaptor.create(AND157);
             	    root_0 = (Object)adaptor.becomeRoot(AND157_tree, root_0);
 
-            	    pushFollow(FOLLOW_equalityExpressionNoIn_in_bitwiseANDExpressionNoIn5199);
+            	    pushFollow(FOLLOW_equalityExpressionNoIn_in_bitwiseANDExpressionNoIn5222);
             	    equalityExpressionNoIn158=equalityExpressionNoIn();
             	    _fsp--;
 
@@ -6258,7 +6407,7 @@
     };
 
     // $ANTLR start bitwiseXORExpression
-    // JS.g:1225:1: bitwiseXORExpression : bitwiseANDExpression ( XOR bitwiseANDExpression )* ;
+    // JS.g:1227:1: bitwiseXORExpression : bitwiseANDExpression ( XOR bitwiseANDExpression )* ;
     public final bitwiseXORExpression_return bitwiseXORExpression() throws RecognitionException {
         bitwiseXORExpression_return retval = new bitwiseXORExpression_return();
         retval.start = input.LT(1);
@@ -6274,17 +6423,17 @@
         Object XOR160_tree=null;
 
         try {
-            // JS.g:1226:2: ( bitwiseANDExpression ( XOR bitwiseANDExpression )* )
-            // JS.g:1226:4: bitwiseANDExpression ( XOR bitwiseANDExpression )*
+            // JS.g:1228:2: ( bitwiseANDExpression ( XOR bitwiseANDExpression )* )
+            // JS.g:1228:4: bitwiseANDExpression ( XOR bitwiseANDExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_bitwiseANDExpression_in_bitwiseXORExpression5215);
+            pushFollow(FOLLOW_bitwiseANDExpression_in_bitwiseXORExpression5238);
             bitwiseANDExpression159=bitwiseANDExpression();
             _fsp--;
 
             adaptor.addChild(root_0, bitwiseANDExpression159.getTree());
-            // JS.g:1226:25: ( XOR bitwiseANDExpression )*
+            // JS.g:1228:25: ( XOR bitwiseANDExpression )*
             loop40:
             do {
                 int alt40=2;
@@ -6297,14 +6446,14 @@
 
                 switch (alt40) {
             	case 1 :
-            	    // JS.g:1226:27: XOR bitwiseANDExpression
+            	    // JS.g:1228:27: XOR bitwiseANDExpression
             	    {
             	    XOR160=(Token)input.LT(1);
-            	    match(input,XOR,FOLLOW_XOR_in_bitwiseXORExpression5219); 
+            	    match(input,XOR,FOLLOW_XOR_in_bitwiseXORExpression5242); 
             	    XOR160_tree = (Object)adaptor.create(XOR160);
             	    root_0 = (Object)adaptor.becomeRoot(XOR160_tree, root_0);
 
-            	    pushFollow(FOLLOW_bitwiseANDExpression_in_bitwiseXORExpression5222);
+            	    pushFollow(FOLLOW_bitwiseANDExpression_in_bitwiseXORExpression5245);
             	    bitwiseANDExpression161=bitwiseANDExpression();
             	    _fsp--;
 
@@ -6346,7 +6495,7 @@
     };
 
     // $ANTLR start bitwiseXORExpressionNoIn
-    // JS.g:1229:1: bitwiseXORExpressionNoIn : bitwiseANDExpressionNoIn ( XOR bitwiseANDExpressionNoIn )* ;
+    // JS.g:1231:1: bitwiseXORExpressionNoIn : bitwiseANDExpressionNoIn ( XOR bitwiseANDExpressionNoIn )* ;
     public final bitwiseXORExpressionNoIn_return bitwiseXORExpressionNoIn() throws RecognitionException {
         bitwiseXORExpressionNoIn_return retval = new bitwiseXORExpressionNoIn_return();
         retval.start = input.LT(1);
@@ -6362,17 +6511,17 @@
         Object XOR163_tree=null;
 
         try {
-            // JS.g:1230:2: ( bitwiseANDExpressionNoIn ( XOR bitwiseANDExpressionNoIn )* )
-            // JS.g:1230:4: bitwiseANDExpressionNoIn ( XOR bitwiseANDExpressionNoIn )*
+            // JS.g:1232:2: ( bitwiseANDExpressionNoIn ( XOR bitwiseANDExpressionNoIn )* )
+            // JS.g:1232:4: bitwiseANDExpressionNoIn ( XOR bitwiseANDExpressionNoIn )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_bitwiseANDExpressionNoIn_in_bitwiseXORExpressionNoIn5238);
+            pushFollow(FOLLOW_bitwiseANDExpressionNoIn_in_bitwiseXORExpressionNoIn5261);
             bitwiseANDExpressionNoIn162=bitwiseANDExpressionNoIn();
             _fsp--;
 
             adaptor.addChild(root_0, bitwiseANDExpressionNoIn162.getTree());
-            // JS.g:1230:29: ( XOR bitwiseANDExpressionNoIn )*
+            // JS.g:1232:29: ( XOR bitwiseANDExpressionNoIn )*
             loop41:
             do {
                 int alt41=2;
@@ -6385,14 +6534,14 @@
 
                 switch (alt41) {
             	case 1 :
-            	    // JS.g:1230:31: XOR bitwiseANDExpressionNoIn
+            	    // JS.g:1232:31: XOR bitwiseANDExpressionNoIn
             	    {
             	    XOR163=(Token)input.LT(1);
-            	    match(input,XOR,FOLLOW_XOR_in_bitwiseXORExpressionNoIn5242); 
+            	    match(input,XOR,FOLLOW_XOR_in_bitwiseXORExpressionNoIn5265); 
             	    XOR163_tree = (Object)adaptor.create(XOR163);
             	    root_0 = (Object)adaptor.becomeRoot(XOR163_tree, root_0);
 
-            	    pushFollow(FOLLOW_bitwiseANDExpressionNoIn_in_bitwiseXORExpressionNoIn5245);
+            	    pushFollow(FOLLOW_bitwiseANDExpressionNoIn_in_bitwiseXORExpressionNoIn5268);
             	    bitwiseANDExpressionNoIn164=bitwiseANDExpressionNoIn();
             	    _fsp--;
 
@@ -6434,7 +6583,7 @@
     };
 
     // $ANTLR start bitwiseORExpression
-    // JS.g:1233:1: bitwiseORExpression : bitwiseXORExpression ( OR bitwiseXORExpression )* ;
+    // JS.g:1235:1: bitwiseORExpression : bitwiseXORExpression ( OR bitwiseXORExpression )* ;
     public final bitwiseORExpression_return bitwiseORExpression() throws RecognitionException {
         bitwiseORExpression_return retval = new bitwiseORExpression_return();
         retval.start = input.LT(1);
@@ -6450,17 +6599,17 @@
         Object OR166_tree=null;
 
         try {
-            // JS.g:1234:2: ( bitwiseXORExpression ( OR bitwiseXORExpression )* )
-            // JS.g:1234:4: bitwiseXORExpression ( OR bitwiseXORExpression )*
+            // JS.g:1236:2: ( bitwiseXORExpression ( OR bitwiseXORExpression )* )
+            // JS.g:1236:4: bitwiseXORExpression ( OR bitwiseXORExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_bitwiseXORExpression_in_bitwiseORExpression5260);
+            pushFollow(FOLLOW_bitwiseXORExpression_in_bitwiseORExpression5283);
             bitwiseXORExpression165=bitwiseXORExpression();
             _fsp--;
 
             adaptor.addChild(root_0, bitwiseXORExpression165.getTree());
-            // JS.g:1234:25: ( OR bitwiseXORExpression )*
+            // JS.g:1236:25: ( OR bitwiseXORExpression )*
             loop42:
             do {
                 int alt42=2;
@@ -6473,14 +6622,14 @@
 
                 switch (alt42) {
             	case 1 :
-            	    // JS.g:1234:27: OR bitwiseXORExpression
+            	    // JS.g:1236:27: OR bitwiseXORExpression
             	    {
             	    OR166=(Token)input.LT(1);
-            	    match(input,OR,FOLLOW_OR_in_bitwiseORExpression5264); 
+            	    match(input,OR,FOLLOW_OR_in_bitwiseORExpression5287); 
             	    OR166_tree = (Object)adaptor.create(OR166);
             	    root_0 = (Object)adaptor.becomeRoot(OR166_tree, root_0);
 
-            	    pushFollow(FOLLOW_bitwiseXORExpression_in_bitwiseORExpression5267);
+            	    pushFollow(FOLLOW_bitwiseXORExpression_in_bitwiseORExpression5290);
             	    bitwiseXORExpression167=bitwiseXORExpression();
             	    _fsp--;
 
@@ -6522,7 +6671,7 @@
     };
 
     // $ANTLR start bitwiseORExpressionNoIn
-    // JS.g:1237:1: bitwiseORExpressionNoIn : bitwiseXORExpressionNoIn ( OR bitwiseXORExpressionNoIn )* ;
+    // JS.g:1239:1: bitwiseORExpressionNoIn : bitwiseXORExpressionNoIn ( OR bitwiseXORExpressionNoIn )* ;
     public final bitwiseORExpressionNoIn_return bitwiseORExpressionNoIn() throws RecognitionException {
         bitwiseORExpressionNoIn_return retval = new bitwiseORExpressionNoIn_return();
         retval.start = input.LT(1);
@@ -6538,17 +6687,17 @@
         Object OR169_tree=null;
 
         try {
-            // JS.g:1238:2: ( bitwiseXORExpressionNoIn ( OR bitwiseXORExpressionNoIn )* )
-            // JS.g:1238:4: bitwiseXORExpressionNoIn ( OR bitwiseXORExpressionNoIn )*
+            // JS.g:1240:2: ( bitwiseXORExpressionNoIn ( OR bitwiseXORExpressionNoIn )* )
+            // JS.g:1240:4: bitwiseXORExpressionNoIn ( OR bitwiseXORExpressionNoIn )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_bitwiseXORExpressionNoIn_in_bitwiseORExpressionNoIn5282);
+            pushFollow(FOLLOW_bitwiseXORExpressionNoIn_in_bitwiseORExpressionNoIn5305);
             bitwiseXORExpressionNoIn168=bitwiseXORExpressionNoIn();
             _fsp--;
 
             adaptor.addChild(root_0, bitwiseXORExpressionNoIn168.getTree());
-            // JS.g:1238:29: ( OR bitwiseXORExpressionNoIn )*
+            // JS.g:1240:29: ( OR bitwiseXORExpressionNoIn )*
             loop43:
             do {
                 int alt43=2;
@@ -6561,14 +6710,14 @@
 
                 switch (alt43) {
             	case 1 :
-            	    // JS.g:1238:31: OR bitwiseXORExpressionNoIn
+            	    // JS.g:1240:31: OR bitwiseXORExpressionNoIn
             	    {
             	    OR169=(Token)input.LT(1);
-            	    match(input,OR,FOLLOW_OR_in_bitwiseORExpressionNoIn5286); 
+            	    match(input,OR,FOLLOW_OR_in_bitwiseORExpressionNoIn5309); 
             	    OR169_tree = (Object)adaptor.create(OR169);
             	    root_0 = (Object)adaptor.becomeRoot(OR169_tree, root_0);
 
-            	    pushFollow(FOLLOW_bitwiseXORExpressionNoIn_in_bitwiseORExpressionNoIn5289);
+            	    pushFollow(FOLLOW_bitwiseXORExpressionNoIn_in_bitwiseORExpressionNoIn5312);
             	    bitwiseXORExpressionNoIn170=bitwiseXORExpressionNoIn();
             	    _fsp--;
 
@@ -6610,7 +6759,7 @@
     };
 
     // $ANTLR start logicalANDExpression
-    // JS.g:1245:1: logicalANDExpression : bitwiseORExpression ( LAND bitwiseORExpression )* ;
+    // JS.g:1247:1: logicalANDExpression : bitwiseORExpression ( LAND bitwiseORExpression )* ;
     public final logicalANDExpression_return logicalANDExpression() throws RecognitionException {
         logicalANDExpression_return retval = new logicalANDExpression_return();
         retval.start = input.LT(1);
@@ -6626,17 +6775,17 @@
         Object LAND172_tree=null;
 
         try {
-            // JS.g:1246:2: ( bitwiseORExpression ( LAND bitwiseORExpression )* )
-            // JS.g:1246:4: bitwiseORExpression ( LAND bitwiseORExpression )*
+            // JS.g:1248:2: ( bitwiseORExpression ( LAND bitwiseORExpression )* )
+            // JS.g:1248:4: bitwiseORExpression ( LAND bitwiseORExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_bitwiseORExpression_in_logicalANDExpression5308);
+            pushFollow(FOLLOW_bitwiseORExpression_in_logicalANDExpression5331);
             bitwiseORExpression171=bitwiseORExpression();
             _fsp--;
 
             adaptor.addChild(root_0, bitwiseORExpression171.getTree());
-            // JS.g:1246:24: ( LAND bitwiseORExpression )*
+            // JS.g:1248:24: ( LAND bitwiseORExpression )*
             loop44:
             do {
                 int alt44=2;
@@ -6649,14 +6798,14 @@
 
                 switch (alt44) {
             	case 1 :
-            	    // JS.g:1246:26: LAND bitwiseORExpression
+            	    // JS.g:1248:26: LAND bitwiseORExpression
             	    {
             	    LAND172=(Token)input.LT(1);
-            	    match(input,LAND,FOLLOW_LAND_in_logicalANDExpression5312); 
+            	    match(input,LAND,FOLLOW_LAND_in_logicalANDExpression5335); 
             	    LAND172_tree = (Object)adaptor.create(LAND172);
             	    root_0 = (Object)adaptor.becomeRoot(LAND172_tree, root_0);
 
-            	    pushFollow(FOLLOW_bitwiseORExpression_in_logicalANDExpression5315);
+            	    pushFollow(FOLLOW_bitwiseORExpression_in_logicalANDExpression5338);
             	    bitwiseORExpression173=bitwiseORExpression();
             	    _fsp--;
 
@@ -6698,7 +6847,7 @@
     };
 
     // $ANTLR start logicalANDExpressionNoIn
-    // JS.g:1249:1: logicalANDExpressionNoIn : bitwiseORExpressionNoIn ( LAND bitwiseORExpressionNoIn )* ;
+    // JS.g:1251:1: logicalANDExpressionNoIn : bitwiseORExpressionNoIn ( LAND bitwiseORExpressionNoIn )* ;
     public final logicalANDExpressionNoIn_return logicalANDExpressionNoIn() throws RecognitionException {
         logicalANDExpressionNoIn_return retval = new logicalANDExpressionNoIn_return();
         retval.start = input.LT(1);
@@ -6714,17 +6863,17 @@
         Object LAND175_tree=null;
 
         try {
-            // JS.g:1250:2: ( bitwiseORExpressionNoIn ( LAND bitwiseORExpressionNoIn )* )
-            // JS.g:1250:4: bitwiseORExpressionNoIn ( LAND bitwiseORExpressionNoIn )*
+            // JS.g:1252:2: ( bitwiseORExpressionNoIn ( LAND bitwiseORExpressionNoIn )* )
+            // JS.g:1252:4: bitwiseORExpressionNoIn ( LAND bitwiseORExpressionNoIn )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_bitwiseORExpressionNoIn_in_logicalANDExpressionNoIn5329);
+            pushFollow(FOLLOW_bitwiseORExpressionNoIn_in_logicalANDExpressionNoIn5352);
             bitwiseORExpressionNoIn174=bitwiseORExpressionNoIn();
             _fsp--;
 
             adaptor.addChild(root_0, bitwiseORExpressionNoIn174.getTree());
-            // JS.g:1250:28: ( LAND bitwiseORExpressionNoIn )*
+            // JS.g:1252:28: ( LAND bitwiseORExpressionNoIn )*
             loop45:
             do {
                 int alt45=2;
@@ -6737,14 +6886,14 @@
 
                 switch (alt45) {
             	case 1 :
-            	    // JS.g:1250:30: LAND bitwiseORExpressionNoIn
+            	    // JS.g:1252:30: LAND bitwiseORExpressionNoIn
             	    {
             	    LAND175=(Token)input.LT(1);
-            	    match(input,LAND,FOLLOW_LAND_in_logicalANDExpressionNoIn5333); 
+            	    match(input,LAND,FOLLOW_LAND_in_logicalANDExpressionNoIn5356); 
             	    LAND175_tree = (Object)adaptor.create(LAND175);
             	    root_0 = (Object)adaptor.becomeRoot(LAND175_tree, root_0);
 
-            	    pushFollow(FOLLOW_bitwiseORExpressionNoIn_in_logicalANDExpressionNoIn5336);
+            	    pushFollow(FOLLOW_bitwiseORExpressionNoIn_in_logicalANDExpressionNoIn5359);
             	    bitwiseORExpressionNoIn176=bitwiseORExpressionNoIn();
             	    _fsp--;
 
@@ -6786,7 +6935,7 @@
     };
 
     // $ANTLR start logicalORExpression
-    // JS.g:1253:1: logicalORExpression : logicalANDExpression ( LOR logicalANDExpression )* ;
+    // JS.g:1255:1: logicalORExpression : logicalANDExpression ( LOR logicalANDExpression )* ;
     public final logicalORExpression_return logicalORExpression() throws RecognitionException {
         logicalORExpression_return retval = new logicalORExpression_return();
         retval.start = input.LT(1);
@@ -6802,17 +6951,17 @@
         Object LOR178_tree=null;
 
         try {
-            // JS.g:1254:2: ( logicalANDExpression ( LOR logicalANDExpression )* )
-            // JS.g:1254:4: logicalANDExpression ( LOR logicalANDExpression )*
+            // JS.g:1256:2: ( logicalANDExpression ( LOR logicalANDExpression )* )
+            // JS.g:1256:4: logicalANDExpression ( LOR logicalANDExpression )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_logicalANDExpression_in_logicalORExpression5351);
+            pushFollow(FOLLOW_logicalANDExpression_in_logicalORExpression5374);
             logicalANDExpression177=logicalANDExpression();
             _fsp--;
 
             adaptor.addChild(root_0, logicalANDExpression177.getTree());
-            // JS.g:1254:25: ( LOR logicalANDExpression )*
+            // JS.g:1256:25: ( LOR logicalANDExpression )*
             loop46:
             do {
                 int alt46=2;
@@ -6825,14 +6974,14 @@
 
                 switch (alt46) {
             	case 1 :
-            	    // JS.g:1254:27: LOR logicalANDExpression
+            	    // JS.g:1256:27: LOR logicalANDExpression
             	    {
             	    LOR178=(Token)input.LT(1);
-            	    match(input,LOR,FOLLOW_LOR_in_logicalORExpression5355); 
+            	    match(input,LOR,FOLLOW_LOR_in_logicalORExpression5378); 
             	    LOR178_tree = (Object)adaptor.create(LOR178);
             	    root_0 = (Object)adaptor.becomeRoot(LOR178_tree, root_0);
 
-            	    pushFollow(FOLLOW_logicalANDExpression_in_logicalORExpression5358);
+            	    pushFollow(FOLLOW_logicalANDExpression_in_logicalORExpression5381);
             	    logicalANDExpression179=logicalANDExpression();
             	    _fsp--;
 
@@ -6874,7 +7023,7 @@
     };
 
     // $ANTLR start logicalORExpressionNoIn
-    // JS.g:1257:1: logicalORExpressionNoIn : logicalANDExpressionNoIn ( LOR logicalANDExpressionNoIn )* ;
+    // JS.g:1259:1: logicalORExpressionNoIn : logicalANDExpressionNoIn ( LOR logicalANDExpressionNoIn )* ;
     public final logicalORExpressionNoIn_return logicalORExpressionNoIn() throws RecognitionException {
         logicalORExpressionNoIn_return retval = new logicalORExpressionNoIn_return();
         retval.start = input.LT(1);
@@ -6890,17 +7039,17 @@
         Object LOR181_tree=null;
 
         try {
-            // JS.g:1258:2: ( logicalANDExpressionNoIn ( LOR logicalANDExpressionNoIn )* )
-            // JS.g:1258:4: logicalANDExpressionNoIn ( LOR logicalANDExpressionNoIn )*
+            // JS.g:1260:2: ( logicalANDExpressionNoIn ( LOR logicalANDExpressionNoIn )* )
+            // JS.g:1260:4: logicalANDExpressionNoIn ( LOR logicalANDExpressionNoIn )*
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_logicalANDExpressionNoIn_in_logicalORExpressionNoIn5373);
+            pushFollow(FOLLOW_logicalANDExpressionNoIn_in_logicalORExpressionNoIn5396);
             logicalANDExpressionNoIn180=logicalANDExpressionNoIn();
             _fsp--;
 
             adaptor.addChild(root_0, logicalANDExpressionNoIn180.getTree());
-            // JS.g:1258:29: ( LOR logicalANDExpressionNoIn )*
+            // JS.g:1260:29: ( LOR logicalANDExpressionNoIn )*
             loop47:
             do {
                 int alt47=2;
@@ -6913,14 +7062,14 @@
 
                 switch (alt47) {
             	case 1 :
-            	    // JS.g:1258:31: LOR logicalANDExpressionNoIn
+            	    // JS.g:1260:31: LOR logicalANDExpressionNoIn
             	    {
             	    LOR181=(Token)input.LT(1);
-            	    match(input,LOR,FOLLOW_LOR_in_logicalORExpressionNoIn5377); 
+            	    match(input,LOR,FOLLOW_LOR_in_logicalORExpressionNoIn5400); 
             	    LOR181_tree = (Object)adaptor.create(LOR181);
             	    root_0 = (Object)adaptor.becomeRoot(LOR181_tree, root_0);
 
-            	    pushFollow(FOLLOW_logicalANDExpressionNoIn_in_logicalORExpressionNoIn5380);
+            	    pushFollow(FOLLOW_logicalANDExpressionNoIn_in_logicalORExpressionNoIn5403);
             	    logicalANDExpressionNoIn182=logicalANDExpressionNoIn();
             	    _fsp--;
 
@@ -6962,7 +7111,7 @@
     };
 
     // $ANTLR start conditionalExpression
-    // JS.g:1265:1: conditionalExpression : logicalORExpression ( QUE assignmentExpression COLON assignmentExpression )? ;
+    // JS.g:1267:1: conditionalExpression : logicalORExpression ( QUE assignmentExpression COLON assignmentExpression )? ;
     public final conditionalExpression_return conditionalExpression() throws RecognitionException {
         conditionalExpression_return retval = new conditionalExpression_return();
         retval.start = input.LT(1);
@@ -6982,17 +7131,17 @@
         Object COLON186_tree=null;
 
         try {
-            // JS.g:1266:2: ( logicalORExpression ( QUE assignmentExpression COLON assignmentExpression )? )
-            // JS.g:1266:4: logicalORExpression ( QUE assignmentExpression COLON assignmentExpression )?
+            // JS.g:1268:2: ( logicalORExpression ( QUE assignmentExpression COLON assignmentExpression )? )
+            // JS.g:1268:4: logicalORExpression ( QUE assignmentExpression COLON assignmentExpression )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_logicalORExpression_in_conditionalExpression5399);
+            pushFollow(FOLLOW_logicalORExpression_in_conditionalExpression5422);
             logicalORExpression183=logicalORExpression();
             _fsp--;
 
             adaptor.addChild(root_0, logicalORExpression183.getTree());
-            // JS.g:1266:24: ( QUE assignmentExpression COLON assignmentExpression )?
+            // JS.g:1268:24: ( QUE assignmentExpression COLON assignmentExpression )?
             int alt48=2;
             int LA48_0 = input.LA(1);
 
@@ -7001,21 +7150,21 @@
             }
             switch (alt48) {
                 case 1 :
-                    // JS.g:1266:26: QUE assignmentExpression COLON assignmentExpression
+                    // JS.g:1268:26: QUE assignmentExpression COLON assignmentExpression
                     {
                     QUE184=(Token)input.LT(1);
-                    match(input,QUE,FOLLOW_QUE_in_conditionalExpression5403); 
+                    match(input,QUE,FOLLOW_QUE_in_conditionalExpression5426); 
                     QUE184_tree = (Object)adaptor.create(QUE184);
                     root_0 = (Object)adaptor.becomeRoot(QUE184_tree, root_0);
 
-                    pushFollow(FOLLOW_assignmentExpression_in_conditionalExpression5406);
+                    pushFollow(FOLLOW_assignmentExpression_in_conditionalExpression5429);
                     assignmentExpression185=assignmentExpression();
                     _fsp--;
 
                     adaptor.addChild(root_0, assignmentExpression185.getTree());
                     COLON186=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_conditionalExpression5408); 
-                    pushFollow(FOLLOW_assignmentExpression_in_conditionalExpression5411);
+                    match(input,COLON,FOLLOW_COLON_in_conditionalExpression5431); 
+                    pushFollow(FOLLOW_assignmentExpression_in_conditionalExpression5434);
                     assignmentExpression187=assignmentExpression();
                     _fsp--;
 
@@ -7054,7 +7203,7 @@
     };
 
     // $ANTLR start conditionalExpressionNoIn
-    // JS.g:1269:1: conditionalExpressionNoIn : logicalORExpressionNoIn ( QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn )? ;
+    // JS.g:1271:1: conditionalExpressionNoIn : logicalORExpressionNoIn ( QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn )? ;
     public final conditionalExpressionNoIn_return conditionalExpressionNoIn() throws RecognitionException {
         conditionalExpressionNoIn_return retval = new conditionalExpressionNoIn_return();
         retval.start = input.LT(1);
@@ -7074,17 +7223,17 @@
         Object COLON191_tree=null;
 
         try {
-            // JS.g:1270:2: ( logicalORExpressionNoIn ( QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn )? )
-            // JS.g:1270:4: logicalORExpressionNoIn ( QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn )?
+            // JS.g:1272:2: ( logicalORExpressionNoIn ( QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn )? )
+            // JS.g:1272:4: logicalORExpressionNoIn ( QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_logicalORExpressionNoIn_in_conditionalExpressionNoIn5425);
+            pushFollow(FOLLOW_logicalORExpressionNoIn_in_conditionalExpressionNoIn5448);
             logicalORExpressionNoIn188=logicalORExpressionNoIn();
             _fsp--;
 
             adaptor.addChild(root_0, logicalORExpressionNoIn188.getTree());
-            // JS.g:1270:28: ( QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn )?
+            // JS.g:1272:28: ( QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn )?
             int alt49=2;
             int LA49_0 = input.LA(1);
 
@@ -7093,21 +7242,21 @@
             }
             switch (alt49) {
                 case 1 :
-                    // JS.g:1270:30: QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn
+                    // JS.g:1272:30: QUE assignmentExpressionNoIn COLON assignmentExpressionNoIn
                     {
                     QUE189=(Token)input.LT(1);
-                    match(input,QUE,FOLLOW_QUE_in_conditionalExpressionNoIn5429); 
+                    match(input,QUE,FOLLOW_QUE_in_conditionalExpressionNoIn5452); 
                     QUE189_tree = (Object)adaptor.create(QUE189);
                     root_0 = (Object)adaptor.becomeRoot(QUE189_tree, root_0);
 
-                    pushFollow(FOLLOW_assignmentExpressionNoIn_in_conditionalExpressionNoIn5432);
+                    pushFollow(FOLLOW_assignmentExpressionNoIn_in_conditionalExpressionNoIn5455);
                     assignmentExpressionNoIn190=assignmentExpressionNoIn();
                     _fsp--;
 
                     adaptor.addChild(root_0, assignmentExpressionNoIn190.getTree());
                     COLON191=(Token)input.LT(1);
-                    match(input,COLON,FOLLOW_COLON_in_conditionalExpressionNoIn5434); 
-                    pushFollow(FOLLOW_assignmentExpressionNoIn_in_conditionalExpressionNoIn5437);
+                    match(input,COLON,FOLLOW_COLON_in_conditionalExpressionNoIn5457); 
+                    pushFollow(FOLLOW_assignmentExpressionNoIn_in_conditionalExpressionNoIn5460);
                     assignmentExpressionNoIn192=assignmentExpressionNoIn();
                     _fsp--;
 
@@ -7146,7 +7295,7 @@
     };
 
     // $ANTLR start assignmentExpression
-    // JS.g:1299:1: assignmentExpression : lhs= conditionalExpression ({...}? assignmentOperator assignmentExpression )? ;
+    // JS.g:1301:1: assignmentExpression : lhs= conditionalExpression ({...}? assignmentOperator assignmentExpression )? ;
     public final assignmentExpression_return assignmentExpression() throws RecognitionException {
         assignmentExpression_return retval = new assignmentExpression_return();
         retval.start = input.LT(1);
@@ -7165,17 +7314,17 @@
         	Object[] isLhs = new Object[1];
 
         try {
-            // JS.g:1304:2: (lhs= conditionalExpression ({...}? assignmentOperator assignmentExpression )? )
-            // JS.g:1304:4: lhs= conditionalExpression ({...}? assignmentOperator assignmentExpression )?
+            // JS.g:1306:2: (lhs= conditionalExpression ({...}? assignmentOperator assignmentExpression )? )
+            // JS.g:1306:4: lhs= conditionalExpression ({...}? assignmentOperator assignmentExpression )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_conditionalExpression_in_assignmentExpression5465);
+            pushFollow(FOLLOW_conditionalExpression_in_assignmentExpression5488);
             lhs=conditionalExpression();
             _fsp--;
 
             adaptor.addChild(root_0, lhs.getTree());
-            // JS.g:1305:2: ({...}? assignmentOperator assignmentExpression )?
+            // JS.g:1307:2: ({...}? assignmentOperator assignmentExpression )?
             int alt50=2;
             int LA50_0 = input.LA(1);
 
@@ -7188,17 +7337,17 @@
             }
             switch (alt50) {
                 case 1 :
-                    // JS.g:1305:4: {...}? assignmentOperator assignmentExpression
+                    // JS.g:1307:4: {...}? assignmentOperator assignmentExpression
                     {
                     if ( !( isLeftHandSideAssign(lhs, isLhs) ) ) {
                         throw new FailedPredicateException(input, "assignmentExpression", " isLeftHandSideAssign(lhs, isLhs) ");
                     }
-                    pushFollow(FOLLOW_assignmentOperator_in_assignmentExpression5472);
+                    pushFollow(FOLLOW_assignmentOperator_in_assignmentExpression5495);
                     assignmentOperator193=assignmentOperator();
                     _fsp--;
 
                     root_0 = (Object)adaptor.becomeRoot(assignmentOperator193.getTree(), root_0);
-                    pushFollow(FOLLOW_assignmentExpression_in_assignmentExpression5475);
+                    pushFollow(FOLLOW_assignmentExpression_in_assignmentExpression5498);
                     assignmentExpression194=assignmentExpression();
                     _fsp--;
 
@@ -7237,7 +7386,7 @@
     };
 
     // $ANTLR start assignmentOperator
-    // JS.g:1308:1: assignmentOperator : ( ASSIGN | MULASS | DIVASS | MODASS | ADDASS | SUBASS | SHLASS | SHRASS | SHUASS | ANDASS | XORASS | ORASS );
+    // JS.g:1310:1: assignmentOperator : ( ASSIGN | MULASS | DIVASS | MODASS | ADDASS | SUBASS | SHLASS | SHRASS | SHUASS | ANDASS | XORASS | ORASS );
     public final assignmentOperator_return assignmentOperator() throws RecognitionException {
         assignmentOperator_return retval = new assignmentOperator_return();
         retval.start = input.LT(1);
@@ -7249,7 +7398,7 @@
         Object set195_tree=null;
 
         try {
-            // JS.g:1309:3: ( ASSIGN | MULASS | DIVASS | MODASS | ADDASS | SUBASS | SHLASS | SHRASS | SHUASS | ANDASS | XORASS | ORASS )
+            // JS.g:1311:3: ( ASSIGN | MULASS | DIVASS | MODASS | ADDASS | SUBASS | SHLASS | SHRASS | SHUASS | ANDASS | XORASS | ORASS )
             // JS.g:
             {
             root_0 = (Object)adaptor.nil();
@@ -7294,7 +7443,7 @@
     };
 
     // $ANTLR start assignmentExpressionNoIn
-    // JS.g:1312:1: assignmentExpressionNoIn : lhs= conditionalExpressionNoIn ({...}? assignmentOperator assignmentExpressionNoIn )? ;
+    // JS.g:1314:1: assignmentExpressionNoIn : lhs= conditionalExpressionNoIn ({...}? assignmentOperator assignmentExpressionNoIn )? ;
     public final assignmentExpressionNoIn_return assignmentExpressionNoIn() throws RecognitionException {
         assignmentExpressionNoIn_return retval = new assignmentExpressionNoIn_return();
         retval.start = input.LT(1);
@@ -7313,17 +7462,17 @@
         	Object[] isLhs = new Object[1];
 
         try {
-            // JS.g:1317:2: (lhs= conditionalExpressionNoIn ({...}? assignmentOperator assignmentExpressionNoIn )? )
-            // JS.g:1317:4: lhs= conditionalExpressionNoIn ({...}? assignmentOperator assignmentExpressionNoIn )?
+            // JS.g:1319:2: (lhs= conditionalExpressionNoIn ({...}? assignmentOperator assignmentExpressionNoIn )? )
+            // JS.g:1319:4: lhs= conditionalExpressionNoIn ({...}? assignmentOperator assignmentExpressionNoIn )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_conditionalExpressionNoIn_in_assignmentExpressionNoIn5553);
+            pushFollow(FOLLOW_conditionalExpressionNoIn_in_assignmentExpressionNoIn5576);
             lhs=conditionalExpressionNoIn();
             _fsp--;
 
             adaptor.addChild(root_0, lhs.getTree());
-            // JS.g:1318:2: ({...}? assignmentOperator assignmentExpressionNoIn )?
+            // JS.g:1320:2: ({...}? assignmentOperator assignmentExpressionNoIn )?
             int alt51=2;
             int LA51_0 = input.LA(1);
 
@@ -7336,17 +7485,17 @@
             }
             switch (alt51) {
                 case 1 :
-                    // JS.g:1318:4: {...}? assignmentOperator assignmentExpressionNoIn
+                    // JS.g:1320:4: {...}? assignmentOperator assignmentExpressionNoIn
                     {
                     if ( !( isLeftHandSideAssign(lhs, isLhs) ) ) {
                         throw new FailedPredicateException(input, "assignmentExpressionNoIn", " isLeftHandSideAssign(lhs, isLhs) ");
                     }
-                    pushFollow(FOLLOW_assignmentOperator_in_assignmentExpressionNoIn5560);
+                    pushFollow(FOLLOW_assignmentOperator_in_assignmentExpressionNoIn5583);
                     assignmentOperator196=assignmentOperator();
                     _fsp--;
 
                     root_0 = (Object)adaptor.becomeRoot(assignmentOperator196.getTree(), root_0);
-                    pushFollow(FOLLOW_assignmentExpressionNoIn_in_assignmentExpressionNoIn5563);
+                    pushFollow(FOLLOW_assignmentExpressionNoIn_in_assignmentExpressionNoIn5586);
                     assignmentExpressionNoIn197=assignmentExpressionNoIn();
                     _fsp--;
 
@@ -7385,7 +7534,7 @@
     };
 
     // $ANTLR start expression
-    // JS.g:1325:1: expression : exprs+= assignmentExpression ( COMMA exprs+= assignmentExpression )* -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ ) -> $exprs;
+    // JS.g:1327:1: expression : exprs+= assignmentExpression ( COMMA exprs+= assignmentExpression )* -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ ) -> $exprs;
     public final expression_return expression() throws RecognitionException {
         expression_return retval = new expression_return();
         retval.start = input.LT(1);
@@ -7399,10 +7548,10 @@
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleSubtreeStream stream_assignmentExpression=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpression");
         try {
-            // JS.g:1326:2: (exprs+= assignmentExpression ( COMMA exprs+= assignmentExpression )* -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ ) -> $exprs)
-            // JS.g:1326:4: exprs+= assignmentExpression ( COMMA exprs+= assignmentExpression )*
+            // JS.g:1328:2: (exprs+= assignmentExpression ( COMMA exprs+= assignmentExpression )* -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ ) -> $exprs)
+            // JS.g:1328:4: exprs+= assignmentExpression ( COMMA exprs+= assignmentExpression )*
             {
-            pushFollow(FOLLOW_assignmentExpression_in_expression5585);
+            pushFollow(FOLLOW_assignmentExpression_in_expression5608);
             exprs=assignmentExpression();
             _fsp--;
 
@@ -7410,7 +7559,7 @@
             if (list_exprs==null) list_exprs=new ArrayList();
             list_exprs.add(exprs);
 
-            // JS.g:1326:32: ( COMMA exprs+= assignmentExpression )*
+            // JS.g:1328:32: ( COMMA exprs+= assignmentExpression )*
             loop52:
             do {
                 int alt52=2;
@@ -7423,13 +7572,13 @@
 
                 switch (alt52) {
             	case 1 :
-            	    // JS.g:1326:34: COMMA exprs+= assignmentExpression
+            	    // JS.g:1328:34: COMMA exprs+= assignmentExpression
             	    {
             	    COMMA198=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_expression5589); 
+            	    match(input,COMMA,FOLLOW_COMMA_in_expression5612); 
             	    stream_COMMA.add(COMMA198);
 
-            	    pushFollow(FOLLOW_assignmentExpression_in_expression5593);
+            	    pushFollow(FOLLOW_assignmentExpression_in_expression5616);
             	    exprs=assignmentExpression();
             	    _fsp--;
 
@@ -7457,9 +7606,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
             RewriteRuleSubtreeStream stream_exprs=new RewriteRuleSubtreeStream(adaptor,"token exprs",list_exprs);
             root_0 = (Object)adaptor.nil();
-            // 1327:2: -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ )
+            // 1329:2: -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ )
             if ( list_exprs.size() > 1 ) {
-                // JS.g:1327:28: ^( CEXPR ( $exprs)+ )
+                // JS.g:1329:28: ^( CEXPR ( $exprs)+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(CEXPR, "CEXPR"), root_1);
@@ -7477,7 +7626,7 @@
                 }
 
             }
-            else // 1328:2: -> $exprs
+            else // 1330:2: -> $exprs
             {
                 adaptor.addChild(root_0, ((ParserRuleReturnScope)stream_exprs.next()).getTree());
 
@@ -7512,7 +7661,7 @@
     };
 
     // $ANTLR start expressionNoIn
-    // JS.g:1331:1: expressionNoIn : exprs+= assignmentExpressionNoIn ( COMMA exprs+= assignmentExpressionNoIn )* -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ ) -> $exprs;
+    // JS.g:1333:1: expressionNoIn : exprs+= assignmentExpressionNoIn ( COMMA exprs+= assignmentExpressionNoIn )* -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ ) -> $exprs;
     public final expressionNoIn_return expressionNoIn() throws RecognitionException {
         expressionNoIn_return retval = new expressionNoIn_return();
         retval.start = input.LT(1);
@@ -7526,10 +7675,10 @@
         RewriteRuleTokenStream stream_COMMA=new RewriteRuleTokenStream(adaptor,"token COMMA");
         RewriteRuleSubtreeStream stream_assignmentExpressionNoIn=new RewriteRuleSubtreeStream(adaptor,"rule assignmentExpressionNoIn");
         try {
-            // JS.g:1332:2: (exprs+= assignmentExpressionNoIn ( COMMA exprs+= assignmentExpressionNoIn )* -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ ) -> $exprs)
-            // JS.g:1332:4: exprs+= assignmentExpressionNoIn ( COMMA exprs+= assignmentExpressionNoIn )*
+            // JS.g:1334:2: (exprs+= assignmentExpressionNoIn ( COMMA exprs+= assignmentExpressionNoIn )* -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ ) -> $exprs)
+            // JS.g:1334:4: exprs+= assignmentExpressionNoIn ( COMMA exprs+= assignmentExpressionNoIn )*
             {
-            pushFollow(FOLLOW_assignmentExpressionNoIn_in_expressionNoIn5630);
+            pushFollow(FOLLOW_assignmentExpressionNoIn_in_expressionNoIn5653);
             exprs=assignmentExpressionNoIn();
             _fsp--;
 
@@ -7537,7 +7686,7 @@
             if (list_exprs==null) list_exprs=new ArrayList();
             list_exprs.add(exprs);
 
-            // JS.g:1332:36: ( COMMA exprs+= assignmentExpressionNoIn )*
+            // JS.g:1334:36: ( COMMA exprs+= assignmentExpressionNoIn )*
             loop53:
             do {
                 int alt53=2;
@@ -7550,13 +7699,13 @@
 
                 switch (alt53) {
             	case 1 :
-            	    // JS.g:1332:38: COMMA exprs+= assignmentExpressionNoIn
+            	    // JS.g:1334:38: COMMA exprs+= assignmentExpressionNoIn
             	    {
             	    COMMA199=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_expressionNoIn5634); 
+            	    match(input,COMMA,FOLLOW_COMMA_in_expressionNoIn5657); 
             	    stream_COMMA.add(COMMA199);
 
-            	    pushFollow(FOLLOW_assignmentExpressionNoIn_in_expressionNoIn5638);
+            	    pushFollow(FOLLOW_assignmentExpressionNoIn_in_expressionNoIn5661);
             	    exprs=assignmentExpressionNoIn();
             	    _fsp--;
 
@@ -7584,9 +7733,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
             RewriteRuleSubtreeStream stream_exprs=new RewriteRuleSubtreeStream(adaptor,"token exprs",list_exprs);
             root_0 = (Object)adaptor.nil();
-            // 1333:2: -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ )
+            // 1335:2: -> { $exprs.size() > 1 }? ^( CEXPR ( $exprs)+ )
             if ( list_exprs.size() > 1 ) {
-                // JS.g:1333:28: ^( CEXPR ( $exprs)+ )
+                // JS.g:1335:28: ^( CEXPR ( $exprs)+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(CEXPR, "CEXPR"), root_1);
@@ -7604,7 +7753,7 @@
                 }
 
             }
-            else // 1334:2: -> $exprs
+            else // 1336:2: -> $exprs
             {
                 adaptor.addChild(root_0, ((ParserRuleReturnScope)stream_exprs.next()).getTree());
 
@@ -7639,7 +7788,7 @@
     };
 
     // $ANTLR start semic
-    // JS.g:1359:1: semic : ( SEMIC | EOF | RBRACE | EOL | MultiLineComment );
+    // JS.g:1361:1: semic : ( SEMIC | EOF | RBRACE | EOL | MultiLineComment );
     public final semic_return semic() throws RecognitionException {
         semic_return retval = new semic_return();
         retval.start = input.LT(1);
@@ -7665,7 +7814,7 @@
         	promoteEOL(retval);
 
         try {
-            // JS.g:1367:2: ( SEMIC | EOF | RBRACE | EOL | MultiLineComment )
+            // JS.g:1369:2: ( SEMIC | EOF | RBRACE | EOL | MultiLineComment )
             int alt54=5;
             switch ( input.LA(1) ) {
             case SEMIC:
@@ -7695,19 +7844,19 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1359:1: semic : ( SEMIC | EOF | RBRACE | EOL | MultiLineComment );", 54, 0, input);
+                    new NoViableAltException("1361:1: semic : ( SEMIC | EOF | RBRACE | EOL | MultiLineComment );", 54, 0, input);
 
                 throw nvae;
             }
 
             switch (alt54) {
                 case 1 :
-                    // JS.g:1367:4: SEMIC
+                    // JS.g:1369:4: SEMIC
                     {
                     root_0 = (Object)adaptor.nil();
 
                     SEMIC200=(Token)input.LT(1);
-                    match(input,SEMIC,FOLLOW_SEMIC_in_semic5689); 
+                    match(input,SEMIC,FOLLOW_SEMIC_in_semic5712); 
                     SEMIC200_tree = (Object)adaptor.create(SEMIC200);
                     adaptor.addChild(root_0, SEMIC200_tree);
 
@@ -7715,12 +7864,12 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1368:4: EOF
+                    // JS.g:1370:4: EOF
                     {
                     root_0 = (Object)adaptor.nil();
 
                     EOF201=(Token)input.LT(1);
-                    match(input,EOF,FOLLOW_EOF_in_semic5694); 
+                    match(input,EOF,FOLLOW_EOF_in_semic5717); 
                     EOF201_tree = (Object)adaptor.create(EOF201);
                     adaptor.addChild(root_0, EOF201_tree);
 
@@ -7728,12 +7877,12 @@
                     }
                     break;
                 case 3 :
-                    // JS.g:1369:4: RBRACE
+                    // JS.g:1371:4: RBRACE
                     {
                     root_0 = (Object)adaptor.nil();
 
                     RBRACE202=(Token)input.LT(1);
-                    match(input,RBRACE,FOLLOW_RBRACE_in_semic5699); 
+                    match(input,RBRACE,FOLLOW_RBRACE_in_semic5722); 
                     RBRACE202_tree = (Object)adaptor.create(RBRACE202);
                     adaptor.addChild(root_0, RBRACE202_tree);
 
@@ -7742,12 +7891,12 @@
                     }
                     break;
                 case 4 :
-                    // JS.g:1370:4: EOL
+                    // JS.g:1372:4: EOL
                     {
                     root_0 = (Object)adaptor.nil();
 
                     EOL203=(Token)input.LT(1);
-                    match(input,EOL,FOLLOW_EOL_in_semic5706); 
+                    match(input,EOL,FOLLOW_EOL_in_semic5729); 
                     EOL203_tree = (Object)adaptor.create(EOL203);
                     adaptor.addChild(root_0, EOL203_tree);
 
@@ -7755,12 +7904,12 @@
                     }
                     break;
                 case 5 :
-                    // JS.g:1370:10: MultiLineComment
+                    // JS.g:1372:10: MultiLineComment
                     {
                     root_0 = (Object)adaptor.nil();
 
                     MultiLineComment204=(Token)input.LT(1);
-                    match(input,MultiLineComment,FOLLOW_MultiLineComment_in_semic5710); 
+                    match(input,MultiLineComment,FOLLOW_MultiLineComment_in_semic5733); 
                     MultiLineComment204_tree = (Object)adaptor.create(MultiLineComment204);
                     adaptor.addChild(root_0, MultiLineComment204_tree);
 
@@ -7794,7 +7943,7 @@
     };
 
     // $ANTLR start statement
-    // JS.g:1378:1: statement options {k=1; } : ({...}? block | statementTail );
+    // JS.g:1380:1: statement options {k=1; } : ({...}? block | statementTail );
     public final statement_return statement() throws RecognitionException {
         statement_return retval = new statement_return();
         retval.start = input.LT(1);
@@ -7808,7 +7957,7 @@
 
 
         try {
-            // JS.g:1383:2: ({...}? block | statementTail )
+            // JS.g:1385:2: ({...}? block | statementTail )
             int alt55=2;
             int LA55_0 = input.LA(1);
 
@@ -7823,7 +7972,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1378:1: statement options {k=1; } : ({...}? block | statementTail );", 55, 1, input);
+                        new NoViableAltException("1380:1: statement options {k=1; } : ({...}? block | statementTail );", 55, 1, input);
 
                     throw nvae;
                 }
@@ -7842,20 +7991,20 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1378:1: statement options {k=1; } : ({...}? block | statementTail );", 55, 0, input);
+                    new NoViableAltException("1380:1: statement options {k=1; } : ({...}? block | statementTail );", 55, 0, input);
 
                 throw nvae;
             }
             switch (alt55) {
                 case 1 :
-                    // JS.g:1383:4: {...}? block
+                    // JS.g:1385:4: {...}? block
                     {
                     root_0 = (Object)adaptor.nil();
 
                     if ( !( input.LA(1) == LBRACE ) ) {
                         throw new FailedPredicateException(input, "statement", " input.LA(1) == LBRACE ");
                     }
-                    pushFollow(FOLLOW_block_in_statement5739);
+                    pushFollow(FOLLOW_block_in_statement5762);
                     block205=block();
                     _fsp--;
 
@@ -7864,11 +8013,11 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1384:4: statementTail
+                    // JS.g:1386:4: statementTail
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_statementTail_in_statement5744);
+                    pushFollow(FOLLOW_statementTail_in_statement5767);
                     statementTail206=statementTail();
                     _fsp--;
 
@@ -7903,7 +8052,7 @@
     };
 
     // $ANTLR start statementTail
-    // JS.g:1387:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );
+    // JS.g:1389:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );
     public final statementTail_return statementTail() throws RecognitionException {
         statementTail_return retval = new statementTail_return();
         retval.start = input.LT(1);
@@ -7943,7 +8092,7 @@
 
 
         try {
-            // JS.g:1388:2: ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement )
+            // JS.g:1390:2: ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement )
             int alt56=15;
             int LA56_0 = input.LA(1);
 
@@ -7967,7 +8116,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1387:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 4, input);
+                        new NoViableAltException("1389:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 4, input);
 
                     throw nvae;
                 }
@@ -7983,7 +8132,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1387:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 5, input);
+                        new NoViableAltException("1389:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 5, input);
 
                     throw nvae;
                 }
@@ -7999,7 +8148,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1387:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 6, input);
+                        new NoViableAltException("1389:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 6, input);
 
                     throw nvae;
                 }
@@ -8015,7 +8164,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1387:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 7, input);
+                        new NoViableAltException("1389:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 7, input);
 
                     throw nvae;
                 }
@@ -8031,7 +8180,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1387:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 8, input);
+                        new NoViableAltException("1389:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 8, input);
 
                     throw nvae;
                 }
@@ -8039,15 +8188,15 @@
             else if ( ((LA56_0>=ABSTRACT && LA56_0<=CLASS)||(LA56_0>=DEBUGGER && LA56_0<=VOLATILE)) ) {
                 int LA56_9 = input.LA(2);
 
-                if ( (LA56_9==EOF||(LA56_9>=IN && LA56_9<=INSTANCEOF)||(LA56_9>=RBRACE && LA56_9<=LPAREN)||LA56_9==LBRACK||(LA56_9>=DOT && LA56_9<=XOR)||(LA56_9>=LAND && LA56_9<=QUE)||(LA56_9>=ASSIGN && LA56_9<=DIVASS)||(LA56_9>=DOTDOT && LA56_9<=COLONCOLON)||(LA56_9>=EOL && LA56_9<=MultiLineComment)) ) {
-                    alt56=3;
-                }
-                else if ( (LA56_9==COLON) ) {
+                if ( (LA56_9==COLON) ) {
                     alt56=10;
                 }
+                else if ( (LA56_9==EOF||(LA56_9>=IN && LA56_9<=INSTANCEOF)||(LA56_9>=RBRACE && LA56_9<=LPAREN)||LA56_9==LBRACK||(LA56_9>=DOT && LA56_9<=XOR)||(LA56_9>=LAND && LA56_9<=QUE)||(LA56_9>=ASSIGN && LA56_9<=DIVASS)||(LA56_9>=DOTDOT && LA56_9<=COLONCOLON)||(LA56_9>=EOL && LA56_9<=MultiLineComment)) ) {
+                    alt56=3;
+                }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1387:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 9, input);
+                        new NoViableAltException("1389:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 9, input);
 
                     throw nvae;
                 }
@@ -8055,15 +8204,15 @@
             else if ( (LA56_0==Identifier) ) {
                 int LA56_10 = input.LA(2);
 
-                if ( (LA56_10==COLON) ) {
-                    alt56=10;
-                }
-                else if ( (LA56_10==EOF||(LA56_10>=IN && LA56_10<=INSTANCEOF)||(LA56_10>=RBRACE && LA56_10<=LPAREN)||LA56_10==LBRACK||(LA56_10>=DOT && LA56_10<=XOR)||(LA56_10>=LAND && LA56_10<=QUE)||(LA56_10>=ASSIGN && LA56_10<=DIVASS)||(LA56_10>=DOTDOT && LA56_10<=COLONCOLON)||(LA56_10>=EOL && LA56_10<=MultiLineComment)) ) {
+                if ( (LA56_10==EOF||(LA56_10>=IN && LA56_10<=INSTANCEOF)||(LA56_10>=RBRACE && LA56_10<=LPAREN)||LA56_10==LBRACK||(LA56_10>=DOT && LA56_10<=XOR)||(LA56_10>=LAND && LA56_10<=QUE)||(LA56_10>=ASSIGN && LA56_10<=DIVASS)||(LA56_10>=DOTDOT && LA56_10<=COLONCOLON)||(LA56_10>=EOL && LA56_10<=MultiLineComment)) ) {
                     alt56=3;
                 }
+                else if ( (LA56_10==COLON) ) {
+                    alt56=10;
+                }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1387:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 10, input);
+                        new NoViableAltException("1389:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 10, input);
 
                     throw nvae;
                 }
@@ -8109,17 +8258,17 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1387:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 0, input);
+                    new NoViableAltException("1389:1: statementTail : ( variableStatement | emptyStatement | expressionStatement | ifStatement | iterationStatement | continueStatement | breakStatement | returnStatement | withStatement | labelledStatement | switchStatement | throwStatement | tryStatement | constStatement | namespaceStatement );", 56, 0, input);
 
                 throw nvae;
             }
             switch (alt56) {
                 case 1 :
-                    // JS.g:1388:4: variableStatement
+                    // JS.g:1390:4: variableStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_variableStatement_in_statementTail5756);
+                    pushFollow(FOLLOW_variableStatement_in_statementTail5779);
                     variableStatement207=variableStatement();
                     _fsp--;
 
@@ -8128,11 +8277,11 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1389:4: emptyStatement
+                    // JS.g:1391:4: emptyStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_emptyStatement_in_statementTail5761);
+                    pushFollow(FOLLOW_emptyStatement_in_statementTail5784);
                     emptyStatement208=emptyStatement();
                     _fsp--;
 
@@ -8141,11 +8290,11 @@
                     }
                     break;
                 case 3 :
-                    // JS.g:1390:4: expressionStatement
+                    // JS.g:1392:4: expressionStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_expressionStatement_in_statementTail5766);
+                    pushFollow(FOLLOW_expressionStatement_in_statementTail5789);
                     expressionStatement209=expressionStatement();
                     _fsp--;
 
@@ -8154,11 +8303,11 @@
                     }
                     break;
                 case 4 :
-                    // JS.g:1391:4: ifStatement
+                    // JS.g:1393:4: ifStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_ifStatement_in_statementTail5771);
+                    pushFollow(FOLLOW_ifStatement_in_statementTail5794);
                     ifStatement210=ifStatement();
                     _fsp--;
 
@@ -8167,11 +8316,11 @@
                     }
                     break;
                 case 5 :
-                    // JS.g:1392:4: iterationStatement
+                    // JS.g:1394:4: iterationStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_iterationStatement_in_statementTail5776);
+                    pushFollow(FOLLOW_iterationStatement_in_statementTail5799);
                     iterationStatement211=iterationStatement();
                     _fsp--;
 
@@ -8180,11 +8329,11 @@
                     }
                     break;
                 case 6 :
-                    // JS.g:1393:4: continueStatement
+                    // JS.g:1395:4: continueStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_continueStatement_in_statementTail5781);
+                    pushFollow(FOLLOW_continueStatement_in_statementTail5804);
                     continueStatement212=continueStatement();
                     _fsp--;
 
@@ -8193,11 +8342,11 @@
                     }
                     break;
                 case 7 :
-                    // JS.g:1394:4: breakStatement
+                    // JS.g:1396:4: breakStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_breakStatement_in_statementTail5786);
+                    pushFollow(FOLLOW_breakStatement_in_statementTail5809);
                     breakStatement213=breakStatement();
                     _fsp--;
 
@@ -8206,11 +8355,11 @@
                     }
                     break;
                 case 8 :
-                    // JS.g:1395:4: returnStatement
+                    // JS.g:1397:4: returnStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_returnStatement_in_statementTail5791);
+                    pushFollow(FOLLOW_returnStatement_in_statementTail5814);
                     returnStatement214=returnStatement();
                     _fsp--;
 
@@ -8219,11 +8368,11 @@
                     }
                     break;
                 case 9 :
-                    // JS.g:1396:4: withStatement
+                    // JS.g:1398:4: withStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_withStatement_in_statementTail5796);
+                    pushFollow(FOLLOW_withStatement_in_statementTail5819);
                     withStatement215=withStatement();
                     _fsp--;
 
@@ -8232,11 +8381,11 @@
                     }
                     break;
                 case 10 :
-                    // JS.g:1397:4: labelledStatement
+                    // JS.g:1399:4: labelledStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_labelledStatement_in_statementTail5801);
+                    pushFollow(FOLLOW_labelledStatement_in_statementTail5824);
                     labelledStatement216=labelledStatement();
                     _fsp--;
 
@@ -8245,11 +8394,11 @@
                     }
                     break;
                 case 11 :
-                    // JS.g:1398:4: switchStatement
+                    // JS.g:1400:4: switchStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_switchStatement_in_statementTail5806);
+                    pushFollow(FOLLOW_switchStatement_in_statementTail5829);
                     switchStatement217=switchStatement();
                     _fsp--;
 
@@ -8258,11 +8407,11 @@
                     }
                     break;
                 case 12 :
-                    // JS.g:1399:4: throwStatement
+                    // JS.g:1401:4: throwStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_throwStatement_in_statementTail5811);
+                    pushFollow(FOLLOW_throwStatement_in_statementTail5834);
                     throwStatement218=throwStatement();
                     _fsp--;
 
@@ -8271,11 +8420,11 @@
                     }
                     break;
                 case 13 :
-                    // JS.g:1400:4: tryStatement
+                    // JS.g:1402:4: tryStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_tryStatement_in_statementTail5816);
+                    pushFollow(FOLLOW_tryStatement_in_statementTail5839);
                     tryStatement219=tryStatement();
                     _fsp--;
 
@@ -8284,11 +8433,11 @@
                     }
                     break;
                 case 14 :
-                    // JS.g:1401:4: constStatement
+                    // JS.g:1403:4: constStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_constStatement_in_statementTail5821);
+                    pushFollow(FOLLOW_constStatement_in_statementTail5844);
                     constStatement220=constStatement();
                     _fsp--;
 
@@ -8297,11 +8446,11 @@
                     }
                     break;
                 case 15 :
-                    // JS.g:1402:4: namespaceStatement
+                    // JS.g:1404:4: namespaceStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_namespaceStatement_in_statementTail5826);
+                    pushFollow(FOLLOW_namespaceStatement_in_statementTail5849);
                     namespaceStatement221=namespaceStatement();
                     _fsp--;
 
@@ -8336,7 +8485,7 @@
     };
 
     // $ANTLR start block
-    // JS.g:1407:1: block : lb= LBRACE ( sourceElement )* RBRACE -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* ) ;
+    // JS.g:1409:1: block : lb= LBRACE ( sourceElement )* RBRACE -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* ) ;
     public final block_return block() throws RecognitionException {
         block_return retval = new block_return();
         retval.start = input.LT(1);
@@ -8354,14 +8503,14 @@
         RewriteRuleTokenStream stream_LBRACE=new RewriteRuleTokenStream(adaptor,"token LBRACE");
         RewriteRuleSubtreeStream stream_sourceElement=new RewriteRuleSubtreeStream(adaptor,"rule sourceElement");
         try {
-            // JS.g:1408:2: (lb= LBRACE ( sourceElement )* RBRACE -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* ) )
-            // JS.g:1408:4: lb= LBRACE ( sourceElement )* RBRACE
+            // JS.g:1410:2: (lb= LBRACE ( sourceElement )* RBRACE -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* ) )
+            // JS.g:1410:4: lb= LBRACE ( sourceElement )* RBRACE
             {
             lb=(Token)input.LT(1);
-            match(input,LBRACE,FOLLOW_LBRACE_in_block5841); 
+            match(input,LBRACE,FOLLOW_LBRACE_in_block5864); 
             stream_LBRACE.add(lb);
 
-            // JS.g:1408:14: ( sourceElement )*
+            // JS.g:1410:14: ( sourceElement )*
             loop57:
             do {
                 int alt57=2;
@@ -8383,9 +8532,9 @@
 
                 switch (alt57) {
             	case 1 :
-            	    // JS.g:1408:14: sourceElement
+            	    // JS.g:1410:14: sourceElement
             	    {
-            	    pushFollow(FOLLOW_sourceElement_in_block5843);
+            	    pushFollow(FOLLOW_sourceElement_in_block5866);
             	    sourceElement222=sourceElement();
             	    _fsp--;
 
@@ -8400,7 +8549,7 @@
             } while (true);
 
             RBRACE223=(Token)input.LT(1);
-            match(input,RBRACE,FOLLOW_RBRACE_in_block5846); 
+            match(input,RBRACE,FOLLOW_RBRACE_in_block5869); 
             stream_RBRACE.add(RBRACE223);
 
 
@@ -8414,14 +8563,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1409:2: -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* )
+            // 1411:2: -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* )
             {
-                // JS.g:1409:5: ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* )
+                // JS.g:1411:5: ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(BLOCK, lb,  "BLOCK"), root_1);
 
-                // JS.g:1409:28: ( sourceElement )*
+                // JS.g:1411:28: ( sourceElement )*
                 while ( stream_sourceElement.hasNext() ) {
                     adaptor.addChild(root_1, stream_sourceElement.next());
 
@@ -8462,7 +8611,7 @@
     };
 
     // $ANTLR start variableStatement
-    // JS.g:1416:1: variableStatement : VAR variableDeclaration ( COMMA variableDeclaration )* semic -> ^( VAR ( variableDeclaration )+ ) ;
+    // JS.g:1418:1: variableStatement : VAR variableDeclaration ( COMMA variableDeclaration )* semic -> ^( VAR ( variableDeclaration )+ ) ;
     public final variableStatement_return variableStatement() throws RecognitionException {
         variableStatement_return retval = new variableStatement_return();
         retval.start = input.LT(1);
@@ -8485,19 +8634,19 @@
         RewriteRuleSubtreeStream stream_variableDeclaration=new RewriteRuleSubtreeStream(adaptor,"rule variableDeclaration");
         RewriteRuleSubtreeStream stream_semic=new RewriteRuleSubtreeStream(adaptor,"rule semic");
         try {
-            // JS.g:1417:2: ( VAR variableDeclaration ( COMMA variableDeclaration )* semic -> ^( VAR ( variableDeclaration )+ ) )
-            // JS.g:1417:4: VAR variableDeclaration ( COMMA variableDeclaration )* semic
+            // JS.g:1419:2: ( VAR variableDeclaration ( COMMA variableDeclaration )* semic -> ^( VAR ( variableDeclaration )+ ) )
+            // JS.g:1419:4: VAR variableDeclaration ( COMMA variableDeclaration )* semic
             {
             VAR224=(Token)input.LT(1);
-            match(input,VAR,FOLLOW_VAR_in_variableStatement5875); 
+            match(input,VAR,FOLLOW_VAR_in_variableStatement5898); 
             stream_VAR.add(VAR224);
 
-            pushFollow(FOLLOW_variableDeclaration_in_variableStatement5877);
+            pushFollow(FOLLOW_variableDeclaration_in_variableStatement5900);
             variableDeclaration225=variableDeclaration();
             _fsp--;
 
             stream_variableDeclaration.add(variableDeclaration225.getTree());
-            // JS.g:1417:28: ( COMMA variableDeclaration )*
+            // JS.g:1419:28: ( COMMA variableDeclaration )*
             loop58:
             do {
                 int alt58=2;
@@ -8510,13 +8659,13 @@
 
                 switch (alt58) {
             	case 1 :
-            	    // JS.g:1417:30: COMMA variableDeclaration
+            	    // JS.g:1419:30: COMMA variableDeclaration
             	    {
             	    COMMA226=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_variableStatement5881); 
+            	    match(input,COMMA,FOLLOW_COMMA_in_variableStatement5904); 
             	    stream_COMMA.add(COMMA226);
 
-            	    pushFollow(FOLLOW_variableDeclaration_in_variableStatement5883);
+            	    pushFollow(FOLLOW_variableDeclaration_in_variableStatement5906);
             	    variableDeclaration227=variableDeclaration();
             	    _fsp--;
 
@@ -8530,7 +8679,7 @@
                 }
             } while (true);
 
-            pushFollow(FOLLOW_semic_in_variableStatement5888);
+            pushFollow(FOLLOW_semic_in_variableStatement5911);
             semic228=semic();
             _fsp--;
 
@@ -8546,9 +8695,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1418:2: -> ^( VAR ( variableDeclaration )+ )
+            // 1420:2: -> ^( VAR ( variableDeclaration )+ )
             {
-                // JS.g:1418:5: ^( VAR ( variableDeclaration )+ )
+                // JS.g:1420:5: ^( VAR ( variableDeclaration )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_VAR.next(), root_1);
@@ -8596,7 +8745,7 @@
     };
 
     // $ANTLR start variableDeclaration
-    // JS.g:1421:1: variableDeclaration : identifier ( ASSIGN assignmentExpression )? ;
+    // JS.g:1423:1: variableDeclaration : identifier ( ASSIGN assignmentExpression )? ;
     public final variableDeclaration_return variableDeclaration() throws RecognitionException {
         variableDeclaration_return retval = new variableDeclaration_return();
         retval.start = input.LT(1);
@@ -8612,17 +8761,17 @@
         Object ASSIGN230_tree=null;
 
         try {
-            // JS.g:1422:2: ( identifier ( ASSIGN assignmentExpression )? )
-            // JS.g:1422:4: identifier ( ASSIGN assignmentExpression )?
+            // JS.g:1424:2: ( identifier ( ASSIGN assignmentExpression )? )
+            // JS.g:1424:4: identifier ( ASSIGN assignmentExpression )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_identifier_in_variableDeclaration5911);
+            pushFollow(FOLLOW_identifier_in_variableDeclaration5934);
             identifier229=identifier();
             _fsp--;
 
             root_0 = (Object)adaptor.becomeRoot(identifier229.getTree(), root_0);
-            // JS.g:1422:16: ( ASSIGN assignmentExpression )?
+            // JS.g:1424:16: ( ASSIGN assignmentExpression )?
             int alt59=2;
             int LA59_0 = input.LA(1);
 
@@ -8631,14 +8780,14 @@
             }
             switch (alt59) {
                 case 1 :
-                    // JS.g:1422:18: ASSIGN assignmentExpression
+                    // JS.g:1424:18: ASSIGN assignmentExpression
                     {
                     ASSIGN230=(Token)input.LT(1);
-                    match(input,ASSIGN,FOLLOW_ASSIGN_in_variableDeclaration5916); 
+                    match(input,ASSIGN,FOLLOW_ASSIGN_in_variableDeclaration5939); 
                     ASSIGN230_tree = (Object)adaptor.create(ASSIGN230);
                     adaptor.addChild(root_0, ASSIGN230_tree);
 
-                    pushFollow(FOLLOW_assignmentExpression_in_variableDeclaration5918);
+                    pushFollow(FOLLOW_assignmentExpression_in_variableDeclaration5941);
                     assignmentExpression231=assignmentExpression();
                     _fsp--;
 
@@ -8677,7 +8826,7 @@
     };
 
     // $ANTLR start variableDeclarationNoIn
-    // JS.g:1425:1: variableDeclarationNoIn : identifier ( ASSIGN assignmentExpressionNoIn )? ;
+    // JS.g:1427:1: variableDeclarationNoIn : identifier ( ASSIGN assignmentExpressionNoIn )? ;
     public final variableDeclarationNoIn_return variableDeclarationNoIn() throws RecognitionException {
         variableDeclarationNoIn_return retval = new variableDeclarationNoIn_return();
         retval.start = input.LT(1);
@@ -8693,17 +8842,17 @@
         Object ASSIGN233_tree=null;
 
         try {
-            // JS.g:1426:2: ( identifier ( ASSIGN assignmentExpressionNoIn )? )
-            // JS.g:1426:4: identifier ( ASSIGN assignmentExpressionNoIn )?
+            // JS.g:1428:2: ( identifier ( ASSIGN assignmentExpressionNoIn )? )
+            // JS.g:1428:4: identifier ( ASSIGN assignmentExpressionNoIn )?
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_identifier_in_variableDeclarationNoIn5933);
+            pushFollow(FOLLOW_identifier_in_variableDeclarationNoIn5956);
             identifier232=identifier();
             _fsp--;
 
             root_0 = (Object)adaptor.becomeRoot(identifier232.getTree(), root_0);
-            // JS.g:1426:16: ( ASSIGN assignmentExpressionNoIn )?
+            // JS.g:1428:16: ( ASSIGN assignmentExpressionNoIn )?
             int alt60=2;
             int LA60_0 = input.LA(1);
 
@@ -8712,14 +8861,14 @@
             }
             switch (alt60) {
                 case 1 :
-                    // JS.g:1426:18: ASSIGN assignmentExpressionNoIn
+                    // JS.g:1428:18: ASSIGN assignmentExpressionNoIn
                     {
                     ASSIGN233=(Token)input.LT(1);
-                    match(input,ASSIGN,FOLLOW_ASSIGN_in_variableDeclarationNoIn5938); 
+                    match(input,ASSIGN,FOLLOW_ASSIGN_in_variableDeclarationNoIn5961); 
                     ASSIGN233_tree = (Object)adaptor.create(ASSIGN233);
                     adaptor.addChild(root_0, ASSIGN233_tree);
 
-                    pushFollow(FOLLOW_assignmentExpressionNoIn_in_variableDeclarationNoIn5940);
+                    pushFollow(FOLLOW_assignmentExpressionNoIn_in_variableDeclarationNoIn5963);
                     assignmentExpressionNoIn234=assignmentExpressionNoIn();
                     _fsp--;
 
@@ -8758,7 +8907,7 @@
     };
 
     // $ANTLR start constStatement
-    // JS.g:1429:1: constStatement : CONST variableDeclaration ( COMMA variableDeclaration )* semic -> ^( CONST ( variableDeclaration )+ ) ;
+    // JS.g:1431:1: constStatement : CONST variableDeclaration ( COMMA variableDeclaration )* semic -> ^( CONST ( variableDeclaration )+ ) ;
     public final constStatement_return constStatement() throws RecognitionException {
         constStatement_return retval = new constStatement_return();
         retval.start = input.LT(1);
@@ -8781,19 +8930,19 @@
         RewriteRuleSubtreeStream stream_variableDeclaration=new RewriteRuleSubtreeStream(adaptor,"rule variableDeclaration");
         RewriteRuleSubtreeStream stream_semic=new RewriteRuleSubtreeStream(adaptor,"rule semic");
         try {
-            // JS.g:1430:3: ( CONST variableDeclaration ( COMMA variableDeclaration )* semic -> ^( CONST ( variableDeclaration )+ ) )
-            // JS.g:1430:5: CONST variableDeclaration ( COMMA variableDeclaration )* semic
+            // JS.g:1432:3: ( CONST variableDeclaration ( COMMA variableDeclaration )* semic -> ^( CONST ( variableDeclaration )+ ) )
+            // JS.g:1432:5: CONST variableDeclaration ( COMMA variableDeclaration )* semic
             {
             CONST235=(Token)input.LT(1);
-            match(input,CONST,FOLLOW_CONST_in_constStatement5955); 
+            match(input,CONST,FOLLOW_CONST_in_constStatement5978); 
             stream_CONST.add(CONST235);
 
-            pushFollow(FOLLOW_variableDeclaration_in_constStatement5957);
+            pushFollow(FOLLOW_variableDeclaration_in_constStatement5980);
             variableDeclaration236=variableDeclaration();
             _fsp--;
 
             stream_variableDeclaration.add(variableDeclaration236.getTree());
-            // JS.g:1430:31: ( COMMA variableDeclaration )*
+            // JS.g:1432:31: ( COMMA variableDeclaration )*
             loop61:
             do {
                 int alt61=2;
@@ -8806,13 +8955,13 @@
 
                 switch (alt61) {
             	case 1 :
-            	    // JS.g:1430:33: COMMA variableDeclaration
+            	    // JS.g:1432:33: COMMA variableDeclaration
             	    {
             	    COMMA237=(Token)input.LT(1);
-            	    match(input,COMMA,FOLLOW_COMMA_in_constStatement5961); 
+            	    match(input,COMMA,FOLLOW_COMMA_in_constStatement5984); 
             	    stream_COMMA.add(COMMA237);
 
-            	    pushFollow(FOLLOW_variableDeclaration_in_constStatement5963);
+            	    pushFollow(FOLLOW_variableDeclaration_in_constStatement5986);
             	    variableDeclaration238=variableDeclaration();
             	    _fsp--;
 
@@ -8826,14 +8975,14 @@
                 }
             } while (true);
 
-            pushFollow(FOLLOW_semic_in_constStatement5968);
+            pushFollow(FOLLOW_semic_in_constStatement5991);
             semic239=semic();
             _fsp--;
 
             stream_semic.add(semic239.getTree());
 
             // AST REWRITE
-            // elements: CONST, variableDeclaration
+            // elements: variableDeclaration, CONST
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -8842,9 +8991,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1431:3: -> ^( CONST ( variableDeclaration )+ )
+            // 1433:3: -> ^( CONST ( variableDeclaration )+ )
             {
-                // JS.g:1431:6: ^( CONST ( variableDeclaration )+ )
+                // JS.g:1433:6: ^( CONST ( variableDeclaration )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_CONST.next(), root_1);
@@ -8892,7 +9041,7 @@
     };
 
     // $ANTLR start emptyStatement
-    // JS.g:1438:1: emptyStatement : SEMIC -> EMPTY_STATEMENT[$SEMIC] ;
+    // JS.g:1440:1: emptyStatement : SEMIC -> EMPTY_STATEMENT[$SEMIC] ;
     public final emptyStatement_return emptyStatement() throws RecognitionException {
         emptyStatement_return retval = new emptyStatement_return();
         retval.start = input.LT(1);
@@ -8905,11 +9054,11 @@
         RewriteRuleTokenStream stream_SEMIC=new RewriteRuleTokenStream(adaptor,"token SEMIC");
 
         try {
-            // JS.g:1439:2: ( SEMIC -> EMPTY_STATEMENT[$SEMIC] )
-            // JS.g:1439:4: SEMIC
+            // JS.g:1441:2: ( SEMIC -> EMPTY_STATEMENT[$SEMIC] )
+            // JS.g:1441:4: SEMIC
             {
             SEMIC240=(Token)input.LT(1);
-            match(input,SEMIC,FOLLOW_SEMIC_in_emptyStatement5998); 
+            match(input,SEMIC,FOLLOW_SEMIC_in_emptyStatement6021); 
             stream_SEMIC.add(SEMIC240);
 
 
@@ -8923,7 +9072,7 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1439:10: -> EMPTY_STATEMENT[$SEMIC]
+            // 1441:10: -> EMPTY_STATEMENT[$SEMIC]
             {
                 adaptor.addChild(root_0, adaptor.create(EMPTY_STATEMENT, SEMIC240));
 
@@ -8958,7 +9107,7 @@
     };
 
     // $ANTLR start expressionStatement
-    // JS.g:1452:1: expressionStatement : expression semic ;
+    // JS.g:1454:1: expressionStatement : expression semic ;
     public final expressionStatement_return expressionStatement() throws RecognitionException {
         expressionStatement_return retval = new expressionStatement_return();
         retval.start = input.LT(1);
@@ -8972,17 +9121,17 @@
 
 
         try {
-            // JS.g:1453:2: ( expression semic )
-            // JS.g:1453:4: expression semic
+            // JS.g:1455:2: ( expression semic )
+            // JS.g:1455:4: expression semic
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_expression_in_expressionStatement6021);
+            pushFollow(FOLLOW_expression_in_expressionStatement6044);
             expression241=expression();
             _fsp--;
 
             adaptor.addChild(root_0, expression241.getTree());
-            pushFollow(FOLLOW_semic_in_expressionStatement6023);
+            pushFollow(FOLLOW_semic_in_expressionStatement6046);
             semic242=semic();
             _fsp--;
 
@@ -9014,7 +9163,7 @@
     };
 
     // $ANTLR start ifStatement
-    // JS.g:1460:1: ifStatement : IF LPAREN expression RPAREN statement ({...}? ELSE statement )? -> ^( IF expression ( statement )+ ) ;
+    // JS.g:1462:1: ifStatement : IF LPAREN expression RPAREN statement ({...}? ELSE statement )? -> ^( IF expression ( statement )+ ) ;
     public final ifStatement_return ifStatement() throws RecognitionException {
         ifStatement_return retval = new ifStatement_return();
         retval.start = input.LT(1);
@@ -9043,32 +9192,32 @@
         RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
         RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
         try {
-            // JS.g:1462:2: ( IF LPAREN expression RPAREN statement ({...}? ELSE statement )? -> ^( IF expression ( statement )+ ) )
-            // JS.g:1462:4: IF LPAREN expression RPAREN statement ({...}? ELSE statement )?
+            // JS.g:1464:2: ( IF LPAREN expression RPAREN statement ({...}? ELSE statement )? -> ^( IF expression ( statement )+ ) )
+            // JS.g:1464:4: IF LPAREN expression RPAREN statement ({...}? ELSE statement )?
             {
             IF243=(Token)input.LT(1);
-            match(input,IF,FOLLOW_IF_in_ifStatement6041); 
+            match(input,IF,FOLLOW_IF_in_ifStatement6064); 
             stream_IF.add(IF243);
 
             LPAREN244=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_ifStatement6043); 
+            match(input,LPAREN,FOLLOW_LPAREN_in_ifStatement6066); 
             stream_LPAREN.add(LPAREN244);
 
-            pushFollow(FOLLOW_expression_in_ifStatement6045);
+            pushFollow(FOLLOW_expression_in_ifStatement6068);
             expression245=expression();
             _fsp--;
 
             stream_expression.add(expression245.getTree());
             RPAREN246=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_ifStatement6047); 
+            match(input,RPAREN,FOLLOW_RPAREN_in_ifStatement6070); 
             stream_RPAREN.add(RPAREN246);
 
-            pushFollow(FOLLOW_statement_in_ifStatement6049);
+            pushFollow(FOLLOW_statement_in_ifStatement6072);
             statement247=statement();
             _fsp--;
 
             stream_statement.add(statement247.getTree());
-            // JS.g:1462:42: ({...}? ELSE statement )?
+            // JS.g:1464:42: ({...}? ELSE statement )?
             int alt62=2;
             int LA62_0 = input.LA(1);
 
@@ -9081,16 +9230,16 @@
             }
             switch (alt62) {
                 case 1 :
-                    // JS.g:1462:44: {...}? ELSE statement
+                    // JS.g:1464:44: {...}? ELSE statement
                     {
                     if ( !( input.LA(1) == ELSE ) ) {
                         throw new FailedPredicateException(input, "ifStatement", " input.LA(1) == ELSE ");
                     }
                     ELSE248=(Token)input.LT(1);
-                    match(input,ELSE,FOLLOW_ELSE_in_ifStatement6055); 
+                    match(input,ELSE,FOLLOW_ELSE_in_ifStatement6078); 
                     stream_ELSE.add(ELSE248);
 
-                    pushFollow(FOLLOW_statement_in_ifStatement6057);
+                    pushFollow(FOLLOW_statement_in_ifStatement6080);
                     statement249=statement();
                     _fsp--;
 
@@ -9103,7 +9252,7 @@
 
 
             // AST REWRITE
-            // elements: expression, statement, IF
+            // elements: expression, IF, statement
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -9112,9 +9261,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1463:2: -> ^( IF expression ( statement )+ )
+            // 1465:2: -> ^( IF expression ( statement )+ )
             {
-                // JS.g:1463:5: ^( IF expression ( statement )+ )
+                // JS.g:1465:5: ^( IF expression ( statement )+ )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_IF.next(), root_1);
@@ -9163,7 +9312,7 @@
     };
 
     // $ANTLR start iterationStatement
-    // JS.g:1470:1: iterationStatement : ( doStatement | whileStatement | forEachStatement | forStatement );
+    // JS.g:1472:1: iterationStatement : ( doStatement | whileStatement | forEachStatement | forStatement );
     public final iterationStatement_return iterationStatement() throws RecognitionException {
         iterationStatement_return retval = new iterationStatement_return();
         retval.start = input.LT(1);
@@ -9181,7 +9330,7 @@
 
 
         try {
-            // JS.g:1471:2: ( doStatement | whileStatement | forEachStatement | forStatement )
+            // JS.g:1473:2: ( doStatement | whileStatement | forEachStatement | forStatement )
             int alt63=4;
             switch ( input.LA(1) ) {
             case DO:
@@ -9198,15 +9347,15 @@
                 {
                 int LA63_3 = input.LA(2);
 
-                if ( (LA63_3==EACH) ) {
-                    alt63=3;
-                }
-                else if ( (LA63_3==LPAREN) ) {
+                if ( (LA63_3==LPAREN) ) {
                     alt63=4;
                 }
+                else if ( (LA63_3==EACH) ) {
+                    alt63=3;
+                }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1470:1: iterationStatement : ( doStatement | whileStatement | forEachStatement | forStatement );", 63, 3, input);
+                        new NoViableAltException("1472:1: iterationStatement : ( doStatement | whileStatement | forEachStatement | forStatement );", 63, 3, input);
 
                     throw nvae;
                 }
@@ -9214,18 +9363,18 @@
                 break;
             default:
                 NoViableAltException nvae =
-                    new NoViableAltException("1470:1: iterationStatement : ( doStatement | whileStatement | forEachStatement | forStatement );", 63, 0, input);
+                    new NoViableAltException("1472:1: iterationStatement : ( doStatement | whileStatement | forEachStatement | forStatement );", 63, 0, input);
 
                 throw nvae;
             }
 
             switch (alt63) {
                 case 1 :
-                    // JS.g:1471:4: doStatement
+                    // JS.g:1473:4: doStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_doStatement_in_iterationStatement6090);
+                    pushFollow(FOLLOW_doStatement_in_iterationStatement6113);
                     doStatement250=doStatement();
                     _fsp--;
 
@@ -9234,11 +9383,11 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1472:4: whileStatement
+                    // JS.g:1474:4: whileStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_whileStatement_in_iterationStatement6095);
+                    pushFollow(FOLLOW_whileStatement_in_iterationStatement6118);
                     whileStatement251=whileStatement();
                     _fsp--;
 
@@ -9247,11 +9396,11 @@
                     }
                     break;
                 case 3 :
-                    // JS.g:1473:4: forEachStatement
+                    // JS.g:1475:4: forEachStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_forEachStatement_in_iterationStatement6100);
+                    pushFollow(FOLLOW_forEachStatement_in_iterationStatement6123);
                     forEachStatement252=forEachStatement();
                     _fsp--;
 
@@ -9260,11 +9409,11 @@
                     }
                     break;
                 case 4 :
-                    // JS.g:1474:4: forStatement
+                    // JS.g:1476:4: forStatement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_forStatement_in_iterationStatement6105);
+                    pushFollow(FOLLOW_forStatement_in_iterationStatement6128);
                     forStatement253=forStatement();
                     _fsp--;
 
@@ -9299,7 +9448,7 @@
     };
 
     // $ANTLR start doStatement
-    // JS.g:1477:1: doStatement : DO statement WHILE LPAREN expression RPAREN semic -> ^( DO statement expression ) ;
+    // JS.g:1479:1: doStatement : DO statement WHILE LPAREN expression RPAREN semic -> ^( DO statement expression ) ;
     public final doStatement_return doStatement() throws RecognitionException {
         doStatement_return retval = new doStatement_return();
         retval.start = input.LT(1);
@@ -9329,43 +9478,43 @@
         RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
         RewriteRuleSubtreeStream stream_semic=new RewriteRuleSubtreeStream(adaptor,"rule semic");
         try {
-            // JS.g:1478:2: ( DO statement WHILE LPAREN expression RPAREN semic -> ^( DO statement expression ) )
-            // JS.g:1478:4: DO statement WHILE LPAREN expression RPAREN semic
+            // JS.g:1480:2: ( DO statement WHILE LPAREN expression RPAREN semic -> ^( DO statement expression ) )
+            // JS.g:1480:4: DO statement WHILE LPAREN expression RPAREN semic
             {
             DO254=(Token)input.LT(1);
-            match(input,DO,FOLLOW_DO_in_doStatement6117); 
+            match(input,DO,FOLLOW_DO_in_doStatement6140); 
             stream_DO.add(DO254);
 
-            pushFollow(FOLLOW_statement_in_doStatement6119);
+            pushFollow(FOLLOW_statement_in_doStatement6142);
             statement255=statement();
             _fsp--;
 
             stream_statement.add(statement255.getTree());
             WHILE256=(Token)input.LT(1);
-            match(input,WHILE,FOLLOW_WHILE_in_doStatement6121); 
+            match(input,WHILE,FOLLOW_WHILE_in_doStatement6144); 
             stream_WHILE.add(WHILE256);
 
             LPAREN257=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_doStatement6123); 
+            match(input,LPAREN,FOLLOW_LPAREN_in_doStatement6146); 
             stream_LPAREN.add(LPAREN257);
 
-            pushFollow(FOLLOW_expression_in_doStatement6125);
+            pushFollow(FOLLOW_expression_in_doStatement6148);
             expression258=expression();
             _fsp--;
 
             stream_expression.add(expression258.getTree());
             RPAREN259=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_doStatement6127); 
+            match(input,RPAREN,FOLLOW_RPAREN_in_doStatement6150); 
             stream_RPAREN.add(RPAREN259);
 
-            pushFollow(FOLLOW_semic_in_doStatement6129);
+            pushFollow(FOLLOW_semic_in_doStatement6152);
             semic260=semic();
             _fsp--;
 
             stream_semic.add(semic260.getTree());
 
             // AST REWRITE
-            // elements: statement, expression, DO
+            // elements: DO, statement, expression
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -9374,9 +9523,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1479:2: -> ^( DO statement expression )
+            // 1481:2: -> ^( DO statement expression )
             {
-                // JS.g:1479:5: ^( DO statement expression )
+                // JS.g:1481:5: ^( DO statement expression )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_DO.next(), root_1);
@@ -9418,7 +9567,7 @@
     };
 
     // $ANTLR start whileStatement
-    // JS.g:1482:1: whileStatement : WHILE LPAREN expression RPAREN statement ;
+    // JS.g:1484:1: whileStatement : WHILE LPAREN expression RPAREN statement ;
     public final whileStatement_return whileStatement() throws RecognitionException {
         whileStatement_return retval = new whileStatement_return();
         retval.start = input.LT(1);
@@ -9438,26 +9587,26 @@
         Object RPAREN264_tree=null;
 
         try {
-            // JS.g:1483:2: ( WHILE LPAREN expression RPAREN statement )
-            // JS.g:1483:4: WHILE LPAREN expression RPAREN statement
+            // JS.g:1485:2: ( WHILE LPAREN expression RPAREN statement )
+            // JS.g:1485:4: WHILE LPAREN expression RPAREN statement
             {
             root_0 = (Object)adaptor.nil();
 
             WHILE261=(Token)input.LT(1);
-            match(input,WHILE,FOLLOW_WHILE_in_whileStatement6154); 
+            match(input,WHILE,FOLLOW_WHILE_in_whileStatement6177); 
             WHILE261_tree = (Object)adaptor.create(WHILE261);
             root_0 = (Object)adaptor.becomeRoot(WHILE261_tree, root_0);
 
             LPAREN262=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_whileStatement6157); 
-            pushFollow(FOLLOW_expression_in_whileStatement6160);
+            match(input,LPAREN,FOLLOW_LPAREN_in_whileStatement6180); 
+            pushFollow(FOLLOW_expression_in_whileStatement6183);
             expression263=expression();
             _fsp--;
 
             adaptor.addChild(root_0, expression263.getTree());
             RPAREN264=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_whileStatement6162); 
-            pushFollow(FOLLOW_statement_in_whileStatement6165);
+            match(input,RPAREN,FOLLOW_RPAREN_in_whileStatement6185); 
+            pushFollow(FOLLOW_statement_in_whileStatement6188);
             statement265=statement();
             _fsp--;
 
@@ -9490,7 +9639,7 @@
     };
 
     // $ANTLR start forEachStatement
-    // JS.g:1528:1: forEachStatement : forKeyword= FOR EACH LPAREN forEachControl RPAREN statement -> ^( FOREACH[$forKeyword] forEachControl statement ) ;
+    // JS.g:1530:1: forEachStatement : forKeyword= FOR EACH LPAREN forEachControl RPAREN statement -> ^( FOREACH[$forKeyword] forEachControl statement ) ;
     public final forEachStatement_return forEachStatement() throws RecognitionException {
         forEachStatement_return retval = new forEachStatement_return();
         retval.start = input.LT(1);
@@ -9517,31 +9666,31 @@
         RewriteRuleSubtreeStream stream_statement=new RewriteRuleSubtreeStream(adaptor,"rule statement");
         RewriteRuleSubtreeStream stream_forEachControl=new RewriteRuleSubtreeStream(adaptor,"rule forEachControl");
         try {
-            // JS.g:1529:3: (forKeyword= FOR EACH LPAREN forEachControl RPAREN statement -> ^( FOREACH[$forKeyword] forEachControl statement ) )
-            // JS.g:1529:5: forKeyword= FOR EACH LPAREN forEachControl RPAREN statement
+            // JS.g:1531:3: (forKeyword= FOR EACH LPAREN forEachControl RPAREN statement -> ^( FOREACH[$forKeyword] forEachControl statement ) )
+            // JS.g:1531:5: forKeyword= FOR EACH LPAREN forEachControl RPAREN statement
             {
             forKeyword=(Token)input.LT(1);
-            match(input,FOR,FOLLOW_FOR_in_forEachStatement6182); 
+            match(input,FOR,FOLLOW_FOR_in_forEachStatement6205); 
             stream_FOR.add(forKeyword);
 
             EACH266=(Token)input.LT(1);
-            match(input,EACH,FOLLOW_EACH_in_forEachStatement6184); 
+            match(input,EACH,FOLLOW_EACH_in_forEachStatement6207); 
             stream_EACH.add(EACH266);
 
             LPAREN267=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_forEachStatement6186); 
+            match(input,LPAREN,FOLLOW_LPAREN_in_forEachStatement6209); 
             stream_LPAREN.add(LPAREN267);
 
-            pushFollow(FOLLOW_forEachControl_in_forEachStatement6188);
+            pushFollow(FOLLOW_forEachControl_in_forEachStatement6211);
             forEachControl268=forEachControl();
             _fsp--;
 
             stream_forEachControl.add(forEachControl268.getTree());
             RPAREN269=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_forEachStatement6190); 
+            match(input,RPAREN,FOLLOW_RPAREN_in_forEachStatement6213); 
             stream_RPAREN.add(RPAREN269);
 
-            pushFollow(FOLLOW_statement_in_forEachStatement6192);
+            pushFollow(FOLLOW_statement_in_forEachStatement6215);
             statement270=statement();
             _fsp--;
 
@@ -9557,9 +9706,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1530:4: -> ^( FOREACH[$forKeyword] forEachControl statement )
+            // 1532:4: -> ^( FOREACH[$forKeyword] forEachControl statement )
             {
-                // JS.g:1530:7: ^( FOREACH[$forKeyword] forEachControl statement )
+                // JS.g:1532:7: ^( FOREACH[$forKeyword] forEachControl statement )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(FOREACH, forKeyword), root_1);
@@ -9601,7 +9750,7 @@
     };
 
     // $ANTLR start forEachControl
-    // JS.g:1533:1: forEachControl : ( forControlVar | forControlExpression );
+    // JS.g:1535:1: forEachControl : ( forControlVar | forControlExpression );
     public final forEachControl_return forEachControl() throws RecognitionException {
         forEachControl_return retval = new forEachControl_return();
         retval.start = input.LT(1);
@@ -9615,7 +9764,7 @@
 
 
         try {
-            // JS.g:1534:3: ( forControlVar | forControlExpression )
+            // JS.g:1536:3: ( forControlVar | forControlExpression )
             int alt64=2;
             int LA64_0 = input.LA(1);
 
@@ -9633,17 +9782,17 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1533:1: forEachControl : ( forControlVar | forControlExpression );", 64, 0, input);
+                    new NoViableAltException("1535:1: forEachControl : ( forControlVar | forControlExpression );", 64, 0, input);
 
                 throw nvae;
             }
             switch (alt64) {
                 case 1 :
-                    // JS.g:1534:5: forControlVar
+                    // JS.g:1536:5: forControlVar
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_forControlVar_in_forEachControl6220);
+                    pushFollow(FOLLOW_forControlVar_in_forEachControl6243);
                     forControlVar271=forControlVar();
                     _fsp--;
 
@@ -9652,11 +9801,11 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1535:5: forControlExpression
+                    // JS.g:1537:5: forControlExpression
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_forControlExpression_in_forEachControl6226);
+                    pushFollow(FOLLOW_forControlExpression_in_forEachControl6249);
                     forControlExpression272=forControlExpression();
                     _fsp--;
 
@@ -9691,7 +9840,7 @@
     };
 
     // $ANTLR start forStatement
-    // JS.g:1538:1: forStatement : FOR LPAREN forControl RPAREN statement ;
+    // JS.g:1540:1: forStatement : FOR LPAREN forControl RPAREN statement ;
     public final forStatement_return forStatement() throws RecognitionException {
         forStatement_return retval = new forStatement_return();
         retval.start = input.LT(1);
@@ -9711,26 +9860,26 @@
         Object RPAREN276_tree=null;
 
         try {
-            // JS.g:1539:2: ( FOR LPAREN forControl RPAREN statement )
-            // JS.g:1539:4: FOR LPAREN forControl RPAREN statement
+            // JS.g:1541:2: ( FOR LPAREN forControl RPAREN statement )
+            // JS.g:1541:4: FOR LPAREN forControl RPAREN statement
             {
             root_0 = (Object)adaptor.nil();
 
             FOR273=(Token)input.LT(1);
-            match(input,FOR,FOLLOW_FOR_in_forStatement6238); 
+            match(input,FOR,FOLLOW_FOR_in_forStatement6261); 
             FOR273_tree = (Object)adaptor.create(FOR273);
             root_0 = (Object)adaptor.becomeRoot(FOR273_tree, root_0);
 
             LPAREN274=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_forStatement6241); 
-            pushFollow(FOLLOW_forControl_in_forStatement6244);
+            match(input,LPAREN,FOLLOW_LPAREN_in_forStatement6264); 
+            pushFollow(FOLLOW_forControl_in_forStatement6267);
             forControl275=forControl();
             _fsp--;
 
             adaptor.addChild(root_0, forControl275.getTree());
             RPAREN276=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_forStatement6246); 
-            pushFollow(FOLLOW_statement_in_forStatement6249);
+            match(input,RPAREN,FOLLOW_RPAREN_in_forStatement6269); 
+            pushFollow(FOLLOW_statement_in_forStatement6272);
             statement277=statement();
             _fsp--;
 
@@ -9763,7 +9912,7 @@
     };
 
     // $ANTLR start forControl
-    // JS.g:1542:1: forControl : ( forControlVar | forControlExpression | forControlSemic );
+    // JS.g:1544:1: forControl : ( forControlVar | forControlExpression | forControlSemic );
     public final forControl_return forControl() throws RecognitionException {
         forControl_return retval = new forControl_return();
         retval.start = input.LT(1);
@@ -9779,7 +9928,7 @@
 
 
         try {
-            // JS.g:1543:2: ( forControlVar | forControlExpression | forControlSemic )
+            // JS.g:1545:2: ( forControlVar | forControlExpression | forControlSemic )
             int alt65=3;
             int LA65_0 = input.LA(1);
 
@@ -9800,17 +9949,17 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1542:1: forControl : ( forControlVar | forControlExpression | forControlSemic );", 65, 0, input);
+                    new NoViableAltException("1544:1: forControl : ( forControlVar | forControlExpression | forControlSemic );", 65, 0, input);
 
                 throw nvae;
             }
             switch (alt65) {
                 case 1 :
-                    // JS.g:1543:4: forControlVar
+                    // JS.g:1545:4: forControlVar
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_forControlVar_in_forControl6260);
+                    pushFollow(FOLLOW_forControlVar_in_forControl6283);
                     forControlVar278=forControlVar();
                     _fsp--;
 
@@ -9819,11 +9968,11 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1544:4: forControlExpression
+                    // JS.g:1546:4: forControlExpression
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_forControlExpression_in_forControl6265);
+                    pushFollow(FOLLOW_forControlExpression_in_forControl6288);
                     forControlExpression279=forControlExpression();
                     _fsp--;
 
@@ -9832,11 +9981,11 @@
                     }
                     break;
                 case 3 :
-                    // JS.g:1545:4: forControlSemic
+                    // JS.g:1547:4: forControlSemic
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_forControlSemic_in_forControl6270);
+                    pushFollow(FOLLOW_forControlSemic_in_forControl6293);
                     forControlSemic280=forControlSemic();
                     _fsp--;
 
@@ -9871,7 +10020,7 @@
     };
 
     // $ANTLR start forControlVar
-    // JS.g:1548:1: forControlVar : VAR variableDeclarationNoIn ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) ) ;
+    // JS.g:1550:1: forControlVar : VAR variableDeclarationNoIn ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) ) ;
     public final forControlVar_return forControlVar() throws RecognitionException {
         forControlVar_return retval = new forControlVar_return();
         retval.start = input.LT(1);
@@ -9906,19 +10055,19 @@
         RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
         RewriteRuleSubtreeStream stream_variableDeclarationNoIn=new RewriteRuleSubtreeStream(adaptor,"rule variableDeclarationNoIn");
         try {
-            // JS.g:1549:2: ( VAR variableDeclarationNoIn ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) ) )
-            // JS.g:1549:4: VAR variableDeclarationNoIn ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) )
+            // JS.g:1551:2: ( VAR variableDeclarationNoIn ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) ) )
+            // JS.g:1551:4: VAR variableDeclarationNoIn ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) )
             {
             VAR281=(Token)input.LT(1);
-            match(input,VAR,FOLLOW_VAR_in_forControlVar6281); 
+            match(input,VAR,FOLLOW_VAR_in_forControlVar6304); 
             stream_VAR.add(VAR281);
 
-            pushFollow(FOLLOW_variableDeclarationNoIn_in_forControlVar6283);
+            pushFollow(FOLLOW_variableDeclarationNoIn_in_forControlVar6306);
             variableDeclarationNoIn282=variableDeclarationNoIn();
             _fsp--;
 
             stream_variableDeclarationNoIn.add(variableDeclarationNoIn282.getTree());
-            // JS.g:1550:2: ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) )
+            // JS.g:1552:2: ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) )
             int alt69=2;
             int LA69_0 = input.LA(1);
 
@@ -9930,29 +10079,29 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1550:2: ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) )", 69, 0, input);
+                    new NoViableAltException("1552:2: ( ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) ) | ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ) )", 69, 0, input);
 
                 throw nvae;
             }
             switch (alt69) {
                 case 1 :
-                    // JS.g:1551:3: ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) )
+                    // JS.g:1553:3: ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) )
                     {
-                    // JS.g:1551:3: ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) )
-                    // JS.g:1552:4: IN expression
+                    // JS.g:1553:3: ( IN expression -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) ) )
+                    // JS.g:1554:4: IN expression
                     {
                     IN283=(Token)input.LT(1);
-                    match(input,IN,FOLLOW_IN_in_forControlVar6295); 
+                    match(input,IN,FOLLOW_IN_in_forControlVar6318); 
                     stream_IN.add(IN283);
 
-                    pushFollow(FOLLOW_expression_in_forControlVar6297);
+                    pushFollow(FOLLOW_expression_in_forControlVar6320);
                     expression284=expression();
                     _fsp--;
 
                     stream_expression.add(expression284.getTree());
 
                     // AST REWRITE
-                    // elements: expression, variableDeclarationNoIn, VAR
+                    // elements: variableDeclarationNoIn, expression, VAR
                     // token labels: 
                     // rule labels: retval
                     // token list labels: 
@@ -9961,14 +10110,14 @@
                     RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1553:4: -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) )
+                    // 1555:4: -> ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) )
                     {
-                        // JS.g:1553:7: ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) )
+                        // JS.g:1555:7: ^( FORITER ^( VAR variableDeclarationNoIn ) ^( EXPR expression ) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(FORITER, "FORITER"), root_1);
 
-                        // JS.g:1553:18: ^( VAR variableDeclarationNoIn )
+                        // JS.g:1555:18: ^( VAR variableDeclarationNoIn )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(stream_VAR.next(), root_2);
@@ -9977,7 +10126,7 @@
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1553:51: ^( EXPR expression )
+                        // JS.g:1555:51: ^( EXPR expression )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
@@ -10000,12 +10149,12 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1556:3: ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) )
+                    // JS.g:1558:3: ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) )
                     {
-                    // JS.g:1556:3: ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) )
-                    // JS.g:1557:4: ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )?
+                    // JS.g:1558:3: ( ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) )
+                    // JS.g:1559:4: ( COMMA variableDeclarationNoIn )* semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )?
                     {
-                    // JS.g:1557:4: ( COMMA variableDeclarationNoIn )*
+                    // JS.g:1559:4: ( COMMA variableDeclarationNoIn )*
                     loop66:
                     do {
                         int alt66=2;
@@ -10018,13 +10167,13 @@
 
                         switch (alt66) {
                     	case 1 :
-                    	    // JS.g:1557:6: COMMA variableDeclarationNoIn
+                    	    // JS.g:1559:6: COMMA variableDeclarationNoIn
                     	    {
                     	    COMMA285=(Token)input.LT(1);
-                    	    match(input,COMMA,FOLLOW_COMMA_in_forControlVar6343); 
+                    	    match(input,COMMA,FOLLOW_COMMA_in_forControlVar6366); 
                     	    stream_COMMA.add(COMMA285);
 
-                    	    pushFollow(FOLLOW_variableDeclarationNoIn_in_forControlVar6345);
+                    	    pushFollow(FOLLOW_variableDeclarationNoIn_in_forControlVar6368);
                     	    variableDeclarationNoIn286=variableDeclarationNoIn();
                     	    _fsp--;
 
@@ -10039,10 +10188,10 @@
                     } while (true);
 
                     semi1=(Token)input.LT(1);
-                    match(input,SEMIC,FOLLOW_SEMIC_in_forControlVar6352); 
+                    match(input,SEMIC,FOLLOW_SEMIC_in_forControlVar6375); 
                     stream_SEMIC.add(semi1);
 
-                    // JS.g:1557:54: (ex1= expression )?
+                    // JS.g:1559:54: (ex1= expression )?
                     int alt67=2;
                     int LA67_0 = input.LA(1);
 
@@ -10057,9 +10206,9 @@
                     }
                     switch (alt67) {
                         case 1 :
-                            // JS.g:1557:54: ex1= expression
+                            // JS.g:1559:54: ex1= expression
                             {
-                            pushFollow(FOLLOW_expression_in_forControlVar6356);
+                            pushFollow(FOLLOW_expression_in_forControlVar6379);
                             ex1=expression();
                             _fsp--;
 
@@ -10071,10 +10220,10 @@
                     }
 
                     semi2=(Token)input.LT(1);
-                    match(input,SEMIC,FOLLOW_SEMIC_in_forControlVar6361); 
+                    match(input,SEMIC,FOLLOW_SEMIC_in_forControlVar6384); 
                     stream_SEMIC.add(semi2);
 
-                    // JS.g:1557:82: (ex2= expression )?
+                    // JS.g:1559:82: (ex2= expression )?
                     int alt68=2;
                     int LA68_0 = input.LA(1);
 
@@ -10089,9 +10238,9 @@
                     }
                     switch (alt68) {
                         case 1 :
-                            // JS.g:1557:82: ex2= expression
+                            // JS.g:1559:82: ex2= expression
                             {
-                            pushFollow(FOLLOW_expression_in_forControlVar6365);
+                            pushFollow(FOLLOW_expression_in_forControlVar6388);
                             ex2=expression();
                             _fsp--;
 
@@ -10104,7 +10253,7 @@
 
 
                     // AST REWRITE
-                    // elements: ex1, semi2, semi1, variableDeclarationNoIn, VAR, ex2
+                    // elements: semi2, semi1, VAR, variableDeclarationNoIn, ex2, ex1
                     // token labels: semi2, semi1
                     // rule labels: retval, ex2, ex1
                     // token list labels: 
@@ -10117,14 +10266,14 @@
                     RewriteRuleSubtreeStream stream_ex1=new RewriteRuleSubtreeStream(adaptor,"token ex1",ex1!=null?ex1.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1558:4: -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) )
+                    // 1560:4: -> ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) )
                     {
-                        // JS.g:1558:7: ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) )
+                        // JS.g:1560:7: ^( FORSTEP ^( VAR ( variableDeclarationNoIn )+ ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(FORSTEP, "FORSTEP"), root_1);
 
-                        // JS.g:1558:18: ^( VAR ( variableDeclarationNoIn )+ )
+                        // JS.g:1560:18: ^( VAR ( variableDeclarationNoIn )+ )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(stream_VAR.next(), root_2);
@@ -10140,19 +10289,19 @@
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1558:52: ^( $semi1)
+                        // JS.g:1560:52: ^( $semi1)
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(stream_semi1.next(), root_2);
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1558:64: ^( EXPR ( $ex1)? )
+                        // JS.g:1560:64: ^( EXPR ( $ex1)? )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
 
-                        // JS.g:1558:72: ( $ex1)?
+                        // JS.g:1560:72: ( $ex1)?
                         if ( stream_ex1.hasNext() ) {
                             adaptor.addChild(root_2, stream_ex1.next());
 
@@ -10161,19 +10310,19 @@
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1558:80: ^( $semi2)
+                        // JS.g:1560:80: ^( $semi2)
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(stream_semi2.next(), root_2);
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1558:92: ^( EXPR ( $ex2)? )
+                        // JS.g:1560:92: ^( EXPR ( $ex2)? )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
 
-                        // JS.g:1558:100: ( $ex2)?
+                        // JS.g:1560:100: ( $ex2)?
                         if ( stream_ex2.hasNext() ) {
                             adaptor.addChild(root_2, stream_ex2.next());
 
@@ -10226,7 +10375,7 @@
     };
 
     // $ANTLR start forControlExpression
-    // JS.g:1563:1: forControlExpression : ex1= expressionNoIn ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) ) ;
+    // JS.g:1565:1: forControlExpression : ex1= expressionNoIn ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) ) ;
     public final forControlExpression_return forControlExpression() throws RecognitionException {
         forControlExpression_return retval = new forControlExpression_return();
         retval.start = input.LT(1);
@@ -10254,15 +10403,15 @@
         	Object[] isLhs = new Object[1];
 
         try {
-            // JS.g:1568:2: (ex1= expressionNoIn ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) ) )
-            // JS.g:1568:4: ex1= expressionNoIn ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) )
+            // JS.g:1570:2: (ex1= expressionNoIn ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) ) )
+            // JS.g:1570:4: ex1= expressionNoIn ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) )
             {
-            pushFollow(FOLLOW_expressionNoIn_in_forControlExpression6445);
+            pushFollow(FOLLOW_expressionNoIn_in_forControlExpression6468);
             ex1=expressionNoIn();
             _fsp--;
 
             stream_expressionNoIn.add(ex1.getTree());
-            // JS.g:1569:2: ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) )
+            // JS.g:1571:2: ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) )
             int alt72=2;
             int LA72_0 = input.LA(1);
 
@@ -10274,25 +10423,25 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1569:2: ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) )", 72, 0, input);
+                    new NoViableAltException("1571:2: ({...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) ) | (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) ) )", 72, 0, input);
 
                 throw nvae;
             }
             switch (alt72) {
                 case 1 :
-                    // JS.g:1570:3: {...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) )
+                    // JS.g:1572:3: {...}? ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) )
                     {
                     if ( !( isLeftHandSideIn(ex1, isLhs) ) ) {
                         throw new FailedPredicateException(input, "forControlExpression", " isLeftHandSideIn(ex1, isLhs) ");
                     }
-                    // JS.g:1570:37: ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) )
-                    // JS.g:1571:4: IN ex2= expression
+                    // JS.g:1572:37: ( IN ex2= expression -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) ) )
+                    // JS.g:1573:4: IN ex2= expression
                     {
                     IN287=(Token)input.LT(1);
-                    match(input,IN,FOLLOW_IN_in_forControlExpression6460); 
+                    match(input,IN,FOLLOW_IN_in_forControlExpression6483); 
                     stream_IN.add(IN287);
 
-                    pushFollow(FOLLOW_expression_in_forControlExpression6464);
+                    pushFollow(FOLLOW_expression_in_forControlExpression6487);
                     ex2=expression();
                     _fsp--;
 
@@ -10310,14 +10459,14 @@
                     RewriteRuleSubtreeStream stream_ex1=new RewriteRuleSubtreeStream(adaptor,"token ex1",ex1!=null?ex1.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1572:4: -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) )
+                    // 1574:4: -> ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) )
                     {
-                        // JS.g:1572:7: ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) )
+                        // JS.g:1574:7: ^( FORITER ^( EXPR $ex1) ^( EXPR $ex2) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(FORITER, "FORITER"), root_1);
 
-                        // JS.g:1572:18: ^( EXPR $ex1)
+                        // JS.g:1574:18: ^( EXPR $ex1)
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
@@ -10326,7 +10475,7 @@
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1572:33: ^( EXPR $ex2)
+                        // JS.g:1574:33: ^( EXPR $ex2)
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
@@ -10349,16 +10498,16 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1575:3: (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) )
+                    // JS.g:1577:3: (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) )
                     {
-                    // JS.g:1575:3: (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) )
-                    // JS.g:1576:4: semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )?
+                    // JS.g:1577:3: (semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )? -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) ) )
+                    // JS.g:1578:4: semi1= SEMIC (ex2= expression )? semi2= SEMIC (ex3= expression )?
                     {
                     semi1=(Token)input.LT(1);
-                    match(input,SEMIC,FOLLOW_SEMIC_in_forControlExpression6512); 
+                    match(input,SEMIC,FOLLOW_SEMIC_in_forControlExpression6535); 
                     stream_SEMIC.add(semi1);
 
-                    // JS.g:1576:19: (ex2= expression )?
+                    // JS.g:1578:19: (ex2= expression )?
                     int alt70=2;
                     int LA70_0 = input.LA(1);
 
@@ -10373,9 +10522,9 @@
                     }
                     switch (alt70) {
                         case 1 :
-                            // JS.g:1576:19: ex2= expression
+                            // JS.g:1578:19: ex2= expression
                             {
-                            pushFollow(FOLLOW_expression_in_forControlExpression6516);
+                            pushFollow(FOLLOW_expression_in_forControlExpression6539);
                             ex2=expression();
                             _fsp--;
 
@@ -10387,10 +10536,10 @@
                     }
 
                     semi2=(Token)input.LT(1);
-                    match(input,SEMIC,FOLLOW_SEMIC_in_forControlExpression6521); 
+                    match(input,SEMIC,FOLLOW_SEMIC_in_forControlExpression6544); 
                     stream_SEMIC.add(semi2);
 
-                    // JS.g:1576:47: (ex3= expression )?
+                    // JS.g:1578:47: (ex3= expression )?
                     int alt71=2;
                     int LA71_0 = input.LA(1);
 
@@ -10405,9 +10554,9 @@
                     }
                     switch (alt71) {
                         case 1 :
-                            // JS.g:1576:47: ex3= expression
+                            // JS.g:1578:47: ex3= expression
                             {
-                            pushFollow(FOLLOW_expression_in_forControlExpression6525);
+                            pushFollow(FOLLOW_expression_in_forControlExpression6548);
                             ex3=expression();
                             _fsp--;
 
@@ -10420,7 +10569,7 @@
 
 
                     // AST REWRITE
-                    // elements: ex1, semi2, ex2, semi1, ex3
+                    // elements: semi2, semi1, ex1, ex2, ex3
                     // token labels: semi2, semi1
                     // rule labels: retval, ex3, ex2, ex1
                     // token list labels: 
@@ -10434,14 +10583,14 @@
                     RewriteRuleSubtreeStream stream_ex1=new RewriteRuleSubtreeStream(adaptor,"token ex1",ex1!=null?ex1.tree:null);
 
                     root_0 = (Object)adaptor.nil();
-                    // 1577:4: -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) )
+                    // 1579:4: -> ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) )
                     {
-                        // JS.g:1577:7: ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) )
+                        // JS.g:1579:7: ^( FORSTEP ^( EXPR $ex1) ^( $semi1) ^( EXPR ( $ex2)? ) ^( $semi2) ^( EXPR ( $ex3)? ) )
                         {
                         Object root_1 = (Object)adaptor.nil();
                         root_1 = (Object)adaptor.becomeRoot(adaptor.create(FORSTEP, "FORSTEP"), root_1);
 
-                        // JS.g:1577:18: ^( EXPR $ex1)
+                        // JS.g:1579:18: ^( EXPR $ex1)
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
@@ -10450,19 +10599,19 @@
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1577:33: ^( $semi1)
+                        // JS.g:1579:33: ^( $semi1)
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(stream_semi1.next(), root_2);
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1577:45: ^( EXPR ( $ex2)? )
+                        // JS.g:1579:45: ^( EXPR ( $ex2)? )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
 
-                        // JS.g:1577:53: ( $ex2)?
+                        // JS.g:1579:53: ( $ex2)?
                         if ( stream_ex2.hasNext() ) {
                             adaptor.addChild(root_2, stream_ex2.next());
 
@@ -10471,19 +10620,19 @@
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1577:61: ^( $semi2)
+                        // JS.g:1579:61: ^( $semi2)
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(stream_semi2.next(), root_2);
 
                         adaptor.addChild(root_1, root_2);
                         }
-                        // JS.g:1577:73: ^( EXPR ( $ex3)? )
+                        // JS.g:1579:73: ^( EXPR ( $ex3)? )
                         {
                         Object root_2 = (Object)adaptor.nil();
                         root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
 
-                        // JS.g:1577:81: ( $ex3)?
+                        // JS.g:1579:81: ( $ex3)?
                         if ( stream_ex3.hasNext() ) {
                             adaptor.addChild(root_2, stream_ex3.next());
 
@@ -10536,7 +10685,7 @@
     };
 
     // $ANTLR start forControlSemic
-    // JS.g:1582:1: forControlSemic : semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( EXPR ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ;
+    // JS.g:1584:1: forControlSemic : semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( EXPR ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) ;
     public final forControlSemic_return forControlSemic() throws RecognitionException {
         forControlSemic_return retval = new forControlSemic_return();
         retval.start = input.LT(1);
@@ -10555,14 +10704,14 @@
         RewriteRuleTokenStream stream_SEMIC=new RewriteRuleTokenStream(adaptor,"token SEMIC");
         RewriteRuleSubtreeStream stream_expression=new RewriteRuleSubtreeStream(adaptor,"rule expression");
         try {
-            // JS.g:1583:2: (semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( EXPR ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) )
-            // JS.g:1583:4: semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )?
+            // JS.g:1585:2: (semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )? -> ^( FORSTEP ^( EXPR ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) ) )
+            // JS.g:1585:4: semi1= SEMIC (ex1= expression )? semi2= SEMIC (ex2= expression )?
             {
             semi1=(Token)input.LT(1);
-            match(input,SEMIC,FOLLOW_SEMIC_in_forControlSemic6600); 
+            match(input,SEMIC,FOLLOW_SEMIC_in_forControlSemic6623); 
             stream_SEMIC.add(semi1);
 
-            // JS.g:1583:19: (ex1= expression )?
+            // JS.g:1585:19: (ex1= expression )?
             int alt73=2;
             int LA73_0 = input.LA(1);
 
@@ -10577,9 +10726,9 @@
             }
             switch (alt73) {
                 case 1 :
-                    // JS.g:1583:19: ex1= expression
+                    // JS.g:1585:19: ex1= expression
                     {
-                    pushFollow(FOLLOW_expression_in_forControlSemic6604);
+                    pushFollow(FOLLOW_expression_in_forControlSemic6627);
                     ex1=expression();
                     _fsp--;
 
@@ -10591,10 +10740,10 @@
             }
 
             semi2=(Token)input.LT(1);
-            match(input,SEMIC,FOLLOW_SEMIC_in_forControlSemic6609); 
+            match(input,SEMIC,FOLLOW_SEMIC_in_forControlSemic6632); 
             stream_SEMIC.add(semi2);
 
-            // JS.g:1583:47: (ex2= expression )?
+            // JS.g:1585:47: (ex2= expression )?
             int alt74=2;
             int LA74_0 = input.LA(1);
 
@@ -10609,9 +10758,9 @@
             }
             switch (alt74) {
                 case 1 :
-                    // JS.g:1583:47: ex2= expression
+                    // JS.g:1585:47: ex2= expression
                     {
-                    pushFollow(FOLLOW_expression_in_forControlSemic6613);
+                    pushFollow(FOLLOW_expression_in_forControlSemic6636);
                     ex2=expression();
                     _fsp--;
 
@@ -10624,7 +10773,7 @@
 
 
             // AST REWRITE
-            // elements: ex2, semi1, semi2, ex1
+            // elements: ex1, semi1, ex2, semi2
             // token labels: semi2, semi1
             // rule labels: retval, ex2, ex1
             // token list labels: 
@@ -10637,33 +10786,33 @@
             RewriteRuleSubtreeStream stream_ex1=new RewriteRuleSubtreeStream(adaptor,"token ex1",ex1!=null?ex1.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1584:2: -> ^( FORSTEP ^( EXPR ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) )
+            // 1586:2: -> ^( FORSTEP ^( EXPR ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) )
             {
-                // JS.g:1584:5: ^( FORSTEP ^( EXPR ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) )
+                // JS.g:1586:5: ^( FORSTEP ^( EXPR ) ^( $semi1) ^( EXPR ( $ex1)? ) ^( $semi2) ^( EXPR ( $ex2)? ) )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(FORSTEP, "FORSTEP"), root_1);
 
-                // JS.g:1584:16: ^( EXPR )
+                // JS.g:1586:16: ^( EXPR )
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // JS.g:1584:26: ^( $semi1)
+                // JS.g:1586:26: ^( $semi1)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_semi1.next(), root_2);
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // JS.g:1584:38: ^( EXPR ( $ex1)? )
+                // JS.g:1586:38: ^( EXPR ( $ex1)? )
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
 
-                // JS.g:1584:46: ( $ex1)?
+                // JS.g:1586:46: ( $ex1)?
                 if ( stream_ex1.hasNext() ) {
                     adaptor.addChild(root_2, stream_ex1.next());
 
@@ -10672,19 +10821,19 @@
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // JS.g:1584:54: ^( $semi2)
+                // JS.g:1586:54: ^( $semi2)
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(stream_semi2.next(), root_2);
 
                 adaptor.addChild(root_1, root_2);
                 }
-                // JS.g:1584:66: ^( EXPR ( $ex2)? )
+                // JS.g:1586:66: ^( EXPR ( $ex2)? )
                 {
                 Object root_2 = (Object)adaptor.nil();
                 root_2 = (Object)adaptor.becomeRoot(adaptor.create(EXPR, "EXPR"), root_2);
 
-                // JS.g:1584:74: ( $ex2)?
+                // JS.g:1586:74: ( $ex2)?
                 if ( stream_ex2.hasNext() ) {
                     adaptor.addChild(root_2, stream_ex2.next());
 
@@ -10728,7 +10877,7 @@
     };
 
     // $ANTLR start continueStatement
-    // JS.g:1596:1: continueStatement : CONTINUE ( Identifier )? semic ;
+    // JS.g:1598:1: continueStatement : CONTINUE ( Identifier )? semic ;
     public final continueStatement_return continueStatement() throws RecognitionException {
         continueStatement_return retval = new continueStatement_return();
         retval.start = input.LT(1);
@@ -10744,18 +10893,18 @@
         Object Identifier289_tree=null;
 
         try {
-            // JS.g:1597:2: ( CONTINUE ( Identifier )? semic )
-            // JS.g:1597:4: CONTINUE ( Identifier )? semic
+            // JS.g:1599:2: ( CONTINUE ( Identifier )? semic )
+            // JS.g:1599:4: CONTINUE ( Identifier )? semic
             {
             root_0 = (Object)adaptor.nil();
 
             CONTINUE288=(Token)input.LT(1);
-            match(input,CONTINUE,FOLLOW_CONTINUE_in_continueStatement6681); 
+            match(input,CONTINUE,FOLLOW_CONTINUE_in_continueStatement6704); 
             CONTINUE288_tree = (Object)adaptor.create(CONTINUE288);
             root_0 = (Object)adaptor.becomeRoot(CONTINUE288_tree, root_0);
 
              if (input.LA(1) == Identifier) promoteEOL(null); 
-            // JS.g:1597:67: ( Identifier )?
+            // JS.g:1599:67: ( Identifier )?
             int alt75=2;
             int LA75_0 = input.LA(1);
 
@@ -10764,10 +10913,10 @@
             }
             switch (alt75) {
                 case 1 :
-                    // JS.g:1597:67: Identifier
+                    // JS.g:1599:67: Identifier
                     {
                     Identifier289=(Token)input.LT(1);
-                    match(input,Identifier,FOLLOW_Identifier_in_continueStatement6686); 
+                    match(input,Identifier,FOLLOW_Identifier_in_continueStatement6709); 
                     Identifier289_tree = (Object)adaptor.create(Identifier289);
                     adaptor.addChild(root_0, Identifier289_tree);
 
@@ -10777,7 +10926,7 @@
 
             }
 
-            pushFollow(FOLLOW_semic_in_continueStatement6689);
+            pushFollow(FOLLOW_semic_in_continueStatement6712);
             semic290=semic();
             _fsp--;
 
@@ -10809,7 +10958,7 @@
     };
 
     // $ANTLR start breakStatement
-    // JS.g:1609:1: breakStatement : BREAK ( Identifier )? semic ;
+    // JS.g:1611:1: breakStatement : BREAK ( Identifier )? semic ;
     public final breakStatement_return breakStatement() throws RecognitionException {
         breakStatement_return retval = new breakStatement_return();
         retval.start = input.LT(1);
@@ -10825,18 +10974,18 @@
         Object Identifier292_tree=null;
 
         try {
-            // JS.g:1610:2: ( BREAK ( Identifier )? semic )
-            // JS.g:1610:4: BREAK ( Identifier )? semic
+            // JS.g:1612:2: ( BREAK ( Identifier )? semic )
+            // JS.g:1612:4: BREAK ( Identifier )? semic
             {
             root_0 = (Object)adaptor.nil();
 
             BREAK291=(Token)input.LT(1);
-            match(input,BREAK,FOLLOW_BREAK_in_breakStatement6708); 
+            match(input,BREAK,FOLLOW_BREAK_in_breakStatement6731); 
             BREAK291_tree = (Object)adaptor.create(BREAK291);
             root_0 = (Object)adaptor.becomeRoot(BREAK291_tree, root_0);
 
              if (input.LA(1) == Identifier) promoteEOL(null); 
-            // JS.g:1610:64: ( Identifier )?
+            // JS.g:1612:64: ( Identifier )?
             int alt76=2;
             int LA76_0 = input.LA(1);
 
@@ -10845,10 +10994,10 @@
             }
             switch (alt76) {
                 case 1 :
-                    // JS.g:1610:64: Identifier
+                    // JS.g:1612:64: Identifier
                     {
                     Identifier292=(Token)input.LT(1);
-                    match(input,Identifier,FOLLOW_Identifier_in_breakStatement6713); 
+                    match(input,Identifier,FOLLOW_Identifier_in_breakStatement6736); 
                     Identifier292_tree = (Object)adaptor.create(Identifier292);
                     adaptor.addChild(root_0, Identifier292_tree);
 
@@ -10858,7 +11007,7 @@
 
             }
 
-            pushFollow(FOLLOW_semic_in_breakStatement6716);
+            pushFollow(FOLLOW_semic_in_breakStatement6739);
             semic293=semic();
             _fsp--;
 
@@ -10890,7 +11039,7 @@
     };
 
     // $ANTLR start returnStatement
-    // JS.g:1630:1: returnStatement : RETURN ( expression )? semic ;
+    // JS.g:1632:1: returnStatement : RETURN ( expression )? semic ;
     public final returnStatement_return returnStatement() throws RecognitionException {
         returnStatement_return retval = new returnStatement_return();
         retval.start = input.LT(1);
@@ -10906,18 +11055,18 @@
         Object RETURN294_tree=null;
 
         try {
-            // JS.g:1631:2: ( RETURN ( expression )? semic )
-            // JS.g:1631:4: RETURN ( expression )? semic
+            // JS.g:1633:2: ( RETURN ( expression )? semic )
+            // JS.g:1633:4: RETURN ( expression )? semic
             {
             root_0 = (Object)adaptor.nil();
 
             RETURN294=(Token)input.LT(1);
-            match(input,RETURN,FOLLOW_RETURN_in_returnStatement6735); 
+            match(input,RETURN,FOLLOW_RETURN_in_returnStatement6758); 
             RETURN294_tree = (Object)adaptor.create(RETURN294);
             root_0 = (Object)adaptor.becomeRoot(RETURN294_tree, root_0);
 
              promoteEOL(null); 
-            // JS.g:1631:34: ( expression )?
+            // JS.g:1633:34: ( expression )?
             int alt77=2;
             int LA77_0 = input.LA(1);
 
@@ -10932,9 +11081,9 @@
             }
             switch (alt77) {
                 case 1 :
-                    // JS.g:1631:34: expression
+                    // JS.g:1633:34: expression
                     {
-                    pushFollow(FOLLOW_expression_in_returnStatement6740);
+                    pushFollow(FOLLOW_expression_in_returnStatement6763);
                     expression295=expression();
                     _fsp--;
 
@@ -10945,7 +11094,7 @@
 
             }
 
-            pushFollow(FOLLOW_semic_in_returnStatement6743);
+            pushFollow(FOLLOW_semic_in_returnStatement6766);
             semic296=semic();
             _fsp--;
 
@@ -10977,7 +11126,7 @@
     };
 
     // $ANTLR start withStatement
-    // JS.g:1638:1: withStatement : WITH LPAREN expression RPAREN statement ;
+    // JS.g:1640:1: withStatement : WITH LPAREN expression RPAREN statement ;
     public final withStatement_return withStatement() throws RecognitionException {
         withStatement_return retval = new withStatement_return();
         retval.start = input.LT(1);
@@ -10997,26 +11146,26 @@
         Object RPAREN300_tree=null;
 
         try {
-            // JS.g:1639:2: ( WITH LPAREN expression RPAREN statement )
-            // JS.g:1639:4: WITH LPAREN expression RPAREN statement
+            // JS.g:1641:2: ( WITH LPAREN expression RPAREN statement )
+            // JS.g:1641:4: WITH LPAREN expression RPAREN statement
             {
             root_0 = (Object)adaptor.nil();
 
             WITH297=(Token)input.LT(1);
-            match(input,WITH,FOLLOW_WITH_in_withStatement6760); 
+            match(input,WITH,FOLLOW_WITH_in_withStatement6783); 
             WITH297_tree = (Object)adaptor.create(WITH297);
             root_0 = (Object)adaptor.becomeRoot(WITH297_tree, root_0);
 
             LPAREN298=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_withStatement6763); 
-            pushFollow(FOLLOW_expression_in_withStatement6766);
+            match(input,LPAREN,FOLLOW_LPAREN_in_withStatement6786); 
+            pushFollow(FOLLOW_expression_in_withStatement6789);
             expression299=expression();
             _fsp--;
 
             adaptor.addChild(root_0, expression299.getTree());
             RPAREN300=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_withStatement6768); 
-            pushFollow(FOLLOW_statement_in_withStatement6771);
+            match(input,RPAREN,FOLLOW_RPAREN_in_withStatement6791); 
+            pushFollow(FOLLOW_statement_in_withStatement6794);
             statement301=statement();
             _fsp--;
 
@@ -11049,7 +11198,7 @@
     };
 
     // $ANTLR start switchStatement
-    // JS.g:1646:1: switchStatement : SWITCH LPAREN expression RPAREN LBRACE ( defaultClause | caseClause )* RBRACE -> ^( SWITCH expression ( defaultClause )* ( caseClause )* ) ;
+    // JS.g:1648:1: switchStatement : SWITCH LPAREN expression RPAREN LBRACE ( defaultClause | caseClause )* RBRACE -> ^( SWITCH expression ( defaultClause )* ( caseClause )* ) ;
     public final switchStatement_return switchStatement() throws RecognitionException {
         switchStatement_return retval = new switchStatement_return();
         retval.start = input.LT(1);
@@ -11082,31 +11231,31 @@
         RewriteRuleSubtreeStream stream_caseClause=new RewriteRuleSubtreeStream(adaptor,"rule caseClause");
         RewriteRuleSubtreeStream stream_defaultClause=new RewriteRuleSubtreeStream(adaptor,"rule defaultClause");
         try {
-            // JS.g:1647:2: ( SWITCH LPAREN expression RPAREN LBRACE ( defaultClause | caseClause )* RBRACE -> ^( SWITCH expression ( defaultClause )* ( caseClause )* ) )
-            // JS.g:1647:4: SWITCH LPAREN expression RPAREN LBRACE ( defaultClause | caseClause )* RBRACE
+            // JS.g:1649:2: ( SWITCH LPAREN expression RPAREN LBRACE ( defaultClause | caseClause )* RBRACE -> ^( SWITCH expression ( defaultClause )* ( caseClause )* ) )
+            // JS.g:1649:4: SWITCH LPAREN expression RPAREN LBRACE ( defaultClause | caseClause )* RBRACE
             {
             SWITCH302=(Token)input.LT(1);
-            match(input,SWITCH,FOLLOW_SWITCH_in_switchStatement6787); 
+            match(input,SWITCH,FOLLOW_SWITCH_in_switchStatement6810); 
             stream_SWITCH.add(SWITCH302);
 
             LPAREN303=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_switchStatement6789); 
+            match(input,LPAREN,FOLLOW_LPAREN_in_switchStatement6812); 
             stream_LPAREN.add(LPAREN303);
 
-            pushFollow(FOLLOW_expression_in_switchStatement6791);
+            pushFollow(FOLLOW_expression_in_switchStatement6814);
             expression304=expression();
             _fsp--;
 
             stream_expression.add(expression304.getTree());
             RPAREN305=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_switchStatement6793); 
+            match(input,RPAREN,FOLLOW_RPAREN_in_switchStatement6816); 
             stream_RPAREN.add(RPAREN305);
 
             LBRACE306=(Token)input.LT(1);
-            match(input,LBRACE,FOLLOW_LBRACE_in_switchStatement6795); 
+            match(input,LBRACE,FOLLOW_LBRACE_in_switchStatement6818); 
             stream_LBRACE.add(LBRACE306);
 
-            // JS.g:1647:43: ( defaultClause | caseClause )*
+            // JS.g:1649:43: ( defaultClause | caseClause )*
             loop78:
             do {
                 int alt78=3;
@@ -11122,9 +11271,9 @@
 
                 switch (alt78) {
             	case 1 :
-            	    // JS.g:1647:45: defaultClause
+            	    // JS.g:1649:45: defaultClause
             	    {
-            	    pushFollow(FOLLOW_defaultClause_in_switchStatement6799);
+            	    pushFollow(FOLLOW_defaultClause_in_switchStatement6822);
             	    defaultClause307=defaultClause();
             	    _fsp--;
 
@@ -11133,9 +11282,9 @@
             	    }
             	    break;
             	case 2 :
-            	    // JS.g:1647:61: caseClause
+            	    // JS.g:1649:61: caseClause
             	    {
-            	    pushFollow(FOLLOW_caseClause_in_switchStatement6803);
+            	    pushFollow(FOLLOW_caseClause_in_switchStatement6826);
             	    caseClause308=caseClause();
             	    _fsp--;
 
@@ -11150,12 +11299,12 @@
             } while (true);
 
             RBRACE309=(Token)input.LT(1);
-            match(input,RBRACE,FOLLOW_RBRACE_in_switchStatement6808); 
+            match(input,RBRACE,FOLLOW_RBRACE_in_switchStatement6831); 
             stream_RBRACE.add(RBRACE309);
 
 
             // AST REWRITE
-            // elements: SWITCH, expression, caseClause, defaultClause
+            // elements: SWITCH, defaultClause, expression, caseClause
             // token labels: 
             // rule labels: retval
             // token list labels: 
@@ -11164,21 +11313,21 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1648:2: -> ^( SWITCH expression ( defaultClause )* ( caseClause )* )
+            // 1650:2: -> ^( SWITCH expression ( defaultClause )* ( caseClause )* )
             {
-                // JS.g:1648:5: ^( SWITCH expression ( defaultClause )* ( caseClause )* )
+                // JS.g:1650:5: ^( SWITCH expression ( defaultClause )* ( caseClause )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_SWITCH.next(), root_1);
 
                 adaptor.addChild(root_1, stream_expression.next());
-                // JS.g:1648:26: ( defaultClause )*
+                // JS.g:1650:26: ( defaultClause )*
                 while ( stream_defaultClause.hasNext() ) {
                     adaptor.addChild(root_1, stream_defaultClause.next());
 
                 }
                 stream_defaultClause.reset();
-                // JS.g:1648:41: ( caseClause )*
+                // JS.g:1650:41: ( caseClause )*
                 while ( stream_caseClause.hasNext() ) {
                     adaptor.addChild(root_1, stream_caseClause.next());
 
@@ -11219,7 +11368,7 @@
     };
 
     // $ANTLR start caseClause
-    // JS.g:1651:1: caseClause : CASE expression COLON ( statement )* ;
+    // JS.g:1653:1: caseClause : CASE expression COLON ( statement )* ;
     public final caseClause_return caseClause() throws RecognitionException {
         caseClause_return retval = new caseClause_return();
         retval.start = input.LT(1);
@@ -11237,24 +11386,24 @@
         Object COLON312_tree=null;
 
         try {
-            // JS.g:1652:2: ( CASE expression COLON ( statement )* )
-            // JS.g:1652:4: CASE expression COLON ( statement )*
+            // JS.g:1654:2: ( CASE expression COLON ( statement )* )
+            // JS.g:1654:4: CASE expression COLON ( statement )*
             {
             root_0 = (Object)adaptor.nil();
 
             CASE310=(Token)input.LT(1);
-            match(input,CASE,FOLLOW_CASE_in_caseClause6836); 
+            match(input,CASE,FOLLOW_CASE_in_caseClause6859); 
             CASE310_tree = (Object)adaptor.create(CASE310);
             root_0 = (Object)adaptor.becomeRoot(CASE310_tree, root_0);
 
-            pushFollow(FOLLOW_expression_in_caseClause6839);
+            pushFollow(FOLLOW_expression_in_caseClause6862);
             expression311=expression();
             _fsp--;
 
             adaptor.addChild(root_0, expression311.getTree());
             COLON312=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_caseClause6841); 
-            // JS.g:1652:28: ( statement )*
+            match(input,COLON,FOLLOW_COLON_in_caseClause6864); 
+            // JS.g:1654:28: ( statement )*
             loop79:
             do {
                 int alt79=2;
@@ -11282,9 +11431,9 @@
 
                 switch (alt79) {
             	case 1 :
-            	    // JS.g:1652:28: statement
+            	    // JS.g:1654:28: statement
             	    {
-            	    pushFollow(FOLLOW_statement_in_caseClause6844);
+            	    pushFollow(FOLLOW_statement_in_caseClause6867);
             	    statement313=statement();
             	    _fsp--;
 
@@ -11326,7 +11475,7 @@
     };
 
     // $ANTLR start defaultClause
-    // JS.g:1655:1: defaultClause : DEFAULT COLON ( statement )* ;
+    // JS.g:1657:1: defaultClause : DEFAULT COLON ( statement )* ;
     public final defaultClause_return defaultClause() throws RecognitionException {
         defaultClause_return retval = new defaultClause_return();
         retval.start = input.LT(1);
@@ -11342,19 +11491,19 @@
         Object COLON315_tree=null;
 
         try {
-            // JS.g:1656:2: ( DEFAULT COLON ( statement )* )
-            // JS.g:1656:4: DEFAULT COLON ( statement )*
+            // JS.g:1658:2: ( DEFAULT COLON ( statement )* )
+            // JS.g:1658:4: DEFAULT COLON ( statement )*
             {
             root_0 = (Object)adaptor.nil();
 
             DEFAULT314=(Token)input.LT(1);
-            match(input,DEFAULT,FOLLOW_DEFAULT_in_defaultClause6857); 
+            match(input,DEFAULT,FOLLOW_DEFAULT_in_defaultClause6880); 
             DEFAULT314_tree = (Object)adaptor.create(DEFAULT314);
             root_0 = (Object)adaptor.becomeRoot(DEFAULT314_tree, root_0);
 
             COLON315=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_defaultClause6860); 
-            // JS.g:1656:20: ( statement )*
+            match(input,COLON,FOLLOW_COLON_in_defaultClause6883); 
+            // JS.g:1658:20: ( statement )*
             loop80:
             do {
                 int alt80=2;
@@ -11382,9 +11531,9 @@
 
                 switch (alt80) {
             	case 1 :
-            	    // JS.g:1656:20: statement
+            	    // JS.g:1658:20: statement
             	    {
-            	    pushFollow(FOLLOW_statement_in_defaultClause6863);
+            	    pushFollow(FOLLOW_statement_in_defaultClause6886);
             	    statement316=statement();
             	    _fsp--;
 
@@ -11426,7 +11575,7 @@
     };
 
     // $ANTLR start labelledStatement
-    // JS.g:1663:1: labelledStatement : identifier COLON sourceElement -> ^( LABELLED identifier sourceElement ) ;
+    // JS.g:1665:1: labelledStatement : identifier COLON sourceElement -> ^( LABELLED identifier sourceElement ) ;
     public final labelledStatement_return labelledStatement() throws RecognitionException {
         labelledStatement_return retval = new labelledStatement_return();
         retval.start = input.LT(1);
@@ -11444,19 +11593,19 @@
         RewriteRuleSubtreeStream stream_sourceElement=new RewriteRuleSubtreeStream(adaptor,"rule sourceElement");
         RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
         try {
-            // JS.g:1664:2: ( identifier COLON sourceElement -> ^( LABELLED identifier sourceElement ) )
-            // JS.g:1664:4: identifier COLON sourceElement
+            // JS.g:1666:2: ( identifier COLON sourceElement -> ^( LABELLED identifier sourceElement ) )
+            // JS.g:1666:4: identifier COLON sourceElement
             {
-            pushFollow(FOLLOW_identifier_in_labelledStatement6880);
+            pushFollow(FOLLOW_identifier_in_labelledStatement6903);
             identifier317=identifier();
             _fsp--;
 
             stream_identifier.add(identifier317.getTree());
             COLON318=(Token)input.LT(1);
-            match(input,COLON,FOLLOW_COLON_in_labelledStatement6882); 
+            match(input,COLON,FOLLOW_COLON_in_labelledStatement6905); 
             stream_COLON.add(COLON318);
 
-            pushFollow(FOLLOW_sourceElement_in_labelledStatement6884);
+            pushFollow(FOLLOW_sourceElement_in_labelledStatement6907);
             sourceElement319=sourceElement();
             _fsp--;
 
@@ -11472,9 +11621,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1665:2: -> ^( LABELLED identifier sourceElement )
+            // 1667:2: -> ^( LABELLED identifier sourceElement )
             {
-                // JS.g:1665:5: ^( LABELLED identifier sourceElement )
+                // JS.g:1667:5: ^( LABELLED identifier sourceElement )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(LABELLED, "LABELLED"), root_1);
@@ -11516,7 +11665,7 @@
     };
 
     // $ANTLR start throwStatement
-    // JS.g:1687:1: throwStatement : THROW expression semic ;
+    // JS.g:1689:1: throwStatement : THROW expression semic ;
     public final throwStatement_return throwStatement() throws RecognitionException {
         throwStatement_return retval = new throwStatement_return();
         retval.start = input.LT(1);
@@ -11532,23 +11681,23 @@
         Object THROW320_tree=null;
 
         try {
-            // JS.g:1688:2: ( THROW expression semic )
-            // JS.g:1688:4: THROW expression semic
+            // JS.g:1690:2: ( THROW expression semic )
+            // JS.g:1690:4: THROW expression semic
             {
             root_0 = (Object)adaptor.nil();
 
             THROW320=(Token)input.LT(1);
-            match(input,THROW,FOLLOW_THROW_in_throwStatement6915); 
+            match(input,THROW,FOLLOW_THROW_in_throwStatement6938); 
             THROW320_tree = (Object)adaptor.create(THROW320);
             root_0 = (Object)adaptor.becomeRoot(THROW320_tree, root_0);
 
              promoteEOL(null); 
-            pushFollow(FOLLOW_expression_in_throwStatement6920);
+            pushFollow(FOLLOW_expression_in_throwStatement6943);
             expression321=expression();
             _fsp--;
 
             adaptor.addChild(root_0, expression321.getTree());
-            pushFollow(FOLLOW_semic_in_throwStatement6922);
+            pushFollow(FOLLOW_semic_in_throwStatement6945);
             semic322=semic();
             _fsp--;
 
@@ -11580,7 +11729,7 @@
     };
 
     // $ANTLR start tryStatement
-    // JS.g:1695:1: tryStatement : TRY block ( ( catchClause )+ ( finallyClause )? | finallyClause ) ;
+    // JS.g:1697:1: tryStatement : TRY block ( ( catchClause )+ ( finallyClause )? | finallyClause ) ;
     public final tryStatement_return tryStatement() throws RecognitionException {
         tryStatement_return retval = new tryStatement_return();
         retval.start = input.LT(1);
@@ -11600,22 +11749,22 @@
         Object TRY323_tree=null;
 
         try {
-            // JS.g:1696:2: ( TRY block ( ( catchClause )+ ( finallyClause )? | finallyClause ) )
-            // JS.g:1696:4: TRY block ( ( catchClause )+ ( finallyClause )? | finallyClause )
+            // JS.g:1698:2: ( TRY block ( ( catchClause )+ ( finallyClause )? | finallyClause ) )
+            // JS.g:1698:4: TRY block ( ( catchClause )+ ( finallyClause )? | finallyClause )
             {
             root_0 = (Object)adaptor.nil();
 
             TRY323=(Token)input.LT(1);
-            match(input,TRY,FOLLOW_TRY_in_tryStatement6939); 
+            match(input,TRY,FOLLOW_TRY_in_tryStatement6962); 
             TRY323_tree = (Object)adaptor.create(TRY323);
             root_0 = (Object)adaptor.becomeRoot(TRY323_tree, root_0);
 
-            pushFollow(FOLLOW_block_in_tryStatement6942);
+            pushFollow(FOLLOW_block_in_tryStatement6965);
             block324=block();
             _fsp--;
 
             adaptor.addChild(root_0, block324.getTree());
-            // JS.g:1696:15: ( ( catchClause )+ ( finallyClause )? | finallyClause )
+            // JS.g:1698:15: ( ( catchClause )+ ( finallyClause )? | finallyClause )
             int alt83=2;
             int LA83_0 = input.LA(1);
 
@@ -11627,15 +11776,15 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1696:15: ( ( catchClause )+ ( finallyClause )? | finallyClause )", 83, 0, input);
+                    new NoViableAltException("1698:15: ( ( catchClause )+ ( finallyClause )? | finallyClause )", 83, 0, input);
 
                 throw nvae;
             }
             switch (alt83) {
                 case 1 :
-                    // JS.g:1696:17: ( catchClause )+ ( finallyClause )?
+                    // JS.g:1698:17: ( catchClause )+ ( finallyClause )?
                     {
-                    // JS.g:1696:17: ( catchClause )+
+                    // JS.g:1698:17: ( catchClause )+
                     int cnt81=0;
                     loop81:
                     do {
@@ -11649,9 +11798,9 @@
 
                         switch (alt81) {
                     	case 1 :
-                    	    // JS.g:1696:17: catchClause
+                    	    // JS.g:1698:17: catchClause
                     	    {
-                    	    pushFollow(FOLLOW_catchClause_in_tryStatement6946);
+                    	    pushFollow(FOLLOW_catchClause_in_tryStatement6969);
                     	    catchClause325=catchClause();
                     	    _fsp--;
 
@@ -11669,7 +11818,7 @@
                         cnt81++;
                     } while (true);
 
-                    // JS.g:1696:30: ( finallyClause )?
+                    // JS.g:1698:30: ( finallyClause )?
                     int alt82=2;
                     int LA82_0 = input.LA(1);
 
@@ -11678,9 +11827,9 @@
                     }
                     switch (alt82) {
                         case 1 :
-                            // JS.g:1696:30: finallyClause
+                            // JS.g:1698:30: finallyClause
                             {
-                            pushFollow(FOLLOW_finallyClause_in_tryStatement6949);
+                            pushFollow(FOLLOW_finallyClause_in_tryStatement6972);
                             finallyClause326=finallyClause();
                             _fsp--;
 
@@ -11695,9 +11844,9 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1696:47: finallyClause
+                    // JS.g:1698:47: finallyClause
                     {
-                    pushFollow(FOLLOW_finallyClause_in_tryStatement6954);
+                    pushFollow(FOLLOW_finallyClause_in_tryStatement6977);
                     finallyClause327=finallyClause();
                     _fsp--;
 
@@ -11736,7 +11885,7 @@
     };
 
     // $ANTLR start catchClause
-    // JS.g:1699:1: catchClause : CATCH LPAREN identifier ( catchFilter )? RPAREN block ;
+    // JS.g:1701:1: catchClause : CATCH LPAREN identifier ( catchFilter )? RPAREN block ;
     public final catchClause_return catchClause() throws RecognitionException {
         catchClause_return retval = new catchClause_return();
         retval.start = input.LT(1);
@@ -11758,24 +11907,24 @@
         Object RPAREN332_tree=null;
 
         try {
-            // JS.g:1700:2: ( CATCH LPAREN identifier ( catchFilter )? RPAREN block )
-            // JS.g:1700:4: CATCH LPAREN identifier ( catchFilter )? RPAREN block
+            // JS.g:1702:2: ( CATCH LPAREN identifier ( catchFilter )? RPAREN block )
+            // JS.g:1702:4: CATCH LPAREN identifier ( catchFilter )? RPAREN block
             {
             root_0 = (Object)adaptor.nil();
 
             CATCH328=(Token)input.LT(1);
-            match(input,CATCH,FOLLOW_CATCH_in_catchClause6968); 
+            match(input,CATCH,FOLLOW_CATCH_in_catchClause6991); 
             CATCH328_tree = (Object)adaptor.create(CATCH328);
             root_0 = (Object)adaptor.becomeRoot(CATCH328_tree, root_0);
 
             LPAREN329=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_catchClause6971); 
-            pushFollow(FOLLOW_identifier_in_catchClause6974);
+            match(input,LPAREN,FOLLOW_LPAREN_in_catchClause6994); 
+            pushFollow(FOLLOW_identifier_in_catchClause6997);
             identifier330=identifier();
             _fsp--;
 
             adaptor.addChild(root_0, identifier330.getTree());
-            // JS.g:1700:30: ( catchFilter )?
+            // JS.g:1702:30: ( catchFilter )?
             int alt84=2;
             int LA84_0 = input.LA(1);
 
@@ -11784,9 +11933,9 @@
             }
             switch (alt84) {
                 case 1 :
-                    // JS.g:1700:30: catchFilter
+                    // JS.g:1702:30: catchFilter
                     {
-                    pushFollow(FOLLOW_catchFilter_in_catchClause6976);
+                    pushFollow(FOLLOW_catchFilter_in_catchClause6999);
                     catchFilter331=catchFilter();
                     _fsp--;
 
@@ -11798,8 +11947,8 @@
             }
 
             RPAREN332=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_catchClause6979); 
-            pushFollow(FOLLOW_block_in_catchClause6982);
+            match(input,RPAREN,FOLLOW_RPAREN_in_catchClause7002); 
+            pushFollow(FOLLOW_block_in_catchClause7005);
             block333=block();
             _fsp--;
 
@@ -11832,7 +11981,7 @@
     };
 
     // $ANTLR start catchFilter
-    // JS.g:1703:1: catchFilter : IF expression ;
+    // JS.g:1705:1: catchFilter : IF expression ;
     public final catchFilter_return catchFilter() throws RecognitionException {
         catchFilter_return retval = new catchFilter_return();
         retval.start = input.LT(1);
@@ -11846,17 +11995,17 @@
         Object IF334_tree=null;
 
         try {
-            // JS.g:1704:2: ( IF expression )
-            // JS.g:1704:4: IF expression
+            // JS.g:1706:2: ( IF expression )
+            // JS.g:1706:4: IF expression
             {
             root_0 = (Object)adaptor.nil();
 
             IF334=(Token)input.LT(1);
-            match(input,IF,FOLLOW_IF_in_catchFilter6993); 
+            match(input,IF,FOLLOW_IF_in_catchFilter7016); 
             IF334_tree = (Object)adaptor.create(IF334);
             adaptor.addChild(root_0, IF334_tree);
 
-            pushFollow(FOLLOW_expression_in_catchFilter6995);
+            pushFollow(FOLLOW_expression_in_catchFilter7018);
             expression335=expression();
             _fsp--;
 
@@ -11889,7 +12038,7 @@
     };
 
     // $ANTLR start finallyClause
-    // JS.g:1707:1: finallyClause : FINALLY block ;
+    // JS.g:1709:1: finallyClause : FINALLY block ;
     public final finallyClause_return finallyClause() throws RecognitionException {
         finallyClause_return retval = new finallyClause_return();
         retval.start = input.LT(1);
@@ -11903,17 +12052,17 @@
         Object FINALLY336_tree=null;
 
         try {
-            // JS.g:1708:2: ( FINALLY block )
-            // JS.g:1708:4: FINALLY block
+            // JS.g:1710:2: ( FINALLY block )
+            // JS.g:1710:4: FINALLY block
             {
             root_0 = (Object)adaptor.nil();
 
             FINALLY336=(Token)input.LT(1);
-            match(input,FINALLY,FOLLOW_FINALLY_in_finallyClause7007); 
+            match(input,FINALLY,FOLLOW_FINALLY_in_finallyClause7030); 
             FINALLY336_tree = (Object)adaptor.create(FINALLY336);
             root_0 = (Object)adaptor.becomeRoot(FINALLY336_tree, root_0);
 
-            pushFollow(FOLLOW_block_in_finallyClause7010);
+            pushFollow(FOLLOW_block_in_finallyClause7033);
             block337=block();
             _fsp--;
 
@@ -11946,7 +12095,7 @@
     };
 
     // $ANTLR start functionDeclaration
-    // JS.g:1721:1: functionDeclaration : function= FUNCTION name= identifier formalParameterList functionBody -> ^( FUNCTION_DECLARATION[$function] $name formalParameterList functionBody ) ;
+    // JS.g:1723:1: functionDeclaration : function= FUNCTION name= identifier formalParameterList functionBody -> ^( FUNCTION_DECLARATION[$function] $name formalParameterList functionBody ) ;
     public final functionDeclaration_return functionDeclaration() throws RecognitionException {
         functionDeclaration_return retval = new functionDeclaration_return();
         retval.start = input.LT(1);
@@ -11967,31 +12116,31 @@
         RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
         RewriteRuleSubtreeStream stream_formalParameterList=new RewriteRuleSubtreeStream(adaptor,"rule formalParameterList");
         try {
-            // JS.g:1722:2: (function= FUNCTION name= identifier formalParameterList functionBody -> ^( FUNCTION_DECLARATION[$function] $name formalParameterList functionBody ) )
-            // JS.g:1722:4: function= FUNCTION name= identifier formalParameterList functionBody
+            // JS.g:1724:2: (function= FUNCTION name= identifier formalParameterList functionBody -> ^( FUNCTION_DECLARATION[$function] $name formalParameterList functionBody ) )
+            // JS.g:1724:4: function= FUNCTION name= identifier formalParameterList functionBody
             {
             function=(Token)input.LT(1);
-            match(input,FUNCTION,FOLLOW_FUNCTION_in_functionDeclaration7033); 
+            match(input,FUNCTION,FOLLOW_FUNCTION_in_functionDeclaration7056); 
             stream_FUNCTION.add(function);
 
-            pushFollow(FOLLOW_identifier_in_functionDeclaration7037);
+            pushFollow(FOLLOW_identifier_in_functionDeclaration7060);
             name=identifier();
             _fsp--;
 
             stream_identifier.add(name.getTree());
-            pushFollow(FOLLOW_formalParameterList_in_functionDeclaration7039);
+            pushFollow(FOLLOW_formalParameterList_in_functionDeclaration7062);
             formalParameterList338=formalParameterList();
             _fsp--;
 
             stream_formalParameterList.add(formalParameterList338.getTree());
-            pushFollow(FOLLOW_functionBody_in_functionDeclaration7041);
+            pushFollow(FOLLOW_functionBody_in_functionDeclaration7064);
             functionBody339=functionBody();
             _fsp--;
 
             stream_functionBody.add(functionBody339.getTree());
 
             // AST REWRITE
-            // elements: name, formalParameterList, functionBody
+            // elements: functionBody, name, formalParameterList
             // token labels: 
             // rule labels: retval, name
             // token list labels: 
@@ -12001,9 +12150,9 @@
             RewriteRuleSubtreeStream stream_name=new RewriteRuleSubtreeStream(adaptor,"token name",name!=null?name.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1723:2: -> ^( FUNCTION_DECLARATION[$function] $name formalParameterList functionBody )
+            // 1725:2: -> ^( FUNCTION_DECLARATION[$function] $name formalParameterList functionBody )
             {
-                // JS.g:1723:5: ^( FUNCTION_DECLARATION[$function] $name formalParameterList functionBody )
+                // JS.g:1725:5: ^( FUNCTION_DECLARATION[$function] $name formalParameterList functionBody )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(FUNCTION_DECLARATION, function), root_1);
@@ -12046,7 +12195,7 @@
     };
 
     // $ANTLR start functionExpression
-    // JS.g:1726:1: functionExpression : FUNCTION (name= identifier )? formalParameterList functionBody -> ^( FUNCTION ( $name)? formalParameterList functionBody ) ;
+    // JS.g:1728:1: functionExpression : FUNCTION (name= identifier )? formalParameterList functionBody -> ^( FUNCTION ( $name)? formalParameterList functionBody ) ;
     public final functionExpression_return functionExpression() throws RecognitionException {
         functionExpression_return retval = new functionExpression_return();
         retval.start = input.LT(1);
@@ -12067,14 +12216,14 @@
         RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
         RewriteRuleSubtreeStream stream_formalParameterList=new RewriteRuleSubtreeStream(adaptor,"rule formalParameterList");
         try {
-            // JS.g:1727:2: ( FUNCTION (name= identifier )? formalParameterList functionBody -> ^( FUNCTION ( $name)? formalParameterList functionBody ) )
-            // JS.g:1727:4: FUNCTION (name= identifier )? formalParameterList functionBody
+            // JS.g:1729:2: ( FUNCTION (name= identifier )? formalParameterList functionBody -> ^( FUNCTION ( $name)? formalParameterList functionBody ) )
+            // JS.g:1729:4: FUNCTION (name= identifier )? formalParameterList functionBody
             {
             FUNCTION340=(Token)input.LT(1);
-            match(input,FUNCTION,FOLLOW_FUNCTION_in_functionExpression7069); 
+            match(input,FUNCTION,FOLLOW_FUNCTION_in_functionExpression7092); 
             stream_FUNCTION.add(FUNCTION340);
 
-            // JS.g:1727:17: (name= identifier )?
+            // JS.g:1729:17: (name= identifier )?
             int alt85=2;
             int LA85_0 = input.LA(1);
 
@@ -12083,9 +12232,9 @@
             }
             switch (alt85) {
                 case 1 :
-                    // JS.g:1727:17: name= identifier
+                    // JS.g:1729:17: name= identifier
                     {
-                    pushFollow(FOLLOW_identifier_in_functionExpression7073);
+                    pushFollow(FOLLOW_identifier_in_functionExpression7096);
                     name=identifier();
                     _fsp--;
 
@@ -12096,19 +12245,19 @@
 
             }
 
-            pushFollow(FOLLOW_formalParameterList_in_functionExpression7076);
+            pushFollow(FOLLOW_formalParameterList_in_functionExpression7099);
             formalParameterList341=formalParameterList();
             _fsp--;
 
             stream_formalParameterList.add(formalParameterList341.getTree());
-            pushFollow(FOLLOW_functionBody_in_functionExpression7078);
+            pushFollow(FOLLOW_functionBody_in_functionExpression7101);
             functionBody342=functionBody();
             _fsp--;
 
             stream_functionBody.add(functionBody342.getTree());
 
             // AST REWRITE
-            // elements: name, functionBody, formalParameterList, FUNCTION
+            // elements: FUNCTION, functionBody, formalParameterList, name
             // token labels: 
             // rule labels: retval, name
             // token list labels: 
@@ -12118,14 +12267,14 @@
             RewriteRuleSubtreeStream stream_name=new RewriteRuleSubtreeStream(adaptor,"token name",name!=null?name.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1728:2: -> ^( FUNCTION ( $name)? formalParameterList functionBody )
+            // 1730:2: -> ^( FUNCTION ( $name)? formalParameterList functionBody )
             {
-                // JS.g:1728:5: ^( FUNCTION ( $name)? formalParameterList functionBody )
+                // JS.g:1730:5: ^( FUNCTION ( $name)? formalParameterList functionBody )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(stream_FUNCTION.next(), root_1);
 
-                // JS.g:1728:17: ( $name)?
+                // JS.g:1730:17: ( $name)?
                 if ( stream_name.hasNext() ) {
                     adaptor.addChild(root_1, stream_name.next());
 
@@ -12168,7 +12317,7 @@
     };
 
     // $ANTLR start formalParameter
-    // JS.g:1731:1: formalParameter : identifier ;
+    // JS.g:1733:1: formalParameter : identifier ;
     public final formalParameter_return formalParameter() throws RecognitionException {
         formalParameter_return retval = new formalParameter_return();
         retval.start = input.LT(1);
@@ -12180,12 +12329,12 @@
 
 
         try {
-            // JS.g:1732:2: ( identifier )
-            // JS.g:1732:4: identifier
+            // JS.g:1734:2: ( identifier )
+            // JS.g:1734:4: identifier
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_identifier_in_formalParameter7106);
+            pushFollow(FOLLOW_identifier_in_formalParameter7129);
             identifier343=identifier();
             _fsp--;
 
@@ -12218,7 +12367,7 @@
     };
 
     // $ANTLR start formalParameterList
-    // JS.g:1735:1: formalParameterList : LPAREN ( formalParameter ( COMMA formalParameter )* )? RPAREN -> ^( ARGUMENTS ( formalParameter )* ) ;
+    // JS.g:1737:1: formalParameterList : LPAREN ( formalParameter ( COMMA formalParameter )* )? RPAREN -> ^( ARGUMENTS ( formalParameter )* ) ;
     public final formalParameterList_return formalParameterList() throws RecognitionException {
         formalParameterList_return retval = new formalParameterList_return();
         retval.start = input.LT(1);
@@ -12241,14 +12390,14 @@
         RewriteRuleTokenStream stream_LPAREN=new RewriteRuleTokenStream(adaptor,"token LPAREN");
         RewriteRuleSubtreeStream stream_formalParameter=new RewriteRuleSubtreeStream(adaptor,"rule formalParameter");
         try {
-            // JS.g:1736:2: ( LPAREN ( formalParameter ( COMMA formalParameter )* )? RPAREN -> ^( ARGUMENTS ( formalParameter )* ) )
-            // JS.g:1736:4: LPAREN ( formalParameter ( COMMA formalParameter )* )? RPAREN
+            // JS.g:1738:2: ( LPAREN ( formalParameter ( COMMA formalParameter )* )? RPAREN -> ^( ARGUMENTS ( formalParameter )* ) )
+            // JS.g:1738:4: LPAREN ( formalParameter ( COMMA formalParameter )* )? RPAREN
             {
             LPAREN344=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_formalParameterList7118); 
+            match(input,LPAREN,FOLLOW_LPAREN_in_formalParameterList7141); 
             stream_LPAREN.add(LPAREN344);
 
-            // JS.g:1736:11: ( formalParameter ( COMMA formalParameter )* )?
+            // JS.g:1738:11: ( formalParameter ( COMMA formalParameter )* )?
             int alt87=2;
             int LA87_0 = input.LA(1);
 
@@ -12257,14 +12406,14 @@
             }
             switch (alt87) {
                 case 1 :
-                    // JS.g:1736:13: formalParameter ( COMMA formalParameter )*
+                    // JS.g:1738:13: formalParameter ( COMMA formalParameter )*
                     {
-                    pushFollow(FOLLOW_formalParameter_in_formalParameterList7122);
+                    pushFollow(FOLLOW_formalParameter_in_formalParameterList7145);
                     formalParameter345=formalParameter();
                     _fsp--;
 
                     stream_formalParameter.add(formalParameter345.getTree());
-                    // JS.g:1736:29: ( COMMA formalParameter )*
+                    // JS.g:1738:29: ( COMMA formalParameter )*
                     loop86:
                     do {
                         int alt86=2;
@@ -12277,13 +12426,13 @@
 
                         switch (alt86) {
                     	case 1 :
-                    	    // JS.g:1736:31: COMMA formalParameter
+                    	    // JS.g:1738:31: COMMA formalParameter
                     	    {
                     	    COMMA346=(Token)input.LT(1);
-                    	    match(input,COMMA,FOLLOW_COMMA_in_formalParameterList7126); 
+                    	    match(input,COMMA,FOLLOW_COMMA_in_formalParameterList7149); 
                     	    stream_COMMA.add(COMMA346);
 
-                    	    pushFollow(FOLLOW_formalParameter_in_formalParameterList7128);
+                    	    pushFollow(FOLLOW_formalParameter_in_formalParameterList7151);
                     	    formalParameter347=formalParameter();
                     	    _fsp--;
 
@@ -12304,7 +12453,7 @@
             }
 
             RPAREN348=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_formalParameterList7136); 
+            match(input,RPAREN,FOLLOW_RPAREN_in_formalParameterList7159); 
             stream_RPAREN.add(RPAREN348);
 
 
@@ -12318,14 +12467,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1737:2: -> ^( ARGUMENTS ( formalParameter )* )
+            // 1739:2: -> ^( ARGUMENTS ( formalParameter )* )
             {
-                // JS.g:1737:5: ^( ARGUMENTS ( formalParameter )* )
+                // JS.g:1739:5: ^( ARGUMENTS ( formalParameter )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(ARGUMENTS, "ARGUMENTS"), root_1);
 
-                // JS.g:1737:18: ( formalParameter )*
+                // JS.g:1739:18: ( formalParameter )*
                 while ( stream_formalParameter.hasNext() ) {
                     adaptor.addChild(root_1, stream_formalParameter.next());
 
@@ -12366,7 +12515,7 @@
     };
 
     // $ANTLR start functionBody
-    // JS.g:1740:1: functionBody : lb= LBRACE ( sourceElement )* RBRACE -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* ) ;
+    // JS.g:1742:1: functionBody : lb= LBRACE ( sourceElement )* RBRACE -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* ) ;
     public final functionBody_return functionBody() throws RecognitionException {
         functionBody_return retval = new functionBody_return();
         retval.start = input.LT(1);
@@ -12385,14 +12534,14 @@
         RewriteRuleSubtreeStream stream_sourceElement=new RewriteRuleSubtreeStream(adaptor,"rule sourceElement");
          pushState(JSParserRule.FUNCTION_BODY); 
         try {
-            // JS.g:1742:2: (lb= LBRACE ( sourceElement )* RBRACE -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* ) )
-            // JS.g:1742:4: lb= LBRACE ( sourceElement )* RBRACE
+            // JS.g:1744:2: (lb= LBRACE ( sourceElement )* RBRACE -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* ) )
+            // JS.g:1744:4: lb= LBRACE ( sourceElement )* RBRACE
             {
             lb=(Token)input.LT(1);
-            match(input,LBRACE,FOLLOW_LBRACE_in_functionBody7166); 
+            match(input,LBRACE,FOLLOW_LBRACE_in_functionBody7189); 
             stream_LBRACE.add(lb);
 
-            // JS.g:1742:14: ( sourceElement )*
+            // JS.g:1744:14: ( sourceElement )*
             loop88:
             do {
                 int alt88=2;
@@ -12414,9 +12563,9 @@
 
                 switch (alt88) {
             	case 1 :
-            	    // JS.g:1742:14: sourceElement
+            	    // JS.g:1744:14: sourceElement
             	    {
-            	    pushFollow(FOLLOW_sourceElement_in_functionBody7168);
+            	    pushFollow(FOLLOW_sourceElement_in_functionBody7191);
             	    sourceElement349=sourceElement();
             	    _fsp--;
 
@@ -12431,7 +12580,7 @@
             } while (true);
 
             RBRACE350=(Token)input.LT(1);
-            match(input,RBRACE,FOLLOW_RBRACE_in_functionBody7171); 
+            match(input,RBRACE,FOLLOW_RBRACE_in_functionBody7194); 
             stream_RBRACE.add(RBRACE350);
 
 
@@ -12445,14 +12594,14 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1743:2: -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* )
+            // 1745:2: -> ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* )
             {
-                // JS.g:1743:5: ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* )
+                // JS.g:1745:5: ^( BLOCK[$lb, \"BLOCK\"] ( sourceElement )* )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(BLOCK, lb,  "BLOCK"), root_1);
 
-                // JS.g:1743:28: ( sourceElement )*
+                // JS.g:1745:28: ( sourceElement )*
                 while ( stream_sourceElement.hasNext() ) {
                     adaptor.addChild(root_1, stream_sourceElement.next());
 
@@ -12494,7 +12643,7 @@
     };
 
     // $ANTLR start getMethodDeclaration
-    // JS.g:1752:1: getMethodDeclaration : get= GET name= identifier LPAREN RPAREN functionBody -> ^( GETTER[$get] identifier functionBody ) ;
+    // JS.g:1754:1: getMethodDeclaration : get= GET name= identifier LPAREN RPAREN functionBody -> ^( GETTER[$get] identifier functionBody ) ;
     public final getMethodDeclaration_return getMethodDeclaration() throws RecognitionException {
         getMethodDeclaration_return retval = new getMethodDeclaration_return();
         retval.start = input.LT(1);
@@ -12518,27 +12667,27 @@
         RewriteRuleSubtreeStream stream_functionBody=new RewriteRuleSubtreeStream(adaptor,"rule functionBody");
         RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
         try {
-            // JS.g:1753:3: (get= GET name= identifier LPAREN RPAREN functionBody -> ^( GETTER[$get] identifier functionBody ) )
-            // JS.g:1753:5: get= GET name= identifier LPAREN RPAREN functionBody
+            // JS.g:1755:3: (get= GET name= identifier LPAREN RPAREN functionBody -> ^( GETTER[$get] identifier functionBody ) )
+            // JS.g:1755:5: get= GET name= identifier LPAREN RPAREN functionBody
             {
             get=(Token)input.LT(1);
-            match(input,GET,FOLLOW_GET_in_getMethodDeclaration7208); 
+            match(input,GET,FOLLOW_GET_in_getMethodDeclaration7231); 
             stream_GET.add(get);
 
-            pushFollow(FOLLOW_identifier_in_getMethodDeclaration7212);
+            pushFollow(FOLLOW_identifier_in_getMethodDeclaration7235);
             name=identifier();
             _fsp--;
 
             stream_identifier.add(name.getTree());
             LPAREN351=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_getMethodDeclaration7214); 
+            match(input,LPAREN,FOLLOW_LPAREN_in_getMethodDeclaration7237); 
             stream_LPAREN.add(LPAREN351);
 
             RPAREN352=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_getMethodDeclaration7216); 
+            match(input,RPAREN,FOLLOW_RPAREN_in_getMethodDeclaration7239); 
             stream_RPAREN.add(RPAREN352);
 
-            pushFollow(FOLLOW_functionBody_in_getMethodDeclaration7218);
+            pushFollow(FOLLOW_functionBody_in_getMethodDeclaration7241);
             functionBody353=functionBody();
             _fsp--;
 
@@ -12554,9 +12703,9 @@
             RewriteRuleSubtreeStream stream_retval=new RewriteRuleSubtreeStream(adaptor,"token retval",retval!=null?retval.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1754:4: -> ^( GETTER[$get] identifier functionBody )
+            // 1756:4: -> ^( GETTER[$get] identifier functionBody )
             {
-                // JS.g:1754:7: ^( GETTER[$get] identifier functionBody )
+                // JS.g:1756:7: ^( GETTER[$get] identifier functionBody )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(GETTER, get), root_1);
@@ -12598,7 +12747,7 @@
     };
 
     // $ANTLR start setMethodDeclaration
-    // JS.g:1757:1: setMethodDeclaration : set= SET name= identifier LPAREN param= identifier RPAREN functionBody -> ^( SETTER[$set] $name $param functionBody ) ;
+    // JS.g:1759:1: setMethodDeclaration : set= SET name= identifier LPAREN param= identifier RPAREN functionBody -> ^( SETTER[$set] $name $param functionBody ) ;
     public final setMethodDeclaration_return setMethodDeclaration() throws RecognitionException {
         setMethodDeclaration_return retval = new setMethodDeclaration_return();
         retval.start = input.LT(1);
@@ -12624,39 +12773,39 @@
         RewriteRuleSubtreeStream stream_functionBody=new RewriteRuleSubtreeStream(adaptor,"rule functionBody");
         RewriteRuleSubtreeStream stream_identifier=new RewriteRuleSubtreeStream(adaptor,"rule identifier");
         try {
-            // JS.g:1758:3: (set= SET name= identifier LPAREN param= identifier RPAREN functionBody -> ^( SETTER[$set] $name $param functionBody ) )
-            // JS.g:1758:5: set= SET name= identifier LPAREN param= identifier RPAREN functionBody
+            // JS.g:1760:3: (set= SET name= identifier LPAREN param= identifier RPAREN functionBody -> ^( SETTER[$set] $name $param functionBody ) )
+            // JS.g:1760:5: set= SET name= identifier LPAREN param= identifier RPAREN functionBody
             {
             set=(Token)input.LT(1);
-            match(input,SET,FOLLOW_SET_in_setMethodDeclaration7249); 
+            match(input,SET,FOLLOW_SET_in_setMethodDeclaration7272); 
             stream_SET.add(set);
 
-            pushFollow(FOLLOW_identifier_in_setMethodDeclaration7253);
+            pushFollow(FOLLOW_identifier_in_setMethodDeclaration7276);
             name=identifier();
             _fsp--;
 
             stream_identifier.add(name.getTree());
             LPAREN354=(Token)input.LT(1);
-            match(input,LPAREN,FOLLOW_LPAREN_in_setMethodDeclaration7255); 
+            match(input,LPAREN,FOLLOW_LPAREN_in_setMethodDeclaration7278); 
             stream_LPAREN.add(LPAREN354);
 
-            pushFollow(FOLLOW_identifier_in_setMethodDeclaration7259);
+            pushFollow(FOLLOW_identifier_in_setMethodDeclaration7282);
             param=identifier();
             _fsp--;
 
             stream_identifier.add(param.getTree());
             RPAREN355=(Token)input.LT(1);
-            match(input,RPAREN,FOLLOW_RPAREN_in_setMethodDeclaration7261); 
+            match(input,RPAREN,FOLLOW_RPAREN_in_setMethodDeclaration7284); 
             stream_RPAREN.add(RPAREN355);
 
-            pushFollow(FOLLOW_functionBody_in_setMethodDeclaration7263);
+            pushFollow(FOLLOW_functionBody_in_setMethodDeclaration7286);
             functionBody356=functionBody();
             _fsp--;
 
             stream_functionBody.add(functionBody356.getTree());
 
             // AST REWRITE
-            // elements: functionBody, param, name
+            // elements: param, functionBody, name
             // token labels: 
             // rule labels: retval, param, name
             // token list labels: 
@@ -12667,9 +12816,9 @@
             RewriteRuleSubtreeStream stream_name=new RewriteRuleSubtreeStream(adaptor,"token name",name!=null?name.tree:null);
 
             root_0 = (Object)adaptor.nil();
-            // 1759:5: -> ^( SETTER[$set] $name $param functionBody )
+            // 1761:5: -> ^( SETTER[$set] $name $param functionBody )
             {
-                // JS.g:1759:8: ^( SETTER[$set] $name $param functionBody )
+                // JS.g:1761:8: ^( SETTER[$set] $name $param functionBody )
                 {
                 Object root_1 = (Object)adaptor.nil();
                 root_1 = (Object)adaptor.becomeRoot(adaptor.create(SETTER, set), root_1);
@@ -12712,7 +12861,7 @@
     };
 
     // $ANTLR start program
-    // JS.g:1766:1: program : sourceElementSync ( sourceElement sourceElementSync )* EOF ;
+    // JS.g:1768:1: program : sourceElementSync ( sourceElement sourceElementSync )* EOF ;
     public final program_return program() throws RecognitionException {
         program_return retval = new program_return();
         retval.start = input.LT(1);
@@ -12731,17 +12880,17 @@
 
          pushState(JSParserRule.PROGRAM); 
         try {
-            // JS.g:1768:2: ( sourceElementSync ( sourceElement sourceElementSync )* EOF )
-            // JS.g:1768:4: sourceElementSync ( sourceElement sourceElementSync )* EOF
+            // JS.g:1770:2: ( sourceElementSync ( sourceElement sourceElementSync )* EOF )
+            // JS.g:1770:4: sourceElementSync ( sourceElement sourceElementSync )* EOF
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_sourceElementSync_in_program7304);
+            pushFollow(FOLLOW_sourceElementSync_in_program7327);
             sourceElementSync357=sourceElementSync();
             _fsp--;
 
             adaptor.addChild(root_0, sourceElementSync357.getTree());
-            // JS.g:1768:22: ( sourceElement sourceElementSync )*
+            // JS.g:1770:22: ( sourceElement sourceElementSync )*
             loop89:
             do {
                 int alt89=2;
@@ -12763,14 +12912,14 @@
 
                 switch (alt89) {
             	case 1 :
-            	    // JS.g:1768:23: sourceElement sourceElementSync
+            	    // JS.g:1770:23: sourceElement sourceElementSync
             	    {
-            	    pushFollow(FOLLOW_sourceElement_in_program7307);
+            	    pushFollow(FOLLOW_sourceElement_in_program7330);
             	    sourceElement358=sourceElement();
             	    _fsp--;
 
             	    adaptor.addChild(root_0, sourceElement358.getTree());
-            	    pushFollow(FOLLOW_sourceElementSync_in_program7309);
+            	    pushFollow(FOLLOW_sourceElementSync_in_program7332);
             	    sourceElementSync359=sourceElementSync();
             	    _fsp--;
 
@@ -12785,7 +12934,7 @@
             } while (true);
 
             EOF360=(Token)input.LT(1);
-            match(input,EOF,FOLLOW_EOF_in_program7313); 
+            match(input,EOF,FOLLOW_EOF_in_program7336); 
 
             }
 
@@ -12814,7 +12963,7 @@
     };
 
     // $ANTLR start sourceElementSync
-    // JS.g:1771:1: sourceElementSync : ;
+    // JS.g:1773:1: sourceElementSync : ;
     public final sourceElementSync_return sourceElementSync() throws RecognitionException {
         sourceElementSync_return retval = new sourceElementSync_return();
         retval.start = input.LT(1);
@@ -12825,8 +12974,8 @@
         	syncToSet();
 
         try {
-            // JS.g:1775:2: ()
-            // JS.g:1776:3: 
+            // JS.g:1777:2: ()
+            // JS.g:1778:3: 
             {
             root_0 = (Object)adaptor.nil();
 
@@ -12850,7 +12999,7 @@
     };
 
     // $ANTLR start sourceElement
-    // JS.g:1783:1: sourceElement options {k=1; } : ({...}? functionDeclaration | statement );
+    // JS.g:1785:1: sourceElement options {k=1; } : ({...}? functionDeclaration | statement );
     public final sourceElement_return sourceElement() throws RecognitionException {
         sourceElement_return retval = new sourceElement_return();
         retval.start = input.LT(1);
@@ -12864,7 +13013,7 @@
 
 
         try {
-            // JS.g:1788:2: ({...}? functionDeclaration | statement )
+            // JS.g:1790:2: ({...}? functionDeclaration | statement )
             int alt90=2;
             int LA90_0 = input.LA(1);
 
@@ -12879,7 +13028,7 @@
                 }
                 else {
                     NoViableAltException nvae =
-                        new NoViableAltException("1783:1: sourceElement options {k=1; } : ({...}? functionDeclaration | statement );", 90, 1, input);
+                        new NoViableAltException("1785:1: sourceElement options {k=1; } : ({...}? functionDeclaration | statement );", 90, 1, input);
 
                     throw nvae;
                 }
@@ -12898,20 +13047,20 @@
             }
             else {
                 NoViableAltException nvae =
-                    new NoViableAltException("1783:1: sourceElement options {k=1; } : ({...}? functionDeclaration | statement );", 90, 0, input);
+                    new NoViableAltException("1785:1: sourceElement options {k=1; } : ({...}? functionDeclaration | statement );", 90, 0, input);
 
                 throw nvae;
             }
             switch (alt90) {
                 case 1 :
-                    // JS.g:1788:4: {...}? functionDeclaration
+                    // JS.g:1790:4: {...}? functionDeclaration
                     {
                     root_0 = (Object)adaptor.nil();
 
                     if ( !( input.LA(1) == FUNCTION ) ) {
                         throw new FailedPredicateException(input, "sourceElement", " input.LA(1) == FUNCTION ");
                     }
-                    pushFollow(FOLLOW_functionDeclaration_in_sourceElement7358);
+                    pushFollow(FOLLOW_functionDeclaration_in_sourceElement7381);
                     functionDeclaration361=functionDeclaration();
                     _fsp--;
 
@@ -12920,11 +13069,11 @@
                     }
                     break;
                 case 2 :
-                    // JS.g:1789:4: statement
+                    // JS.g:1791:4: statement
                     {
                     root_0 = (Object)adaptor.nil();
 
-                    pushFollow(FOLLOW_statement_in_sourceElement7363);
+                    pushFollow(FOLLOW_statement_in_sourceElement7386);
                     statement362=statement();
                     _fsp--;
 
@@ -12959,7 +13108,7 @@
     };
 
     // $ANTLR start standaloneExpression
-    // JS.g:1794:1: standaloneExpression : expression EOF ;
+    // JS.g:1796:1: standaloneExpression : expression EOF ;
     public final standaloneExpression_return standaloneExpression() throws RecognitionException {
         standaloneExpression_return retval = new standaloneExpression_return();
         retval.start = input.LT(1);
@@ -12974,18 +13123,18 @@
 
          pushState(JSParserRule.EXPRESSION); 
         try {
-            // JS.g:1796:2: ( expression EOF )
-            // JS.g:1796:4: expression EOF
+            // JS.g:1798:2: ( expression EOF )
+            // JS.g:1798:4: expression EOF
             {
             root_0 = (Object)adaptor.nil();
 
-            pushFollow(FOLLOW_expression_in_standaloneExpression7381);
+            pushFollow(FOLLOW_expression_in_standaloneExpression7404);
             expression363=expression();
             _fsp--;
 
             adaptor.addChild(root_0, expression363.getTree());
             EOF364=(Token)input.LT(1);
-            match(input,EOF,FOLLOW_EOF_in_standaloneExpression7383); 
+            match(input,EOF,FOLLOW_EOF_in_standaloneExpression7406); 
 
             }
 
@@ -13071,9 +13220,9 @@
     public static final BitSet FOLLOW_arrayItem_in_arrayLiteral3853 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002400L});
     public static final BitSet FOLLOW_RBRACK_in_arrayLiteral3864 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_assignmentExpression_in_arrayItem3894 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LBRACE_in_objectLiteral3926 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000005FL,0x0708200000000000L});
+    public static final BitSet FOLLOW_LBRACE_in_objectLiteral3926 = new BitSet(new long[]{0xFFFFF7FFFFFFFF80L,0x000000000000005FL,0x0708200000000000L});
     public static final BitSet FOLLOW_objectPropertyInitializer_in_objectLiteral3930 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002040L});
-    public static final BitSet FOLLOW_COMMA_in_objectLiteral3934 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0708200000000000L});
+    public static final BitSet FOLLOW_COMMA_in_objectLiteral3934 = new BitSet(new long[]{0xFFFFF7FFFFFFFF80L,0x000000000000001FL,0x0708200000000000L});
     public static final BitSet FOLLOW_objectPropertyInitializer_in_objectLiteral3936 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002040L});
     public static final BitSet FOLLOW_COMMA_in_objectLiteral3941 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000040L});
     public static final BitSet FOLLOW_RBRACE_in_objectLiteral3946 = new BitSet(new long[]{0x0000000000000002L});
@@ -13089,342 +13238,344 @@
     public static final BitSet FOLLOW_identifier_in_nameValuePairFix4056 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
     public static final BitSet FOLLOW_COLON_in_nameValuePairFix4058 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
     public static final BitSet FOLLOW_assignmentExpression_in_nameValuePairFix4060 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_propertyName4089 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_StringLiteral_in_propertyName4094 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_numericLiteral_in_propertyName4099 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_primaryExpression_in_memberExpression4117 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_functionExpression_in_memberExpression4122 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_newExpression_in_memberExpression4127 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NEW_in_newExpression4138 = new BitSet(new long[]{0xFFFFF7F602460070L,0x03200000000002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_newExpressionTail_in_newExpression4141 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LPAREN_in_arguments4154 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC003BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpression_in_arguments4158 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002100L});
-    public static final BitSet FOLLOW_COMMA_in_arguments4162 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpression_in_arguments4164 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002100L});
-    public static final BitSet FOLLOW_RPAREN_in_arguments4172 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_memberExpression_in_leftHandSideExpression4210 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_arguments_in_leftHandSideExpression4231 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_LBRACK_in_leftHandSideExpression4258 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_leftHandSideExpression4260 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_RBRACK_in_leftHandSideExpression4262 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_DOT_in_leftHandSideExpression4285 = new BitSet(new long[]{0xFFFFF7F600020000L,0x002000000100009FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_rightHandSideExpression_in_leftHandSideExpression4289 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_DOTDOT_in_leftHandSideExpression4317 = new BitSet(new long[]{0xFFFFF7F600020000L,0x002000000100001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_rightHandSideExpression2_in_leftHandSideExpression4321 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_COLONCOLON_in_leftHandSideExpression4344 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
-    public static final BitSet FOLLOW_LBRACK_in_leftHandSideExpression4346 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_leftHandSideExpression4348 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_RBRACK_in_leftHandSideExpression4350 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_COLONCOLON_in_leftHandSideExpression4372 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000100001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_propertySelector_in_leftHandSideExpression4376 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_memberExpression_in_newExpressionTail4437 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_LBRACK_in_newExpressionTail4460 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_newExpressionTail4462 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_RBRACK_in_newExpressionTail4464 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_DOT_in_newExpressionTail4487 = new BitSet(new long[]{0xFFFFF7F600020000L,0x002000000100009FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_rightHandSideExpression_in_newExpressionTail4491 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_DOTDOT_in_newExpressionTail4519 = new BitSet(new long[]{0xFFFFF7F600020000L,0x002000000100001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_rightHandSideExpression2_in_newExpressionTail4523 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_COLONCOLON_in_newExpressionTail4546 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
-    public static final BitSet FOLLOW_LBRACK_in_newExpressionTail4548 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_newExpressionTail4550 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
-    public static final BitSet FOLLOW_RBRACK_in_newExpressionTail4552 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_COLONCOLON_in_newExpressionTail4574 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000100001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_propertySelector_in_newExpressionTail4578 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
-    public static final BitSet FOLLOW_arguments_in_newExpressionTail4606 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_rightHandSideExpression4641 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_parenExpression_in_rightHandSideExpression4650 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_xmlAttribute_in_rightHandSideExpression4660 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MUL_in_rightHandSideExpression4669 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_rightHandSideExpression24681 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_xmlAttribute_in_rightHandSideExpression24687 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MUL_in_rightHandSideExpression24693 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_leftHandSideExpression_in_postfixExpression4709 = new BitSet(new long[]{0x0000000000000002L,0x000000000C000000L});
-    public static final BitSet FOLLOW_postfixOperator_in_postfixExpression4715 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INC_in_postfixOperator4733 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DEC_in_postfixOperator4742 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_postfixExpression_in_unaryExpression4759 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_unaryOperator_in_unaryExpression4764 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_unaryExpression_in_unaryExpression4767 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DELETE_in_unaryOperator4779 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VOID_in_unaryOperator4784 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_TYPEOF_in_unaryOperator4789 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INC_in_unaryOperator4794 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DEC_in_unaryOperator4799 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ADD_in_unaryOperator4806 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SUB_in_unaryOperator4815 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_INV_in_unaryOperator4822 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_NOT_in_unaryOperator4827 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_YIELD_in_unaryOperator4832 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DEFAULT_in_namespaceStatement4849 = new BitSet(new long[]{0x0000001000000000L});
-    public static final BitSet FOLLOW_WXML_in_namespaceStatement4851 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_NAMESPACE_in_namespaceStatement4853 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
-    public static final BitSet FOLLOW_ASSIGN_in_namespaceStatement4855 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_namespaceStatement4857 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_semic_in_namespaceStatement4859 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression4891 = new BitSet(new long[]{0x0000000000000002L,0x0008000003000000L});
-    public static final BitSet FOLLOW_set_in_multiplicativeExpression4895 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression4910 = new BitSet(new long[]{0x0000000000000002L,0x0008000003000000L});
-    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression4928 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
-    public static final BitSet FOLLOW_set_in_additiveExpression4932 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression4943 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
-    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression4962 = new BitSet(new long[]{0x0000000000000002L,0x0000000070000000L});
-    public static final BitSet FOLLOW_set_in_shiftExpression4966 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression4981 = new BitSet(new long[]{0x0000000000000002L,0x0000000070000000L});
-    public static final BitSet FOLLOW_shiftExpression_in_relationalExpression5000 = new BitSet(new long[]{0x0000000000300002L,0x000000000003C000L});
-    public static final BitSet FOLLOW_set_in_relationalExpression5004 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_shiftExpression_in_relationalExpression5031 = new BitSet(new long[]{0x0000000000300002L,0x000000000003C000L});
-    public static final BitSet FOLLOW_shiftExpression_in_relationalExpressionNoIn5045 = new BitSet(new long[]{0x0000000000200002L,0x000000000003C000L});
-    public static final BitSet FOLLOW_set_in_relationalExpressionNoIn5049 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_shiftExpression_in_relationalExpressionNoIn5072 = new BitSet(new long[]{0x0000000000200002L,0x000000000003C000L});
-    public static final BitSet FOLLOW_relationalExpression_in_equalityExpression5091 = new BitSet(new long[]{0x0000000000000002L,0x00000000003C0000L});
-    public static final BitSet FOLLOW_set_in_equalityExpression5095 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_identifier_in_propertyName4087 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_reservedWord_in_propertyName4094 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_StringLiteral_in_propertyName4104 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_numericLiteral_in_propertyName4109 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_primaryExpression_in_memberExpression4127 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_functionExpression_in_memberExpression4132 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_newExpression_in_memberExpression4137 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NEW_in_newExpression4148 = new BitSet(new long[]{0xFFFFF7F602460070L,0x03200000000002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_newExpressionTail_in_newExpression4151 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LPAREN_in_arguments4164 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC003BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpression_in_arguments4168 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002100L});
+    public static final BitSet FOLLOW_COMMA_in_arguments4172 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpression_in_arguments4174 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002100L});
+    public static final BitSet FOLLOW_RPAREN_in_arguments4182 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_memberExpression_in_leftHandSideExpression4220 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_arguments_in_leftHandSideExpression4241 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_LBRACK_in_leftHandSideExpression4268 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_leftHandSideExpression4270 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_RBRACK_in_leftHandSideExpression4272 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_DOT_in_leftHandSideExpression4295 = new BitSet(new long[]{0xFFFFF7FFFFFFFF80L,0x002000000100009FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_rightHandSideExpression_in_leftHandSideExpression4299 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_DOTDOT_in_leftHandSideExpression4327 = new BitSet(new long[]{0xFFFFF7F600020000L,0x002000000100001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_rightHandSideExpression2_in_leftHandSideExpression4331 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_COLONCOLON_in_leftHandSideExpression4354 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
+    public static final BitSet FOLLOW_LBRACK_in_leftHandSideExpression4356 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_leftHandSideExpression4358 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_RBRACK_in_leftHandSideExpression4360 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_COLONCOLON_in_leftHandSideExpression4382 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000100001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_propertySelector_in_leftHandSideExpression4386 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_memberExpression_in_newExpressionTail4447 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_LBRACK_in_newExpressionTail4470 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_newExpressionTail4472 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_RBRACK_in_newExpressionTail4474 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_DOT_in_newExpressionTail4497 = new BitSet(new long[]{0xFFFFF7FFFFFFFF80L,0x002000000100009FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_rightHandSideExpression_in_newExpressionTail4501 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_DOTDOT_in_newExpressionTail4529 = new BitSet(new long[]{0xFFFFF7F600020000L,0x002000000100001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_rightHandSideExpression2_in_newExpressionTail4533 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_COLONCOLON_in_newExpressionTail4556 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000200L});
+    public static final BitSet FOLLOW_LBRACK_in_newExpressionTail4558 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_newExpressionTail4560 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000400L});
+    public static final BitSet FOLLOW_RBRACK_in_newExpressionTail4562 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_COLONCOLON_in_newExpressionTail4584 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000100001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_propertySelector_in_newExpressionTail4588 = new BitSet(new long[]{0x0000000000000002L,0x00C0000000000A80L});
+    public static final BitSet FOLLOW_arguments_in_newExpressionTail4616 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_rightHandSideExpression4651 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_reservedWord_in_rightHandSideExpression4659 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_parenExpression_in_rightHandSideExpression4673 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_xmlAttribute_in_rightHandSideExpression4683 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_MUL_in_rightHandSideExpression4692 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_rightHandSideExpression24704 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_xmlAttribute_in_rightHandSideExpression24710 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_MUL_in_rightHandSideExpression24716 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_leftHandSideExpression_in_postfixExpression4732 = new BitSet(new long[]{0x0000000000000002L,0x000000000C000000L});
+    public static final BitSet FOLLOW_postfixOperator_in_postfixExpression4738 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INC_in_postfixOperator4756 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DEC_in_postfixOperator4765 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_postfixExpression_in_unaryExpression4782 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_unaryOperator_in_unaryExpression4787 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_unaryExpression_in_unaryExpression4790 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DELETE_in_unaryOperator4802 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VOID_in_unaryOperator4807 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_TYPEOF_in_unaryOperator4812 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INC_in_unaryOperator4817 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DEC_in_unaryOperator4822 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ADD_in_unaryOperator4829 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SUB_in_unaryOperator4838 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_INV_in_unaryOperator4845 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_NOT_in_unaryOperator4850 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_YIELD_in_unaryOperator4855 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DEFAULT_in_namespaceStatement4872 = new BitSet(new long[]{0x0000001000000000L});
+    public static final BitSet FOLLOW_WXML_in_namespaceStatement4874 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_NAMESPACE_in_namespaceStatement4876 = new BitSet(new long[]{0x0000000000000000L,0x0000010000000000L});
+    public static final BitSet FOLLOW_ASSIGN_in_namespaceStatement4878 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_namespaceStatement4880 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_semic_in_namespaceStatement4882 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression4914 = new BitSet(new long[]{0x0000000000000002L,0x0008000003000000L});
+    public static final BitSet FOLLOW_set_in_multiplicativeExpression4918 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_unaryExpression_in_multiplicativeExpression4933 = new BitSet(new long[]{0x0000000000000002L,0x0008000003000000L});
+    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression4951 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
+    public static final BitSet FOLLOW_set_in_additiveExpression4955 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_multiplicativeExpression_in_additiveExpression4966 = new BitSet(new long[]{0x0000000000000002L,0x0000000000C00000L});
+    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression4985 = new BitSet(new long[]{0x0000000000000002L,0x0000000070000000L});
+    public static final BitSet FOLLOW_set_in_shiftExpression4989 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_additiveExpression_in_shiftExpression5004 = new BitSet(new long[]{0x0000000000000002L,0x0000000070000000L});
+    public static final BitSet FOLLOW_shiftExpression_in_relationalExpression5023 = new BitSet(new long[]{0x0000000000300002L,0x000000000003C000L});
+    public static final BitSet FOLLOW_set_in_relationalExpression5027 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_shiftExpression_in_relationalExpression5054 = new BitSet(new long[]{0x0000000000300002L,0x000000000003C000L});
+    public static final BitSet FOLLOW_shiftExpression_in_relationalExpressionNoIn5068 = new BitSet(new long[]{0x0000000000200002L,0x000000000003C000L});
+    public static final BitSet FOLLOW_set_in_relationalExpressionNoIn5072 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_shiftExpression_in_relationalExpressionNoIn5095 = new BitSet(new long[]{0x0000000000200002L,0x000000000003C000L});
     public static final BitSet FOLLOW_relationalExpression_in_equalityExpression5114 = new BitSet(new long[]{0x0000000000000002L,0x00000000003C0000L});
-    public static final BitSet FOLLOW_relationalExpressionNoIn_in_equalityExpressionNoIn5128 = new BitSet(new long[]{0x0000000000000002L,0x00000000003C0000L});
-    public static final BitSet FOLLOW_set_in_equalityExpressionNoIn5132 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_set_in_equalityExpression5118 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_relationalExpression_in_equalityExpression5137 = new BitSet(new long[]{0x0000000000000002L,0x00000000003C0000L});
     public static final BitSet FOLLOW_relationalExpressionNoIn_in_equalityExpressionNoIn5151 = new BitSet(new long[]{0x0000000000000002L,0x00000000003C0000L});
-    public static final BitSet FOLLOW_equalityExpression_in_bitwiseANDExpression5171 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_AND_in_bitwiseANDExpression5175 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_equalityExpression_in_bitwiseANDExpression5178 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_equalityExpressionNoIn_in_bitwiseANDExpressionNoIn5192 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_AND_in_bitwiseANDExpressionNoIn5196 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_equalityExpressionNoIn_in_bitwiseANDExpressionNoIn5199 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
-    public static final BitSet FOLLOW_bitwiseANDExpression_in_bitwiseXORExpression5215 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_XOR_in_bitwiseXORExpression5219 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_bitwiseANDExpression_in_bitwiseXORExpression5222 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_bitwiseANDExpressionNoIn_in_bitwiseXORExpressionNoIn5238 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_XOR_in_bitwiseXORExpressionNoIn5242 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_bitwiseANDExpressionNoIn_in_bitwiseXORExpressionNoIn5245 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
-    public static final BitSet FOLLOW_bitwiseXORExpression_in_bitwiseORExpression5260 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_OR_in_bitwiseORExpression5264 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_bitwiseXORExpression_in_bitwiseORExpression5267 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_bitwiseXORExpressionNoIn_in_bitwiseORExpressionNoIn5282 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_OR_in_bitwiseORExpressionNoIn5286 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_bitwiseXORExpressionNoIn_in_bitwiseORExpressionNoIn5289 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
-    public static final BitSet FOLLOW_bitwiseORExpression_in_logicalANDExpression5308 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
-    public static final BitSet FOLLOW_LAND_in_logicalANDExpression5312 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_bitwiseORExpression_in_logicalANDExpression5315 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
-    public static final BitSet FOLLOW_bitwiseORExpressionNoIn_in_logicalANDExpressionNoIn5329 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
-    public static final BitSet FOLLOW_LAND_in_logicalANDExpressionNoIn5333 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_bitwiseORExpressionNoIn_in_logicalANDExpressionNoIn5336 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
-    public static final BitSet FOLLOW_logicalANDExpression_in_logicalORExpression5351 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_LOR_in_logicalORExpression5355 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_logicalANDExpression_in_logicalORExpression5358 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_logicalANDExpressionNoIn_in_logicalORExpressionNoIn5373 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_LOR_in_logicalORExpressionNoIn5377 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_logicalANDExpressionNoIn_in_logicalORExpressionNoIn5380 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
-    public static final BitSet FOLLOW_logicalORExpression_in_conditionalExpression5399 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_QUE_in_conditionalExpression5403 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpression_in_conditionalExpression5406 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
-    public static final BitSet FOLLOW_COLON_in_conditionalExpression5408 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpression_in_conditionalExpression5411 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_logicalORExpressionNoIn_in_conditionalExpressionNoIn5425 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
-    public static final BitSet FOLLOW_QUE_in_conditionalExpressionNoIn5429 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_conditionalExpressionNoIn5432 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
-    public static final BitSet FOLLOW_COLON_in_conditionalExpressionNoIn5434 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_conditionalExpressionNoIn5437 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_conditionalExpression_in_assignmentExpression5465 = new BitSet(new long[]{0x0000000000000002L,0x0017FF0000000000L});
-    public static final BitSet FOLLOW_assignmentOperator_in_assignmentExpression5472 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpression_in_assignmentExpression5475 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_set_in_equalityExpressionNoIn5155 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_relationalExpressionNoIn_in_equalityExpressionNoIn5174 = new BitSet(new long[]{0x0000000000000002L,0x00000000003C0000L});
+    public static final BitSet FOLLOW_equalityExpression_in_bitwiseANDExpression5194 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_AND_in_bitwiseANDExpression5198 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_equalityExpression_in_bitwiseANDExpression5201 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_equalityExpressionNoIn_in_bitwiseANDExpressionNoIn5215 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_AND_in_bitwiseANDExpressionNoIn5219 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_equalityExpressionNoIn_in_bitwiseANDExpressionNoIn5222 = new BitSet(new long[]{0x0000000000000002L,0x0000000080000000L});
+    public static final BitSet FOLLOW_bitwiseANDExpression_in_bitwiseXORExpression5238 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_XOR_in_bitwiseXORExpression5242 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_bitwiseANDExpression_in_bitwiseXORExpression5245 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_bitwiseANDExpressionNoIn_in_bitwiseXORExpressionNoIn5261 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_XOR_in_bitwiseXORExpressionNoIn5265 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_bitwiseANDExpressionNoIn_in_bitwiseXORExpressionNoIn5268 = new BitSet(new long[]{0x0000000000000002L,0x0000000200000000L});
+    public static final BitSet FOLLOW_bitwiseXORExpression_in_bitwiseORExpression5283 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_OR_in_bitwiseORExpression5287 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_bitwiseXORExpression_in_bitwiseORExpression5290 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_bitwiseXORExpressionNoIn_in_bitwiseORExpressionNoIn5305 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_OR_in_bitwiseORExpressionNoIn5309 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_bitwiseXORExpressionNoIn_in_bitwiseORExpressionNoIn5312 = new BitSet(new long[]{0x0000000000000002L,0x0000000100000000L});
+    public static final BitSet FOLLOW_bitwiseORExpression_in_logicalANDExpression5331 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_LAND_in_logicalANDExpression5335 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_bitwiseORExpression_in_logicalANDExpression5338 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_bitwiseORExpressionNoIn_in_logicalANDExpressionNoIn5352 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_LAND_in_logicalANDExpressionNoIn5356 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_bitwiseORExpressionNoIn_in_logicalANDExpressionNoIn5359 = new BitSet(new long[]{0x0000000000000002L,0x0000001000000000L});
+    public static final BitSet FOLLOW_logicalANDExpression_in_logicalORExpression5374 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_LOR_in_logicalORExpression5378 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_logicalANDExpression_in_logicalORExpression5381 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_logicalANDExpressionNoIn_in_logicalORExpressionNoIn5396 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_LOR_in_logicalORExpressionNoIn5400 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_logicalANDExpressionNoIn_in_logicalORExpressionNoIn5403 = new BitSet(new long[]{0x0000000000000002L,0x0000002000000000L});
+    public static final BitSet FOLLOW_logicalORExpression_in_conditionalExpression5422 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_QUE_in_conditionalExpression5426 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpression_in_conditionalExpression5429 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
+    public static final BitSet FOLLOW_COLON_in_conditionalExpression5431 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpression_in_conditionalExpression5434 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_logicalORExpressionNoIn_in_conditionalExpressionNoIn5448 = new BitSet(new long[]{0x0000000000000002L,0x0000004000000000L});
+    public static final BitSet FOLLOW_QUE_in_conditionalExpressionNoIn5452 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_conditionalExpressionNoIn5455 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
+    public static final BitSet FOLLOW_COLON_in_conditionalExpressionNoIn5457 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_conditionalExpressionNoIn5460 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_conditionalExpression_in_assignmentExpression5488 = new BitSet(new long[]{0x0000000000000002L,0x0017FF0000000000L});
+    public static final BitSet FOLLOW_assignmentOperator_in_assignmentExpression5495 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpression_in_assignmentExpression5498 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_set_in_assignmentOperator0 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_conditionalExpressionNoIn_in_assignmentExpressionNoIn5553 = new BitSet(new long[]{0x0000000000000002L,0x0017FF0000000000L});
-    public static final BitSet FOLLOW_assignmentOperator_in_assignmentExpressionNoIn5560 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_assignmentExpressionNoIn5563 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_assignmentExpression_in_expression5585 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
-    public static final BitSet FOLLOW_COMMA_in_expression5589 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpression_in_expression5593 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
-    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_expressionNoIn5630 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
-    public static final BitSet FOLLOW_COMMA_in_expressionNoIn5634 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_expressionNoIn5638 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
-    public static final BitSet FOLLOW_SEMIC_in_semic5689 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EOF_in_semic5694 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RBRACE_in_semic5699 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_EOL_in_semic5706 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_MultiLineComment_in_semic5710 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_block_in_statement5739 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_statementTail_in_statement5744 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_variableStatement_in_statementTail5756 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_emptyStatement_in_statementTail5761 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_expressionStatement_in_statementTail5766 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ifStatement_in_statementTail5771 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_iterationStatement_in_statementTail5776 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_continueStatement_in_statementTail5781 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_breakStatement_in_statementTail5786 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_returnStatement_in_statementTail5791 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_withStatement_in_statementTail5796 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_labelledStatement_in_statementTail5801 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_switchStatement_in_statementTail5806 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_throwStatement_in_statementTail5811 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_tryStatement_in_statementTail5816 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_constStatement_in_statementTail5821 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_namespaceStatement_in_statementTail5826 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LBRACE_in_block5841 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012FFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_sourceElement_in_block5843 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012FFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_RBRACE_in_block5846 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VAR_in_variableStatement5875 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_variableDeclaration_in_variableStatement5877 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_COMMA_in_variableStatement5881 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_variableDeclaration_in_variableStatement5883 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_semic_in_variableStatement5888 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_variableDeclaration5911 = new BitSet(new long[]{0x0000000000000002L,0x0000010000000000L});
-    public static final BitSet FOLLOW_ASSIGN_in_variableDeclaration5916 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpression_in_variableDeclaration5918 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_variableDeclarationNoIn5933 = new BitSet(new long[]{0x0000000000000002L,0x0000010000000000L});
-    public static final BitSet FOLLOW_ASSIGN_in_variableDeclarationNoIn5938 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_variableDeclarationNoIn5940 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_CONST_in_constStatement5955 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_variableDeclaration_in_constStatement5957 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_COMMA_in_constStatement5961 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_variableDeclaration_in_constStatement5963 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_semic_in_constStatement5968 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SEMIC_in_emptyStatement5998 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_expression_in_expressionStatement6021 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_semic_in_expressionStatement6023 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IF_in_ifStatement6041 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_ifStatement6043 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_ifStatement6045 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_ifStatement6047 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_statement_in_ifStatement6049 = new BitSet(new long[]{0x0000000000004002L});
-    public static final BitSet FOLLOW_ELSE_in_ifStatement6055 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_statement_in_ifStatement6057 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_doStatement_in_iterationStatement6090 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_whileStatement_in_iterationStatement6095 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forEachStatement_in_iterationStatement6100 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forStatement_in_iterationStatement6105 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_DO_in_doStatement6117 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_statement_in_doStatement6119 = new BitSet(new long[]{0x0000000080000000L});
-    public static final BitSet FOLLOW_WHILE_in_doStatement6121 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_doStatement6123 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_doStatement6125 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_doStatement6127 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_semic_in_doStatement6129 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_WHILE_in_whileStatement6154 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_whileStatement6157 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_whileStatement6160 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_whileStatement6162 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_statement_in_whileStatement6165 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FOR_in_forEachStatement6182 = new BitSet(new long[]{0x0000000000020000L});
-    public static final BitSet FOLLOW_EACH_in_forEachStatement6184 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_forEachStatement6186 = new BitSet(new long[]{0xFFFFF7FE72461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_forEachControl_in_forEachStatement6188 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_forEachStatement6190 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_statement_in_forEachStatement6192 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forControlVar_in_forEachControl6220 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forControlExpression_in_forEachControl6226 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FOR_in_forStatement6238 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_forStatement6241 = new BitSet(new long[]{0xFFFFF7FE72461070L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_forControl_in_forStatement6244 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_forStatement6246 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_statement_in_forStatement6249 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forControlVar_in_forControl6260 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forControlExpression_in_forControl6265 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_forControlSemic_in_forControl6270 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_VAR_in_forControlVar6281 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_variableDeclarationNoIn_in_forControlVar6283 = new BitSet(new long[]{0x0000000000100000L,0x0000000000003000L});
-    public static final BitSet FOLLOW_IN_in_forControlVar6295 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_forControlVar6297 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_COMMA_in_forControlVar6343 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_variableDeclarationNoIn_in_forControlVar6345 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003000L});
-    public static final BitSet FOLLOW_SEMIC_in_forControlVar6352 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_forControlVar6356 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
-    public static final BitSet FOLLOW_SEMIC_in_forControlVar6361 = new BitSet(new long[]{0xFFFFF7FE52461072L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_forControlVar6365 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_expressionNoIn_in_forControlExpression6445 = new BitSet(new long[]{0x0000000000100000L,0x0000000000001000L});
-    public static final BitSet FOLLOW_IN_in_forControlExpression6460 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_forControlExpression6464 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SEMIC_in_forControlExpression6512 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_forControlExpression6516 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
-    public static final BitSet FOLLOW_SEMIC_in_forControlExpression6521 = new BitSet(new long[]{0xFFFFF7FE52461072L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_forControlExpression6525 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SEMIC_in_forControlSemic6600 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_forControlSemic6604 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
-    public static final BitSet FOLLOW_SEMIC_in_forControlSemic6609 = new BitSet(new long[]{0xFFFFF7FE52461072L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_forControlSemic6613 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_CONTINUE_in_continueStatement6681 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00080C0000000000L});
-    public static final BitSet FOLLOW_Identifier_in_continueStatement6686 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_semic_in_continueStatement6689 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_BREAK_in_breakStatement6708 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00080C0000000000L});
-    public static final BitSet FOLLOW_Identifier_in_breakStatement6713 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_semic_in_breakStatement6716 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RETURN_in_returnStatement6735 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC012FFL,0x07182C0000000000L});
-    public static final BitSet FOLLOW_expression_in_returnStatement6740 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_semic_in_returnStatement6743 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_WITH_in_withStatement6760 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_withStatement6763 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_withStatement6766 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_withStatement6768 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_statement_in_withStatement6771 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SWITCH_in_switchStatement6787 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_switchStatement6789 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_switchStatement6791 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_switchStatement6793 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_LBRACE_in_switchStatement6795 = new BitSet(new long[]{0x0000000000000900L,0x0000000000000040L});
-    public static final BitSet FOLLOW_defaultClause_in_switchStatement6799 = new BitSet(new long[]{0x0000000000000900L,0x0000000000000040L});
-    public static final BitSet FOLLOW_caseClause_in_switchStatement6803 = new BitSet(new long[]{0x0000000000000900L,0x0000000000000040L});
-    public static final BitSet FOLLOW_RBRACE_in_switchStatement6808 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_CASE_in_caseClause6836 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_caseClause6839 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
-    public static final BitSet FOLLOW_COLON_in_caseClause6841 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF2L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_statement_in_caseClause6844 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF2L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_DEFAULT_in_defaultClause6857 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
-    public static final BitSet FOLLOW_COLON_in_defaultClause6860 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF2L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_statement_in_defaultClause6863 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF2L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_identifier_in_labelledStatement6880 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
-    public static final BitSet FOLLOW_COLON_in_labelledStatement6882 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_sourceElement_in_labelledStatement6884 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_THROW_in_throwStatement6915 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_throwStatement6920 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
-    public static final BitSet FOLLOW_semic_in_throwStatement6922 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_TRY_in_tryStatement6939 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_block_in_tryStatement6942 = new BitSet(new long[]{0x0000000000008200L});
-    public static final BitSet FOLLOW_catchClause_in_tryStatement6946 = new BitSet(new long[]{0x0000000000008202L});
-    public static final BitSet FOLLOW_finallyClause_in_tryStatement6949 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_finallyClause_in_tryStatement6954 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_CATCH_in_catchClause6968 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_catchClause6971 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_identifier_in_catchClause6974 = new BitSet(new long[]{0x0000000000080000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_catchFilter_in_catchClause6976 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_catchClause6979 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_block_in_catchClause6982 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_IF_in_catchFilter6993 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_expression_in_catchFilter6995 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FINALLY_in_finallyClause7007 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_block_in_finallyClause7010 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_functionDeclaration7033 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_identifier_in_functionDeclaration7037 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_formalParameterList_in_functionDeclaration7039 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_functionBody_in_functionDeclaration7041 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_FUNCTION_in_functionExpression7069 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000009FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_identifier_in_functionExpression7073 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_formalParameterList_in_functionExpression7076 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_functionBody_in_functionExpression7078 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_identifier_in_formalParameter7106 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LPAREN_in_formalParameterList7118 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000011FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_formalParameter_in_formalParameterList7122 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002100L});
-    public static final BitSet FOLLOW_COMMA_in_formalParameterList7126 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_formalParameter_in_formalParameterList7128 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002100L});
-    public static final BitSet FOLLOW_RPAREN_in_formalParameterList7136 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_LBRACE_in_functionBody7166 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012FFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_sourceElement_in_functionBody7168 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012FFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_RBRACE_in_functionBody7171 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_GET_in_getMethodDeclaration7208 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_identifier_in_getMethodDeclaration7212 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_getMethodDeclaration7214 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_getMethodDeclaration7216 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_functionBody_in_getMethodDeclaration7218 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_SET_in_setMethodDeclaration7249 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_identifier_in_setMethodDeclaration7253 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
-    public static final BitSet FOLLOW_LPAREN_in_setMethodDeclaration7255 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
-    public static final BitSet FOLLOW_identifier_in_setMethodDeclaration7259 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
-    public static final BitSet FOLLOW_RPAREN_in_setMethodDeclaration7261 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
-    public static final BitSet FOLLOW_functionBody_in_setMethodDeclaration7263 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_sourceElementSync_in_program7304 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_sourceElement_in_program7307 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_sourceElementSync_in_program7309 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
-    public static final BitSet FOLLOW_EOF_in_program7313 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_functionDeclaration_in_sourceElement7358 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_statement_in_sourceElement7363 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_expression_in_standaloneExpression7381 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_standaloneExpression7383 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_conditionalExpressionNoIn_in_assignmentExpressionNoIn5576 = new BitSet(new long[]{0x0000000000000002L,0x0017FF0000000000L});
+    public static final BitSet FOLLOW_assignmentOperator_in_assignmentExpressionNoIn5583 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_assignmentExpressionNoIn5586 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_assignmentExpression_in_expression5608 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
+    public static final BitSet FOLLOW_COMMA_in_expression5612 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpression_in_expression5616 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
+    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_expressionNoIn5653 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
+    public static final BitSet FOLLOW_COMMA_in_expressionNoIn5657 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_expressionNoIn5661 = new BitSet(new long[]{0x0000000000000002L,0x0000000000002000L});
+    public static final BitSet FOLLOW_SEMIC_in_semic5712 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EOF_in_semic5717 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RBRACE_in_semic5722 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_EOL_in_semic5729 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_MultiLineComment_in_semic5733 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_block_in_statement5762 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_statementTail_in_statement5767 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_variableStatement_in_statementTail5779 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_emptyStatement_in_statementTail5784 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_expressionStatement_in_statementTail5789 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ifStatement_in_statementTail5794 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_iterationStatement_in_statementTail5799 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_continueStatement_in_statementTail5804 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_breakStatement_in_statementTail5809 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_returnStatement_in_statementTail5814 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_withStatement_in_statementTail5819 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_labelledStatement_in_statementTail5824 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_switchStatement_in_statementTail5829 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_throwStatement_in_statementTail5834 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_tryStatement_in_statementTail5839 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_constStatement_in_statementTail5844 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_namespaceStatement_in_statementTail5849 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LBRACE_in_block5864 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012FFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_sourceElement_in_block5866 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012FFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_RBRACE_in_block5869 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VAR_in_variableStatement5898 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_variableDeclaration_in_variableStatement5900 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_COMMA_in_variableStatement5904 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_variableDeclaration_in_variableStatement5906 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_semic_in_variableStatement5911 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_variableDeclaration5934 = new BitSet(new long[]{0x0000000000000002L,0x0000010000000000L});
+    public static final BitSet FOLLOW_ASSIGN_in_variableDeclaration5939 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpression_in_variableDeclaration5941 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_variableDeclarationNoIn5956 = new BitSet(new long[]{0x0000000000000002L,0x0000010000000000L});
+    public static final BitSet FOLLOW_ASSIGN_in_variableDeclarationNoIn5961 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_assignmentExpressionNoIn_in_variableDeclarationNoIn5963 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_CONST_in_constStatement5978 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_variableDeclaration_in_constStatement5980 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_COMMA_in_constStatement5984 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_variableDeclaration_in_constStatement5986 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_semic_in_constStatement5991 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMIC_in_emptyStatement6021 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_expression_in_expressionStatement6044 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_semic_in_expressionStatement6046 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IF_in_ifStatement6064 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_ifStatement6066 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_ifStatement6068 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_ifStatement6070 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_statement_in_ifStatement6072 = new BitSet(new long[]{0x0000000000004002L});
+    public static final BitSet FOLLOW_ELSE_in_ifStatement6078 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_statement_in_ifStatement6080 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_doStatement_in_iterationStatement6113 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_whileStatement_in_iterationStatement6118 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forEachStatement_in_iterationStatement6123 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forStatement_in_iterationStatement6128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_DO_in_doStatement6140 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_statement_in_doStatement6142 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_WHILE_in_doStatement6144 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_doStatement6146 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_doStatement6148 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_doStatement6150 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_semic_in_doStatement6152 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_WHILE_in_whileStatement6177 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_whileStatement6180 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_whileStatement6183 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_whileStatement6185 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_statement_in_whileStatement6188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FOR_in_forEachStatement6205 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_EACH_in_forEachStatement6207 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_forEachStatement6209 = new BitSet(new long[]{0xFFFFF7FE72461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_forEachControl_in_forEachStatement6211 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_forEachStatement6213 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_statement_in_forEachStatement6215 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forControlVar_in_forEachControl6243 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forControlExpression_in_forEachControl6249 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FOR_in_forStatement6261 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_forStatement6264 = new BitSet(new long[]{0xFFFFF7FE72461070L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_forControl_in_forStatement6267 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_forStatement6269 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_statement_in_forStatement6272 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forControlVar_in_forControl6283 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forControlExpression_in_forControl6288 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_forControlSemic_in_forControl6293 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_VAR_in_forControlVar6304 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_variableDeclarationNoIn_in_forControlVar6306 = new BitSet(new long[]{0x0000000000100000L,0x0000000000003000L});
+    public static final BitSet FOLLOW_IN_in_forControlVar6318 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_forControlVar6320 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_COMMA_in_forControlVar6366 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_variableDeclarationNoIn_in_forControlVar6368 = new BitSet(new long[]{0x0000000000000000L,0x0000000000003000L});
+    public static final BitSet FOLLOW_SEMIC_in_forControlVar6375 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_forControlVar6379 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_SEMIC_in_forControlVar6384 = new BitSet(new long[]{0xFFFFF7FE52461072L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_forControlVar6388 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_expressionNoIn_in_forControlExpression6468 = new BitSet(new long[]{0x0000000000100000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_IN_in_forControlExpression6483 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_forControlExpression6487 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMIC_in_forControlExpression6535 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_forControlExpression6539 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_SEMIC_in_forControlExpression6544 = new BitSet(new long[]{0xFFFFF7FE52461072L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_forControlExpression6548 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SEMIC_in_forControlSemic6623 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_forControlSemic6627 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001000L});
+    public static final BitSet FOLLOW_SEMIC_in_forControlSemic6632 = new BitSet(new long[]{0xFFFFF7FE52461072L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_forControlSemic6636 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_CONTINUE_in_continueStatement6704 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00080C0000000000L});
+    public static final BitSet FOLLOW_Identifier_in_continueStatement6709 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_semic_in_continueStatement6712 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_BREAK_in_breakStatement6731 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00080C0000000000L});
+    public static final BitSet FOLLOW_Identifier_in_breakStatement6736 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_semic_in_breakStatement6739 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RETURN_in_returnStatement6758 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC012FFL,0x07182C0000000000L});
+    public static final BitSet FOLLOW_expression_in_returnStatement6763 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_semic_in_returnStatement6766 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_WITH_in_withStatement6783 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_withStatement6786 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_withStatement6789 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_withStatement6791 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_statement_in_withStatement6794 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SWITCH_in_switchStatement6810 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_switchStatement6812 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_switchStatement6814 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_switchStatement6816 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_LBRACE_in_switchStatement6818 = new BitSet(new long[]{0x0000000000000900L,0x0000000000000040L});
+    public static final BitSet FOLLOW_defaultClause_in_switchStatement6822 = new BitSet(new long[]{0x0000000000000900L,0x0000000000000040L});
+    public static final BitSet FOLLOW_caseClause_in_switchStatement6826 = new BitSet(new long[]{0x0000000000000900L,0x0000000000000040L});
+    public static final BitSet FOLLOW_RBRACE_in_switchStatement6831 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_CASE_in_caseClause6859 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_caseClause6862 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
+    public static final BitSet FOLLOW_COLON_in_caseClause6864 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF2L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_statement_in_caseClause6867 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF2L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_DEFAULT_in_defaultClause6880 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
+    public static final BitSet FOLLOW_COLON_in_defaultClause6883 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF2L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_statement_in_defaultClause6886 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF2L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_identifier_in_labelledStatement6903 = new BitSet(new long[]{0x0000000000000000L,0x0000008000000000L});
+    public static final BitSet FOLLOW_COLON_in_labelledStatement6905 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_sourceElement_in_labelledStatement6907 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_THROW_in_throwStatement6938 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_throwStatement6943 = new BitSet(new long[]{0x0000000000000000L,0x0000000000001040L,0x00000C0000000000L});
+    public static final BitSet FOLLOW_semic_in_throwStatement6945 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_TRY_in_tryStatement6962 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_block_in_tryStatement6965 = new BitSet(new long[]{0x0000000000008200L});
+    public static final BitSet FOLLOW_catchClause_in_tryStatement6969 = new BitSet(new long[]{0x0000000000008202L});
+    public static final BitSet FOLLOW_finallyClause_in_tryStatement6972 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_finallyClause_in_tryStatement6977 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_CATCH_in_catchClause6991 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_catchClause6994 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_identifier_in_catchClause6997 = new BitSet(new long[]{0x0000000000080000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_catchFilter_in_catchClause6999 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_catchClause7002 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_block_in_catchClause7005 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_IF_in_catchFilter7016 = new BitSet(new long[]{0xFFFFF7FE52461070L,0x0320000C0CC002BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_expression_in_catchFilter7018 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FINALLY_in_finallyClause7030 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_block_in_finallyClause7033 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FUNCTION_in_functionDeclaration7056 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_identifier_in_functionDeclaration7060 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_formalParameterList_in_functionDeclaration7062 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_functionBody_in_functionDeclaration7064 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_FUNCTION_in_functionExpression7092 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000009FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_identifier_in_functionExpression7096 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_formalParameterList_in_functionExpression7099 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_functionBody_in_functionExpression7101 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_identifier_in_formalParameter7129 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LPAREN_in_formalParameterList7141 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000011FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_formalParameter_in_formalParameterList7145 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002100L});
+    public static final BitSet FOLLOW_COMMA_in_formalParameterList7149 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_formalParameter_in_formalParameterList7151 = new BitSet(new long[]{0x0000000000000000L,0x0000000000002100L});
+    public static final BitSet FOLLOW_RPAREN_in_formalParameterList7159 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_LBRACE_in_functionBody7189 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012FFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_sourceElement_in_functionBody7191 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012FFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_RBRACE_in_functionBody7194 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_GET_in_getMethodDeclaration7231 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_identifier_in_getMethodDeclaration7235 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_getMethodDeclaration7237 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_getMethodDeclaration7239 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_functionBody_in_getMethodDeclaration7241 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_SET_in_setMethodDeclaration7272 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_identifier_in_setMethodDeclaration7276 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000080L});
+    public static final BitSet FOLLOW_LPAREN_in_setMethodDeclaration7278 = new BitSet(new long[]{0xFFFFF7F600020000L,0x000000000000001FL,0x0008000000000000L});
+    public static final BitSet FOLLOW_identifier_in_setMethodDeclaration7282 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000100L});
+    public static final BitSet FOLLOW_RPAREN_in_setMethodDeclaration7284 = new BitSet(new long[]{0x0000000000000000L,0x0000000000000020L});
+    public static final BitSet FOLLOW_functionBody_in_setMethodDeclaration7286 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_sourceElementSync_in_program7327 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_sourceElement_in_program7330 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_sourceElementSync_in_program7332 = new BitSet(new long[]{0xFFFFFFFFFFCF3CF0L,0x0320000C0CC012BFL,0x0718200000000000L});
+    public static final BitSet FOLLOW_EOF_in_program7336 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_functionDeclaration_in_sourceElement7381 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_statement_in_sourceElement7386 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_expression_in_standaloneExpression7404 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_standaloneExpression7406 = new BitSet(new long[]{0x0000000000000002L});
 
 }
\ No newline at end of file
diff --git a/tests/org.eclipse.dltk.javascript.parser.tests/src/org/eclipse/dltk/javascript/parser/tests/AllTests.java b/tests/org.eclipse.dltk.javascript.parser.tests/src/org/eclipse/dltk/javascript/parser/tests/AllTests.java
index 339a322..0c0b56d 100644
--- a/tests/org.eclipse.dltk.javascript.parser.tests/src/org/eclipse/dltk/javascript/parser/tests/AllTests.java
+++ b/tests/org.eclipse.dltk.javascript.parser.tests/src/org/eclipse/dltk/javascript/parser/tests/AllTests.java
@@ -37,6 +37,7 @@
 		suite.addTestSuite(Bug20110503.class);
 		suite.addTestSuite(ForTests.class);
 		suite.addTestSuite(StringPoolTest.class);
+		suite.addTestSuite(KeywordTest.class);
 		// $JUnit-END$
 		return suite;
 	}
diff --git a/tests/org.eclipse.dltk.javascript.parser.tests/src/org/eclipse/dltk/javascript/parser/tests/KeywordTest.java b/tests/org.eclipse.dltk.javascript.parser.tests/src/org/eclipse/dltk/javascript/parser/tests/KeywordTest.java
new file mode 100644
index 0000000..5be9d8b
--- /dev/null
+++ b/tests/org.eclipse.dltk.javascript.parser.tests/src/org/eclipse/dltk/javascript/parser/tests/KeywordTest.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2014 Alex Panchenko
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Alex Panchenko - initial API and Implementation
+ *******************************************************************************/
+package org.eclipse.dltk.javascript.parser.tests;
+
+import org.eclipse.dltk.ast.utils.ASTUtil;
+import org.eclipse.dltk.javascript.ast.BinaryOperation;
+import org.eclipse.dltk.javascript.ast.FunctionStatement;
+import org.eclipse.dltk.javascript.ast.ObjectInitializer;
+import org.eclipse.dltk.javascript.ast.Script;
+import org.eclipse.dltk.javascript.ast.VariableDeclaration;
+import org.eclipse.dltk.javascript.parser.PropertyExpressionUtils;
+
+public class KeywordTest extends AbstractJSParserTest {
+
+	public void testDeleteAsPropertyExpression() {
+		Script script = parse("a.delete = function(){}");
+		assertFalse(reporter.hasErrors());
+		BinaryOperation assignment = uniqueResult(ASTUtil.select(script,
+				BinaryOperation.class));
+		assertEquals("a.delete",
+				PropertyExpressionUtils.getPath(assignment.getLeftExpression()));
+		assertTrue(assignment.getRightExpression() instanceof FunctionStatement);
+	}
+
+	public void testDeleteInObjectLiteral() {
+		final Script script = parse("var keywords={delete:1}");
+		assertFalse(reporter.hasErrors());
+		final VariableDeclaration var = uniqueResult(ASTUtil.select(script,
+				VariableDeclaration.class));
+		final ObjectInitializer object = (ObjectInitializer) var
+				.getInitializer();
+		assertEquals(1, object.getInitializers().size());
+		assertIdentifier("delete",
+				object.getPropertyInitializers()[0].getName());
+		assertDecimal("1", object.getPropertyInitializers()[0].getValue());
+	}
+}