[Issue-78] EL expressions that contain unnecessary parentheses fail (#79)

Signed-off-by: tmiyar <tmiyargi@redhat.com>
diff --git a/impl/src/main/java/com/sun/el/parser/ELParser.java b/impl/src/main/java/com/sun/el/parser/ELParser.java
index 4d76641..889865f 100644
--- a/impl/src/main/java/com/sun/el/parser/ELParser.java
+++ b/impl/src/main/java/com/sun/el/parser/ELParser.java
@@ -13,214 +13,174 @@
  *
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
-
+ 
 /* Generated By:JJTree&JavaCC: Do not edit this line. ELParser.java */
 package com.sun.el.parser;
-
 import java.io.StringReader;
-
 import javax.el.ELException;
-
-public class ELParser/* @bgen(jjtree) */ implements ELParserTreeConstants, ELParserConstants {/* @bgen(jjtree) */
-    protected JJTELParserState jjtree = new JJTELParserState();
-
-    public static Node parse(String ref) throws ELException {
+public class ELParser/*@bgen(jjtree)*/implements ELParserTreeConstants, ELParserConstants {/*@bgen(jjtree)*/
+  protected JJTELParserState jjtree = new JJTELParserState();public static Node parse(String ref) throws ELException
+    {
         try {
-            return (new ELParser(new StringReader(ref))).CompositeExpression();
+                return (new ELParser(new StringReader(ref))).CompositeExpression();
         } catch (ParseException pe) {
-            throw new ELException(pe.getMessage());
+                throw new ELException(pe.getMessage());
         }
     }
 
-    /*
-     * CompositeExpression Allow most flexible parsing, restrict by examining type of returned node
-     */
-    final public AstCompositeExpression CompositeExpression() throws ParseException {
-        /* @bgen(jjtree) CompositeExpression */
-        AstCompositeExpression jjtn000 = new AstCompositeExpression(JJTCOMPOSITEEXPRESSION);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            label_1: while (true) {
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case LITERAL_EXPRESSION:
-                case START_DYNAMIC_EXPRESSION:
-                case START_DEFERRED_EXPRESSION:
-                    ;
-                    break;
-                default:
-                    jj_la1[0] = jj_gen;
-                    break label_1;
-                }
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case START_DEFERRED_EXPRESSION:
-                    DeferredExpression();
-                    break;
-                case START_DYNAMIC_EXPRESSION:
-                    DynamicExpression();
-                    break;
-                case LITERAL_EXPRESSION:
-                    LiteralExpression();
-                    break;
-                default:
-                    jj_la1[1] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-            }
-            jj_consume_token(0);
-            jjtree.closeNodeScope(jjtn000, true);
+/*
+ * CompositeExpression
+ * Allow most flexible parsing, restrict by examining
+ * type of returned node
+ */
+  final public AstCompositeExpression CompositeExpression() throws ParseException {
+                                                                     /*@bgen(jjtree) CompositeExpression */
+  AstCompositeExpression jjtn000 = new AstCompositeExpression(JJTCOMPOSITEEXPRESSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      label_1:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case LITERAL_EXPRESSION:
+        case START_DYNAMIC_EXPRESSION:
+        case START_DEFERRED_EXPRESSION:
+          ;
+          break;
+        default:
+          jj_la1[0] = jj_gen;
+          break label_1;
+        }
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case START_DEFERRED_EXPRESSION:
+          DeferredExpression();
+          break;
+        case START_DYNAMIC_EXPRESSION:
+          DynamicExpression();
+          break;
+        case LITERAL_EXPRESSION:
+          LiteralExpression();
+          break;
+        default:
+          jj_la1[1] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+      }
+      jj_consume_token(0);
+                                                                                    jjtree.closeNodeScope(jjtn000, true);
+                                                                                    jjtc000 = false;
+                                                                                    {if (true) return jjtn000;}
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
             jjtc000 = false;
-            {
-                if (true) {
-                    return jjtn000;
-                }
-            }
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-        throw new Error("Missing return statement in function");
-    }
-
-    /*
-     * LiteralExpression Non-EL Expression blocks
-     */
-    final public void LiteralExpression() throws ParseException {
-        /* @bgen(jjtree) LiteralExpression */
-        AstLiteralExpression jjtn000 = new AstLiteralExpression(JJTLITERALEXPRESSION);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        Token t = null;
-        try {
-            t = jj_consume_token(LITERAL_EXPRESSION);
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
             jjtree.closeNodeScope(jjtn000, true);
+          }
+    }
+    throw new Error("Missing return statement in function");
+  }
+
+/*
+ * LiteralExpression
+ * Non-EL Expression blocks
+ */
+  final public void LiteralExpression() throws ParseException {
+                                               /*@bgen(jjtree) LiteralExpression */
+                                                AstLiteralExpression jjtn000 = new AstLiteralExpression(JJTLITERALEXPRESSION);
+                                                boolean jjtc000 = true;
+                                                jjtree.openNodeScope(jjtn000);Token t = null;
+    try {
+      t = jj_consume_token(LITERAL_EXPRESSION);
+                                 jjtree.closeNodeScope(jjtn000, true);
+                                 jjtc000 = false;
+                                 jjtn000.setImage(t.image);
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
+    }
+  }
+
+/*
+ * DeferredExpression
+ * #{..} Expressions
+ */
+  final public void DeferredExpression() throws ParseException {
+                                                 /*@bgen(jjtree) DeferredExpression */
+  AstDeferredExpression jjtn000 = new AstDeferredExpression(JJTDEFERREDEXPRESSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(START_DEFERRED_EXPRESSION);
+      Expression();
+      jj_consume_token(RCURL);
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
             jjtc000 = false;
-            jjtn000.setImage(t.image);
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
     }
+  }
 
-    /*
-     * DeferredExpression #{..} Expressions
-     */
-    final public void DeferredExpression() throws ParseException {
-        /* @bgen(jjtree) DeferredExpression */
-        AstDeferredExpression jjtn000 = new AstDeferredExpression(JJTDEFERREDEXPRESSION);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            jj_consume_token(START_DEFERRED_EXPRESSION);
-            Expression();
-            jj_consume_token(RCURL);
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
+/*
+ * DynamicExpression
+ * ${..} Expressions
+ */
+  final public void DynamicExpression() throws ParseException {
+                                               /*@bgen(jjtree) DynamicExpression */
+  AstDynamicExpression jjtn000 = new AstDynamicExpression(JJTDYNAMICEXPRESSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(START_DYNAMIC_EXPRESSION);
+      Expression();
+      jj_consume_token(RCURL);
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
+            jjtc000 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
     }
-
-    /*
-     * DynamicExpression ${..} Expressions
-     */
-    final public void DynamicExpression() throws ParseException {
-        /* @bgen(jjtree) DynamicExpression */
-        AstDynamicExpression jjtn000 = new AstDynamicExpression(JJTDYNAMICEXPRESSION);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            jj_consume_token(START_DYNAMIC_EXPRESSION);
-            Expression();
-            jj_consume_token(RCURL);
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-    }
-
+  }
     /*
      * Jakarta Expression Root
      */
@@ -228,3555 +188,2854 @@
         SemiColon();
     }
 
-    /*
-     * SemiColon
-     */
-    final public void SemiColon() throws ParseException {
+/*
+ * SemiColon
+ */
+  final public void SemiColon() throws ParseException {
+    Assignment();
+    label_2:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case SEMICOLON:
+        ;
+        break;
+      default:
+        jj_la1[2] = jj_gen;
+        break label_2;
+      }
+      jj_consume_token(SEMICOLON);
+                                    AstSemiColon jjtn001 = new AstSemiColon(JJTSEMICOLON);
+                                    boolean jjtc001 = true;
+                                    jjtree.openNodeScope(jjtn001);
+      try {
         Assignment();
-        label_2: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case SEMICOLON:
-                ;
-                break;
-            default:
-                jj_la1[2] = jj_gen;
-                break label_2;
-            }
-            jj_consume_token(SEMICOLON);
-            AstSemiColon jjtn001 = new AstSemiColon(JJTSEMICOLON);
-            boolean jjtc001 = true;
-            jjtree.openNodeScope(jjtn001);
-            try {
-                Assignment();
-            } catch (Throwable jjte001) {
-                if (jjtc001) {
-                    jjtree.clearNodeScope(jjtn001);
-                    jjtc001 = false;
-                } else {
-                    jjtree.popNode();
-                }
-                if (jjte001 instanceof RuntimeException) {
-                    {
-                        if (true) {
-                            throw (RuntimeException) jjte001;
-                        }
-                    }
-                }
-                if (jjte001 instanceof ParseException) {
-                    {
-                        if (true) {
-                            throw (ParseException) jjte001;
-                        }
-                    }
-                }
-                {
-                    if (true) {
-                        throw (Error) jjte001;
-                    }
-                }
-            } finally {
-                if (jjtc001) {
-                    jjtree.closeNodeScope(jjtn001, 2);
-                }
-            }
-        }
+      } catch (Throwable jjte001) {
+                                    if (jjtc001) {
+                                      jjtree.clearNodeScope(jjtn001);
+                                      jjtc001 = false;
+                                    } else {
+                                      jjtree.popNode();
+                                    }
+                                    if (jjte001 instanceof RuntimeException) {
+                                      {if (true) throw (RuntimeException)jjte001;}
+                                    }
+                                    if (jjte001 instanceof ParseException) {
+                                      {if (true) throw (ParseException)jjte001;}
+                                    }
+                                    {if (true) throw (Error)jjte001;}
+      } finally {
+                                    if (jjtc001) {
+                                      jjtree.closeNodeScope(jjtn001,  2);
+                                    }
+      }
     }
+  }
 
-    /*
-     * Assignment For '=', right associatve, then LambdaExpression or Choice or Assignment
-     */
-    final public void Assignment() throws ParseException {
-        if (jj_2_1(3)) {
-            LambdaExpression();
-        } else {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case START_MAP:
-            case INTEGER_LITERAL:
-            case FLOATING_POINT_LITERAL:
-            case STRING_LITERAL:
-            case TRUE:
-            case FALSE:
-            case NULL:
-            case LPAREN:
-            case LBRACK:
-            case NOT0:
-            case NOT1:
-            case EMPTY:
-            case MINUS:
-            case IDENTIFIER:
-                Choice();
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case ASSIGN:
-                    jj_consume_token(ASSIGN);
-                    AstAssign jjtn001 = new AstAssign(JJTASSIGN);
-                    boolean jjtc001 = true;
-                    jjtree.openNodeScope(jjtn001);
-                    try {
-                        Assignment();
-                    } catch (Throwable jjte001) {
-                        if (jjtc001) {
-                            jjtree.clearNodeScope(jjtn001);
-                            jjtc001 = false;
-                        } else {
-                            jjtree.popNode();
-                        }
-                        if (jjte001 instanceof RuntimeException) {
-                            {
-                                if (true) {
-                                    throw (RuntimeException) jjte001;
-                                }
-                            }
-                        }
-                        if (jjte001 instanceof ParseException) {
-                            {
-                                if (true) {
-                                    throw (ParseException) jjte001;
-                                }
-                            }
-                        }
-                        {
-                            if (true) {
-                                throw (Error) jjte001;
-                            }
-                        }
-                    } finally {
-                        if (jjtc001) {
-                            jjtree.closeNodeScope(jjtn001, 2);
-                        }
-                    }
-                    break;
-                default:
-                    jj_la1[3] = jj_gen;
-                    ;
-                }
-                break;
-            default:
-                jj_la1[4] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-            }
-        }
-    }
-
-    /*
-     * LambdaExpression
-     */
-    final public void LambdaExpression() throws ParseException {
-        /* @bgen(jjtree) LambdaExpression */
-        AstLambdaExpression jjtn000 = new AstLambdaExpression(JJTLAMBDAEXPRESSION);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            LambdaParameters();
-            jj_consume_token(ARROW);
-            if (jj_2_2(3)) {
-                LambdaExpression();
-            } else {
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case START_MAP:
-                case INTEGER_LITERAL:
-                case FLOATING_POINT_LITERAL:
-                case STRING_LITERAL:
-                case TRUE:
-                case FALSE:
-                case NULL:
-                case LPAREN:
-                case LBRACK:
-                case NOT0:
-                case NOT1:
-                case EMPTY:
-                case MINUS:
-                case IDENTIFIER:
-                    Choice();
-                    break;
-                default:
-                    jj_la1[5] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-            }
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-    }
-
-    final public void LambdaParameters() throws ParseException {
-        /* @bgen(jjtree) LambdaParameters */
-        AstLambdaParameters jjtn000 = new AstLambdaParameters(JJTLAMBDAPARAMETERS);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case IDENTIFIER:
-                Identifier();
-                break;
-            case LPAREN:
-                jj_consume_token(LPAREN);
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case IDENTIFIER:
-                    Identifier();
-                    label_3: while (true) {
-                        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                        case COMMA:
-                            ;
-                            break;
-                        default:
-                            jj_la1[6] = jj_gen;
-                            break label_3;
-                        }
-                        jj_consume_token(COMMA);
-                        Identifier();
-                    }
-                    break;
-                default:
-                    jj_la1[7] = jj_gen;
-                    ;
-                }
-                jj_consume_token(RPAREN);
-                break;
-            default:
-                jj_la1[8] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-            }
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-    }
-
-    /*
-     * Choice For Choice markup a ? b : c, right associative
-     */
-    final public void Choice() throws ParseException {
-        Or();
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case QUESTIONMARK:
-            jj_consume_token(QUESTIONMARK);
-            Choice();
-            jj_consume_token(COLON);
-            AstChoice jjtn001 = new AstChoice(JJTCHOICE);
-            boolean jjtc001 = true;
-            jjtree.openNodeScope(jjtn001);
-            try {
-                Choice();
-            } catch (Throwable jjte001) {
-                if (jjtc001) {
-                    jjtree.clearNodeScope(jjtn001);
-                    jjtc001 = false;
-                } else {
-                    jjtree.popNode();
-                }
-                if (jjte001 instanceof RuntimeException) {
-                    {
-                        if (true) {
-                            throw (RuntimeException) jjte001;
-                        }
-                    }
-                }
-                if (jjte001 instanceof ParseException) {
-                    {
-                        if (true) {
-                            throw (ParseException) jjte001;
-                        }
-                    }
-                }
-                {
-                    if (true) {
-                        throw (Error) jjte001;
-                    }
-                }
-            } finally {
-                if (jjtc001) {
-                    jjtree.closeNodeScope(jjtn001, 3);
-                }
-            }
-            break;
-        default:
-            jj_la1[9] = jj_gen;
+/*
+ * Assignment
+ * For '=', right associatve, then LambdaExpression or Choice or Assignment
+ */
+  final public void Assignment() throws ParseException {
+    if (jj_2_2(4)) {
+      LambdaExpression();
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case START_MAP:
+      case INTEGER_LITERAL:
+      case FLOATING_POINT_LITERAL:
+      case STRING_LITERAL:
+      case TRUE:
+      case FALSE:
+      case NULL:
+      case LPAREN:
+      case LBRACK:
+      case NOT0:
+      case NOT1:
+      case EMPTY:
+      case MINUS:
+      case IDENTIFIER:
+        Choice();
+        label_3:
+        while (true) {
+          if (jj_2_1(2)) {
             ;
+          } else {
+            break label_3;
+          }
+          jj_consume_token(ASSIGN);
+                                           AstAssign jjtn001 = new AstAssign(JJTASSIGN);
+                                           boolean jjtc001 = true;
+                                           jjtree.openNodeScope(jjtn001);
+          try {
+            Assignment();
+          } catch (Throwable jjte001) {
+                                           if (jjtc001) {
+                                             jjtree.clearNodeScope(jjtn001);
+                                             jjtc001 = false;
+                                           } else {
+                                             jjtree.popNode();
+                                           }
+                                           if (jjte001 instanceof RuntimeException) {
+                                             {if (true) throw (RuntimeException)jjte001;}
+                                           }
+                                           if (jjte001 instanceof ParseException) {
+                                             {if (true) throw (ParseException)jjte001;}
+                                           }
+                                           {if (true) throw (Error)jjte001;}
+          } finally {
+                                           if (jjtc001) {
+                                             jjtree.closeNodeScope(jjtn001,  2);
+                                           }
+          }
         }
+        break;
+      default:
+        jj_la1[3] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
     }
+  }
 
-    /*
-     * Or For 'or' '||', then And
-     */
-    final public void Or() throws ParseException {
-        And();
-        label_4: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case OR0:
-            case OR1:
-                ;
-                break;
-            default:
-                jj_la1[10] = jj_gen;
-                break label_4;
-            }
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case OR0:
-                jj_consume_token(OR0);
-                break;
-            case OR1:
-                jj_consume_token(OR1);
-                break;
-            default:
-                jj_la1[11] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-            }
-            AstOr jjtn001 = new AstOr(JJTOR);
-            boolean jjtc001 = true;
-            jjtree.openNodeScope(jjtn001);
-            try {
-                And();
-            } catch (Throwable jjte001) {
-                if (jjtc001) {
-                    jjtree.clearNodeScope(jjtn001);
-                    jjtc001 = false;
-                } else {
-                    jjtree.popNode();
-                }
-                if (jjte001 instanceof RuntimeException) {
-                    {
-                        if (true) {
-                            throw (RuntimeException) jjte001;
-                        }
-                    }
-                }
-                if (jjte001 instanceof ParseException) {
-                    {
-                        if (true) {
-                            throw (ParseException) jjte001;
-                        }
-                    }
-                }
-                {
-                    if (true) {
-                        throw (Error) jjte001;
-                    }
-                }
-            } finally {
-                if (jjtc001) {
-                    jjtree.closeNodeScope(jjtn001, 2);
-                }
-            }
-        }
-    }
-
-    /*
-     * And For 'and' '&&', then Equality
-     */
-    final public void And() throws ParseException {
-        Equality();
-        label_5: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case AND0:
-            case AND1:
-                ;
-                break;
-            default:
-                jj_la1[12] = jj_gen;
-                break label_5;
-            }
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case AND0:
-                jj_consume_token(AND0);
-                break;
-            case AND1:
-                jj_consume_token(AND1);
-                break;
-            default:
-                jj_la1[13] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-            }
-            AstAnd jjtn001 = new AstAnd(JJTAND);
-            boolean jjtc001 = true;
-            jjtree.openNodeScope(jjtn001);
-            try {
-                Equality();
-            } catch (Throwable jjte001) {
-                if (jjtc001) {
-                    jjtree.clearNodeScope(jjtn001);
-                    jjtc001 = false;
-                } else {
-                    jjtree.popNode();
-                }
-                if (jjte001 instanceof RuntimeException) {
-                    {
-                        if (true) {
-                            throw (RuntimeException) jjte001;
-                        }
-                    }
-                }
-                if (jjte001 instanceof ParseException) {
-                    {
-                        if (true) {
-                            throw (ParseException) jjte001;
-                        }
-                    }
-                }
-                {
-                    if (true) {
-                        throw (Error) jjte001;
-                    }
-                }
-            } finally {
-                if (jjtc001) {
-                    jjtree.closeNodeScope(jjtn001, 2);
-                }
-            }
-        }
-    }
-
-    /*
-     * Equality For '==' 'eq' '!=' 'ne', then Compare
-     */
-    final public void Equality() throws ParseException {
-        Compare();
-        label_6: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case EQ0:
-            case EQ1:
-            case NE0:
-            case NE1:
-                ;
-                break;
-            default:
-                jj_la1[14] = jj_gen;
-                break label_6;
-            }
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case EQ0:
-            case EQ1:
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case EQ0:
-                    jj_consume_token(EQ0);
-                    break;
-                case EQ1:
-                    jj_consume_token(EQ1);
-                    break;
-                default:
-                    jj_la1[15] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-                AstEqual jjtn001 = new AstEqual(JJTEQUAL);
-                boolean jjtc001 = true;
-                jjtree.openNodeScope(jjtn001);
-                try {
-                    Compare();
-                } catch (Throwable jjte001) {
-                    if (jjtc001) {
-                        jjtree.clearNodeScope(jjtn001);
-                        jjtc001 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte001 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte001;
-                            }
-                        }
-                    }
-                    if (jjte001 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte001;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte001;
-                        }
-                    }
-                } finally {
-                    if (jjtc001) {
-                        jjtree.closeNodeScope(jjtn001, 2);
-                    }
-                }
-                break;
-            case NE0:
-            case NE1:
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case NE0:
-                    jj_consume_token(NE0);
-                    break;
-                case NE1:
-                    jj_consume_token(NE1);
-                    break;
-                default:
-                    jj_la1[16] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-                AstNotEqual jjtn002 = new AstNotEqual(JJTNOTEQUAL);
-                boolean jjtc002 = true;
-                jjtree.openNodeScope(jjtn002);
-                try {
-                    Compare();
-                } catch (Throwable jjte002) {
-                    if (jjtc002) {
-                        jjtree.clearNodeScope(jjtn002);
-                        jjtc002 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte002 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte002;
-                            }
-                        }
-                    }
-                    if (jjte002 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte002;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte002;
-                        }
-                    }
-                } finally {
-                    if (jjtc002) {
-                        jjtree.closeNodeScope(jjtn002, 2);
-                    }
-                }
-                break;
-            default:
-                jj_la1[17] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-            }
-        }
-    }
-
-    /*
-     * Compare For a bunch of them, then Math
-     */
-    final public void Compare() throws ParseException {
-        Concatenation();
-        label_7: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case GT0:
-            case GT1:
-            case LT0:
-            case LT1:
-            case GE0:
-            case GE1:
-            case LE0:
-            case LE1:
-                ;
-                break;
-            default:
-                jj_la1[18] = jj_gen;
-                break label_7;
-            }
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case LT0:
-            case LT1:
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case LT0:
-                    jj_consume_token(LT0);
-                    break;
-                case LT1:
-                    jj_consume_token(LT1);
-                    break;
-                default:
-                    jj_la1[19] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-                AstLessThan jjtn001 = new AstLessThan(JJTLESSTHAN);
-                boolean jjtc001 = true;
-                jjtree.openNodeScope(jjtn001);
-                try {
-                    Concatenation();
-                } catch (Throwable jjte001) {
-                    if (jjtc001) {
-                        jjtree.clearNodeScope(jjtn001);
-                        jjtc001 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte001 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte001;
-                            }
-                        }
-                    }
-                    if (jjte001 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte001;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte001;
-                        }
-                    }
-                } finally {
-                    if (jjtc001) {
-                        jjtree.closeNodeScope(jjtn001, 2);
-                    }
-                }
-                break;
-            case GT0:
-            case GT1:
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case GT0:
-                    jj_consume_token(GT0);
-                    break;
-                case GT1:
-                    jj_consume_token(GT1);
-                    break;
-                default:
-                    jj_la1[20] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-                AstGreaterThan jjtn002 = new AstGreaterThan(JJTGREATERTHAN);
-                boolean jjtc002 = true;
-                jjtree.openNodeScope(jjtn002);
-                try {
-                    Concatenation();
-                } catch (Throwable jjte002) {
-                    if (jjtc002) {
-                        jjtree.clearNodeScope(jjtn002);
-                        jjtc002 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte002 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte002;
-                            }
-                        }
-                    }
-                    if (jjte002 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte002;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte002;
-                        }
-                    }
-                } finally {
-                    if (jjtc002) {
-                        jjtree.closeNodeScope(jjtn002, 2);
-                    }
-                }
-                break;
-            case LE0:
-            case LE1:
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case LE0:
-                    jj_consume_token(LE0);
-                    break;
-                case LE1:
-                    jj_consume_token(LE1);
-                    break;
-                default:
-                    jj_la1[21] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-                AstLessThanEqual jjtn003 = new AstLessThanEqual(JJTLESSTHANEQUAL);
-                boolean jjtc003 = true;
-                jjtree.openNodeScope(jjtn003);
-                try {
-                    Concatenation();
-                } catch (Throwable jjte003) {
-                    if (jjtc003) {
-                        jjtree.clearNodeScope(jjtn003);
-                        jjtc003 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte003 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte003;
-                            }
-                        }
-                    }
-                    if (jjte003 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte003;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte003;
-                        }
-                    }
-                } finally {
-                    if (jjtc003) {
-                        jjtree.closeNodeScope(jjtn003, 2);
-                    }
-                }
-                break;
-            case GE0:
-            case GE1:
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case GE0:
-                    jj_consume_token(GE0);
-                    break;
-                case GE1:
-                    jj_consume_token(GE1);
-                    break;
-                default:
-                    jj_la1[22] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-                AstGreaterThanEqual jjtn004 = new AstGreaterThanEqual(JJTGREATERTHANEQUAL);
-                boolean jjtc004 = true;
-                jjtree.openNodeScope(jjtn004);
-                try {
-                    Concatenation();
-                } catch (Throwable jjte004) {
-                    if (jjtc004) {
-                        jjtree.clearNodeScope(jjtn004);
-                        jjtc004 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte004 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte004;
-                            }
-                        }
-                    }
-                    if (jjte004 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte004;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte004;
-                        }
-                    }
-                } finally {
-                    if (jjtc004) {
-                        jjtree.closeNodeScope(jjtn004, 2);
-                    }
-                }
-                break;
-            default:
-                jj_la1[23] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-            }
-        }
-    }
-
-    /*
-     * Concatenation For '&', then Math()
-     */
-    final public void Concatenation() throws ParseException {
-        Math();
-        label_8: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case CONCAT:
-                ;
-                break;
-            default:
-                jj_la1[24] = jj_gen;
-                break label_8;
-            }
-            jj_consume_token(CONCAT);
-            AstConcat jjtn001 = new AstConcat(JJTCONCAT);
-            boolean jjtc001 = true;
-            jjtree.openNodeScope(jjtn001);
-            try {
-                Math();
-            } catch (Throwable jjte001) {
-                if (jjtc001) {
-                    jjtree.clearNodeScope(jjtn001);
-                    jjtc001 = false;
-                } else {
-                    jjtree.popNode();
-                }
-                if (jjte001 instanceof RuntimeException) {
-                    {
-                        if (true) {
-                            throw (RuntimeException) jjte001;
-                        }
-                    }
-                }
-                if (jjte001 instanceof ParseException) {
-                    {
-                        if (true) {
-                            throw (ParseException) jjte001;
-                        }
-                    }
-                }
-                {
-                    if (true) {
-                        throw (Error) jjte001;
-                    }
-                }
-            } finally {
-                if (jjtc001) {
-                    jjtree.closeNodeScope(jjtn001, 2);
-                }
-            }
-        }
-    }
-
-    /*
-     * Math For '+' '-', then Multiplication
-     */
-    final public void Math() throws ParseException {
-        Multiplication();
-        label_9: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case PLUS:
-            case MINUS:
-                ;
-                break;
-            default:
-                jj_la1[25] = jj_gen;
-                break label_9;
-            }
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case PLUS:
-                jj_consume_token(PLUS);
-                AstPlus jjtn001 = new AstPlus(JJTPLUS);
-                boolean jjtc001 = true;
-                jjtree.openNodeScope(jjtn001);
-                try {
-                    Multiplication();
-                } catch (Throwable jjte001) {
-                    if (jjtc001) {
-                        jjtree.clearNodeScope(jjtn001);
-                        jjtc001 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte001 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte001;
-                            }
-                        }
-                    }
-                    if (jjte001 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte001;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte001;
-                        }
-                    }
-                } finally {
-                    if (jjtc001) {
-                        jjtree.closeNodeScope(jjtn001, 2);
-                    }
-                }
-                break;
-            case MINUS:
-                jj_consume_token(MINUS);
-                AstMinus jjtn002 = new AstMinus(JJTMINUS);
-                boolean jjtc002 = true;
-                jjtree.openNodeScope(jjtn002);
-                try {
-                    Multiplication();
-                } catch (Throwable jjte002) {
-                    if (jjtc002) {
-                        jjtree.clearNodeScope(jjtn002);
-                        jjtc002 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte002 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte002;
-                            }
-                        }
-                    }
-                    if (jjte002 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte002;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte002;
-                        }
-                    }
-                } finally {
-                    if (jjtc002) {
-                        jjtree.closeNodeScope(jjtn002, 2);
-                    }
-                }
-                break;
-            default:
-                jj_la1[26] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-            }
-        }
-    }
-
-    /*
-     * Multiplication For a bunch of them, then Unary
-     */
-    final public void Multiplication() throws ParseException {
-        Unary();
-        label_10: while (true) {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case MULT:
-            case DIV0:
-            case DIV1:
-            case MOD0:
-            case MOD1:
-                ;
-                break;
-            default:
-                jj_la1[27] = jj_gen;
-                break label_10;
-            }
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case MULT:
-                jj_consume_token(MULT);
-                AstMult jjtn001 = new AstMult(JJTMULT);
-                boolean jjtc001 = true;
-                jjtree.openNodeScope(jjtn001);
-                try {
-                    Unary();
-                } catch (Throwable jjte001) {
-                    if (jjtc001) {
-                        jjtree.clearNodeScope(jjtn001);
-                        jjtc001 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte001 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte001;
-                            }
-                        }
-                    }
-                    if (jjte001 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte001;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte001;
-                        }
-                    }
-                } finally {
-                    if (jjtc001) {
-                        jjtree.closeNodeScope(jjtn001, 2);
-                    }
-                }
-                break;
-            case DIV0:
-            case DIV1:
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case DIV0:
-                    jj_consume_token(DIV0);
-                    break;
-                case DIV1:
-                    jj_consume_token(DIV1);
-                    break;
-                default:
-                    jj_la1[28] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-                AstDiv jjtn002 = new AstDiv(JJTDIV);
-                boolean jjtc002 = true;
-                jjtree.openNodeScope(jjtn002);
-                try {
-                    Unary();
-                } catch (Throwable jjte002) {
-                    if (jjtc002) {
-                        jjtree.clearNodeScope(jjtn002);
-                        jjtc002 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte002 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte002;
-                            }
-                        }
-                    }
-                    if (jjte002 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte002;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte002;
-                        }
-                    }
-                } finally {
-                    if (jjtc002) {
-                        jjtree.closeNodeScope(jjtn002, 2);
-                    }
-                }
-                break;
-            case MOD0:
-            case MOD1:
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case MOD0:
-                    jj_consume_token(MOD0);
-                    break;
-                case MOD1:
-                    jj_consume_token(MOD1);
-                    break;
-                default:
-                    jj_la1[29] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-                AstMod jjtn003 = new AstMod(JJTMOD);
-                boolean jjtc003 = true;
-                jjtree.openNodeScope(jjtn003);
-                try {
-                    Unary();
-                } catch (Throwable jjte003) {
-                    if (jjtc003) {
-                        jjtree.clearNodeScope(jjtn003);
-                        jjtc003 = false;
-                    } else {
-                        jjtree.popNode();
-                    }
-                    if (jjte003 instanceof RuntimeException) {
-                        {
-                            if (true) {
-                                throw (RuntimeException) jjte003;
-                            }
-                        }
-                    }
-                    if (jjte003 instanceof ParseException) {
-                        {
-                            if (true) {
-                                throw (ParseException) jjte003;
-                            }
-                        }
-                    }
-                    {
-                        if (true) {
-                            throw (Error) jjte003;
-                        }
-                    }
-                } finally {
-                    if (jjtc003) {
-                        jjtree.closeNodeScope(jjtn003, 2);
-                    }
-                }
-                break;
-            default:
-                jj_la1[30] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-            }
-        }
-    }
-
-    /*
-     * Unary For '-' '!' 'not' 'empty', then Value
-     */
-    final public void Unary() throws ParseException {
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case MINUS:
-            jj_consume_token(MINUS);
-            AstNegative jjtn001 = new AstNegative(JJTNEGATIVE);
-            boolean jjtc001 = true;
-            jjtree.openNodeScope(jjtn001);
-            try {
-                Unary();
-            } catch (Throwable jjte001) {
-                if (jjtc001) {
-                    jjtree.clearNodeScope(jjtn001);
-                    jjtc001 = false;
-                } else {
-                    jjtree.popNode();
-                }
-                if (jjte001 instanceof RuntimeException) {
-                    {
-                        if (true) {
-                            throw (RuntimeException) jjte001;
-                        }
-                    }
-                }
-                if (jjte001 instanceof ParseException) {
-                    {
-                        if (true) {
-                            throw (ParseException) jjte001;
-                        }
-                    }
-                }
-                {
-                    if (true) {
-                        throw (Error) jjte001;
-                    }
-                }
-            } finally {
-                if (jjtc001) {
-                    jjtree.closeNodeScope(jjtn001, true);
-                }
-            }
-            break;
+/*
+ * LambdaExpression
+ */
+  final public void LambdaExpression() throws ParseException {
+                                             /*@bgen(jjtree) LambdaExpression */
+  AstLambdaExpression jjtn000 = new AstLambdaExpression(JJTLAMBDAEXPRESSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      LambdaParameters();
+      jj_consume_token(ARROW);
+      if (jj_2_3(3)) {
+        LambdaExpression();
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case START_MAP:
+        case INTEGER_LITERAL:
+        case FLOATING_POINT_LITERAL:
+        case STRING_LITERAL:
+        case TRUE:
+        case FALSE:
+        case NULL:
+        case LPAREN:
+        case LBRACK:
         case NOT0:
         case NOT1:
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case NOT0:
-                jj_consume_token(NOT0);
-                break;
-            case NOT1:
-                jj_consume_token(NOT1);
-                break;
-            default:
-                jj_la1[31] = jj_gen;
-                jj_consume_token(-1);
-                throw new ParseException();
-            }
-            AstNot jjtn002 = new AstNot(JJTNOT);
-            boolean jjtc002 = true;
-            jjtree.openNodeScope(jjtn002);
-            try {
-                Unary();
-            } catch (Throwable jjte002) {
-                if (jjtc002) {
-                    jjtree.clearNodeScope(jjtn002);
-                    jjtc002 = false;
-                } else {
-                    jjtree.popNode();
-                }
-                if (jjte002 instanceof RuntimeException) {
-                    {
-                        if (true) {
-                            throw (RuntimeException) jjte002;
-                        }
-                    }
-                }
-                if (jjte002 instanceof ParseException) {
-                    {
-                        if (true) {
-                            throw (ParseException) jjte002;
-                        }
-                    }
-                }
-                {
-                    if (true) {
-                        throw (Error) jjte002;
-                    }
-                }
-            } finally {
-                if (jjtc002) {
-                    jjtree.closeNodeScope(jjtn002, true);
-                }
-            }
-            break;
         case EMPTY:
-            jj_consume_token(EMPTY);
-            AstEmpty jjtn003 = new AstEmpty(JJTEMPTY);
-            boolean jjtc003 = true;
-            jjtree.openNodeScope(jjtn003);
-            try {
-                Unary();
-            } catch (Throwable jjte003) {
-                if (jjtc003) {
-                    jjtree.clearNodeScope(jjtn003);
-                    jjtc003 = false;
-                } else {
-                    jjtree.popNode();
-                }
-                if (jjte003 instanceof RuntimeException) {
-                    {
-                        if (true) {
-                            throw (RuntimeException) jjte003;
-                        }
-                    }
-                }
-                if (jjte003 instanceof ParseException) {
-                    {
-                        if (true) {
-                            throw (ParseException) jjte003;
-                        }
-                    }
-                }
-                {
-                    if (true) {
-                        throw (Error) jjte003;
-                    }
-                }
-            } finally {
-                if (jjtc003) {
-                    jjtree.closeNodeScope(jjtn003, true);
-                }
-            }
-            break;
-        case START_MAP:
-        case INTEGER_LITERAL:
-        case FLOATING_POINT_LITERAL:
-        case STRING_LITERAL:
-        case TRUE:
-        case FALSE:
-        case NULL:
-        case LPAREN:
-        case LBRACK:
+        case MINUS:
         case IDENTIFIER:
-            Value();
-            break;
+          Choice();
+          break;
         default:
-            jj_la1[32] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
+          jj_la1[4] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
         }
+      }
+    } catch (Throwable jjte000) {
+         if (jjtc000) {
+           jjtree.clearNodeScope(jjtn000);
+           jjtc000 = false;
+         } else {
+           jjtree.popNode();
+         }
+         if (jjte000 instanceof RuntimeException) {
+           {if (true) throw (RuntimeException)jjte000;}
+         }
+         if (jjte000 instanceof ParseException) {
+           {if (true) throw (ParseException)jjte000;}
+         }
+         {if (true) throw (Error)jjte000;}
+    } finally {
+         if (jjtc000) {
+           jjtree.closeNodeScope(jjtn000, true);
+         }
     }
+  }
 
-    /*
-     * Value Defines Prefix plus zero or more Suffixes
-     */
-    final public void Value() throws ParseException {
-        AstValue jjtn001 = new AstValue(JJTVALUE);
-        boolean jjtc001 = true;
-        jjtree.openNodeScope(jjtn001);
-        try {
-            ValuePrefix();
-            label_11: while (true) {
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case DOT:
-                case LBRACK:
-                    ;
-                    break;
-                default:
-                    jj_la1[33] = jj_gen;
-                    break label_11;
-                }
-                ValueSuffix();
+  final public void LambdaParameters() throws ParseException {
+                                            /*@bgen(jjtree) LambdaParameters */
+  AstLambdaParameters jjtn000 = new AstLambdaParameters(JJTLAMBDAPARAMETERS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case IDENTIFIER:
+        Identifier();
+        break;
+      case LPAREN:
+        jj_consume_token(LPAREN);
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case IDENTIFIER:
+          Identifier();
+          label_4:
+          while (true) {
+            switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+            case COMMA:
+              ;
+              break;
+            default:
+              jj_la1[5] = jj_gen;
+              break label_4;
             }
+            jj_consume_token(COMMA);
+            Identifier();
+          }
+          break;
+        default:
+          jj_la1[6] = jj_gen;
+          ;
+        }
+        jj_consume_token(RPAREN);
+        break;
+      default:
+        jj_la1[7] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    } catch (Throwable jjte000) {
+         if (jjtc000) {
+           jjtree.clearNodeScope(jjtn000);
+           jjtc000 = false;
+         } else {
+           jjtree.popNode();
+         }
+         if (jjte000 instanceof RuntimeException) {
+           {if (true) throw (RuntimeException)jjte000;}
+         }
+         if (jjte000 instanceof ParseException) {
+           {if (true) throw (ParseException)jjte000;}
+         }
+         {if (true) throw (Error)jjte000;}
+    } finally {
+         if (jjtc000) {
+           jjtree.closeNodeScope(jjtn000, true);
+         }
+    }
+  }
+
+/*
+ * Choice
+ * For Choice markup a ? b : c, right associative
+ */
+  final public void Choice() throws ParseException {
+    Or();
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case QUESTIONMARK:
+      jj_consume_token(QUESTIONMARK);
+      Choice();
+      jj_consume_token(COLON);
+                                                AstChoice jjtn001 = new AstChoice(JJTCHOICE);
+                                                boolean jjtc001 = true;
+                                                jjtree.openNodeScope(jjtn001);
+      try {
+        Choice();
+      } catch (Throwable jjte001) {
+                                                if (jjtc001) {
+                                                  jjtree.clearNodeScope(jjtn001);
+                                                  jjtc001 = false;
+                                                } else {
+                                                  jjtree.popNode();
+                                                }
+                                                if (jjte001 instanceof RuntimeException) {
+                                                  {if (true) throw (RuntimeException)jjte001;}
+                                                }
+                                                if (jjte001 instanceof ParseException) {
+                                                  {if (true) throw (ParseException)jjte001;}
+                                                }
+                                                {if (true) throw (Error)jjte001;}
+      } finally {
+                                                if (jjtc001) {
+                                                  jjtree.closeNodeScope(jjtn001,  3);
+                                                }
+      }
+      break;
+    default:
+      jj_la1[8] = jj_gen;
+      ;
+    }
+  }
+
+/*
+ * Or
+ * For 'or' '||', then And
+ */
+  final public void Or() throws ParseException {
+    And();
+    label_5:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case OR0:
+      case OR1:
+        ;
+        break;
+      default:
+        jj_la1[9] = jj_gen;
+        break label_5;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case OR0:
+        jj_consume_token(OR0);
+        break;
+      case OR1:
+        jj_consume_token(OR1);
+        break;
+      default:
+        jj_la1[10] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+                               AstOr jjtn001 = new AstOr(JJTOR);
+                               boolean jjtc001 = true;
+                               jjtree.openNodeScope(jjtn001);
+      try {
+        And();
+      } catch (Throwable jjte001) {
+                               if (jjtc001) {
+                                 jjtree.clearNodeScope(jjtn001);
+                                 jjtc001 = false;
+                               } else {
+                                 jjtree.popNode();
+                               }
+                               if (jjte001 instanceof RuntimeException) {
+                                 {if (true) throw (RuntimeException)jjte001;}
+                               }
+                               if (jjte001 instanceof ParseException) {
+                                 {if (true) throw (ParseException)jjte001;}
+                               }
+                               {if (true) throw (Error)jjte001;}
+      } finally {
+                               if (jjtc001) {
+                                 jjtree.closeNodeScope(jjtn001,  2);
+                               }
+      }
+    }
+  }
+
+/*
+ * And
+ * For 'and' '&&', then Equality
+ */
+  final public void And() throws ParseException {
+    Equality();
+    label_6:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case AND0:
+      case AND1:
+        ;
+        break;
+      default:
+        jj_la1[11] = jj_gen;
+        break label_6;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case AND0:
+        jj_consume_token(AND0);
+        break;
+      case AND1:
+        jj_consume_token(AND1);
+        break;
+      default:
+        jj_la1[12] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+                                      AstAnd jjtn001 = new AstAnd(JJTAND);
+                                      boolean jjtc001 = true;
+                                      jjtree.openNodeScope(jjtn001);
+      try {
+        Equality();
+      } catch (Throwable jjte001) {
+                                      if (jjtc001) {
+                                        jjtree.clearNodeScope(jjtn001);
+                                        jjtc001 = false;
+                                      } else {
+                                        jjtree.popNode();
+                                      }
+                                      if (jjte001 instanceof RuntimeException) {
+                                        {if (true) throw (RuntimeException)jjte001;}
+                                      }
+                                      if (jjte001 instanceof ParseException) {
+                                        {if (true) throw (ParseException)jjte001;}
+                                      }
+                                      {if (true) throw (Error)jjte001;}
+      } finally {
+                                      if (jjtc001) {
+                                        jjtree.closeNodeScope(jjtn001,  2);
+                                      }
+      }
+    }
+  }
+
+/*
+ * Equality
+ * For '==' 'eq' '!=' 'ne', then Compare
+ */
+  final public void Equality() throws ParseException {
+    Compare();
+    label_7:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case EQ0:
+      case EQ1:
+      case NE0:
+      case NE1:
+        ;
+        break;
+      default:
+        jj_la1[13] = jj_gen;
+        break label_7;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case EQ0:
+      case EQ1:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case EQ0:
+          jj_consume_token(EQ0);
+          break;
+        case EQ1:
+          jj_consume_token(EQ1);
+          break;
+        default:
+          jj_la1[14] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+                                 AstEqual jjtn001 = new AstEqual(JJTEQUAL);
+                                 boolean jjtc001 = true;
+                                 jjtree.openNodeScope(jjtn001);
+        try {
+          Compare();
         } catch (Throwable jjte001) {
-            if (jjtc001) {
-                jjtree.clearNodeScope(jjtn001);
-                jjtc001 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte001 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte001;
-                    }
-                }
-            }
-            if (jjte001 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte001;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte001;
-                }
-            }
+                                 if (jjtc001) {
+                                   jjtree.clearNodeScope(jjtn001);
+                                   jjtc001 = false;
+                                 } else {
+                                   jjtree.popNode();
+                                 }
+                                 if (jjte001 instanceof RuntimeException) {
+                                   {if (true) throw (RuntimeException)jjte001;}
+                                 }
+                                 if (jjte001 instanceof ParseException) {
+                                   {if (true) throw (ParseException)jjte001;}
+                                 }
+                                 {if (true) throw (Error)jjte001;}
         } finally {
-            if (jjtc001) {
-                jjtree.closeNodeScope(jjtn001, jjtree.nodeArity() > 1);
-            }
+                                 if (jjtc001) {
+                                   jjtree.closeNodeScope(jjtn001,  2);
+                                 }
         }
+        break;
+      case NE0:
+      case NE1:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case NE0:
+          jj_consume_token(NE0);
+          break;
+        case NE1:
+          jj_consume_token(NE1);
+          break;
+        default:
+          jj_la1[15] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+                                 AstNotEqual jjtn002 = new AstNotEqual(JJTNOTEQUAL);
+                                 boolean jjtc002 = true;
+                                 jjtree.openNodeScope(jjtn002);
+        try {
+          Compare();
+        } catch (Throwable jjte002) {
+                                 if (jjtc002) {
+                                   jjtree.clearNodeScope(jjtn002);
+                                   jjtc002 = false;
+                                 } else {
+                                   jjtree.popNode();
+                                 }
+                                 if (jjte002 instanceof RuntimeException) {
+                                   {if (true) throw (RuntimeException)jjte002;}
+                                 }
+                                 if (jjte002 instanceof ParseException) {
+                                   {if (true) throw (ParseException)jjte002;}
+                                 }
+                                 {if (true) throw (Error)jjte002;}
+        } finally {
+                                 if (jjtc002) {
+                                   jjtree.closeNodeScope(jjtn002,  2);
+                                 }
+        }
+        break;
+      default:
+        jj_la1[16] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
     }
+  }
 
-    /*
-     * ValuePrefix For Literals, Variables, and Functions
-     */
-    final public void ValuePrefix() throws ParseException {
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
+/*
+ * Compare
+ * For a bunch of them, then Math
+ */
+  final public void Compare() throws ParseException {
+    Concatenation();
+    label_8:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case GT0:
+      case GT1:
+      case LT0:
+      case LT1:
+      case GE0:
+      case GE1:
+      case LE0:
+      case LE1:
+        ;
+        break;
+      default:
+        jj_la1[17] = jj_gen;
+        break label_8;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case LT0:
+      case LT1:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case LT0:
+          jj_consume_token(LT0);
+          break;
+        case LT1:
+          jj_consume_token(LT1);
+          break;
+        default:
+          jj_la1[18] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+                                 AstLessThan jjtn001 = new AstLessThan(JJTLESSTHAN);
+                                 boolean jjtc001 = true;
+                                 jjtree.openNodeScope(jjtn001);
+        try {
+          Concatenation();
+        } catch (Throwable jjte001) {
+                                 if (jjtc001) {
+                                   jjtree.clearNodeScope(jjtn001);
+                                   jjtc001 = false;
+                                 } else {
+                                   jjtree.popNode();
+                                 }
+                                 if (jjte001 instanceof RuntimeException) {
+                                   {if (true) throw (RuntimeException)jjte001;}
+                                 }
+                                 if (jjte001 instanceof ParseException) {
+                                   {if (true) throw (ParseException)jjte001;}
+                                 }
+                                 {if (true) throw (Error)jjte001;}
+        } finally {
+                                 if (jjtc001) {
+                                   jjtree.closeNodeScope(jjtn001,  2);
+                                 }
+        }
+        break;
+      case GT0:
+      case GT1:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case GT0:
+          jj_consume_token(GT0);
+          break;
+        case GT1:
+          jj_consume_token(GT1);
+          break;
+        default:
+          jj_la1[19] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+                                 AstGreaterThan jjtn002 = new AstGreaterThan(JJTGREATERTHAN);
+                                 boolean jjtc002 = true;
+                                 jjtree.openNodeScope(jjtn002);
+        try {
+          Concatenation();
+        } catch (Throwable jjte002) {
+                                 if (jjtc002) {
+                                   jjtree.clearNodeScope(jjtn002);
+                                   jjtc002 = false;
+                                 } else {
+                                   jjtree.popNode();
+                                 }
+                                 if (jjte002 instanceof RuntimeException) {
+                                   {if (true) throw (RuntimeException)jjte002;}
+                                 }
+                                 if (jjte002 instanceof ParseException) {
+                                   {if (true) throw (ParseException)jjte002;}
+                                 }
+                                 {if (true) throw (Error)jjte002;}
+        } finally {
+                                 if (jjtc002) {
+                                   jjtree.closeNodeScope(jjtn002,  2);
+                                 }
+        }
+        break;
+      case LE0:
+      case LE1:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case LE0:
+          jj_consume_token(LE0);
+          break;
+        case LE1:
+          jj_consume_token(LE1);
+          break;
+        default:
+          jj_la1[20] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+                                 AstLessThanEqual jjtn003 = new AstLessThanEqual(JJTLESSTHANEQUAL);
+                                 boolean jjtc003 = true;
+                                 jjtree.openNodeScope(jjtn003);
+        try {
+          Concatenation();
+        } catch (Throwable jjte003) {
+                                 if (jjtc003) {
+                                   jjtree.clearNodeScope(jjtn003);
+                                   jjtc003 = false;
+                                 } else {
+                                   jjtree.popNode();
+                                 }
+                                 if (jjte003 instanceof RuntimeException) {
+                                   {if (true) throw (RuntimeException)jjte003;}
+                                 }
+                                 if (jjte003 instanceof ParseException) {
+                                   {if (true) throw (ParseException)jjte003;}
+                                 }
+                                 {if (true) throw (Error)jjte003;}
+        } finally {
+                                 if (jjtc003) {
+                                   jjtree.closeNodeScope(jjtn003,  2);
+                                 }
+        }
+        break;
+      case GE0:
+      case GE1:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case GE0:
+          jj_consume_token(GE0);
+          break;
+        case GE1:
+          jj_consume_token(GE1);
+          break;
+        default:
+          jj_la1[21] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+                                 AstGreaterThanEqual jjtn004 = new AstGreaterThanEqual(JJTGREATERTHANEQUAL);
+                                 boolean jjtc004 = true;
+                                 jjtree.openNodeScope(jjtn004);
+        try {
+          Concatenation();
+        } catch (Throwable jjte004) {
+                                 if (jjtc004) {
+                                   jjtree.clearNodeScope(jjtn004);
+                                   jjtc004 = false;
+                                 } else {
+                                   jjtree.popNode();
+                                 }
+                                 if (jjte004 instanceof RuntimeException) {
+                                   {if (true) throw (RuntimeException)jjte004;}
+                                 }
+                                 if (jjte004 instanceof ParseException) {
+                                   {if (true) throw (ParseException)jjte004;}
+                                 }
+                                 {if (true) throw (Error)jjte004;}
+        } finally {
+                                 if (jjtc004) {
+                                   jjtree.closeNodeScope(jjtn004,  2);
+                                 }
+        }
+        break;
+      default:
+        jj_la1[22] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+/*
+ * Concatenation
+ * For '&', then Math()
+ */
+  final public void Concatenation() throws ParseException {
+    Math();
+    label_9:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case CONCAT:
+        ;
+        break;
+      default:
+        jj_la1[23] = jj_gen;
+        break label_9;
+      }
+      jj_consume_token(CONCAT);
+                            AstConcat jjtn001 = new AstConcat(JJTCONCAT);
+                            boolean jjtc001 = true;
+                            jjtree.openNodeScope(jjtn001);
+      try {
+        Math();
+      } catch (Throwable jjte001) {
+                            if (jjtc001) {
+                              jjtree.clearNodeScope(jjtn001);
+                              jjtc001 = false;
+                            } else {
+                              jjtree.popNode();
+                            }
+                            if (jjte001 instanceof RuntimeException) {
+                              {if (true) throw (RuntimeException)jjte001;}
+                            }
+                            if (jjte001 instanceof ParseException) {
+                              {if (true) throw (ParseException)jjte001;}
+                            }
+                            {if (true) throw (Error)jjte001;}
+      } finally {
+                            if (jjtc001) {
+                              jjtree.closeNodeScope(jjtn001,  2);
+                            }
+      }
+    }
+  }
+
+/*
+ * Math
+ * For '+' '-', then Multiplication
+ */
+  final public void Math() throws ParseException {
+    Multiplication();
+    label_10:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case PLUS:
+      case MINUS:
+        ;
+        break;
+      default:
+        jj_la1[24] = jj_gen;
+        break label_10;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case PLUS:
+        jj_consume_token(PLUS);
+                          AstPlus jjtn001 = new AstPlus(JJTPLUS);
+                          boolean jjtc001 = true;
+                          jjtree.openNodeScope(jjtn001);
+        try {
+          Multiplication();
+        } catch (Throwable jjte001) {
+                          if (jjtc001) {
+                            jjtree.clearNodeScope(jjtn001);
+                            jjtc001 = false;
+                          } else {
+                            jjtree.popNode();
+                          }
+                          if (jjte001 instanceof RuntimeException) {
+                            {if (true) throw (RuntimeException)jjte001;}
+                          }
+                          if (jjte001 instanceof ParseException) {
+                            {if (true) throw (ParseException)jjte001;}
+                          }
+                          {if (true) throw (Error)jjte001;}
+        } finally {
+                          if (jjtc001) {
+                            jjtree.closeNodeScope(jjtn001,  2);
+                          }
+        }
+        break;
+      case MINUS:
+        jj_consume_token(MINUS);
+                           AstMinus jjtn002 = new AstMinus(JJTMINUS);
+                           boolean jjtc002 = true;
+                           jjtree.openNodeScope(jjtn002);
+        try {
+          Multiplication();
+        } catch (Throwable jjte002) {
+                           if (jjtc002) {
+                             jjtree.clearNodeScope(jjtn002);
+                             jjtc002 = false;
+                           } else {
+                             jjtree.popNode();
+                           }
+                           if (jjte002 instanceof RuntimeException) {
+                             {if (true) throw (RuntimeException)jjte002;}
+                           }
+                           if (jjte002 instanceof ParseException) {
+                             {if (true) throw (ParseException)jjte002;}
+                           }
+                           {if (true) throw (Error)jjte002;}
+        } finally {
+                           if (jjtc002) {
+                             jjtree.closeNodeScope(jjtn002,  2);
+                           }
+        }
+        break;
+      default:
+        jj_la1[25] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+/*
+ * Multiplication
+ * For a bunch of them, then Unary
+ */
+  final public void Multiplication() throws ParseException {
+    Unary();
+    label_11:
+    while (true) {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case MULT:
+      case DIV0:
+      case DIV1:
+      case MOD0:
+      case MOD1:
+        ;
+        break;
+      default:
+        jj_la1[26] = jj_gen;
+        break label_11;
+      }
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case MULT:
+        jj_consume_token(MULT);
+                          AstMult jjtn001 = new AstMult(JJTMULT);
+                          boolean jjtc001 = true;
+                          jjtree.openNodeScope(jjtn001);
+        try {
+          Unary();
+        } catch (Throwable jjte001) {
+                          if (jjtc001) {
+                            jjtree.clearNodeScope(jjtn001);
+                            jjtc001 = false;
+                          } else {
+                            jjtree.popNode();
+                          }
+                          if (jjte001 instanceof RuntimeException) {
+                            {if (true) throw (RuntimeException)jjte001;}
+                          }
+                          if (jjte001 instanceof ParseException) {
+                            {if (true) throw (ParseException)jjte001;}
+                          }
+                          {if (true) throw (Error)jjte001;}
+        } finally {
+                          if (jjtc001) {
+                            jjtree.closeNodeScope(jjtn001,  2);
+                          }
+        }
+        break;
+      case DIV0:
+      case DIV1:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case DIV0:
+          jj_consume_token(DIV0);
+          break;
+        case DIV1:
+          jj_consume_token(DIV1);
+          break;
+        default:
+          jj_la1[27] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+                                   AstDiv jjtn002 = new AstDiv(JJTDIV);
+                                   boolean jjtc002 = true;
+                                   jjtree.openNodeScope(jjtn002);
+        try {
+          Unary();
+        } catch (Throwable jjte002) {
+                                   if (jjtc002) {
+                                     jjtree.clearNodeScope(jjtn002);
+                                     jjtc002 = false;
+                                   } else {
+                                     jjtree.popNode();
+                                   }
+                                   if (jjte002 instanceof RuntimeException) {
+                                     {if (true) throw (RuntimeException)jjte002;}
+                                   }
+                                   if (jjte002 instanceof ParseException) {
+                                     {if (true) throw (ParseException)jjte002;}
+                                   }
+                                   {if (true) throw (Error)jjte002;}
+        } finally {
+                                   if (jjtc002) {
+                                     jjtree.closeNodeScope(jjtn002,  2);
+                                   }
+        }
+        break;
+      case MOD0:
+      case MOD1:
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case MOD0:
+          jj_consume_token(MOD0);
+          break;
+        case MOD1:
+          jj_consume_token(MOD1);
+          break;
+        default:
+          jj_la1[28] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
+        }
+                                   AstMod jjtn003 = new AstMod(JJTMOD);
+                                   boolean jjtc003 = true;
+                                   jjtree.openNodeScope(jjtn003);
+        try {
+          Unary();
+        } catch (Throwable jjte003) {
+                                   if (jjtc003) {
+                                     jjtree.clearNodeScope(jjtn003);
+                                     jjtc003 = false;
+                                   } else {
+                                     jjtree.popNode();
+                                   }
+                                   if (jjte003 instanceof RuntimeException) {
+                                     {if (true) throw (RuntimeException)jjte003;}
+                                   }
+                                   if (jjte003 instanceof ParseException) {
+                                     {if (true) throw (ParseException)jjte003;}
+                                   }
+                                   {if (true) throw (Error)jjte003;}
+        } finally {
+                                   if (jjtc003) {
+                                     jjtree.closeNodeScope(jjtn003,  2);
+                                   }
+        }
+        break;
+      default:
+        jj_la1[29] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+    }
+  }
+
+/*
+ * Unary
+ * For '-' '!' 'not' 'empty', then Value
+ */
+  final public void Unary() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case MINUS:
+      jj_consume_token(MINUS);
+                          AstNegative jjtn001 = new AstNegative(JJTNEGATIVE);
+                          boolean jjtc001 = true;
+                          jjtree.openNodeScope(jjtn001);
+      try {
+        Unary();
+      } catch (Throwable jjte001) {
+                          if (jjtc001) {
+                            jjtree.clearNodeScope(jjtn001);
+                            jjtc001 = false;
+                          } else {
+                            jjtree.popNode();
+                          }
+                          if (jjte001 instanceof RuntimeException) {
+                            {if (true) throw (RuntimeException)jjte001;}
+                          }
+                          if (jjte001 instanceof ParseException) {
+                            {if (true) throw (ParseException)jjte001;}
+                          }
+                          {if (true) throw (Error)jjte001;}
+      } finally {
+                          if (jjtc001) {
+                            jjtree.closeNodeScope(jjtn001, true);
+                          }
+      }
+      break;
+    case NOT0:
+    case NOT1:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case NOT0:
+        jj_consume_token(NOT0);
+        break;
+      case NOT1:
+        jj_consume_token(NOT1);
+        break;
+      default:
+        jj_la1[30] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+                                  AstNot jjtn002 = new AstNot(JJTNOT);
+                                  boolean jjtc002 = true;
+                                  jjtree.openNodeScope(jjtn002);
+      try {
+        Unary();
+      } catch (Throwable jjte002) {
+                                  if (jjtc002) {
+                                    jjtree.clearNodeScope(jjtn002);
+                                    jjtc002 = false;
+                                  } else {
+                                    jjtree.popNode();
+                                  }
+                                  if (jjte002 instanceof RuntimeException) {
+                                    {if (true) throw (RuntimeException)jjte002;}
+                                  }
+                                  if (jjte002 instanceof ParseException) {
+                                    {if (true) throw (ParseException)jjte002;}
+                                  }
+                                  {if (true) throw (Error)jjte002;}
+      } finally {
+                                  if (jjtc002) {
+                                    jjtree.closeNodeScope(jjtn002, true);
+                                  }
+      }
+      break;
+    case EMPTY:
+      jj_consume_token(EMPTY);
+                          AstEmpty jjtn003 = new AstEmpty(JJTEMPTY);
+                          boolean jjtc003 = true;
+                          jjtree.openNodeScope(jjtn003);
+      try {
+        Unary();
+      } catch (Throwable jjte003) {
+                          if (jjtc003) {
+                            jjtree.clearNodeScope(jjtn003);
+                            jjtc003 = false;
+                          } else {
+                            jjtree.popNode();
+                          }
+                          if (jjte003 instanceof RuntimeException) {
+                            {if (true) throw (RuntimeException)jjte003;}
+                          }
+                          if (jjte003 instanceof ParseException) {
+                            {if (true) throw (ParseException)jjte003;}
+                          }
+                          {if (true) throw (Error)jjte003;}
+      } finally {
+                          if (jjtc003) {
+                            jjtree.closeNodeScope(jjtn003, true);
+                          }
+      }
+      break;
+    case START_MAP:
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case STRING_LITERAL:
+    case TRUE:
+    case FALSE:
+    case NULL:
+    case LPAREN:
+    case LBRACK:
+    case IDENTIFIER:
+      Value();
+      break;
+    default:
+      jj_la1[31] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+/*
+ * Value
+ * Defines Prefix plus zero or more Suffixes
+ */
+  final public void Value() throws ParseException {
+          AstValue jjtn001 = new AstValue(JJTVALUE);
+          boolean jjtc001 = true;
+          jjtree.openNodeScope(jjtn001);
+    try {
+      ValuePrefix();
+      label_12:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case DOT:
+        case LBRACK:
+          ;
+          break;
+        default:
+          jj_la1[32] = jj_gen;
+          break label_12;
+        }
+        ValueSuffix();
+      }
+    } catch (Throwable jjte001) {
+          if (jjtc001) {
+            jjtree.clearNodeScope(jjtn001);
+            jjtc001 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte001 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte001;}
+          }
+          if (jjte001 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte001;}
+          }
+          {if (true) throw (Error)jjte001;}
+    } finally {
+          if (jjtc001) {
+            jjtree.closeNodeScope(jjtn001, jjtree.nodeArity() > 1);
+          }
+    }
+  }
+
+/*
+ * ValuePrefix
+ * For Literals, Variables, and Functions
+ */
+  final public void ValuePrefix() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case INTEGER_LITERAL:
+    case FLOATING_POINT_LITERAL:
+    case STRING_LITERAL:
+    case TRUE:
+    case FALSE:
+    case NULL:
+      Literal();
+      break;
+    case START_MAP:
+    case LPAREN:
+    case LBRACK:
+    case IDENTIFIER:
+      NonLiteral();
+      break;
+    default:
+      jj_la1[33] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+/*
+ * ValueSuffix
+ * Either dot or bracket notation
+ */
+  final public void ValueSuffix() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case DOT:
+      DotSuffix();
+      break;
+    case LBRACK:
+      BracketSuffix();
+      break;
+    default:
+      jj_la1[34] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+/*
+ * DotSuffix
+ * Dot Property and Dot Method
+ */
+  final public void DotSuffix() throws ParseException {
+                               /*@bgen(jjtree) DotSuffix */
+                                 AstDotSuffix jjtn000 = new AstDotSuffix(JJTDOTSUFFIX);
+                                 boolean jjtc000 = true;
+                                 jjtree.openNodeScope(jjtn000);Token t = null;
+    try {
+      jj_consume_token(DOT);
+      t = jj_consume_token(IDENTIFIER);
+                               jjtn000.setImage(t.image);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case LPAREN:
+        MethodArguments();
+        break;
+      default:
+        jj_la1[35] = jj_gen;
+        ;
+      }
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
+            jjtc000 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
+    }
+  }
+
+/*
+ * BracketSuffix
+ * Sub Expression Suffix
+ */
+  final public void BracketSuffix() throws ParseException {
+                                       /*@bgen(jjtree) BracketSuffix */
+  AstBracketSuffix jjtn000 = new AstBracketSuffix(JJTBRACKETSUFFIX);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(LBRACK);
+      Expression();
+      jj_consume_token(RBRACK);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case LPAREN:
+        MethodArguments();
+        break;
+      default:
+        jj_la1[36] = jj_gen;
+        ;
+      }
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
+            jjtc000 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
+    }
+  }
+
+/*
+ * MethodArguments
+ */
+  final public void MethodArguments() throws ParseException {
+                                           /*@bgen(jjtree) MethodArguments */
+  AstMethodArguments jjtn000 = new AstMethodArguments(JJTMETHODARGUMENTS);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(LPAREN);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case START_MAP:
+      case INTEGER_LITERAL:
+      case FLOATING_POINT_LITERAL:
+      case STRING_LITERAL:
+      case TRUE:
+      case FALSE:
+      case NULL:
+      case LPAREN:
+      case LBRACK:
+      case NOT0:
+      case NOT1:
+      case EMPTY:
+      case MINUS:
+      case IDENTIFIER:
+        Expression();
+        label_13:
+        while (true) {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case COMMA:
+            ;
+            break;
+          default:
+            jj_la1[37] = jj_gen;
+            break label_13;
+          }
+          jj_consume_token(COMMA);
+          Expression();
+        }
+        break;
+      default:
+        jj_la1[38] = jj_gen;
+        ;
+      }
+      jj_consume_token(RPAREN);
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
+            jjtc000 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
+    }
+  }
+
+/*
+ * Parenthesized Lambda Expression, with optional invokation
+ */
+  final public void LambdaExpressionOrCall() throws ParseException {
+                                                   /*@bgen(jjtree) LambdaExpression */
+  AstLambdaExpression jjtn000 = new AstLambdaExpression(JJTLAMBDAEXPRESSION);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(LPAREN);
+      LambdaParameters();
+      jj_consume_token(ARROW);
+      if (jj_2_4(3)) {
+        LambdaExpression();
+      } else {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case START_MAP:
         case INTEGER_LITERAL:
         case FLOATING_POINT_LITERAL:
         case STRING_LITERAL:
         case TRUE:
         case FALSE:
         case NULL:
-            Literal();
-            break;
-        case START_MAP:
         case LPAREN:
         case LBRACK:
+        case NOT0:
+        case NOT1:
+        case EMPTY:
+        case MINUS:
         case IDENTIFIER:
-            NonLiteral();
-            break;
+          Choice();
+          break;
         default:
-            jj_la1[34] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
+          jj_la1[39] = jj_gen;
+          jj_consume_token(-1);
+          throw new ParseException();
         }
-    }
-
-    /*
-     * ValueSuffix Either dot or bracket notation
-     */
-    final public void ValueSuffix() throws ParseException {
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case DOT:
-            DotSuffix();
-            break;
-        case LBRACK:
-            BracketSuffix();
-            break;
+      }
+      jj_consume_token(RPAREN);
+      label_14:
+      while (true) {
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case LPAREN:
+          ;
+          break;
         default:
-            jj_la1[35] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
+          jj_la1[40] = jj_gen;
+          break label_14;
         }
+        MethodArguments();
+      }
+    } catch (Throwable jjte000) {
+      if (jjtc000) {
+        jjtree.clearNodeScope(jjtn000);
+        jjtc000 = false;
+      } else {
+        jjtree.popNode();
+      }
+      if (jjte000 instanceof RuntimeException) {
+        {if (true) throw (RuntimeException)jjte000;}
+      }
+      if (jjte000 instanceof ParseException) {
+        {if (true) throw (ParseException)jjte000;}
+      }
+      {if (true) throw (Error)jjte000;}
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
     }
+  }
 
-    /*
-     * DotSuffix Dot Property and Dot Method
-     */
-    final public void DotSuffix() throws ParseException {
-        /* @bgen(jjtree) DotSuffix */
-        AstDotSuffix jjtn000 = new AstDotSuffix(JJTDOTSUFFIX);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        Token t = null;
-        try {
-            jj_consume_token(DOT);
-            t = jj_consume_token(IDENTIFIER);
-            jjtn000.setImage(t.image);
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case LPAREN:
-                MethodArguments();
-                break;
-            default:
-                jj_la1[36] = jj_gen;
-                ;
-            }
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-    }
-
-    /*
-     * BracketSuffix Sub Expression Suffix
-     */
-    final public void BracketSuffix() throws ParseException {
-        /* @bgen(jjtree) BracketSuffix */
-        AstBracketSuffix jjtn000 = new AstBracketSuffix(JJTBRACKETSUFFIX);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            jj_consume_token(LBRACK);
-            Expression();
-            jj_consume_token(RBRACK);
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case LPAREN:
-                MethodArguments();
-                break;
-            default:
-                jj_la1[37] = jj_gen;
-                ;
-            }
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-    }
-
-    /*
-     * MethodArguments
-     */
-    final public void MethodArguments() throws ParseException {
-        /* @bgen(jjtree) MethodArguments */
-        AstMethodArguments jjtn000 = new AstMethodArguments(JJTMETHODARGUMENTS);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            jj_consume_token(LPAREN);
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case START_MAP:
-            case INTEGER_LITERAL:
-            case FLOATING_POINT_LITERAL:
-            case STRING_LITERAL:
-            case TRUE:
-            case FALSE:
-            case NULL:
-            case LPAREN:
-            case LBRACK:
-            case NOT0:
-            case NOT1:
-            case EMPTY:
-            case MINUS:
-            case IDENTIFIER:
-                Expression();
-                label_12: while (true) {
-                    switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                    case COMMA:
-                        ;
-                        break;
-                    default:
-                        jj_la1[38] = jj_gen;
-                        break label_12;
-                    }
-                    jj_consume_token(COMMA);
-                    Expression();
-                }
-                break;
-            default:
-                jj_la1[39] = jj_gen;
-                ;
-            }
-            jj_consume_token(RPAREN);
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-    }
-
-    /*
-     * Parenthesized Lambda Expression, with optional invokation
-     */
-    final public void LambdaExpressionOrCall() throws ParseException {
-        /* @bgen(jjtree) LambdaExpression */
-        AstLambdaExpression jjtn000 = new AstLambdaExpression(JJTLAMBDAEXPRESSION);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            jj_consume_token(LPAREN);
-            LambdaParameters();
-            jj_consume_token(ARROW);
-            if (jj_2_3(3)) {
-                LambdaExpression();
-            } else {
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case START_MAP:
-                case INTEGER_LITERAL:
-                case FLOATING_POINT_LITERAL:
-                case STRING_LITERAL:
-                case TRUE:
-                case FALSE:
-                case NULL:
-                case LPAREN:
-                case LBRACK:
-                case NOT0:
-                case NOT1:
-                case EMPTY:
-                case MINUS:
-                case IDENTIFIER:
-                    Choice();
-                    break;
-                default:
-                    jj_la1[40] = jj_gen;
-                    jj_consume_token(-1);
-                    throw new ParseException();
-                }
-            }
-            jj_consume_token(RPAREN);
-            label_13: while (true) {
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case LPAREN:
-                    ;
-                    break;
-                default:
-                    jj_la1[41] = jj_gen;
-                    break label_13;
-                }
-                MethodArguments();
-            }
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-    }
-
-    /*
-     * NonLiteral For Grouped Operations, Identifiers, and Functions
-     */
-    final public void NonLiteral() throws ParseException {
-        if (jj_2_4(4)) {
-            LambdaExpressionOrCall();
+/*
+ * NonLiteral
+ * For Grouped Operations, Identifiers, and Functions
+ */
+  final public void NonLiteral() throws ParseException {
+    if (jj_2_5(5)) {
+      LambdaExpressionOrCall();
+    } else {
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case LPAREN:
+        jj_consume_token(LPAREN);
+        Expression();
+        jj_consume_token(RPAREN);
+        break;
+      default:
+        jj_la1[41] = jj_gen;
+        if (jj_2_6(4)) {
+          Function();
         } else {
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case LPAREN:
-                jj_consume_token(LPAREN);
-                Expression();
-                jj_consume_token(RPAREN);
-                break;
-            default:
-                jj_la1[42] = jj_gen;
-                if (jj_2_5(4)) {
-                    Function();
-                } else {
-                    switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                    case IDENTIFIER:
-                        Identifier();
-                        break;
-                    case START_MAP:
-                        MapData();
-                        break;
-                    case LBRACK:
-                        ListData();
-                        break;
-                    default:
-                        jj_la1[43] = jj_gen;
-                        jj_consume_token(-1);
-                        throw new ParseException();
-                    }
-                }
-            }
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case IDENTIFIER:
+            Identifier();
+            break;
+          case START_MAP:
+            MapData();
+            break;
+          case LBRACK:
+            ListData();
+            break;
+          default:
+            jj_la1[42] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
         }
+      }
     }
+  }
 
-    final public void MapData() throws ParseException {
-        /* @bgen(jjtree) MapData */
-        AstMapData jjtn000 = new AstMapData(JJTMAPDATA);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            jj_consume_token(START_MAP);
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case START_MAP:
-            case INTEGER_LITERAL:
-            case FLOATING_POINT_LITERAL:
-            case STRING_LITERAL:
-            case TRUE:
-            case FALSE:
-            case NULL:
-            case LPAREN:
-            case LBRACK:
-            case NOT0:
-            case NOT1:
-            case EMPTY:
-            case MINUS:
-            case IDENTIFIER:
-                MapEntry();
-                label_14: while (true) {
-                    switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                    case COMMA:
-                        ;
-                        break;
-                    default:
-                        jj_la1[44] = jj_gen;
-                        break label_14;
-                    }
-                    jj_consume_token(COMMA);
-                    MapEntry();
-                }
-                break;
-            default:
-                jj_la1[45] = jj_gen;
-                ;
-            }
-            jj_consume_token(RCURL);
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
+  final public void MapData() throws ParseException {
+                          /*@bgen(jjtree) MapData */
+  AstMapData jjtn000 = new AstMapData(JJTMAPDATA);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(START_MAP);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case START_MAP:
+      case INTEGER_LITERAL:
+      case FLOATING_POINT_LITERAL:
+      case STRING_LITERAL:
+      case TRUE:
+      case FALSE:
+      case NULL:
+      case LPAREN:
+      case LBRACK:
+      case NOT0:
+      case NOT1:
+      case EMPTY:
+      case MINUS:
+      case IDENTIFIER:
+        MapEntry();
+        label_15:
+        while (true) {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case COMMA:
+            ;
+            break;
+          default:
+            jj_la1[43] = jj_gen;
+            break label_15;
+          }
+          jj_consume_token(COMMA);
+          MapEntry();
         }
+        break;
+      default:
+        jj_la1[44] = jj_gen;
+        ;
+      }
+      jj_consume_token(RCURL);
+    } catch (Throwable jjte000) {
+      if (jjtc000) {
+        jjtree.clearNodeScope(jjtn000);
+        jjtc000 = false;
+      } else {
+        jjtree.popNode();
+      }
+      if (jjte000 instanceof RuntimeException) {
+        {if (true) throw (RuntimeException)jjte000;}
+      }
+      if (jjte000 instanceof ParseException) {
+        {if (true) throw (ParseException)jjte000;}
+      }
+      {if (true) throw (Error)jjte000;}
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
     }
+  }
 
-    final public void MapEntry() throws ParseException {
-        /* @bgen(jjtree) MapEntry */
-        AstMapEntry jjtn000 = new AstMapEntry(JJTMAPENTRY);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            Expression();
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case COLON:
-                jj_consume_token(COLON);
-                Expression();
-                break;
-            default:
-                jj_la1[46] = jj_gen;
-                ;
-            }
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
+  final public void MapEntry() throws ParseException {
+                            /*@bgen(jjtree) MapEntry */
+  AstMapEntry jjtn000 = new AstMapEntry(JJTMAPENTRY);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      Expression();
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COLON:
+        jj_consume_token(COLON);
+        Expression();
+        break;
+      default:
+        jj_la1[45] = jj_gen;
+        ;
+      }
+    } catch (Throwable jjte000) {
+      if (jjtc000) {
+        jjtree.clearNodeScope(jjtn000);
+        jjtc000 = false;
+      } else {
+        jjtree.popNode();
+      }
+      if (jjte000 instanceof RuntimeException) {
+        {if (true) throw (RuntimeException)jjte000;}
+      }
+      if (jjte000 instanceof ParseException) {
+        {if (true) throw (ParseException)jjte000;}
+      }
+      {if (true) throw (Error)jjte000;}
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
+    }
+  }
+
+  final public void ListData() throws ParseException {
+                            /*@bgen(jjtree) ListData */
+  AstListData jjtn000 = new AstListData(JJTLISTDATA);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(LBRACK);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case START_MAP:
+      case INTEGER_LITERAL:
+      case FLOATING_POINT_LITERAL:
+      case STRING_LITERAL:
+      case TRUE:
+      case FALSE:
+      case NULL:
+      case LPAREN:
+      case LBRACK:
+      case NOT0:
+      case NOT1:
+      case EMPTY:
+      case MINUS:
+      case IDENTIFIER:
+        Expression();
+        label_16:
+        while (true) {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case COMMA:
+            ;
+            break;
+          default:
+            jj_la1[46] = jj_gen;
+            break label_16;
+          }
+          jj_consume_token(COMMA);
+          Expression();
         }
+        break;
+      default:
+        jj_la1[47] = jj_gen;
+        ;
+      }
+      jj_consume_token(RBRACK);
+    } catch (Throwable jjte000) {
+      if (jjtc000) {
+        jjtree.clearNodeScope(jjtn000);
+        jjtc000 = false;
+      } else {
+        jjtree.popNode();
+      }
+      if (jjte000 instanceof RuntimeException) {
+        {if (true) throw (RuntimeException)jjte000;}
+      }
+      if (jjte000 instanceof ParseException) {
+        {if (true) throw (ParseException)jjte000;}
+      }
+      {if (true) throw (Error)jjte000;}
+    } finally {
+      if (jjtc000) {
+        jjtree.closeNodeScope(jjtn000, true);
+      }
     }
+  }
 
-    final public void ListData() throws ParseException {
-        /* @bgen(jjtree) ListData */
-        AstListData jjtn000 = new AstListData(JJTLISTDATA);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            jj_consume_token(LBRACK);
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case START_MAP:
-            case INTEGER_LITERAL:
-            case FLOATING_POINT_LITERAL:
-            case STRING_LITERAL:
-            case TRUE:
-            case FALSE:
-            case NULL:
-            case LPAREN:
-            case LBRACK:
-            case NOT0:
-            case NOT1:
-            case EMPTY:
-            case MINUS:
-            case IDENTIFIER:
-                Expression();
-                label_15: while (true) {
-                    switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                    case COMMA:
-                        ;
-                        break;
-                    default:
-                        jj_la1[47] = jj_gen;
-                        break label_15;
-                    }
-                    jj_consume_token(COMMA);
-                    Expression();
-                }
-                break;
-            default:
-                jj_la1[48] = jj_gen;
-                ;
-            }
-            jj_consume_token(RBRACK);
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-    }
-
-    /*
-     * Identifier Java Language Identifier
-     */
-    final public void Identifier() throws ParseException {
-        /* @bgen(jjtree) Identifier */
-        AstIdentifier jjtn000 = new AstIdentifier(JJTIDENTIFIER);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        Token t = null;
-        try {
-            t = jj_consume_token(IDENTIFIER);
+/*
+ * Identifier
+ * Java Language Identifier
+ */
+  final public void Identifier() throws ParseException {
+                                 /*@bgen(jjtree) Identifier */
+                                  AstIdentifier jjtn000 = new AstIdentifier(JJTIDENTIFIER);
+                                  boolean jjtc000 = true;
+                                  jjtree.openNodeScope(jjtn000);Token t = null;
+    try {
+      t = jj_consume_token(IDENTIFIER);
+                         jjtree.closeNodeScope(jjtn000, true);
+                         jjtc000 = false;
+                         jjtn000.setImage(t.image);
+    } finally {
+          if (jjtc000) {
             jjtree.closeNodeScope(jjtn000, true);
-            jjtc000 = false;
-            jjtn000.setImage(t.image);
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
+          }
     }
+  }
 
-    /*
-     * Function Namespace:Name(a,b,c)
-     */
-    final public void Function() throws ParseException {
-        /* @bgen(jjtree) Function */
+/*
+ * Function
+ * Namespace:Name(a,b,c)
+ */
+  final public void Function() throws ParseException {
+ /*@bgen(jjtree) Function */
         AstFunction jjtn000 = new AstFunction(JJTFUNCTION);
         boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        Token t0 = null;
+        jjtree.openNodeScope(jjtn000);Token t0 = null;
         Token t1 = null;
-        try {
-            t0 = jj_consume_token(IDENTIFIER);
-            switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-            case COLON:
-                jj_consume_token(COLON);
-                t1 = jj_consume_token(IDENTIFIER);
-                break;
-            default:
-                jj_la1[49] = jj_gen;
-                ;
-            }
-            if (t1 != null) {
-                jjtn000.setPrefix(t0.image);
-                jjtn000.setLocalName(t1.image);
-            } else {
-                jjtn000.setLocalName(t0.image);
-            }
-            label_16: while (true) {
-                MethodArguments();
-                switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-                case LPAREN:
-                    ;
-                    break;
-                default:
-                    jj_la1[50] = jj_gen;
-                    break label_16;
+    try {
+      t0 = jj_consume_token(IDENTIFIER);
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case COLON:
+        jj_consume_token(COLON);
+        t1 = jj_consume_token(IDENTIFIER);
+        break;
+      default:
+        jj_la1[48] = jj_gen;
+        ;
+      }
+                if (t1 != null) {
+                        jjtn000.setPrefix(t0.image);
+                        jjtn000.setLocalName(t1.image);
+                } else {
+                        jjtn000.setLocalName(t0.image);
                 }
-            }
-        } catch (Throwable jjte000) {
-            if (jjtc000) {
-                jjtree.clearNodeScope(jjtn000);
-                jjtc000 = false;
-            } else {
-                jjtree.popNode();
-            }
-            if (jjte000 instanceof RuntimeException) {
-                {
-                    if (true) {
-                        throw (RuntimeException) jjte000;
-                    }
-                }
-            }
-            if (jjte000 instanceof ParseException) {
-                {
-                    if (true) {
-                        throw (ParseException) jjte000;
-                    }
-                }
-            }
-            {
-                if (true) {
-                    throw (Error) jjte000;
-                }
-            }
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
-    }
-
-    /*
-     * Literal Reserved Keywords
-     */
-    final public void Literal() throws ParseException {
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case TRUE:
-        case FALSE:
-            Boolean();
-            break;
-        case FLOATING_POINT_LITERAL:
-            FloatingPoint();
-            break;
-        case INTEGER_LITERAL:
-            Integer();
-            break;
-        case STRING_LITERAL:
-            String();
-            break;
-        case NULL:
-            Null();
-            break;
+      label_17:
+      while (true) {
+        MethodArguments();
+        switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+        case LPAREN:
+          ;
+          break;
         default:
-            jj_la1[51] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
+          jj_la1[49] = jj_gen;
+          break label_17;
         }
+      }
+    } catch (Throwable jjte000) {
+          if (jjtc000) {
+            jjtree.clearNodeScope(jjtn000);
+            jjtc000 = false;
+          } else {
+            jjtree.popNode();
+          }
+          if (jjte000 instanceof RuntimeException) {
+            {if (true) throw (RuntimeException)jjte000;}
+          }
+          if (jjte000 instanceof ParseException) {
+            {if (true) throw (ParseException)jjte000;}
+          }
+          {if (true) throw (Error)jjte000;}
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
     }
+  }
 
-    /*
-     * Boolean For 'true' 'false'
-     */
-    final public void Boolean() throws ParseException {
-        switch ((jj_ntk == -1) ? jj_ntk() : jj_ntk) {
-        case TRUE:
-            AstTrue jjtn001 = new AstTrue(JJTTRUE);
-            boolean jjtc001 = true;
-            jjtree.openNodeScope(jjtn001);
-            try {
-                jj_consume_token(TRUE);
-            } finally {
-                if (jjtc001) {
-                    jjtree.closeNodeScope(jjtn001, true);
-                }
-            }
-            break;
-        case FALSE:
+/*
+ * Literal
+ * Reserved Keywords
+ */
+  final public void Literal() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case TRUE:
+    case FALSE:
+      Boolean();
+      break;
+    case FLOATING_POINT_LITERAL:
+      FloatingPoint();
+      break;
+    case INTEGER_LITERAL:
+      Integer();
+      break;
+    case STRING_LITERAL:
+      String();
+      break;
+    case NULL:
+      Null();
+      break;
+    default:
+      jj_la1[50] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+  }
+
+/*
+ * Boolean
+ * For 'true' 'false'
+ */
+  final public void Boolean() throws ParseException {
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case TRUE:
+          AstTrue jjtn001 = new AstTrue(JJTTRUE);
+          boolean jjtc001 = true;
+          jjtree.openNodeScope(jjtn001);
+      try {
+        jj_consume_token(TRUE);
+      } finally {
+          if (jjtc001) {
+            jjtree.closeNodeScope(jjtn001, true);
+          }
+      }
+      break;
+    case FALSE:
             AstFalse jjtn002 = new AstFalse(JJTFALSE);
             boolean jjtc002 = true;
             jjtree.openNodeScope(jjtn002);
-            try {
-                jj_consume_token(FALSE);
-            } finally {
-                if (jjtc002) {
-                    jjtree.closeNodeScope(jjtn002, true);
-                }
+      try {
+        jj_consume_token(FALSE);
+      } finally {
+            if (jjtc002) {
+              jjtree.closeNodeScope(jjtn002, true);
             }
-            break;
-        default:
-            jj_la1[52] = jj_gen;
-            jj_consume_token(-1);
-            throw new ParseException();
-        }
+      }
+      break;
+    default:
+      jj_la1[51] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
     }
+  }
 
-    /*
-     * FloatinPoint For Decimal and Floating Point Literals
-     */
-    final public void FloatingPoint() throws ParseException {
-        /* @bgen(jjtree) FloatingPoint */
-        AstFloatingPoint jjtn000 = new AstFloatingPoint(JJTFLOATINGPOINT);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        Token t = null;
-        try {
-            t = jj_consume_token(FLOATING_POINT_LITERAL);
+/*
+ * FloatinPoint
+ * For Decimal and Floating Point Literals
+ */
+  final public void FloatingPoint() throws ParseException {
+                                       /*@bgen(jjtree) FloatingPoint */
+                                        AstFloatingPoint jjtn000 = new AstFloatingPoint(JJTFLOATINGPOINT);
+                                        boolean jjtc000 = true;
+                                        jjtree.openNodeScope(jjtn000);Token t = null;
+    try {
+      t = jj_consume_token(FLOATING_POINT_LITERAL);
+                                     jjtree.closeNodeScope(jjtn000, true);
+                                     jjtc000 = false;
+                                     jjtn000.setImage(t.image);
+    } finally {
+          if (jjtc000) {
             jjtree.closeNodeScope(jjtn000, true);
-            jjtc000 = false;
-            jjtn000.setImage(t.image);
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
+          }
     }
+  }
 
-    /*
-     * Integer For Simple Numeric Literals
-     */
-    final public void Integer() throws ParseException {
-        /* @bgen(jjtree) Integer */
-        AstInteger jjtn000 = new AstInteger(JJTINTEGER);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        Token t = null;
-        try {
-            t = jj_consume_token(INTEGER_LITERAL);
+/*
+ * Integer
+ * For Simple Numeric Literals
+ */
+  final public void Integer() throws ParseException {
+                           /*@bgen(jjtree) Integer */
+                            AstInteger jjtn000 = new AstInteger(JJTINTEGER);
+                            boolean jjtc000 = true;
+                            jjtree.openNodeScope(jjtn000);Token t = null;
+    try {
+      t = jj_consume_token(INTEGER_LITERAL);
+                              jjtree.closeNodeScope(jjtn000, true);
+                              jjtc000 = false;
+                              jjtn000.setImage(t.image);
+    } finally {
+          if (jjtc000) {
             jjtree.closeNodeScope(jjtn000, true);
-            jjtc000 = false;
-            jjtn000.setImage(t.image);
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
+          }
     }
+  }
 
-    /*
-     * String For Quoted Literals
-     */
-    final public void String() throws ParseException {
-        /* @bgen(jjtree) String */
-        AstString jjtn000 = new AstString(JJTSTRING);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        Token t = null;
-        try {
-            t = jj_consume_token(STRING_LITERAL);
+/*
+ * String
+ * For Quoted Literals
+ */
+  final public void String() throws ParseException {
+                         /*@bgen(jjtree) String */
+                          AstString jjtn000 = new AstString(JJTSTRING);
+                          boolean jjtc000 = true;
+                          jjtree.openNodeScope(jjtn000);Token t = null;
+    try {
+      t = jj_consume_token(STRING_LITERAL);
+                             jjtree.closeNodeScope(jjtn000, true);
+                             jjtc000 = false;
+                             jjtn000.setImage(t.image);
+    } finally {
+          if (jjtc000) {
             jjtree.closeNodeScope(jjtn000, true);
-            jjtc000 = false;
-            jjtn000.setImage(t.image);
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
+          }
     }
+  }
 
-    /*
-     * Null For 'null'
-     */
-    final public void Null() throws ParseException {
-        /* @bgen(jjtree) Null */
-        AstNull jjtn000 = new AstNull(JJTNULL);
-        boolean jjtc000 = true;
-        jjtree.openNodeScope(jjtn000);
-        try {
-            jj_consume_token(NULL);
-        } finally {
-            if (jjtc000) {
-                jjtree.closeNodeScope(jjtn000, true);
-            }
-        }
+/*
+ * Null
+ * For 'null'
+ */
+  final public void Null() throws ParseException {
+                     /*@bgen(jjtree) Null */
+  AstNull jjtn000 = new AstNull(JJTNULL);
+  boolean jjtc000 = true;
+  jjtree.openNodeScope(jjtn000);
+    try {
+      jj_consume_token(NULL);
+    } finally {
+          if (jjtc000) {
+            jjtree.closeNodeScope(jjtn000, true);
+          }
     }
+  }
+
+  private boolean jj_2_1(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_1(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(0, xla); }
+  }
+
+  private boolean jj_2_2(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_2(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(1, xla); }
+  }
+
+  private boolean jj_2_3(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_3(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(2, xla); }
+  }
+
+  private boolean jj_2_4(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_4(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(3, xla); }
+  }
+
+  private boolean jj_2_5(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_5(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(4, xla); }
+  }
+
+  private boolean jj_2_6(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_6(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(5, xla); }
+  }
 
-    private boolean jj_2_1(int xla) {
-        jj_la = xla;
-        jj_lastpos = jj_scanpos = token;
-        try {
-            return !jj_3_1();
-        } catch (LookaheadSuccess ls) {
-            return true;
-        } finally {
-            jj_save(0, xla);
-        }
+  private boolean jj_3R_21() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_26()) jj_scanpos = xsp;
+    if (jj_3R_27()) return true;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_27()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_2_2(int xla) {
-        jj_la = xla;
-        jj_lastpos = jj_scanpos = token;
-        try {
-            return !jj_3_2();
-        } catch (LookaheadSuccess ls) {
-            return true;
-        } finally {
-            jj_save(1, xla);
-        }
+  private boolean jj_3R_46() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_50()) {
+    jj_scanpos = xsp;
+    if (jj_3R_51()) return true;
     }
+    return false;
+  }
 
-    private boolean jj_2_3(int xla) {
-        jj_la = xla;
-        jj_lastpos = jj_scanpos = token;
-        try {
-            return !jj_3_3();
-        } catch (LookaheadSuccess ls) {
-            return true;
-        } finally {
-            jj_save(2, xla);
-        }
+  private boolean jj_3R_50() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(35)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(36)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_2_4(int xla) {
-        jj_la = xla;
-        jj_lastpos = jj_scanpos = token;
-        try {
-            return !jj_3_4();
-        } catch (LookaheadSuccess ls) {
-            return true;
-        } finally {
-            jj_save(3, xla);
-        }
+  private boolean jj_3R_43() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(41)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(42)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_2_5(int xla) {
-        jj_la = xla;
-        jj_lastpos = jj_scanpos = token;
-        try {
-            return !jj_3_5();
-        } catch (LookaheadSuccess ls) {
-            return true;
-        } finally {
-            jj_save(4, xla);
-        }
+  private boolean jj_3R_42() {
+    if (jj_3R_45()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_46()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_89() {
-        if (jj_scan_token(LBRACK)) {
-            return true;
-        }
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_102()) {
-            jj_scanpos = xsp;
-        }
-        if (jj_scan_token(RBRACK)) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_33() {
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_37() {
+    if (jj_3R_42()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_43()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
+
+  private boolean jj_3R_102() {
+    if (jj_3R_40()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_24() {
+    if (jj_3R_28()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_33() {
-        if (jj_scan_token(COMMA)) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_39() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(43)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(44)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_31() {
-        if (jj_3R_34()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_49()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_25() {
+    if (jj_3R_28()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_47() {
-        if (jj_scan_token(QUESTIONMARK)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_98() {
+    if (jj_scan_token(LBRACK)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_102()) jj_scanpos = xsp;
+    if (jj_scan_token(RBRACK)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_103() {
-        if (jj_3R_35()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_38() {
+    if (jj_scan_token(COMMA)) return true;
+    if (jj_3R_33()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_101() {
-        if (jj_3R_103()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_32() {
+    if (jj_3R_37()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_39()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_27() {
-        if (jj_3R_31()) {
-            return true;
-        }
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_47()) {
-            jj_scanpos = xsp;
-        }
-        return false;
-    }
+  private boolean jj_3R_35() {
+    if (jj_scan_token(QUESTIONMARK)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_103() {
+    if (jj_3R_40()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_101() {
+    if (jj_3R_103()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_28() {
+    if (jj_3R_32()) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_35()) jj_scanpos = xsp;
+    return false;
+  }
 
-    private boolean jj_3R_79() {
-        if (jj_3R_89()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_89() {
+    if (jj_3R_98()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_88() {
-        if (jj_scan_token(START_MAP)) {
-            return true;
-        }
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_101()) {
-            jj_scanpos = xsp;
-        }
-        if (jj_scan_token(RCURL)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_97() {
+    if (jj_scan_token(START_MAP)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_101()) jj_scanpos = xsp;
+    if (jj_scan_token(RCURL)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_78() {
-        if (jj_3R_88()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_88() {
+    if (jj_3R_97()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_77() {
-        if (jj_3R_29()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_87() {
+    if (jj_3R_33()) return true;
+    return false;
+  }
 
-    private boolean jj_3_5() {
-        if (jj_3R_19()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3_6() {
+    if (jj_3R_21()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_30() {
-        if (jj_3R_29()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_33()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_86() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_40()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_76() {
-        if (jj_scan_token(LPAREN)) {
-            return true;
-        }
-        if (jj_3R_35()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_34() {
+    if (jj_3R_33()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_38()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_36() {
-        if (jj_scan_token(COMMA)) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_41() {
+    if (jj_scan_token(COMMA)) return true;
+    return false;
+  }
+
+  private boolean jj_3_5() {
+    if (jj_3R_20()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_78() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_5()) {
+    jj_scanpos = xsp;
+    if (jj_3R_86()) {
+    jj_scanpos = xsp;
+    if (jj_3_6()) {
+    jj_scanpos = xsp;
+    if (jj_3R_87()) {
+    jj_scanpos = xsp;
+    if (jj_3R_88()) {
+    jj_scanpos = xsp;
+    if (jj_3R_89()) return true;
     }
-
-    private boolean jj_3_4() {
-        if (jj_3R_18()) {
-            return true;
-        }
-        return false;
     }
-
-    private boolean jj_3R_69() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3_4()) {
-            jj_scanpos = xsp;
-            if (jj_3R_76()) {
-                jj_scanpos = xsp;
-                if (jj_3_5()) {
-                    jj_scanpos = xsp;
-                    if (jj_3R_77()) {
-                        jj_scanpos = xsp;
-                        if (jj_3R_78()) {
-                            jj_scanpos = xsp;
-                            if (jj_3R_79()) {
-                                return true;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        return false;
     }
-
-    private boolean jj_3R_26() {
-        if (jj_scan_token(LPAREN)) {
-            return true;
-        }
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_30()) {
-            jj_scanpos = xsp;
-        }
-        if (jj_scan_token(RPAREN)) {
-            return true;
-        }
-        return false;
     }
-
-    private boolean jj_3R_20() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_25()) {
-            jj_scanpos = xsp;
-            if (jj_3R_26()) {
-                return true;
-            }
-        }
-        return false;
     }
+    return false;
+  }
 
-    private boolean jj_3R_25() {
-        if (jj_3R_29()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_30() {
+    if (jj_scan_token(LPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_34()) jj_scanpos = xsp;
+    if (jj_scan_token(RPAREN)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_45() {
-        if (jj_scan_token(ASSIGN)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_29() {
+    if (jj_3R_33()) return true;
+    return false;
+  }
 
-    private boolean jj_3_2() {
-        if (jj_3R_17()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_23() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_29()) {
+    jj_scanpos = xsp;
+    if (jj_3R_30()) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3_3() {
-        if (jj_3R_17()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3_1() {
+    if (jj_scan_token(ASSIGN)) return true;
+    if (jj_3R_18()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_17() {
-        if (jj_3R_20()) {
-            return true;
-        }
-        if (jj_scan_token(ARROW)) {
-            return true;
-        }
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3_2()) {
-            jj_scanpos = xsp;
-            if (jj_3R_21()) {
-                return true;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3_3() {
+    if (jj_3R_19()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_32() {
-        if (jj_3R_35()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_36()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3_4() {
+    if (jj_3R_19()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_41() {
-        if (jj_scan_token(SEMICOLON)) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_19() {
+    if (jj_3R_23()) return true;
+    if (jj_scan_token(ARROW)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_3()) {
+    jj_scanpos = xsp;
+    if (jj_3R_24()) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_18() {
-        if (jj_scan_token(LPAREN)) {
-            return true;
-        }
-        if (jj_3R_20()) {
-            return true;
-        }
-        if (jj_scan_token(ARROW)) {
-            return true;
-        }
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3_3()) {
-            jj_scanpos = xsp;
-            if (jj_3R_22()) {
-                return true;
-            }
-        }
-        return false;
+  private boolean jj_3R_36() {
+    if (jj_3R_40()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_41()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_43() {
-        if (jj_3R_27()) {
-            return true;
-        }
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_45()) {
-            jj_scanpos = xsp;
-        }
-        return false;
-    }
+  private boolean jj_3R_47() {
+    if (jj_scan_token(SEMICOLON)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_40() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3_1()) {
-            jj_scanpos = xsp;
-            if (jj_3R_43()) {
-                return true;
-            }
-        }
-        return false;
+  private boolean jj_3R_20() {
+    if (jj_scan_token(LPAREN)) return true;
+    if (jj_3R_23()) return true;
+    if (jj_scan_token(ARROW)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_4()) {
+    jj_scanpos = xsp;
+    if (jj_3R_25()) return true;
     }
+    if (jj_scan_token(RPAREN)) return true;
+    return false;
+  }
 
-    private boolean jj_3_1() {
-        if (jj_3R_17()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_22() {
+    if (jj_3R_28()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3_1()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_28() {
-        if (jj_scan_token(LPAREN)) {
-            return true;
-        }
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_32()) {
-            jj_scanpos = xsp;
-        }
-        if (jj_scan_token(RPAREN)) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_18() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3_2()) {
+    jj_scanpos = xsp;
+    if (jj_3R_22()) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_38() {
-        if (jj_3R_40()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_41()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3_2() {
+    if (jj_3R_19()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_100() {
-        if (jj_scan_token(LBRACK)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_31() {
+    if (jj_scan_token(LPAREN)) return true;
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_36()) jj_scanpos = xsp;
+    if (jj_scan_token(RPAREN)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_35() {
-        if (jj_3R_38()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_44() {
+    if (jj_3R_18()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_47()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_98() {
-        if (jj_3R_100()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_91() {
+    if (jj_scan_token(LBRACK)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_99() {
-        if (jj_scan_token(DOT)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_40() {
+    if (jj_3R_44()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_97() {
-        if (jj_3R_99()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_80() {
+    if (jj_3R_91()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_96() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_97()) {
-            jj_scanpos = xsp;
-            if (jj_3R_98()) {
-                return true;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_90() {
+    if (jj_scan_token(DOT)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_95() {
-        if (jj_3R_96()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_76() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_79()) {
+    jj_scanpos = xsp;
+    if (jj_3R_80()) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_62() {
-        if (jj_3R_69()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_79() {
+    if (jj_3R_90()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_57() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_61()) {
-            jj_scanpos = xsp;
-            if (jj_3R_62()) {
-                return true;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_73() {
+    if (jj_3R_76()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_61() {
-        if (jj_3R_68()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_75() {
+    if (jj_3R_78()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_55() {
-        if (jj_3R_57()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_95()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
+  private boolean jj_3R_72() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_74()) {
+    jj_scanpos = xsp;
+    if (jj_3R_75()) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_53() {
-        if (jj_3R_55()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_74() {
+    if (jj_3R_77()) return true;
+    return false;
+  }
+
+  private boolean jj_3R_71() {
+    if (jj_3R_72()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_73()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_52() {
-        if (jj_scan_token(EMPTY)) {
-            return true;
-        }
-        if (jj_3R_48()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_67() {
+    if (jj_3R_71()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_51() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(39)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(40)) {
-                return true;
-            }
-        }
-        if (jj_3R_48()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_66() {
+    if (jj_scan_token(EMPTY)) return true;
+    if (jj_3R_60()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_87() {
-        if (jj_scan_token(NULL)) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_65() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(39)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(40)) return true;
     }
+    if (jj_3R_60()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_48() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_50()) {
-            jj_scanpos = xsp;
-            if (jj_3R_51()) {
-                jj_scanpos = xsp;
-                if (jj_3R_52()) {
-                    jj_scanpos = xsp;
-                    if (jj_3R_53()) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_96() {
+    if (jj_scan_token(NULL)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_50() {
-        if (jj_scan_token(MINUS)) {
-            return true;
-        }
-        if (jj_3R_48()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_60() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_64()) {
+    jj_scanpos = xsp;
+    if (jj_3R_65()) {
+    jj_scanpos = xsp;
+    if (jj_3R_66()) {
+    jj_scanpos = xsp;
+    if (jj_3R_67()) return true;
     }
-
-    private boolean jj_3R_86() {
-        if (jj_scan_token(STRING_LITERAL)) {
-            return true;
-        }
-        return false;
     }
-
-    private boolean jj_3R_92() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(53)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(54)) {
-                return true;
-            }
-        }
-        return false;
     }
+    return false;
+  }
 
-    private boolean jj_3R_91() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(51)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(52)) {
-                return true;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_64() {
+    if (jj_scan_token(MINUS)) return true;
+    if (jj_3R_60()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_90() {
-        if (jj_scan_token(MULT)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_95() {
+    if (jj_scan_token(STRING_LITERAL)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_80() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_90()) {
-            jj_scanpos = xsp;
-            if (jj_3R_91()) {
-                jj_scanpos = xsp;
-                if (jj_3R_92()) {
-                    return true;
-                }
-            }
-        }
-        return false;
+  private boolean jj_3R_70() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(53)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(54)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_85() {
-        if (jj_scan_token(INTEGER_LITERAL)) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_69() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(51)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(52)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_46() {
-        if (jj_3R_48()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_80()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
+  private boolean jj_3R_61() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_68()) {
+    jj_scanpos = xsp;
+    if (jj_3R_69()) {
+    jj_scanpos = xsp;
+    if (jj_3R_70()) return true;
     }
-
-    private boolean jj_3R_84() {
-        if (jj_scan_token(FLOATING_POINT_LITERAL)) {
-            return true;
-        }
-        return false;
     }
+    return false;
+  }
 
-    private boolean jj_3R_82() {
-        if (jj_scan_token(MINUS)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_68() {
+    if (jj_scan_token(MULT)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_70() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_81()) {
-            jj_scanpos = xsp;
-            if (jj_3R_82()) {
-                return true;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_94() {
+    if (jj_scan_token(INTEGER_LITERAL)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_81() {
-        if (jj_scan_token(PLUS)) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_58() {
+    if (jj_3R_60()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_61()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_94() {
-        if (jj_scan_token(FALSE)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_93() {
+    if (jj_scan_token(FLOATING_POINT_LITERAL)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_93() {
-        if (jj_scan_token(TRUE)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_63() {
+    if (jj_scan_token(MINUS)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_83() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_93()) {
-            jj_scanpos = xsp;
-            if (jj_3R_94()) {
-                return true;
-            }
-        }
-        return false;
+  private boolean jj_3R_59() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_62()) {
+    jj_scanpos = xsp;
+    if (jj_3R_63()) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_44() {
-        if (jj_3R_46()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_70()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_62() {
+    if (jj_scan_token(PLUS)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_63() {
-        if (jj_scan_token(CONCAT)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_100() {
+    if (jj_scan_token(FALSE)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_75() {
-        if (jj_3R_87()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_99() {
+    if (jj_scan_token(TRUE)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_74() {
-        if (jj_3R_86()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_92() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_99()) {
+    jj_scanpos = xsp;
+    if (jj_3R_100()) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_73() {
-        if (jj_3R_85()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_52() {
+    if (jj_3R_58()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_59()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_72() {
-        if (jj_3R_84()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_53() {
+    if (jj_scan_token(CONCAT)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_42() {
-        if (jj_3R_44()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_63()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_85() {
+    if (jj_3R_96()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_67() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(31)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(32)) {
-                return true;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_84() {
+    if (jj_3R_95()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_68() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_71()) {
-            jj_scanpos = xsp;
-            if (jj_3R_72()) {
-                jj_scanpos = xsp;
-                if (jj_3R_73()) {
-                    jj_scanpos = xsp;
-                    if (jj_3R_74()) {
-                        jj_scanpos = xsp;
-                        if (jj_3R_75()) {
-                            return true;
-                        }
-                    }
-                }
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_83() {
+    if (jj_3R_94()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_71() {
-        if (jj_3R_83()) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_82() {
+    if (jj_3R_93()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_66() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(33)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(34)) {
-                return true;
-            }
-        }
-        return false;
+  private boolean jj_3R_48() {
+    if (jj_3R_52()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_53()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_23() {
-        if (jj_scan_token(COLON)) {
-            return true;
-        }
-        if (jj_scan_token(IDENTIFIER)) {
-            return true;
-        }
-        return false;
-    }
+  private boolean jj_3R_81() {
+    if (jj_3R_92()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_65() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(27)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(28)) {
-                return true;
-            }
-        }
-        return false;
+  private boolean jj_3R_57() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(31)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(32)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_58() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_64()) {
-            jj_scanpos = xsp;
-            if (jj_3R_65()) {
-                jj_scanpos = xsp;
-                if (jj_3R_66()) {
-                    jj_scanpos = xsp;
-                    if (jj_3R_67()) {
-                        return true;
-                    }
-                }
-            }
-        }
-        return false;
+  private boolean jj_3R_77() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_81()) {
+    jj_scanpos = xsp;
+    if (jj_3R_82()) {
+    jj_scanpos = xsp;
+    if (jj_3R_83()) {
+    jj_scanpos = xsp;
+    if (jj_3R_84()) {
+    jj_scanpos = xsp;
+    if (jj_3R_85()) return true;
     }
-
-    private boolean jj_3R_64() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(29)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(30)) {
-                return true;
-            }
-        }
-        return false;
     }
-
-    private boolean jj_3R_24() {
-        if (jj_3R_28()) {
-            return true;
-        }
-        return false;
     }
-
-    private boolean jj_3R_39() {
-        if (jj_3R_42()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_58()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
     }
+    return false;
+  }
 
-    private boolean jj_3R_60() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(37)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(38)) {
-                return true;
-            }
-        }
-        return false;
+  private boolean jj_3R_56() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(33)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(34)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_19() {
-        if (jj_scan_token(IDENTIFIER)) {
-            return true;
-        }
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_23()) {
-            jj_scanpos = xsp;
-        }
-        if (jj_3R_24()) {
-            return true;
-        }
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_24()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_26() {
+    if (jj_scan_token(COLON)) return true;
+    if (jj_scan_token(IDENTIFIER)) return true;
+    return false;
+  }
 
-    private boolean jj_3R_56() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_3R_59()) {
-            jj_scanpos = xsp;
-            if (jj_3R_60()) {
-                return true;
-            }
-        }
-        return false;
+  private boolean jj_3R_55() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(27)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(28)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_59() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(35)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(36)) {
-                return true;
-            }
-        }
-        return false;
+  private boolean jj_3R_49() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_54()) {
+    jj_scanpos = xsp;
+    if (jj_3R_55()) {
+    jj_scanpos = xsp;
+    if (jj_3R_56()) {
+    jj_scanpos = xsp;
+    if (jj_3R_57()) return true;
     }
-
-    private boolean jj_3R_54() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(41)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(42)) {
-                return true;
-            }
-        }
-        return false;
     }
-
-    private boolean jj_3R_37() {
-        if (jj_3R_39()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_56()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
     }
+    return false;
+  }
 
-    private boolean jj_3R_29() {
-        if (jj_scan_token(IDENTIFIER)) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_54() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(29)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(30)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_34() {
-        if (jj_3R_37()) {
-            return true;
-        }
-        Token xsp;
-        while (true) {
-            xsp = jj_scanpos;
-            if (jj_3R_54()) {
-                jj_scanpos = xsp;
-                break;
-            }
-        }
-        return false;
-    }
+  private boolean jj_3R_27() {
+    if (jj_3R_31()) return true;
+    return false;
+  }
 
-    private boolean jj_3R_102() {
-        if (jj_3R_35()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_45() {
+    if (jj_3R_48()) return true;
+    Token xsp;
+    while (true) {
+      xsp = jj_scanpos;
+      if (jj_3R_49()) { jj_scanpos = xsp; break; }
     }
+    return false;
+  }
 
-    private boolean jj_3R_21() {
-        if (jj_3R_27()) {
-            return true;
-        }
-        return false;
+  private boolean jj_3R_51() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(37)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(38)) return true;
     }
+    return false;
+  }
 
-    private boolean jj_3R_49() {
-        Token xsp;
-        xsp = jj_scanpos;
-        if (jj_scan_token(43)) {
-            jj_scanpos = xsp;
-            if (jj_scan_token(44)) {
-                return true;
-            }
-        }
-        return false;
-    }
+  /** Generated Token Manager. */
+  public ELParserTokenManager token_source;
+  SimpleCharStream jj_input_stream;
+  /** Current token. */
+  public Token token;
+  /** Next token. */
+  public Token jj_nt;
+  private int jj_ntk;
+  private Token jj_scanpos, jj_lastpos;
+  private int jj_la;
+  private int jj_gen;
+  final private int[] jj_la1 = new int[52];
+  static private int[] jj_la1_0;
+  static private int[] jj_la1_1;
+  static {
+      jj_la1_init_0();
+      jj_la1_init_1();
+   }
+   private static void jj_la1_init_0() {
+      jj_la1_0 = new int[] {0xe,0xe,0x4000000,0x575a00,0x575a00,0x2000000,0x0,0x100000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xf8000000,0x60000000,0x18000000,0x0,0x80000000,0xf8000000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x575a00,0x480000,0x575a00,0x480000,0x100000,0x100000,0x2000000,0x575a00,0x575a00,0x100000,0x100000,0x400200,0x2000000,0x575a00,0x1000000,0x2000000,0x575a00,0x1000000,0x100000,0x75800,0x30000,};
+   }
+   private static void jj_la1_init_1() {
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x4022180,0x4022180,0x0,0x4000000,0x4000000,0x40000,0x1800,0x1800,0x600,0x600,0x78,0x18,0x60,0x78,0x7,0x0,0x0,0x6,0x1,0x7,0x800000,0x30000,0x30000,0x788000,0x180000,0x600000,0x788000,0x180,0x4022180,0x0,0x4000000,0x0,0x0,0x0,0x0,0x4022180,0x4022180,0x0,0x0,0x4000000,0x0,0x4022180,0x0,0x0,0x4022180,0x0,0x0,0x0,0x0,};
+   }
+  final private JJCalls[] jj_2_rtns = new JJCalls[6];
+  private boolean jj_rescan = false;
+  private int jj_gc = 0;
 
-    private boolean jj_3R_22() {
-        if (jj_3R_27()) {
-            return true;
-        }
-        return false;
-    }
+  /** Constructor with InputStream. */
+  public ELParser(java.io.InputStream stream) {
+     this(stream, null);
+  }
+  /** Constructor with InputStream and supplied encoding */
+  public ELParser(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source = new ELParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 52; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
 
-    /** Generated Token Manager. */
-    public ELParserTokenManager token_source;
-    SimpleCharStream jj_input_stream;
-    /** Current token. */
-    public Token token;
-    /** Next token. */
-    public Token jj_nt;
-    private int jj_ntk;
-    private Token jj_scanpos, jj_lastpos;
-    private int jj_la;
-    private int jj_gen;
-    final private int[] jj_la1 = new int[53];
-    static private int[] jj_la1_0;
-    static private int[] jj_la1_1;
-    static {
-        jj_la1_init_0();
-        jj_la1_init_1();
-    }
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream stream) {
+     ReInit(stream, null);
+  }
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream stream, String encoding) {
+    try { jj_input_stream.ReInit(stream, encoding, 1, 1); } catch(java.io.UnsupportedEncodingException e) { throw new RuntimeException(e); }
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 52; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
 
-    private static void jj_la1_init_0() {
-        jj_la1_0 = new int[] { 0xe, 0xe, 0x4000000, 0x0, 0x575a00, 0x575a00, 0x2000000, 0x0, 0x100000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xf8000000,
-                0x60000000, 0x18000000, 0x0, 0x80000000, 0xf8000000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x575a00, 0x480000, 0x575a00, 0x480000, 0x100000,
-                0x100000, 0x2000000, 0x575a00, 0x575a00, 0x100000, 0x100000, 0x400200, 0x2000000, 0x575a00, 0x1000000, 0x2000000, 0x575a00, 0x1000000, 0x100000,
-                0x75800, 0x30000, };
-    }
+  /** Constructor. */
+  public ELParser(java.io.Reader stream) {
+    jj_input_stream = new SimpleCharStream(stream, 1, 1);
+    token_source = new ELParserTokenManager(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 52; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
 
-    private static void jj_la1_init_1() {
-        jj_la1_1 = new int[] { 0x0, 0x0, 0x0, 0x1000000, 0x4022180, 0x4022180, 0x0, 0x4000000, 0x4000000, 0x40000, 0x1800, 0x1800, 0x600, 0x600, 0x78, 0x18,
-                0x60, 0x78, 0x7, 0x0, 0x0, 0x6, 0x1, 0x7, 0x800000, 0x30000, 0x30000, 0x788000, 0x180000, 0x600000, 0x788000, 0x180, 0x4022180, 0x0, 0x4000000,
-                0x0, 0x0, 0x0, 0x0, 0x4022180, 0x4022180, 0x0, 0x0, 0x4000000, 0x0, 0x4022180, 0x0, 0x0, 0x4022180, 0x0, 0x0, 0x0, 0x0, };
-    }
+  /** Reinitialise. */
+  public void ReInit(java.io.Reader stream) {
+    jj_input_stream.ReInit(stream, 1, 1);
+    token_source.ReInit(jj_input_stream);
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 52; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
 
-    final private JJCalls[] jj_2_rtns = new JJCalls[5];
-    private boolean jj_rescan = false;
-    private int jj_gc = 0;
+  /** Constructor with generated Token Manager. */
+  public ELParser(ELParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jj_gen = 0;
+    for (int i = 0; i < 52; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
 
-    /** Constructor with InputStream. */
-    public ELParser(java.io.InputStream stream) {
-        this(stream, null);
-    }
+  /** Reinitialise. */
+  public void ReInit(ELParserTokenManager tm) {
+    token_source = tm;
+    token = new Token();
+    jj_ntk = -1;
+    jjtree.reset();
+    jj_gen = 0;
+    for (int i = 0; i < 52; i++) jj_la1[i] = -1;
+    for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
+  }
 
-    /** Constructor with InputStream and supplied encoding */
-    public ELParser(java.io.InputStream stream, String encoding) {
-        try {
-            jj_input_stream = new SimpleCharStream(stream, encoding, 1, 1);
-        } catch (java.io.UnsupportedEncodingException e) {
-            throw new RuntimeException(e);
-        }
-        token_source = new ELParserTokenManager(jj_input_stream);
-        token = new Token();
-        jj_ntk = -1;
-        jj_gen = 0;
-        for (int i = 0; i < 53; i++) {
-            jj_la1[i] = -1;
-        }
+  private Token jj_consume_token(int kind) throws ParseException {
+    Token oldToken;
+    if ((oldToken = token).next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    if (token.kind == kind) {
+      jj_gen++;
+      if (++jj_gc > 100) {
+        jj_gc = 0;
         for (int i = 0; i < jj_2_rtns.length; i++) {
-            jj_2_rtns[i] = new JJCalls();
+          JJCalls c = jj_2_rtns[i];
+          while (c != null) {
+            if (c.gen < jj_gen) c.first = null;
+            c = c.next;
+          }
         }
+      }
+      return token;
     }
+    token = oldToken;
+    jj_kind = kind;
+    throw generateParseException();
+  }
 
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream stream) {
-        ReInit(stream, null);
+  static private final class LookaheadSuccess extends java.lang.Error { }
+  static final private LookaheadSuccess jj_ls = new LookaheadSuccess();
+  private boolean jj_scan_token(int kind) {
+    if (jj_scanpos == jj_lastpos) {
+      jj_la--;
+      if (jj_scanpos.next == null) {
+        jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
+      } else {
+        jj_lastpos = jj_scanpos = jj_scanpos.next;
+      }
+    } else {
+      jj_scanpos = jj_scanpos.next;
     }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream stream, String encoding) {
-        try {
-            jj_input_stream.ReInit(stream, encoding, 1, 1);
-        } catch (java.io.UnsupportedEncodingException e) {
-            throw new RuntimeException(e);
-        }
-        token_source.ReInit(jj_input_stream);
-        token = new Token();
-        jj_ntk = -1;
-        jjtree.reset();
-        jj_gen = 0;
-        for (int i = 0; i < 53; i++) {
-            jj_la1[i] = -1;
-        }
-        for (int i = 0; i < jj_2_rtns.length; i++) {
-            jj_2_rtns[i] = new JJCalls();
-        }
+    if (jj_rescan) {
+      int i = 0; Token tok = token;
+      while (tok != null && tok != jj_scanpos) { i++; tok = tok.next; }
+      if (tok != null) jj_add_error_token(kind, i);
     }
+    if (jj_scanpos.kind != kind) return true;
+    if (jj_la == 0 && jj_scanpos == jj_lastpos) throw jj_ls;
+    return false;
+  }
 
-    /** Constructor. */
-    public ELParser(java.io.Reader stream) {
-        jj_input_stream = new SimpleCharStream(stream, 1, 1);
-        token_source = new ELParserTokenManager(jj_input_stream);
-        token = new Token();
-        jj_ntk = -1;
-        jj_gen = 0;
-        for (int i = 0; i < 53; i++) {
-            jj_la1[i] = -1;
-        }
-        for (int i = 0; i < jj_2_rtns.length; i++) {
-            jj_2_rtns[i] = new JJCalls();
-        }
+
+/** Get the next Token. */
+  final public Token getNextToken() {
+    if (token.next != null) token = token.next;
+    else token = token.next = token_source.getNextToken();
+    jj_ntk = -1;
+    jj_gen++;
+    return token;
+  }
+
+/** Get the specific Token. */
+  final public Token getToken(int index) {
+    Token t = token;
+    for (int i = 0; i < index; i++) {
+      if (t.next != null) t = t.next;
+      else t = t.next = token_source.getNextToken();
     }
+    return t;
+  }
 
-    /** Reinitialise. */
-    public void ReInit(java.io.Reader stream) {
-        jj_input_stream.ReInit(stream, 1, 1);
-        token_source.ReInit(jj_input_stream);
-        token = new Token();
-        jj_ntk = -1;
-        jjtree.reset();
-        jj_gen = 0;
-        for (int i = 0; i < 53; i++) {
-            jj_la1[i] = -1;
-        }
-        for (int i = 0; i < jj_2_rtns.length; i++) {
-            jj_2_rtns[i] = new JJCalls();
-        }
-    }
+  private int jj_ntk() {
+    if ((jj_nt=token.next) == null)
+      return (jj_ntk = (token.next=token_source.getNextToken()).kind);
+    else
+      return (jj_ntk = jj_nt.kind);
+  }
 
-    /** Constructor with generated Token Manager. */
-    public ELParser(ELParserTokenManager tm) {
-        token_source = tm;
-        token = new Token();
-        jj_ntk = -1;
-        jj_gen = 0;
-        for (int i = 0; i < 53; i++) {
-            jj_la1[i] = -1;
-        }
-        for (int i = 0; i < jj_2_rtns.length; i++) {
-            jj_2_rtns[i] = new JJCalls();
-        }
-    }
+  private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
+  private int[] jj_expentry;
+  private int jj_kind = -1;
+  private int[] jj_lasttokens = new int[100];
+  private int jj_endpos;
 
-    /** Reinitialise. */
-    public void ReInit(ELParserTokenManager tm) {
-        token_source = tm;
-        token = new Token();
-        jj_ntk = -1;
-        jjtree.reset();
-        jj_gen = 0;
-        for (int i = 0; i < 53; i++) {
-            jj_la1[i] = -1;
-        }
-        for (int i = 0; i < jj_2_rtns.length; i++) {
-            jj_2_rtns[i] = new JJCalls();
-        }
-    }
-
-    private Token jj_consume_token(int kind) throws ParseException {
-        Token oldToken;
-        if ((oldToken = token).next != null) {
-            token = token.next;
-        } else {
-            token = token.next = token_source.getNextToken();
-        }
-        jj_ntk = -1;
-        if (token.kind == kind) {
-            jj_gen++;
-            if (++jj_gc > 100) {
-                jj_gc = 0;
-                for (int i = 0; i < jj_2_rtns.length; i++) {
-                    JJCalls c = jj_2_rtns[i];
-                    while (c != null) {
-                        if (c.gen < jj_gen) {
-                            c.first = null;
-                        }
-                        c = c.next;
-                    }
-                }
+  private void jj_add_error_token(int kind, int pos) {
+    if (pos >= 100) return;
+    if (pos == jj_endpos + 1) {
+      jj_lasttokens[jj_endpos++] = kind;
+    } else if (jj_endpos != 0) {
+      jj_expentry = new int[jj_endpos];
+      for (int i = 0; i < jj_endpos; i++) {
+        jj_expentry[i] = jj_lasttokens[i];
+      }
+      jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {
+        int[] oldentry = (int[])(it.next());
+        if (oldentry.length == jj_expentry.length) {
+          for (int i = 0; i < jj_expentry.length; i++) {
+            if (oldentry[i] != jj_expentry[i]) {
+              continue jj_entries_loop;
             }
-            return token;
+          }
+          jj_expentries.add(jj_expentry);
+          break jj_entries_loop;
         }
-        token = oldToken;
-        jj_kind = kind;
-        throw generateParseException();
+      }
+      if (pos != 0) jj_lasttokens[(jj_endpos = pos) - 1] = kind;
     }
+  }
 
-    static private final class LookaheadSuccess extends java.lang.Error {
+  /** Generate ParseException. */
+  public ParseException generateParseException() {
+    jj_expentries.clear();
+    boolean[] la1tokens = new boolean[63];
+    if (jj_kind >= 0) {
+      la1tokens[jj_kind] = true;
+      jj_kind = -1;
     }
-
-    static final private LookaheadSuccess jj_ls = new LookaheadSuccess();
-
-    private boolean jj_scan_token(int kind) {
-        if (jj_scanpos == jj_lastpos) {
-            jj_la--;
-            if (jj_scanpos.next == null) {
-                jj_lastpos = jj_scanpos = jj_scanpos.next = token_source.getNextToken();
-            } else {
-                jj_lastpos = jj_scanpos = jj_scanpos.next;
-            }
-        } else {
-            jj_scanpos = jj_scanpos.next;
+    for (int i = 0; i < 52; i++) {
+      if (jj_la1[i] == jj_gen) {
+        for (int j = 0; j < 32; j++) {
+          if ((jj_la1_0[i] & (1<<j)) != 0) {
+            la1tokens[j] = true;
+          }
+          if ((jj_la1_1[i] & (1<<j)) != 0) {
+            la1tokens[32+j] = true;
+          }
         }
-        if (jj_rescan) {
-            int i = 0;
-            Token tok = token;
-            while (tok != null && tok != jj_scanpos) {
-                i++;
-                tok = tok.next;
-            }
-            if (tok != null) {
-                jj_add_error_token(kind, i);
-            }
-        }
-        if (jj_scanpos.kind != kind) {
-            return true;
-        }
-        if (jj_la == 0 && jj_scanpos == jj_lastpos) {
-            throw jj_ls;
-        }
-        return false;
+      }
     }
-
-    /** Get the next Token. */
-    final public Token getNextToken() {
-        if (token.next != null) {
-            token = token.next;
-        } else {
-            token = token.next = token_source.getNextToken();
-        }
-        jj_ntk = -1;
-        jj_gen++;
-        return token;
+    for (int i = 0; i < 63; i++) {
+      if (la1tokens[i]) {
+        jj_expentry = new int[1];
+        jj_expentry[0] = i;
+        jj_expentries.add(jj_expentry);
+      }
     }
-
-    /** Get the specific Token. */
-    final public Token getToken(int index) {
-        Token t = token;
-        for (int i = 0; i < index; i++) {
-            if (t.next != null) {
-                t = t.next;
-            } else {
-                t = t.next = token_source.getNextToken();
-            }
-        }
-        return t;
+    jj_endpos = 0;
+    jj_rescan_token();
+    jj_add_error_token(0, 0);
+    int[][] exptokseq = new int[jj_expentries.size()][];
+    for (int i = 0; i < jj_expentries.size(); i++) {
+      exptokseq[i] = jj_expentries.get(i);
     }
+    return new ParseException(token, exptokseq, tokenImage);
+  }
 
-    private int jj_ntk() {
-        if ((jj_nt = token.next) == null) {
-            return (jj_ntk = (token.next = token_source.getNextToken()).kind);
-        } else {
-            return (jj_ntk = jj_nt.kind);
+  /** Enable tracing. */
+  final public void enable_tracing() {
+  }
+
+  /** Disable tracing. */
+  final public void disable_tracing() {
+  }
+
+  private void jj_rescan_token() {
+    jj_rescan = true;
+    for (int i = 0; i < 6; i++) {
+    try {
+      JJCalls p = jj_2_rtns[i];
+      do {
+        if (p.gen > jj_gen) {
+          jj_la = p.arg; jj_lastpos = jj_scanpos = p.first;
+          switch (i) {
+            case 0: jj_3_1(); break;
+            case 1: jj_3_2(); break;
+            case 2: jj_3_3(); break;
+            case 3: jj_3_4(); break;
+            case 4: jj_3_5(); break;
+            case 5: jj_3_6(); break;
+          }
         }
+        p = p.next;
+      } while (p != null);
+      } catch(LookaheadSuccess ls) { }
     }
+    jj_rescan = false;
+  }
 
-    private java.util.List<int[]> jj_expentries = new java.util.ArrayList<int[]>();
-    private int[] jj_expentry;
-    private int jj_kind = -1;
-    private int[] jj_lasttokens = new int[100];
-    private int jj_endpos;
-
-    private void jj_add_error_token(int kind, int pos) {
-        if (pos >= 100) {
-            return;
-        }
-        if (pos == jj_endpos + 1) {
-            jj_lasttokens[jj_endpos++] = kind;
-        } else if (jj_endpos != 0) {
-            jj_expentry = new int[jj_endpos];
-            for (int i = 0; i < jj_endpos; i++) {
-                jj_expentry[i] = jj_lasttokens[i];
-            }
-            jj_entries_loop: for (java.util.Iterator<?> it = jj_expentries.iterator(); it.hasNext();) {
-                int[] oldentry = (int[]) (it.next());
-                if (oldentry.length == jj_expentry.length) {
-                    for (int i = 0; i < jj_expentry.length; i++) {
-                        if (oldentry[i] != jj_expentry[i]) {
-                            continue jj_entries_loop;
-                        }
-                    }
-                    jj_expentries.add(jj_expentry);
-                    break jj_entries_loop;
-                }
-            }
-            if (pos != 0) {
-                jj_lasttokens[(jj_endpos = pos) - 1] = kind;
-            }
-        }
+  private void jj_save(int index, int xla) {
+    JJCalls p = jj_2_rtns[index];
+    while (p.gen > jj_gen) {
+      if (p.next == null) { p = p.next = new JJCalls(); break; }
+      p = p.next;
     }
+    p.gen = jj_gen + xla - jj_la; p.first = token; p.arg = xla;
+  }
 
-    /** Generate ParseException. */
-    public ParseException generateParseException() {
-        jj_expentries.clear();
-        boolean[] la1tokens = new boolean[63];
-        if (jj_kind >= 0) {
-            la1tokens[jj_kind] = true;
-            jj_kind = -1;
-        }
-        for (int i = 0; i < 53; i++) {
-            if (jj_la1[i] == jj_gen) {
-                for (int j = 0; j < 32; j++) {
-                    if ((jj_la1_0[i] & (1 << j)) != 0) {
-                        la1tokens[j] = true;
-                    }
-                    if ((jj_la1_1[i] & (1 << j)) != 0) {
-                        la1tokens[32 + j] = true;
-                    }
-                }
-            }
-        }
-        for (int i = 0; i < 63; i++) {
-            if (la1tokens[i]) {
-                jj_expentry = new int[1];
-                jj_expentry[0] = i;
-                jj_expentries.add(jj_expentry);
-            }
-        }
-        jj_endpos = 0;
-        jj_rescan_token();
-        jj_add_error_token(0, 0);
-        int[][] exptokseq = new int[jj_expentries.size()][];
-        for (int i = 0; i < jj_expentries.size(); i++) {
-            exptokseq[i] = jj_expentries.get(i);
-        }
-        return new ParseException(token, exptokseq, tokenImage);
-    }
-
-    /** Enable tracing. */
-    final public void enable_tracing() {
-    }
-
-    /** Disable tracing. */
-    final public void disable_tracing() {
-    }
-
-    private void jj_rescan_token() {
-        jj_rescan = true;
-        for (int i = 0; i < 5; i++) {
-            try {
-                JJCalls p = jj_2_rtns[i];
-                do {
-                    if (p.gen > jj_gen) {
-                        jj_la = p.arg;
-                        jj_lastpos = jj_scanpos = p.first;
-                        switch (i) {
-                        case 0:
-                            jj_3_1();
-                            break;
-                        case 1:
-                            jj_3_2();
-                            break;
-                        case 2:
-                            jj_3_3();
-                            break;
-                        case 3:
-                            jj_3_4();
-                            break;
-                        case 4:
-                            jj_3_5();
-                            break;
-                        }
-                    }
-                    p = p.next;
-                } while (p != null);
-            } catch (LookaheadSuccess ls) {
-            }
-        }
-        jj_rescan = false;
-    }
-
-    private void jj_save(int index, int xla) {
-        JJCalls p = jj_2_rtns[index];
-        while (p.gen > jj_gen) {
-            if (p.next == null) {
-                p = p.next = new JJCalls();
-                break;
-            }
-            p = p.next;
-        }
-        p.gen = jj_gen + xla - jj_la;
-        p.first = token;
-        p.arg = xla;
-    }
-
-    static final class JJCalls {
-        int gen;
-        Token first;
-        int arg;
-        JJCalls next;
-    }
+  static final class JJCalls {
+    int gen;
+    Token first;
+    int arg;
+    JJCalls next;
+  }
 
 }
diff --git a/impl/src/main/java/com/sun/el/parser/ELParser.jjt b/impl/src/main/java/com/sun/el/parser/ELParser.jjt
index 703f6ef..2821577 100644
--- a/impl/src/main/java/com/sun/el/parser/ELParser.jjt
+++ b/impl/src/main/java/com/sun/el/parser/ELParser.jjt
@@ -113,8 +113,8 @@
  */
 void Assignment() : {}
 {
-        LOOKAHEAD(3) LambdaExpression() |
-        Choice() (<ASSIGN> Assignment() #Assign(2) )?
+        LOOKAHEAD(4) LambdaExpression() | // Do not mistake ((i)) with Lambdaexp check until the arrow
+        Choice() ( LOOKAHEAD(2) <ASSIGN> Assignment() #Assign(2) )* // avoid failure of expr ${x = 10}
 }
 
 /*
@@ -323,7 +323,7 @@
  */
 void NonLiteral() : {}
 {
-        LOOKAHEAD(4) LambdaExpressionOrCall()
+        LOOKAHEAD(5) LambdaExpressionOrCall() // check beyond the arrow 
  	| <LPAREN> Expression() <RPAREN>
  	| LOOKAHEAD(4) Function()
 	| Identifier()
diff --git a/impl/src/main/java/com/sun/el/parser/ELParserConstants.java b/impl/src/main/java/com/sun/el/parser/ELParserConstants.java
index 41445ce..c6145a3 100644
--- a/impl/src/main/java/com/sun/el/parser/ELParserConstants.java
+++ b/impl/src/main/java/com/sun/el/parser/ELParserConstants.java
@@ -13,145 +13,206 @@
  *
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
-
+ 
 /* Generated By:JJTree&JavaCC: Do not edit this line. ELParserConstants.java */
 package com.sun.el.parser;
 
+
 /**
- * Token literal values and constants. Generated by org.javacc.parser.OtherFilesGen#start()
+ * Token literal values and constants.
+ * Generated by org.javacc.parser.OtherFilesGen#start()
  */
 public interface ELParserConstants {
 
-    /** End of File. */
-    int EOF = 0;
-    /** RegularExpression Id. */
-    int LITERAL_EXPRESSION = 1;
-    /** RegularExpression Id. */
-    int START_DYNAMIC_EXPRESSION = 2;
-    /** RegularExpression Id. */
-    int START_DEFERRED_EXPRESSION = 3;
-    /** RegularExpression Id. */
-    int START_MAP = 9;
-    /** RegularExpression Id. */
-    int RCURL = 10;
-    /** RegularExpression Id. */
-    int INTEGER_LITERAL = 11;
-    /** RegularExpression Id. */
-    int FLOATING_POINT_LITERAL = 12;
-    /** RegularExpression Id. */
-    int EXPONENT = 13;
-    /** RegularExpression Id. */
-    int STRING_LITERAL = 14;
-    /** RegularExpression Id. */
-    int BADLY_ESCAPED_STRING_LITERAL = 15;
-    /** RegularExpression Id. */
-    int TRUE = 16;
-    /** RegularExpression Id. */
-    int FALSE = 17;
-    /** RegularExpression Id. */
-    int NULL = 18;
-    /** RegularExpression Id. */
-    int DOT = 19;
-    /** RegularExpression Id. */
-    int LPAREN = 20;
-    /** RegularExpression Id. */
-    int RPAREN = 21;
-    /** RegularExpression Id. */
-    int LBRACK = 22;
-    /** RegularExpression Id. */
-    int RBRACK = 23;
-    /** RegularExpression Id. */
-    int COLON = 24;
-    /** RegularExpression Id. */
-    int COMMA = 25;
-    /** RegularExpression Id. */
-    int SEMICOLON = 26;
-    /** RegularExpression Id. */
-    int GT0 = 27;
-    /** RegularExpression Id. */
-    int GT1 = 28;
-    /** RegularExpression Id. */
-    int LT0 = 29;
-    /** RegularExpression Id. */
-    int LT1 = 30;
-    /** RegularExpression Id. */
-    int GE0 = 31;
-    /** RegularExpression Id. */
-    int GE1 = 32;
-    /** RegularExpression Id. */
-    int LE0 = 33;
-    /** RegularExpression Id. */
-    int LE1 = 34;
-    /** RegularExpression Id. */
-    int EQ0 = 35;
-    /** RegularExpression Id. */
-    int EQ1 = 36;
-    /** RegularExpression Id. */
-    int NE0 = 37;
-    /** RegularExpression Id. */
-    int NE1 = 38;
-    /** RegularExpression Id. */
-    int NOT0 = 39;
-    /** RegularExpression Id. */
-    int NOT1 = 40;
-    /** RegularExpression Id. */
-    int AND0 = 41;
-    /** RegularExpression Id. */
-    int AND1 = 42;
-    /** RegularExpression Id. */
-    int OR0 = 43;
-    /** RegularExpression Id. */
-    int OR1 = 44;
-    /** RegularExpression Id. */
-    int EMPTY = 45;
-    /** RegularExpression Id. */
-    int INSTANCEOF = 46;
-    /** RegularExpression Id. */
-    int MULT = 47;
-    /** RegularExpression Id. */
-    int PLUS = 48;
-    /** RegularExpression Id. */
-    int MINUS = 49;
-    /** RegularExpression Id. */
-    int QUESTIONMARK = 50;
-    /** RegularExpression Id. */
-    int DIV0 = 51;
-    /** RegularExpression Id. */
-    int DIV1 = 52;
-    /** RegularExpression Id. */
-    int MOD0 = 53;
-    /** RegularExpression Id. */
-    int MOD1 = 54;
-    /** RegularExpression Id. */
-    int CONCAT = 55;
-    /** RegularExpression Id. */
-    int ASSIGN = 56;
-    /** RegularExpression Id. */
-    int ARROW = 57;
-    /** RegularExpression Id. */
-    int IDENTIFIER = 58;
-    /** RegularExpression Id. */
-    int IMPL_OBJ_START = 59;
-    /** RegularExpression Id. */
-    int LETTER = 60;
-    /** RegularExpression Id. */
-    int DIGIT = 61;
-    /** RegularExpression Id. */
-    int ILLEGAL_CHARACTER = 62;
+  /** End of File. */
+  int EOF = 0;
+  /** RegularExpression Id. */
+  int LITERAL_EXPRESSION = 1;
+  /** RegularExpression Id. */
+  int START_DYNAMIC_EXPRESSION = 2;
+  /** RegularExpression Id. */
+  int START_DEFERRED_EXPRESSION = 3;
+  /** RegularExpression Id. */
+  int START_MAP = 9;
+  /** RegularExpression Id. */
+  int RCURL = 10;
+  /** RegularExpression Id. */
+  int INTEGER_LITERAL = 11;
+  /** RegularExpression Id. */
+  int FLOATING_POINT_LITERAL = 12;
+  /** RegularExpression Id. */
+  int EXPONENT = 13;
+  /** RegularExpression Id. */
+  int STRING_LITERAL = 14;
+  /** RegularExpression Id. */
+  int BADLY_ESCAPED_STRING_LITERAL = 15;
+  /** RegularExpression Id. */
+  int TRUE = 16;
+  /** RegularExpression Id. */
+  int FALSE = 17;
+  /** RegularExpression Id. */
+  int NULL = 18;
+  /** RegularExpression Id. */
+  int DOT = 19;
+  /** RegularExpression Id. */
+  int LPAREN = 20;
+  /** RegularExpression Id. */
+  int RPAREN = 21;
+  /** RegularExpression Id. */
+  int LBRACK = 22;
+  /** RegularExpression Id. */
+  int RBRACK = 23;
+  /** RegularExpression Id. */
+  int COLON = 24;
+  /** RegularExpression Id. */
+  int COMMA = 25;
+  /** RegularExpression Id. */
+  int SEMICOLON = 26;
+  /** RegularExpression Id. */
+  int GT0 = 27;
+  /** RegularExpression Id. */
+  int GT1 = 28;
+  /** RegularExpression Id. */
+  int LT0 = 29;
+  /** RegularExpression Id. */
+  int LT1 = 30;
+  /** RegularExpression Id. */
+  int GE0 = 31;
+  /** RegularExpression Id. */
+  int GE1 = 32;
+  /** RegularExpression Id. */
+  int LE0 = 33;
+  /** RegularExpression Id. */
+  int LE1 = 34;
+  /** RegularExpression Id. */
+  int EQ0 = 35;
+  /** RegularExpression Id. */
+  int EQ1 = 36;
+  /** RegularExpression Id. */
+  int NE0 = 37;
+  /** RegularExpression Id. */
+  int NE1 = 38;
+  /** RegularExpression Id. */
+  int NOT0 = 39;
+  /** RegularExpression Id. */
+  int NOT1 = 40;
+  /** RegularExpression Id. */
+  int AND0 = 41;
+  /** RegularExpression Id. */
+  int AND1 = 42;
+  /** RegularExpression Id. */
+  int OR0 = 43;
+  /** RegularExpression Id. */
+  int OR1 = 44;
+  /** RegularExpression Id. */
+  int EMPTY = 45;
+  /** RegularExpression Id. */
+  int INSTANCEOF = 46;
+  /** RegularExpression Id. */
+  int MULT = 47;
+  /** RegularExpression Id. */
+  int PLUS = 48;
+  /** RegularExpression Id. */
+  int MINUS = 49;
+  /** RegularExpression Id. */
+  int QUESTIONMARK = 50;
+  /** RegularExpression Id. */
+  int DIV0 = 51;
+  /** RegularExpression Id. */
+  int DIV1 = 52;
+  /** RegularExpression Id. */
+  int MOD0 = 53;
+  /** RegularExpression Id. */
+  int MOD1 = 54;
+  /** RegularExpression Id. */
+  int CONCAT = 55;
+  /** RegularExpression Id. */
+  int ASSIGN = 56;
+  /** RegularExpression Id. */
+  int ARROW = 57;
+  /** RegularExpression Id. */
+  int IDENTIFIER = 58;
+  /** RegularExpression Id. */
+  int IMPL_OBJ_START = 59;
+  /** RegularExpression Id. */
+  int LETTER = 60;
+  /** RegularExpression Id. */
+  int DIGIT = 61;
+  /** RegularExpression Id. */
+  int ILLEGAL_CHARACTER = 62;
 
-    /** Lexical state. */
-    int DEFAULT = 0;
-    /** Lexical state. */
-    int IN_EXPRESSION = 1;
-    /** Lexical state. */
-    int IN_MAP = 2;
+  /** Lexical state. */
+  int DEFAULT = 0;
+  /** Lexical state. */
+  int IN_EXPRESSION = 1;
+  /** Lexical state. */
+  int IN_MAP = 2;
 
-    /** Literal token values. */
-    String[] tokenImage = { "<EOF>", "<LITERAL_EXPRESSION>", "\"${\"", "\"#{\"", "\"\\\\\"", "\" \"", "\"\\t\"", "\"\\n\"", "\"\\r\"", "\"{\"", "\"}\"",
-            "<INTEGER_LITERAL>", "<FLOATING_POINT_LITERAL>", "<EXPONENT>", "<STRING_LITERAL>", "<BADLY_ESCAPED_STRING_LITERAL>", "\"true\"", "\"false\"",
-            "\"null\"", "\".\"", "\"(\"", "\")\"", "\"[\"", "\"]\"", "\":\"", "\",\"", "\";\"", "\">\"", "\"gt\"", "\"<\"", "\"lt\"", "\">=\"", "\"ge\"",
-            "\"<=\"", "\"le\"", "\"==\"", "\"eq\"", "\"!=\"", "\"ne\"", "\"!\"", "\"not\"", "\"&&\"", "\"and\"", "\"||\"", "\"or\"", "\"empty\"",
-            "\"instanceof\"", "\"*\"", "\"+\"", "\"-\"", "\"?\"", "\"/\"", "\"div\"", "\"%\"", "\"mod\"", "\"+=\"", "\"=\"", "\"->\"", "<IDENTIFIER>", "\"#\"",
-            "<LETTER>", "<DIGIT>", "<ILLEGAL_CHARACTER>", };
+  /** Literal token values. */
+  String[] tokenImage = {
+    "<EOF>",
+    "<LITERAL_EXPRESSION>",
+    "\"${\"",
+    "\"#{\"",
+    "\"\\\\\"",
+    "\" \"",
+    "\"\\t\"",
+    "\"\\n\"",
+    "\"\\r\"",
+    "\"{\"",
+    "\"}\"",
+    "<INTEGER_LITERAL>",
+    "<FLOATING_POINT_LITERAL>",
+    "<EXPONENT>",
+    "<STRING_LITERAL>",
+    "<BADLY_ESCAPED_STRING_LITERAL>",
+    "\"true\"",
+    "\"false\"",
+    "\"null\"",
+    "\".\"",
+    "\"(\"",
+    "\")\"",
+    "\"[\"",
+    "\"]\"",
+    "\":\"",
+    "\",\"",
+    "\";\"",
+    "\">\"",
+    "\"gt\"",
+    "\"<\"",
+    "\"lt\"",
+    "\">=\"",
+    "\"ge\"",
+    "\"<=\"",
+    "\"le\"",
+    "\"==\"",
+    "\"eq\"",
+    "\"!=\"",
+    "\"ne\"",
+    "\"!\"",
+    "\"not\"",
+    "\"&&\"",
+    "\"and\"",
+    "\"||\"",
+    "\"or\"",
+    "\"empty\"",
+    "\"instanceof\"",
+    "\"*\"",
+    "\"+\"",
+    "\"-\"",
+    "\"?\"",
+    "\"/\"",
+    "\"div\"",
+    "\"%\"",
+    "\"mod\"",
+    "\"+=\"",
+    "\"=\"",
+    "\"->\"",
+    "<IDENTIFIER>",
+    "\"#\"",
+    "<LETTER>",
+    "<DIGIT>",
+    "<ILLEGAL_CHARACTER>",
+  };
 
 }
diff --git a/impl/src/main/java/com/sun/el/parser/ELParserTokenManager.java b/impl/src/main/java/com/sun/el/parser/ELParserTokenManager.java
index 0c59560..be327eb 100644
--- a/impl/src/main/java/com/sun/el/parser/ELParserTokenManager.java
+++ b/impl/src/main/java/com/sun/el/parser/ELParserTokenManager.java
@@ -13,2192 +13,2067 @@
  *
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
-
+ 
 /* Generated By:JJTree&JavaCC: Do not edit this line. ELParserTokenManager.java */
 package com.sun.el.parser;
+import java.io.StringReader;
+import javax.el.ELException;
 
 /** Token Manager. */
-public class ELParserTokenManager implements ELParserConstants {
+public class ELParserTokenManager implements ELParserConstants
+{
     java.util.Stack<Integer> stack = new java.util.Stack<Integer>();
 
-    /** Debug output. */
-    public java.io.PrintStream debugStream = System.out;
-
-    /** Set debug output. */
-    public void setDebugStream(java.io.PrintStream ds) {
-        debugStream = ds;
-    }
-
-    private final int jjStopStringLiteralDfa_0(int pos, long active0) {
-        switch (pos) {
-        case 0:
-            if ((active0 & 0x10L) != 0L) {
-                return 2;
-            }
-            if ((active0 & 0xcL) != 0L) {
-                jjmatchedKind = 1;
-                return 4;
-            }
-            return -1;
-        default:
-            return -1;
-        }
-    }
-
-    private final int jjStartNfa_0(int pos, long active0) {
-        return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
-    }
-
-    private int jjStopAtPos(int pos, int kind) {
-        jjmatchedKind = kind;
-        jjmatchedPos = pos;
-        return pos + 1;
-    }
-
-    private int jjMoveStringLiteralDfa0_0() {
-        switch (curChar) {
-        case 35:
-            return jjMoveStringLiteralDfa1_0(0x8L);
-        case 36:
-            return jjMoveStringLiteralDfa1_0(0x4L);
-        case 92:
-            return jjStartNfaWithStates_0(0, 4, 2);
-        default:
-            return jjMoveNfa_0(6, 0);
-        }
-    }
-
-    private int jjMoveStringLiteralDfa1_0(long active0) {
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_0(0, active0);
-            return 1;
-        }
-        switch (curChar) {
-        case 123:
-            if ((active0 & 0x4L) != 0L) {
-                return jjStopAtPos(1, 2);
-            } else if ((active0 & 0x8L) != 0L) {
-                return jjStopAtPos(1, 3);
-            }
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_0(0, active0);
-    }
-
-    private int jjStartNfaWithStates_0(int pos, int kind, int state) {
-        jjmatchedKind = kind;
-        jjmatchedPos = pos;
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            return pos + 1;
-        }
-        return jjMoveNfa_0(state, pos + 1);
-    }
-
-    static final long[] jjbitVec0 = { 0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL };
-    static final long[] jjbitVec2 = { 0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL };
-
-    private int jjMoveNfa_0(int startState, int curPos) {
-        int startsAt = 0;
-        jjnewStateCnt = 7;
-        int i = 1;
-        jjstateSet[0] = startState;
-        int kind = 0x7fffffff;
-        for (;;) {
-            if (++jjround == 0x7fffffff) {
-                ReInitRounds();
-            }
-            if (curChar < 64) {
-                long l = 1L << curChar;
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 6:
-                        if ((0xffffffe7ffffffffL & l) != 0L) {
-                            if (kind > 1) {
-                                kind = 1;
-                            }
-                            jjCheckNAddStates(0, 3);
-                        } else if ((0x1800000000L & l) != 0L) {
-                            if (kind > 1) {
-                                kind = 1;
-                            }
-                        }
-                        if (curChar == 35) {
-                            jjCheckNAdd(4);
-                        } else if (curChar == 36) {
-                            jjCheckNAdd(4);
-                        }
-                        break;
-                    case 0:
-                    case 4:
-                        if ((0xffffffe7ffffffffL & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 1) {
-                            kind = 1;
-                        }
-                        jjCheckNAddStates(0, 3);
-                        break;
-                    case 2:
-                        if ((0x1800000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 1) {
-                            kind = 1;
-                        }
-                        jjCheckNAddStates(0, 3);
-                        break;
-                    case 3:
-                        if (curChar == 36) {
-                            jjCheckNAdd(4);
-                        }
-                        break;
-                    case 5:
-                        if (curChar == 35) {
-                            jjCheckNAdd(4);
-                        }
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            } else if (curChar < 128) {
-                long l = 1L << (curChar & 077);
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 6:
-                        if ((0xffffffffefffffffL & l) != 0L) {
-                            if (kind > 1) {
-                                kind = 1;
-                            }
-                            jjCheckNAddStates(0, 3);
-                        } else if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 2;
-                        }
-                        break;
-                    case 0:
-                        if ((0xffffffffefffffffL & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 1) {
-                            kind = 1;
-                        }
-                        jjCheckNAddStates(0, 3);
-                        break;
-                    case 1:
-                        if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 2;
-                        }
-                        break;
-                    case 2:
-                        if (curChar != 92) {
-                            break;
-                        }
-                        if (kind > 1) {
-                            kind = 1;
-                        }
-                        jjCheckNAddStates(0, 3);
-                        break;
-                    case 4:
-                        if ((0xf7ffffffffffffffL & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 1) {
-                            kind = 1;
-                        }
-                        jjCheckNAddStates(0, 3);
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            } else {
-                int hiByte = curChar >> 8;
-                int i1 = hiByte >> 6;
-                long l1 = 1L << (hiByte & 077);
-                int i2 = (curChar & 0xff) >> 6;
-                long l2 = 1L << (curChar & 077);
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 6:
-                    case 0:
-                    case 4:
-                        if (!jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                            break;
-                        }
-                        if (kind > 1) {
-                            kind = 1;
-                        }
-                        jjCheckNAddStates(0, 3);
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            }
-            if (kind != 0x7fffffff) {
-                jjmatchedKind = kind;
-                jjmatchedPos = curPos;
-                kind = 0x7fffffff;
-            }
-            ++curPos;
-            if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt))) {
-                return curPos;
-            }
-            try {
-                curChar = input_stream.readChar();
-            } catch (java.io.IOException e) {
-                return curPos;
-            }
-        }
-    }
-
-    private final int jjStopStringLiteralDfa_2(int pos, long active0) {
-        switch (pos) {
-        case 0:
-            if ((active0 & 0x80000L) != 0L) {
-                return 1;
-            }
-            if ((active0 & 0x50755550070000L) != 0L) {
-                jjmatchedKind = 58;
-                return 6;
-            }
-            return -1;
-        case 1:
-            if ((active0 & 0x105550000000L) != 0L) {
-                return 6;
-            }
-            if ((active0 & 0x50650000070000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 1;
-                return 6;
-            }
-            return -1;
-        case 2:
-            if ((active0 & 0x50050000000000L) != 0L) {
-                return 6;
-            }
-            if ((active0 & 0x600000070000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 2;
-                return 6;
-            }
-            return -1;
-        case 3:
-            if ((active0 & 0x50000L) != 0L) {
-                return 6;
-            }
-            if ((active0 & 0x600000020000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 3;
-                return 6;
-            }
-            return -1;
-        case 4:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 4;
-                return 6;
-            }
-            if ((active0 & 0x200000020000L) != 0L) {
-                return 6;
-            }
-            return -1;
-        case 5:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 5;
-                return 6;
-            }
-            return -1;
-        case 6:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 6;
-                return 6;
-            }
-            return -1;
-        case 7:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 7;
-                return 6;
-            }
-            return -1;
-        case 8:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 8;
-                return 6;
-            }
-            return -1;
-        default:
-            return -1;
-        }
-    }
-
-    private final int jjStartNfa_2(int pos, long active0) {
-        return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1);
-    }
-
-    private int jjMoveStringLiteralDfa0_2() {
-        switch (curChar) {
-        case 33:
-            jjmatchedKind = 39;
-            return jjMoveStringLiteralDfa1_2(0x2000000000L);
-        case 37:
-            return jjStopAtPos(0, 53);
-        case 38:
-            return jjMoveStringLiteralDfa1_2(0x20000000000L);
-        case 40:
-            return jjStopAtPos(0, 20);
-        case 41:
-            return jjStopAtPos(0, 21);
-        case 42:
-            return jjStopAtPos(0, 47);
-        case 43:
-            jjmatchedKind = 48;
-            return jjMoveStringLiteralDfa1_2(0x80000000000000L);
-        case 44:
-            return jjStopAtPos(0, 25);
-        case 45:
-            jjmatchedKind = 49;
-            return jjMoveStringLiteralDfa1_2(0x200000000000000L);
-        case 46:
-            return jjStartNfaWithStates_2(0, 19, 1);
-        case 47:
-            return jjStopAtPos(0, 51);
-        case 58:
-            return jjStopAtPos(0, 24);
-        case 59:
-            return jjStopAtPos(0, 26);
-        case 60:
-            jjmatchedKind = 29;
-            return jjMoveStringLiteralDfa1_2(0x200000000L);
-        case 61:
-            jjmatchedKind = 56;
-            return jjMoveStringLiteralDfa1_2(0x800000000L);
-        case 62:
-            jjmatchedKind = 27;
-            return jjMoveStringLiteralDfa1_2(0x80000000L);
-        case 63:
-            return jjStopAtPos(0, 50);
-        case 91:
-            return jjStopAtPos(0, 22);
-        case 93:
-            return jjStopAtPos(0, 23);
-        case 97:
-            return jjMoveStringLiteralDfa1_2(0x40000000000L);
-        case 100:
-            return jjMoveStringLiteralDfa1_2(0x10000000000000L);
-        case 101:
-            return jjMoveStringLiteralDfa1_2(0x201000000000L);
-        case 102:
-            return jjMoveStringLiteralDfa1_2(0x20000L);
-        case 103:
-            return jjMoveStringLiteralDfa1_2(0x110000000L);
-        case 105:
-            return jjMoveStringLiteralDfa1_2(0x400000000000L);
-        case 108:
-            return jjMoveStringLiteralDfa1_2(0x440000000L);
-        case 109:
-            return jjMoveStringLiteralDfa1_2(0x40000000000000L);
-        case 110:
-            return jjMoveStringLiteralDfa1_2(0x14000040000L);
-        case 111:
-            return jjMoveStringLiteralDfa1_2(0x100000000000L);
-        case 116:
-            return jjMoveStringLiteralDfa1_2(0x10000L);
-        case 123:
-            return jjStopAtPos(0, 9);
-        case 124:
-            return jjMoveStringLiteralDfa1_2(0x80000000000L);
-        case 125:
-            return jjStopAtPos(0, 10);
-        default:
-            return jjMoveNfa_2(0, 0);
-        }
-    }
-
-    private int jjMoveStringLiteralDfa1_2(long active0) {
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_2(0, active0);
-            return 1;
-        }
-        switch (curChar) {
-        case 38:
-            if ((active0 & 0x20000000000L) != 0L) {
-                return jjStopAtPos(1, 41);
-            }
-            break;
-        case 61:
-            if ((active0 & 0x80000000L) != 0L) {
-                return jjStopAtPos(1, 31);
-            } else if ((active0 & 0x200000000L) != 0L) {
-                return jjStopAtPos(1, 33);
-            } else if ((active0 & 0x800000000L) != 0L) {
-                return jjStopAtPos(1, 35);
-            } else if ((active0 & 0x2000000000L) != 0L) {
-                return jjStopAtPos(1, 37);
-            } else if ((active0 & 0x80000000000000L) != 0L) {
-                return jjStopAtPos(1, 55);
-            }
-            break;
-        case 62:
-            if ((active0 & 0x200000000000000L) != 0L) {
-                return jjStopAtPos(1, 57);
-            }
-            break;
-        case 97:
-            return jjMoveStringLiteralDfa2_2(active0, 0x20000L);
-        case 101:
-            if ((active0 & 0x100000000L) != 0L) {
-                return jjStartNfaWithStates_2(1, 32, 6);
-            } else if ((active0 & 0x400000000L) != 0L) {
-                return jjStartNfaWithStates_2(1, 34, 6);
-            } else if ((active0 & 0x4000000000L) != 0L) {
-                return jjStartNfaWithStates_2(1, 38, 6);
-            }
-            break;
-        case 105:
-            return jjMoveStringLiteralDfa2_2(active0, 0x10000000000000L);
-        case 109:
-            return jjMoveStringLiteralDfa2_2(active0, 0x200000000000L);
-        case 110:
-            return jjMoveStringLiteralDfa2_2(active0, 0x440000000000L);
-        case 111:
-            return jjMoveStringLiteralDfa2_2(active0, 0x40010000000000L);
-        case 113:
-            if ((active0 & 0x1000000000L) != 0L) {
-                return jjStartNfaWithStates_2(1, 36, 6);
-            }
-            break;
-        case 114:
-            if ((active0 & 0x100000000000L) != 0L) {
-                return jjStartNfaWithStates_2(1, 44, 6);
-            }
-            return jjMoveStringLiteralDfa2_2(active0, 0x10000L);
-        case 116:
-            if ((active0 & 0x10000000L) != 0L) {
-                return jjStartNfaWithStates_2(1, 28, 6);
-            } else if ((active0 & 0x40000000L) != 0L) {
-                return jjStartNfaWithStates_2(1, 30, 6);
-            }
-            break;
-        case 117:
-            return jjMoveStringLiteralDfa2_2(active0, 0x40000L);
-        case 124:
-            if ((active0 & 0x80000000000L) != 0L) {
-                return jjStopAtPos(1, 43);
-            }
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_2(0, active0);
-    }
-
-    private int jjMoveStringLiteralDfa2_2(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_2(0, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_2(1, active0);
+  /** Debug output. */
+  public  java.io.PrintStream debugStream = System.out;
+  /** Set debug output. */
+  public  void setDebugStream(java.io.PrintStream ds) { debugStream = ds; }
+private final int jjStopStringLiteralDfa_0(int pos, long active0)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active0 & 0x10L) != 0L)
             return 2;
-        }
-        switch (curChar) {
-        case 100:
-            if ((active0 & 0x40000000000L) != 0L) {
-                return jjStartNfaWithStates_2(2, 42, 6);
-            } else if ((active0 & 0x40000000000000L) != 0L) {
-                return jjStartNfaWithStates_2(2, 54, 6);
-            }
-            break;
-        case 108:
-            return jjMoveStringLiteralDfa3_2(active0, 0x60000L);
-        case 112:
-            return jjMoveStringLiteralDfa3_2(active0, 0x200000000000L);
-        case 115:
-            return jjMoveStringLiteralDfa3_2(active0, 0x400000000000L);
-        case 116:
-            if ((active0 & 0x10000000000L) != 0L) {
-                return jjStartNfaWithStates_2(2, 40, 6);
-            }
-            break;
-        case 117:
-            return jjMoveStringLiteralDfa3_2(active0, 0x10000L);
-        case 118:
-            if ((active0 & 0x10000000000000L) != 0L) {
-                return jjStartNfaWithStates_2(2, 52, 6);
-            }
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_2(1, active0);
-    }
-
-    private int jjMoveStringLiteralDfa3_2(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_2(1, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_2(2, active0);
-            return 3;
-        }
-        switch (curChar) {
-        case 101:
-            if ((active0 & 0x10000L) != 0L) {
-                return jjStartNfaWithStates_2(3, 16, 6);
-            }
-            break;
-        case 108:
-            if ((active0 & 0x40000L) != 0L) {
-                return jjStartNfaWithStates_2(3, 18, 6);
-            }
-            break;
-        case 115:
-            return jjMoveStringLiteralDfa4_2(active0, 0x20000L);
-        case 116:
-            return jjMoveStringLiteralDfa4_2(active0, 0x600000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_2(2, active0);
-    }
-
-    private int jjMoveStringLiteralDfa4_2(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_2(2, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_2(3, active0);
+         if ((active0 & 0xcL) != 0L)
+         {
+            jjmatchedKind = 1;
             return 4;
-        }
-        switch (curChar) {
-        case 97:
-            return jjMoveStringLiteralDfa5_2(active0, 0x400000000000L);
-        case 101:
-            if ((active0 & 0x20000L) != 0L) {
-                return jjStartNfaWithStates_2(4, 17, 6);
+         }
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_0(int pos, long active0)
+{
+   return jjMoveNfa_0(jjStopStringLiteralDfa_0(pos, active0), pos + 1);
+}
+private int jjStopAtPos(int pos, int kind)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   return pos + 1;
+}
+private int jjMoveStringLiteralDfa0_0()
+{
+   switch(curChar)
+   {
+      case 35:
+         return jjMoveStringLiteralDfa1_0(0x8L);
+      case 36:
+         return jjMoveStringLiteralDfa1_0(0x4L);
+      case 92:
+         return jjStartNfaWithStates_0(0, 4, 2);
+      default :
+         return jjMoveNfa_0(6, 0);
+   }
+}
+private int jjMoveStringLiteralDfa1_0(long active0)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_0(0, active0);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 123:
+         if ((active0 & 0x4L) != 0L)
+            return jjStopAtPos(1, 2);
+         else if ((active0 & 0x8L) != 0L)
+            return jjStopAtPos(1, 3);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_0(0, active0);
+}
+private int jjStartNfaWithStates_0(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_0(state, pos + 1);
+}
+static final long[] jjbitVec0 = {
+   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec2 = {
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+private int jjMoveNfa_0(int startState, int curPos)
+{
+   int startsAt = 0;
+   jjnewStateCnt = 7;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 6:
+                  if ((0xffffffe7ffffffffL & l) != 0L)
+                  {
+                     if (kind > 1)
+                        kind = 1;
+                     jjCheckNAddStates(0, 3);
+                  }
+                  else if ((0x1800000000L & l) != 0L)
+                  {
+                     if (kind > 1)
+                        kind = 1;
+                  }
+                  if (curChar == 35)
+                     jjCheckNAdd(4);
+                  else if (curChar == 36)
+                     jjCheckNAdd(4);
+                  break;
+               case 0:
+               case 4:
+                  if ((0xffffffe7ffffffffL & l) == 0L)
+                     break;
+                  if (kind > 1)
+                     kind = 1;
+                  jjCheckNAddStates(0, 3);
+                  break;
+               case 2:
+                  if ((0x1800000000L & l) == 0L)
+                     break;
+                  if (kind > 1)
+                     kind = 1;
+                  jjCheckNAddStates(0, 3);
+                  break;
+               case 3:
+                  if (curChar == 36)
+                     jjCheckNAdd(4);
+                  break;
+               case 5:
+                  if (curChar == 35)
+                     jjCheckNAdd(4);
+                  break;
+               default : break;
             }
-            break;
-        case 121:
-            if ((active0 & 0x200000000000L) != 0L) {
-                return jjStartNfaWithStates_2(4, 45, 6);
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 6:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                  {
+                     if (kind > 1)
+                        kind = 1;
+                     jjCheckNAddStates(0, 3);
+                  }
+                  else if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 2;
+                  break;
+               case 0:
+                  if ((0xffffffffefffffffL & l) == 0L)
+                     break;
+                  if (kind > 1)
+                     kind = 1;
+                  jjCheckNAddStates(0, 3);
+                  break;
+               case 1:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 2;
+                  break;
+               case 2:
+                  if (curChar != 92)
+                     break;
+                  if (kind > 1)
+                     kind = 1;
+                  jjCheckNAddStates(0, 3);
+                  break;
+               case 4:
+                  if ((0xf7ffffffffffffffL & l) == 0L)
+                     break;
+                  if (kind > 1)
+                     kind = 1;
+                  jjCheckNAddStates(0, 3);
+                  break;
+               default : break;
             }
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_2(3, active0);
-    }
-
-    private int jjMoveStringLiteralDfa5_2(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_2(3, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_2(4, active0);
-            return 5;
-        }
-        switch (curChar) {
-        case 110:
-            return jjMoveStringLiteralDfa6_2(active0, 0x400000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_2(4, active0);
-    }
-
-    private int jjMoveStringLiteralDfa6_2(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_2(4, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_2(5, active0);
-            return 6;
-        }
-        switch (curChar) {
-        case 99:
-            return jjMoveStringLiteralDfa7_2(active0, 0x400000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_2(5, active0);
-    }
-
-    private int jjMoveStringLiteralDfa7_2(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_2(5, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_2(6, active0);
-            return 7;
-        }
-        switch (curChar) {
-        case 101:
-            return jjMoveStringLiteralDfa8_2(active0, 0x400000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_2(6, active0);
-    }
-
-    private int jjMoveStringLiteralDfa8_2(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_2(6, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_2(7, active0);
-            return 8;
-        }
-        switch (curChar) {
-        case 111:
-            return jjMoveStringLiteralDfa9_2(active0, 0x400000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_2(7, active0);
-    }
-
-    private int jjMoveStringLiteralDfa9_2(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_2(7, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_2(8, active0);
-            return 9;
-        }
-        switch (curChar) {
-        case 102:
-            if ((active0 & 0x400000000000L) != 0L) {
-                return jjStartNfaWithStates_2(9, 46, 6);
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 6:
+               case 0:
+               case 4:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 1)
+                     kind = 1;
+                  jjCheckNAddStates(0, 3);
+                  break;
+               default : break;
             }
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_2(8, active0);
-    }
-
-    private int jjStartNfaWithStates_2(int pos, int kind, int state) {
-        jjmatchedKind = kind;
-        jjmatchedPos = pos;
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            return pos + 1;
-        }
-        return jjMoveNfa_2(state, pos + 1);
-    }
-
-    static final long[] jjbitVec3 = { 0x1ff00000fffffffeL, 0xffffffffffffc000L, 0xffffffffL, 0x600000000000000L };
-    static final long[] jjbitVec4 = { 0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL };
-    static final long[] jjbitVec5 = { 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL };
-    static final long[] jjbitVec6 = { 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L };
-    static final long[] jjbitVec7 = { 0xffffffffffffffffL, 0xffffffffffffffffL, 0x0L, 0x0L };
-    static final long[] jjbitVec8 = { 0x3fffffffffffL, 0x0L, 0x0L, 0x0L };
-
-    private int jjMoveNfa_2(int startState, int curPos) {
-        int startsAt = 0;
-        jjnewStateCnt = 35;
-        int i = 1;
-        jjstateSet[0] = startState;
-        int kind = 0x7fffffff;
-        for (;;) {
-            if (++jjround == 0x7fffffff) {
-                ReInitRounds();
-            }
-            if (curChar < 64) {
-                long l = 1L << curChar;
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 0:
-                        if ((0x3ff000000000000L & l) != 0L) {
-                            if (kind > 11) {
-                                kind = 11;
-                            }
-                            jjCheckNAddStates(4, 8);
-                        } else if ((0x1800000000L & l) != 0L) {
-                            if (kind > 58) {
-                                kind = 58;
-                            }
-                            jjCheckNAdd(6);
-                        } else if (curChar == 39) {
-                            jjCheckNAddStates(9, 13);
-                        } else if (curChar == 34) {
-                            jjCheckNAddStates(14, 18);
-                        } else if (curChar == 46) {
-                            jjCheckNAdd(1);
-                        }
-                        break;
-                    case 1:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAddTwoStates(1, 2);
-                        break;
-                    case 3:
-                        if ((0x280000000000L & l) != 0L) {
-                            jjCheckNAdd(4);
-                        }
-                        break;
-                    case 4:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAdd(4);
-                        break;
-                    case 5:
-                        if ((0x1800000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 58) {
-                            kind = 58;
-                        }
-                        jjCheckNAdd(6);
-                        break;
-                    case 6:
-                        if ((0x3ff001000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 58) {
-                            kind = 58;
-                        }
-                        jjCheckNAdd(6);
-                        break;
-                    case 7:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 11) {
-                            kind = 11;
-                        }
-                        jjCheckNAddStates(4, 8);
-                        break;
-                    case 8:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 11) {
-                            kind = 11;
-                        }
-                        jjCheckNAdd(8);
-                        break;
-                    case 9:
-                        if ((0x3ff000000000000L & l) != 0L) {
-                            jjCheckNAddTwoStates(9, 10);
-                        }
-                        break;
-                    case 10:
-                        if (curChar != 46) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAddTwoStates(11, 12);
-                        break;
-                    case 11:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAddTwoStates(11, 12);
-                        break;
-                    case 13:
-                        if ((0x280000000000L & l) != 0L) {
-                            jjCheckNAdd(14);
-                        }
-                        break;
-                    case 14:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAdd(14);
-                        break;
-                    case 15:
-                        if ((0x3ff000000000000L & l) != 0L) {
-                            jjCheckNAddTwoStates(15, 16);
-                        }
-                        break;
-                    case 17:
-                        if ((0x280000000000L & l) != 0L) {
-                            jjCheckNAdd(18);
-                        }
-                        break;
-                    case 18:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAdd(18);
-                        break;
-                    case 19:
-                        if (curChar == 34) {
-                            jjCheckNAddStates(14, 18);
-                        }
-                        break;
-                    case 20:
-                        if ((0xfffffffbffffffffL & l) != 0L) {
-                            jjCheckNAddStates(19, 21);
-                        }
-                        break;
-                    case 22:
-                        if (curChar == 34) {
-                            jjCheckNAddStates(19, 21);
-                        }
-                        break;
-                    case 23:
-                        if (curChar == 34 && kind > 14) {
-                            kind = 14;
-                        }
-                        break;
-                    case 24:
-                        if ((0xfffffffbffffffffL & l) != 0L) {
-                            jjCheckNAddTwoStates(24, 25);
-                        }
-                        break;
-                    case 26:
-                        if ((0xfffffffbffffffffL & l) != 0L && kind > 15) {
-                            kind = 15;
-                        }
-                        break;
-                    case 27:
-                        if (curChar == 39) {
-                            jjCheckNAddStates(9, 13);
-                        }
-                        break;
-                    case 28:
-                        if ((0xffffff7fffffffffL & l) != 0L) {
-                            jjCheckNAddStates(22, 24);
-                        }
-                        break;
-                    case 30:
-                        if (curChar == 39) {
-                            jjCheckNAddStates(22, 24);
-                        }
-                        break;
-                    case 31:
-                        if (curChar == 39 && kind > 14) {
-                            kind = 14;
-                        }
-                        break;
-                    case 32:
-                        if ((0xffffff7fffffffffL & l) != 0L) {
-                            jjCheckNAddTwoStates(32, 33);
-                        }
-                        break;
-                    case 34:
-                        if ((0xffffff7fffffffffL & l) != 0L && kind > 15) {
-                            kind = 15;
-                        }
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            } else if (curChar < 128) {
-                long l = 1L << (curChar & 077);
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 0:
-                    case 6:
-                        if ((0x7fffffe87fffffeL & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 58) {
-                            kind = 58;
-                        }
-                        jjCheckNAdd(6);
-                        break;
-                    case 2:
-                        if ((0x2000000020L & l) != 0L) {
-                            jjAddStates(25, 26);
-                        }
-                        break;
-                    case 12:
-                        if ((0x2000000020L & l) != 0L) {
-                            jjAddStates(27, 28);
-                        }
-                        break;
-                    case 16:
-                        if ((0x2000000020L & l) != 0L) {
-                            jjAddStates(29, 30);
-                        }
-                        break;
-                    case 20:
-                        if ((0xffffffffefffffffL & l) != 0L) {
-                            jjCheckNAddStates(19, 21);
-                        }
-                        break;
-                    case 21:
-                        if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 22;
-                        }
-                        break;
-                    case 22:
-                        if (curChar == 92) {
-                            jjCheckNAddStates(19, 21);
-                        }
-                        break;
-                    case 24:
-                        if ((0xffffffffefffffffL & l) != 0L) {
-                            jjAddStates(31, 32);
-                        }
-                        break;
-                    case 25:
-                        if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 26;
-                        }
-                        break;
-                    case 26:
-                    case 34:
-                        if ((0xffffffffefffffffL & l) != 0L && kind > 15) {
-                            kind = 15;
-                        }
-                        break;
-                    case 28:
-                        if ((0xffffffffefffffffL & l) != 0L) {
-                            jjCheckNAddStates(22, 24);
-                        }
-                        break;
-                    case 29:
-                        if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 30;
-                        }
-                        break;
-                    case 30:
-                        if (curChar == 92) {
-                            jjCheckNAddStates(22, 24);
-                        }
-                        break;
-                    case 32:
-                        if ((0xffffffffefffffffL & l) != 0L) {
-                            jjAddStates(33, 34);
-                        }
-                        break;
-                    case 33:
-                        if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 34;
-                        }
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            } else {
-                int hiByte = curChar >> 8;
-                int i1 = hiByte >> 6;
-                long l1 = 1L << (hiByte & 077);
-                int i2 = (curChar & 0xff) >> 6;
-                long l2 = 1L << (curChar & 077);
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 0:
-                    case 6:
-                        if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) {
-                            break;
-                        }
-                        if (kind > 58) {
-                            kind = 58;
-                        }
-                        jjCheckNAdd(6);
-                        break;
-                    case 20:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                            jjAddStates(19, 21);
-                        }
-                        break;
-                    case 24:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                            jjAddStates(31, 32);
-                        }
-                        break;
-                    case 26:
-                    case 34:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 15) {
-                            kind = 15;
-                        }
-                        break;
-                    case 28:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                            jjAddStates(22, 24);
-                        }
-                        break;
-                    case 32:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                            jjAddStates(33, 34);
-                        }
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            }
-            if (kind != 0x7fffffff) {
-                jjmatchedKind = kind;
-                jjmatchedPos = curPos;
-                kind = 0x7fffffff;
-            }
-            ++curPos;
-            if ((i = jjnewStateCnt) == (startsAt = 35 - (jjnewStateCnt = startsAt))) {
-                return curPos;
-            }
-            try {
-                curChar = input_stream.readChar();
-            } catch (java.io.IOException e) {
-                return curPos;
-            }
-        }
-    }
-
-    private final int jjStopStringLiteralDfa_1(int pos, long active0) {
-        switch (pos) {
-        case 0:
-            if ((active0 & 0x80000L) != 0L) {
-                return 1;
-            }
-            if ((active0 & 0x50755550070000L) != 0L) {
-                jjmatchedKind = 58;
-                return 6;
-            }
-            return -1;
-        case 1:
-            if ((active0 & 0x105550000000L) != 0L) {
-                return 6;
-            }
-            if ((active0 & 0x50650000070000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 1;
-                return 6;
-            }
-            return -1;
-        case 2:
-            if ((active0 & 0x50050000000000L) != 0L) {
-                return 6;
-            }
-            if ((active0 & 0x600000070000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 2;
-                return 6;
-            }
-            return -1;
-        case 3:
-            if ((active0 & 0x50000L) != 0L) {
-                return 6;
-            }
-            if ((active0 & 0x600000020000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 3;
-                return 6;
-            }
-            return -1;
-        case 4:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 4;
-                return 6;
-            }
-            if ((active0 & 0x200000020000L) != 0L) {
-                return 6;
-            }
-            return -1;
-        case 5:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 5;
-                return 6;
-            }
-            return -1;
-        case 6:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 6;
-                return 6;
-            }
-            return -1;
-        case 7:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 7;
-                return 6;
-            }
-            return -1;
-        case 8:
-            if ((active0 & 0x400000000000L) != 0L) {
-                jjmatchedKind = 58;
-                jjmatchedPos = 8;
-                return 6;
-            }
-            return -1;
-        default:
-            return -1;
-        }
-    }
-
-    private final int jjStartNfa_1(int pos, long active0) {
-        return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1);
-    }
-
-    private int jjMoveStringLiteralDfa0_1() {
-        switch (curChar) {
-        case 33:
-            jjmatchedKind = 39;
-            return jjMoveStringLiteralDfa1_1(0x2000000000L);
-        case 37:
-            return jjStopAtPos(0, 53);
-        case 38:
-            return jjMoveStringLiteralDfa1_1(0x20000000000L);
-        case 40:
-            return jjStopAtPos(0, 20);
-        case 41:
-            return jjStopAtPos(0, 21);
-        case 42:
-            return jjStopAtPos(0, 47);
-        case 43:
-            jjmatchedKind = 48;
-            return jjMoveStringLiteralDfa1_1(0x80000000000000L);
-        case 44:
-            return jjStopAtPos(0, 25);
-        case 45:
-            jjmatchedKind = 49;
-            return jjMoveStringLiteralDfa1_1(0x200000000000000L);
-        case 46:
-            return jjStartNfaWithStates_1(0, 19, 1);
-        case 47:
-            return jjStopAtPos(0, 51);
-        case 58:
-            return jjStopAtPos(0, 24);
-        case 59:
-            return jjStopAtPos(0, 26);
-        case 60:
-            jjmatchedKind = 29;
-            return jjMoveStringLiteralDfa1_1(0x200000000L);
-        case 61:
-            jjmatchedKind = 56;
-            return jjMoveStringLiteralDfa1_1(0x800000000L);
-        case 62:
-            jjmatchedKind = 27;
-            return jjMoveStringLiteralDfa1_1(0x80000000L);
-        case 63:
-            return jjStopAtPos(0, 50);
-        case 91:
-            return jjStopAtPos(0, 22);
-        case 93:
-            return jjStopAtPos(0, 23);
-        case 97:
-            return jjMoveStringLiteralDfa1_1(0x40000000000L);
-        case 100:
-            return jjMoveStringLiteralDfa1_1(0x10000000000000L);
-        case 101:
-            return jjMoveStringLiteralDfa1_1(0x201000000000L);
-        case 102:
-            return jjMoveStringLiteralDfa1_1(0x20000L);
-        case 103:
-            return jjMoveStringLiteralDfa1_1(0x110000000L);
-        case 105:
-            return jjMoveStringLiteralDfa1_1(0x400000000000L);
-        case 108:
-            return jjMoveStringLiteralDfa1_1(0x440000000L);
-        case 109:
-            return jjMoveStringLiteralDfa1_1(0x40000000000000L);
-        case 110:
-            return jjMoveStringLiteralDfa1_1(0x14000040000L);
-        case 111:
-            return jjMoveStringLiteralDfa1_1(0x100000000000L);
-        case 116:
-            return jjMoveStringLiteralDfa1_1(0x10000L);
-        case 123:
-            return jjStopAtPos(0, 9);
-        case 124:
-            return jjMoveStringLiteralDfa1_1(0x80000000000L);
-        case 125:
-            return jjStopAtPos(0, 10);
-        default:
-            return jjMoveNfa_1(0, 0);
-        }
-    }
-
-    private int jjMoveStringLiteralDfa1_1(long active0) {
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_1(0, active0);
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 7 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+private final int jjStopStringLiteralDfa_2(int pos, long active0)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active0 & 0x80000L) != 0L)
             return 1;
-        }
-        switch (curChar) {
-        case 38:
-            if ((active0 & 0x20000000000L) != 0L) {
-                return jjStopAtPos(1, 41);
-            }
-            break;
-        case 61:
-            if ((active0 & 0x80000000L) != 0L) {
-                return jjStopAtPos(1, 31);
-            } else if ((active0 & 0x200000000L) != 0L) {
-                return jjStopAtPos(1, 33);
-            } else if ((active0 & 0x800000000L) != 0L) {
-                return jjStopAtPos(1, 35);
-            } else if ((active0 & 0x2000000000L) != 0L) {
-                return jjStopAtPos(1, 37);
-            } else if ((active0 & 0x80000000000000L) != 0L) {
-                return jjStopAtPos(1, 55);
-            }
-            break;
-        case 62:
-            if ((active0 & 0x200000000000000L) != 0L) {
-                return jjStopAtPos(1, 57);
-            }
-            break;
-        case 97:
-            return jjMoveStringLiteralDfa2_1(active0, 0x20000L);
-        case 101:
-            if ((active0 & 0x100000000L) != 0L) {
-                return jjStartNfaWithStates_1(1, 32, 6);
-            } else if ((active0 & 0x400000000L) != 0L) {
-                return jjStartNfaWithStates_1(1, 34, 6);
-            } else if ((active0 & 0x4000000000L) != 0L) {
-                return jjStartNfaWithStates_1(1, 38, 6);
-            }
-            break;
-        case 105:
-            return jjMoveStringLiteralDfa2_1(active0, 0x10000000000000L);
-        case 109:
-            return jjMoveStringLiteralDfa2_1(active0, 0x200000000000L);
-        case 110:
-            return jjMoveStringLiteralDfa2_1(active0, 0x440000000000L);
-        case 111:
-            return jjMoveStringLiteralDfa2_1(active0, 0x40010000000000L);
-        case 113:
-            if ((active0 & 0x1000000000L) != 0L) {
-                return jjStartNfaWithStates_1(1, 36, 6);
-            }
-            break;
-        case 114:
-            if ((active0 & 0x100000000000L) != 0L) {
-                return jjStartNfaWithStates_1(1, 44, 6);
-            }
-            return jjMoveStringLiteralDfa2_1(active0, 0x10000L);
-        case 116:
-            if ((active0 & 0x10000000L) != 0L) {
-                return jjStartNfaWithStates_1(1, 28, 6);
-            } else if ((active0 & 0x40000000L) != 0L) {
-                return jjStartNfaWithStates_1(1, 30, 6);
-            }
-            break;
-        case 117:
-            return jjMoveStringLiteralDfa2_1(active0, 0x40000L);
-        case 124:
-            if ((active0 & 0x80000000000L) != 0L) {
-                return jjStopAtPos(1, 43);
-            }
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_1(0, active0);
-    }
-
-    private int jjMoveStringLiteralDfa2_1(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_1(0, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_1(1, active0);
-            return 2;
-        }
-        switch (curChar) {
-        case 100:
-            if ((active0 & 0x40000000000L) != 0L) {
-                return jjStartNfaWithStates_1(2, 42, 6);
-            } else if ((active0 & 0x40000000000000L) != 0L) {
-                return jjStartNfaWithStates_1(2, 54, 6);
-            }
-            break;
-        case 108:
-            return jjMoveStringLiteralDfa3_1(active0, 0x60000L);
-        case 112:
-            return jjMoveStringLiteralDfa3_1(active0, 0x200000000000L);
-        case 115:
-            return jjMoveStringLiteralDfa3_1(active0, 0x400000000000L);
-        case 116:
-            if ((active0 & 0x10000000000L) != 0L) {
-                return jjStartNfaWithStates_1(2, 40, 6);
-            }
-            break;
-        case 117:
-            return jjMoveStringLiteralDfa3_1(active0, 0x10000L);
-        case 118:
-            if ((active0 & 0x10000000000000L) != 0L) {
-                return jjStartNfaWithStates_1(2, 52, 6);
-            }
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_1(1, active0);
-    }
-
-    private int jjMoveStringLiteralDfa3_1(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_1(1, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_1(2, active0);
-            return 3;
-        }
-        switch (curChar) {
-        case 101:
-            if ((active0 & 0x10000L) != 0L) {
-                return jjStartNfaWithStates_1(3, 16, 6);
-            }
-            break;
-        case 108:
-            if ((active0 & 0x40000L) != 0L) {
-                return jjStartNfaWithStates_1(3, 18, 6);
-            }
-            break;
-        case 115:
-            return jjMoveStringLiteralDfa4_1(active0, 0x20000L);
-        case 116:
-            return jjMoveStringLiteralDfa4_1(active0, 0x600000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_1(2, active0);
-    }
-
-    private int jjMoveStringLiteralDfa4_1(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_1(2, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_1(3, active0);
-            return 4;
-        }
-        switch (curChar) {
-        case 97:
-            return jjMoveStringLiteralDfa5_1(active0, 0x400000000000L);
-        case 101:
-            if ((active0 & 0x20000L) != 0L) {
-                return jjStartNfaWithStates_1(4, 17, 6);
-            }
-            break;
-        case 121:
-            if ((active0 & 0x200000000000L) != 0L) {
-                return jjStartNfaWithStates_1(4, 45, 6);
-            }
-            break;
-        default:
-            break;
-        }
-        return jjStartNfa_1(3, active0);
-    }
-
-    private int jjMoveStringLiteralDfa5_1(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_1(3, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_1(4, active0);
-            return 5;
-        }
-        switch (curChar) {
-        case 110:
-            return jjMoveStringLiteralDfa6_1(active0, 0x400000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_1(4, active0);
-    }
-
-    private int jjMoveStringLiteralDfa6_1(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_1(4, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_1(5, active0);
+         if ((active0 & 0x50755550070000L) != 0L)
+         {
+            jjmatchedKind = 58;
             return 6;
-        }
-        switch (curChar) {
-        case 99:
-            return jjMoveStringLiteralDfa7_1(active0, 0x400000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_1(5, active0);
-    }
-
-    private int jjMoveStringLiteralDfa7_1(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_1(5, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_1(6, active0);
-            return 7;
-        }
-        switch (curChar) {
-        case 101:
-            return jjMoveStringLiteralDfa8_1(active0, 0x400000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_1(6, active0);
-    }
-
-    private int jjMoveStringLiteralDfa8_1(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_1(6, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_1(7, active0);
-            return 8;
-        }
-        switch (curChar) {
-        case 111:
-            return jjMoveStringLiteralDfa9_1(active0, 0x400000000000L);
-        default:
-            break;
-        }
-        return jjStartNfa_1(7, active0);
-    }
-
-    private int jjMoveStringLiteralDfa9_1(long old0, long active0) {
-        if (((active0 &= old0)) == 0L) {
-            return jjStartNfa_1(7, old0);
-        }
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            jjStopStringLiteralDfa_1(8, active0);
-            return 9;
-        }
-        switch (curChar) {
-        case 102:
-            if ((active0 & 0x400000000000L) != 0L) {
-                return jjStartNfaWithStates_1(9, 46, 6);
+         }
+         return -1;
+      case 1:
+         if ((active0 & 0x105550000000L) != 0L)
+            return 6;
+         if ((active0 & 0x50650000070000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 1;
+            return 6;
+         }
+         return -1;
+      case 2:
+         if ((active0 & 0x50050000000000L) != 0L)
+            return 6;
+         if ((active0 & 0x600000070000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 2;
+            return 6;
+         }
+         return -1;
+      case 3:
+         if ((active0 & 0x50000L) != 0L)
+            return 6;
+         if ((active0 & 0x600000020000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 3;
+            return 6;
+         }
+         return -1;
+      case 4:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 4;
+            return 6;
+         }
+         if ((active0 & 0x200000020000L) != 0L)
+            return 6;
+         return -1;
+      case 5:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 5;
+            return 6;
+         }
+         return -1;
+      case 6:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 6;
+            return 6;
+         }
+         return -1;
+      case 7:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 7;
+            return 6;
+         }
+         return -1;
+      case 8:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 8;
+            return 6;
+         }
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_2(int pos, long active0)
+{
+   return jjMoveNfa_2(jjStopStringLiteralDfa_2(pos, active0), pos + 1);
+}
+private int jjMoveStringLiteralDfa0_2()
+{
+   switch(curChar)
+   {
+      case 33:
+         jjmatchedKind = 39;
+         return jjMoveStringLiteralDfa1_2(0x2000000000L);
+      case 37:
+         return jjStopAtPos(0, 53);
+      case 38:
+         return jjMoveStringLiteralDfa1_2(0x20000000000L);
+      case 40:
+         return jjStopAtPos(0, 20);
+      case 41:
+         return jjStopAtPos(0, 21);
+      case 42:
+         return jjStopAtPos(0, 47);
+      case 43:
+         jjmatchedKind = 48;
+         return jjMoveStringLiteralDfa1_2(0x80000000000000L);
+      case 44:
+         return jjStopAtPos(0, 25);
+      case 45:
+         jjmatchedKind = 49;
+         return jjMoveStringLiteralDfa1_2(0x200000000000000L);
+      case 46:
+         return jjStartNfaWithStates_2(0, 19, 1);
+      case 47:
+         return jjStopAtPos(0, 51);
+      case 58:
+         return jjStopAtPos(0, 24);
+      case 59:
+         return jjStopAtPos(0, 26);
+      case 60:
+         jjmatchedKind = 29;
+         return jjMoveStringLiteralDfa1_2(0x200000000L);
+      case 61:
+         jjmatchedKind = 56;
+         return jjMoveStringLiteralDfa1_2(0x800000000L);
+      case 62:
+         jjmatchedKind = 27;
+         return jjMoveStringLiteralDfa1_2(0x80000000L);
+      case 63:
+         return jjStopAtPos(0, 50);
+      case 91:
+         return jjStopAtPos(0, 22);
+      case 93:
+         return jjStopAtPos(0, 23);
+      case 97:
+         return jjMoveStringLiteralDfa1_2(0x40000000000L);
+      case 100:
+         return jjMoveStringLiteralDfa1_2(0x10000000000000L);
+      case 101:
+         return jjMoveStringLiteralDfa1_2(0x201000000000L);
+      case 102:
+         return jjMoveStringLiteralDfa1_2(0x20000L);
+      case 103:
+         return jjMoveStringLiteralDfa1_2(0x110000000L);
+      case 105:
+         return jjMoveStringLiteralDfa1_2(0x400000000000L);
+      case 108:
+         return jjMoveStringLiteralDfa1_2(0x440000000L);
+      case 109:
+         return jjMoveStringLiteralDfa1_2(0x40000000000000L);
+      case 110:
+         return jjMoveStringLiteralDfa1_2(0x14000040000L);
+      case 111:
+         return jjMoveStringLiteralDfa1_2(0x100000000000L);
+      case 116:
+         return jjMoveStringLiteralDfa1_2(0x10000L);
+      case 123:
+         return jjStopAtPos(0, 9);
+      case 124:
+         return jjMoveStringLiteralDfa1_2(0x80000000000L);
+      case 125:
+         return jjStopAtPos(0, 10);
+      default :
+         return jjMoveNfa_2(0, 0);
+   }
+}
+private int jjMoveStringLiteralDfa1_2(long active0)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_2(0, active0);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 38:
+         if ((active0 & 0x20000000000L) != 0L)
+            return jjStopAtPos(1, 41);
+         break;
+      case 61:
+         if ((active0 & 0x80000000L) != 0L)
+            return jjStopAtPos(1, 31);
+         else if ((active0 & 0x200000000L) != 0L)
+            return jjStopAtPos(1, 33);
+         else if ((active0 & 0x800000000L) != 0L)
+            return jjStopAtPos(1, 35);
+         else if ((active0 & 0x2000000000L) != 0L)
+            return jjStopAtPos(1, 37);
+         else if ((active0 & 0x80000000000000L) != 0L)
+            return jjStopAtPos(1, 55);
+         break;
+      case 62:
+         if ((active0 & 0x200000000000000L) != 0L)
+            return jjStopAtPos(1, 57);
+         break;
+      case 97:
+         return jjMoveStringLiteralDfa2_2(active0, 0x20000L);
+      case 101:
+         if ((active0 & 0x100000000L) != 0L)
+            return jjStartNfaWithStates_2(1, 32, 6);
+         else if ((active0 & 0x400000000L) != 0L)
+            return jjStartNfaWithStates_2(1, 34, 6);
+         else if ((active0 & 0x4000000000L) != 0L)
+            return jjStartNfaWithStates_2(1, 38, 6);
+         break;
+      case 105:
+         return jjMoveStringLiteralDfa2_2(active0, 0x10000000000000L);
+      case 109:
+         return jjMoveStringLiteralDfa2_2(active0, 0x200000000000L);
+      case 110:
+         return jjMoveStringLiteralDfa2_2(active0, 0x440000000000L);
+      case 111:
+         return jjMoveStringLiteralDfa2_2(active0, 0x40010000000000L);
+      case 113:
+         if ((active0 & 0x1000000000L) != 0L)
+            return jjStartNfaWithStates_2(1, 36, 6);
+         break;
+      case 114:
+         if ((active0 & 0x100000000000L) != 0L)
+            return jjStartNfaWithStates_2(1, 44, 6);
+         return jjMoveStringLiteralDfa2_2(active0, 0x10000L);
+      case 116:
+         if ((active0 & 0x10000000L) != 0L)
+            return jjStartNfaWithStates_2(1, 28, 6);
+         else if ((active0 & 0x40000000L) != 0L)
+            return jjStartNfaWithStates_2(1, 30, 6);
+         break;
+      case 117:
+         return jjMoveStringLiteralDfa2_2(active0, 0x40000L);
+      case 124:
+         if ((active0 & 0x80000000000L) != 0L)
+            return jjStopAtPos(1, 43);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_2(0, active0);
+}
+private int jjMoveStringLiteralDfa2_2(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_2(0, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_2(1, active0);
+      return 2;
+   }
+   switch(curChar)
+   {
+      case 100:
+         if ((active0 & 0x40000000000L) != 0L)
+            return jjStartNfaWithStates_2(2, 42, 6);
+         else if ((active0 & 0x40000000000000L) != 0L)
+            return jjStartNfaWithStates_2(2, 54, 6);
+         break;
+      case 108:
+         return jjMoveStringLiteralDfa3_2(active0, 0x60000L);
+      case 112:
+         return jjMoveStringLiteralDfa3_2(active0, 0x200000000000L);
+      case 115:
+         return jjMoveStringLiteralDfa3_2(active0, 0x400000000000L);
+      case 116:
+         if ((active0 & 0x10000000000L) != 0L)
+            return jjStartNfaWithStates_2(2, 40, 6);
+         break;
+      case 117:
+         return jjMoveStringLiteralDfa3_2(active0, 0x10000L);
+      case 118:
+         if ((active0 & 0x10000000000000L) != 0L)
+            return jjStartNfaWithStates_2(2, 52, 6);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_2(1, active0);
+}
+private int jjMoveStringLiteralDfa3_2(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_2(1, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_2(2, active0);
+      return 3;
+   }
+   switch(curChar)
+   {
+      case 101:
+         if ((active0 & 0x10000L) != 0L)
+            return jjStartNfaWithStates_2(3, 16, 6);
+         break;
+      case 108:
+         if ((active0 & 0x40000L) != 0L)
+            return jjStartNfaWithStates_2(3, 18, 6);
+         break;
+      case 115:
+         return jjMoveStringLiteralDfa4_2(active0, 0x20000L);
+      case 116:
+         return jjMoveStringLiteralDfa4_2(active0, 0x600000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_2(2, active0);
+}
+private int jjMoveStringLiteralDfa4_2(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_2(2, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_2(3, active0);
+      return 4;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa5_2(active0, 0x400000000000L);
+      case 101:
+         if ((active0 & 0x20000L) != 0L)
+            return jjStartNfaWithStates_2(4, 17, 6);
+         break;
+      case 121:
+         if ((active0 & 0x200000000000L) != 0L)
+            return jjStartNfaWithStates_2(4, 45, 6);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_2(3, active0);
+}
+private int jjMoveStringLiteralDfa5_2(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_2(3, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_2(4, active0);
+      return 5;
+   }
+   switch(curChar)
+   {
+      case 110:
+         return jjMoveStringLiteralDfa6_2(active0, 0x400000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_2(4, active0);
+}
+private int jjMoveStringLiteralDfa6_2(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_2(4, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_2(5, active0);
+      return 6;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa7_2(active0, 0x400000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_2(5, active0);
+}
+private int jjMoveStringLiteralDfa7_2(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_2(5, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_2(6, active0);
+      return 7;
+   }
+   switch(curChar)
+   {
+      case 101:
+         return jjMoveStringLiteralDfa8_2(active0, 0x400000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_2(6, active0);
+}
+private int jjMoveStringLiteralDfa8_2(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_2(6, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_2(7, active0);
+      return 8;
+   }
+   switch(curChar)
+   {
+      case 111:
+         return jjMoveStringLiteralDfa9_2(active0, 0x400000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_2(7, active0);
+}
+private int jjMoveStringLiteralDfa9_2(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_2(7, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_2(8, active0);
+      return 9;
+   }
+   switch(curChar)
+   {
+      case 102:
+         if ((active0 & 0x400000000000L) != 0L)
+            return jjStartNfaWithStates_2(9, 46, 6);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_2(8, active0);
+}
+private int jjStartNfaWithStates_2(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_2(state, pos + 1);
+}
+static final long[] jjbitVec3 = {
+   0x1ff00000fffffffeL, 0xffffffffffffc000L, 0xffffffffL, 0x600000000000000L
+};
+static final long[] jjbitVec4 = {
+   0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL
+};
+static final long[] jjbitVec5 = {
+   0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+};
+static final long[] jjbitVec6 = {
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L
+};
+static final long[] jjbitVec7 = {
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0x0L, 0x0L
+};
+static final long[] jjbitVec8 = {
+   0x3fffffffffffL, 0x0L, 0x0L, 0x0L
+};
+private int jjMoveNfa_2(int startState, int curPos)
+{
+   int startsAt = 0;
+   jjnewStateCnt = 35;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 0:
+                  if ((0x3ff000000000000L & l) != 0L)
+                  {
+                     if (kind > 11)
+                        kind = 11;
+                     jjCheckNAddStates(4, 8);
+                  }
+                  else if ((0x1800000000L & l) != 0L)
+                  {
+                     if (kind > 58)
+                        kind = 58;
+                     jjCheckNAdd(6);
+                  }
+                  else if (curChar == 39)
+                     jjCheckNAddStates(9, 13);
+                  else if (curChar == 34)
+                     jjCheckNAddStates(14, 18);
+                  else if (curChar == 46)
+                     jjCheckNAdd(1);
+                  break;
+               case 1:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddTwoStates(1, 2);
+                  break;
+               case 3:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(4);
+                  break;
+               case 4:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAdd(4);
+                  break;
+               case 5:
+                  if ((0x1800000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAdd(6);
+                  break;
+               case 6:
+                  if ((0x3ff001000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAdd(6);
+                  break;
+               case 7:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 11)
+                     kind = 11;
+                  jjCheckNAddStates(4, 8);
+                  break;
+               case 8:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 11)
+                     kind = 11;
+                  jjCheckNAdd(8);
+                  break;
+               case 9:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(9, 10);
+                  break;
+               case 10:
+                  if (curChar != 46)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddTwoStates(11, 12);
+                  break;
+               case 11:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddTwoStates(11, 12);
+                  break;
+               case 13:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(14);
+                  break;
+               case 14:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAdd(14);
+                  break;
+               case 15:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(15, 16);
+                  break;
+               case 17:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(18);
+                  break;
+               case 18:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAdd(18);
+                  break;
+               case 19:
+                  if (curChar == 34)
+                     jjCheckNAddStates(14, 18);
+                  break;
+               case 20:
+                  if ((0xfffffffbffffffffL & l) != 0L)
+                     jjCheckNAddStates(19, 21);
+                  break;
+               case 22:
+                  if (curChar == 34)
+                     jjCheckNAddStates(19, 21);
+                  break;
+               case 23:
+                  if (curChar == 34 && kind > 14)
+                     kind = 14;
+                  break;
+               case 24:
+                  if ((0xfffffffbffffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(24, 25);
+                  break;
+               case 26:
+                  if ((0xfffffffbffffffffL & l) != 0L && kind > 15)
+                     kind = 15;
+                  break;
+               case 27:
+                  if (curChar == 39)
+                     jjCheckNAddStates(9, 13);
+                  break;
+               case 28:
+                  if ((0xffffff7fffffffffL & l) != 0L)
+                     jjCheckNAddStates(22, 24);
+                  break;
+               case 30:
+                  if (curChar == 39)
+                     jjCheckNAddStates(22, 24);
+                  break;
+               case 31:
+                  if (curChar == 39 && kind > 14)
+                     kind = 14;
+                  break;
+               case 32:
+                  if ((0xffffff7fffffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(32, 33);
+                  break;
+               case 34:
+                  if ((0xffffff7fffffffffL & l) != 0L && kind > 15)
+                     kind = 15;
+                  break;
+               default : break;
             }
-            break;
-        default:
-            break;
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 0:
+               case 6:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAdd(6);
+                  break;
+               case 2:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(25, 26);
+                  break;
+               case 12:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(27, 28);
+                  break;
+               case 16:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(29, 30);
+                  break;
+               case 20:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(19, 21);
+                  break;
+               case 21:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 22;
+                  break;
+               case 22:
+                  if (curChar == 92)
+                     jjCheckNAddStates(19, 21);
+                  break;
+               case 24:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjAddStates(31, 32);
+                  break;
+               case 25:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 26;
+                  break;
+               case 26:
+               case 34:
+                  if ((0xffffffffefffffffL & l) != 0L && kind > 15)
+                     kind = 15;
+                  break;
+               case 28:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(22, 24);
+                  break;
+               case 29:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 30;
+                  break;
+               case 30:
+                  if (curChar == 92)
+                     jjCheckNAddStates(22, 24);
+                  break;
+               case 32:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjAddStates(33, 34);
+                  break;
+               case 33:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 34;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 0:
+               case 6:
+                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAdd(6);
+                  break;
+               case 20:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(19, 21);
+                  break;
+               case 24:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(31, 32);
+                  break;
+               case 26:
+               case 34:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 15)
+                     kind = 15;
+                  break;
+               case 28:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(22, 24);
+                  break;
+               case 32:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(33, 34);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 35 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+private final int jjStopStringLiteralDfa_1(int pos, long active0)
+{
+   switch (pos)
+   {
+      case 0:
+         if ((active0 & 0x80000L) != 0L)
+            return 1;
+         if ((active0 & 0x50755550070000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            return 6;
+         }
+         return -1;
+      case 1:
+         if ((active0 & 0x105550000000L) != 0L)
+            return 6;
+         if ((active0 & 0x50650000070000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 1;
+            return 6;
+         }
+         return -1;
+      case 2:
+         if ((active0 & 0x50050000000000L) != 0L)
+            return 6;
+         if ((active0 & 0x600000070000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 2;
+            return 6;
+         }
+         return -1;
+      case 3:
+         if ((active0 & 0x50000L) != 0L)
+            return 6;
+         if ((active0 & 0x600000020000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 3;
+            return 6;
+         }
+         return -1;
+      case 4:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 4;
+            return 6;
+         }
+         if ((active0 & 0x200000020000L) != 0L)
+            return 6;
+         return -1;
+      case 5:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 5;
+            return 6;
+         }
+         return -1;
+      case 6:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 6;
+            return 6;
+         }
+         return -1;
+      case 7:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 7;
+            return 6;
+         }
+         return -1;
+      case 8:
+         if ((active0 & 0x400000000000L) != 0L)
+         {
+            jjmatchedKind = 58;
+            jjmatchedPos = 8;
+            return 6;
+         }
+         return -1;
+      default :
+         return -1;
+   }
+}
+private final int jjStartNfa_1(int pos, long active0)
+{
+   return jjMoveNfa_1(jjStopStringLiteralDfa_1(pos, active0), pos + 1);
+}
+private int jjMoveStringLiteralDfa0_1()
+{
+   switch(curChar)
+   {
+      case 33:
+         jjmatchedKind = 39;
+         return jjMoveStringLiteralDfa1_1(0x2000000000L);
+      case 37:
+         return jjStopAtPos(0, 53);
+      case 38:
+         return jjMoveStringLiteralDfa1_1(0x20000000000L);
+      case 40:
+         return jjStopAtPos(0, 20);
+      case 41:
+         return jjStopAtPos(0, 21);
+      case 42:
+         return jjStopAtPos(0, 47);
+      case 43:
+         jjmatchedKind = 48;
+         return jjMoveStringLiteralDfa1_1(0x80000000000000L);
+      case 44:
+         return jjStopAtPos(0, 25);
+      case 45:
+         jjmatchedKind = 49;
+         return jjMoveStringLiteralDfa1_1(0x200000000000000L);
+      case 46:
+         return jjStartNfaWithStates_1(0, 19, 1);
+      case 47:
+         return jjStopAtPos(0, 51);
+      case 58:
+         return jjStopAtPos(0, 24);
+      case 59:
+         return jjStopAtPos(0, 26);
+      case 60:
+         jjmatchedKind = 29;
+         return jjMoveStringLiteralDfa1_1(0x200000000L);
+      case 61:
+         jjmatchedKind = 56;
+         return jjMoveStringLiteralDfa1_1(0x800000000L);
+      case 62:
+         jjmatchedKind = 27;
+         return jjMoveStringLiteralDfa1_1(0x80000000L);
+      case 63:
+         return jjStopAtPos(0, 50);
+      case 91:
+         return jjStopAtPos(0, 22);
+      case 93:
+         return jjStopAtPos(0, 23);
+      case 97:
+         return jjMoveStringLiteralDfa1_1(0x40000000000L);
+      case 100:
+         return jjMoveStringLiteralDfa1_1(0x10000000000000L);
+      case 101:
+         return jjMoveStringLiteralDfa1_1(0x201000000000L);
+      case 102:
+         return jjMoveStringLiteralDfa1_1(0x20000L);
+      case 103:
+         return jjMoveStringLiteralDfa1_1(0x110000000L);
+      case 105:
+         return jjMoveStringLiteralDfa1_1(0x400000000000L);
+      case 108:
+         return jjMoveStringLiteralDfa1_1(0x440000000L);
+      case 109:
+         return jjMoveStringLiteralDfa1_1(0x40000000000000L);
+      case 110:
+         return jjMoveStringLiteralDfa1_1(0x14000040000L);
+      case 111:
+         return jjMoveStringLiteralDfa1_1(0x100000000000L);
+      case 116:
+         return jjMoveStringLiteralDfa1_1(0x10000L);
+      case 123:
+         return jjStopAtPos(0, 9);
+      case 124:
+         return jjMoveStringLiteralDfa1_1(0x80000000000L);
+      case 125:
+         return jjStopAtPos(0, 10);
+      default :
+         return jjMoveNfa_1(0, 0);
+   }
+}
+private int jjMoveStringLiteralDfa1_1(long active0)
+{
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(0, active0);
+      return 1;
+   }
+   switch(curChar)
+   {
+      case 38:
+         if ((active0 & 0x20000000000L) != 0L)
+            return jjStopAtPos(1, 41);
+         break;
+      case 61:
+         if ((active0 & 0x80000000L) != 0L)
+            return jjStopAtPos(1, 31);
+         else if ((active0 & 0x200000000L) != 0L)
+            return jjStopAtPos(1, 33);
+         else if ((active0 & 0x800000000L) != 0L)
+            return jjStopAtPos(1, 35);
+         else if ((active0 & 0x2000000000L) != 0L)
+            return jjStopAtPos(1, 37);
+         else if ((active0 & 0x80000000000000L) != 0L)
+            return jjStopAtPos(1, 55);
+         break;
+      case 62:
+         if ((active0 & 0x200000000000000L) != 0L)
+            return jjStopAtPos(1, 57);
+         break;
+      case 97:
+         return jjMoveStringLiteralDfa2_1(active0, 0x20000L);
+      case 101:
+         if ((active0 & 0x100000000L) != 0L)
+            return jjStartNfaWithStates_1(1, 32, 6);
+         else if ((active0 & 0x400000000L) != 0L)
+            return jjStartNfaWithStates_1(1, 34, 6);
+         else if ((active0 & 0x4000000000L) != 0L)
+            return jjStartNfaWithStates_1(1, 38, 6);
+         break;
+      case 105:
+         return jjMoveStringLiteralDfa2_1(active0, 0x10000000000000L);
+      case 109:
+         return jjMoveStringLiteralDfa2_1(active0, 0x200000000000L);
+      case 110:
+         return jjMoveStringLiteralDfa2_1(active0, 0x440000000000L);
+      case 111:
+         return jjMoveStringLiteralDfa2_1(active0, 0x40010000000000L);
+      case 113:
+         if ((active0 & 0x1000000000L) != 0L)
+            return jjStartNfaWithStates_1(1, 36, 6);
+         break;
+      case 114:
+         if ((active0 & 0x100000000000L) != 0L)
+            return jjStartNfaWithStates_1(1, 44, 6);
+         return jjMoveStringLiteralDfa2_1(active0, 0x10000L);
+      case 116:
+         if ((active0 & 0x10000000L) != 0L)
+            return jjStartNfaWithStates_1(1, 28, 6);
+         else if ((active0 & 0x40000000L) != 0L)
+            return jjStartNfaWithStates_1(1, 30, 6);
+         break;
+      case 117:
+         return jjMoveStringLiteralDfa2_1(active0, 0x40000L);
+      case 124:
+         if ((active0 & 0x80000000000L) != 0L)
+            return jjStopAtPos(1, 43);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_1(0, active0);
+}
+private int jjMoveStringLiteralDfa2_1(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_1(0, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(1, active0);
+      return 2;
+   }
+   switch(curChar)
+   {
+      case 100:
+         if ((active0 & 0x40000000000L) != 0L)
+            return jjStartNfaWithStates_1(2, 42, 6);
+         else if ((active0 & 0x40000000000000L) != 0L)
+            return jjStartNfaWithStates_1(2, 54, 6);
+         break;
+      case 108:
+         return jjMoveStringLiteralDfa3_1(active0, 0x60000L);
+      case 112:
+         return jjMoveStringLiteralDfa3_1(active0, 0x200000000000L);
+      case 115:
+         return jjMoveStringLiteralDfa3_1(active0, 0x400000000000L);
+      case 116:
+         if ((active0 & 0x10000000000L) != 0L)
+            return jjStartNfaWithStates_1(2, 40, 6);
+         break;
+      case 117:
+         return jjMoveStringLiteralDfa3_1(active0, 0x10000L);
+      case 118:
+         if ((active0 & 0x10000000000000L) != 0L)
+            return jjStartNfaWithStates_1(2, 52, 6);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_1(1, active0);
+}
+private int jjMoveStringLiteralDfa3_1(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_1(1, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(2, active0);
+      return 3;
+   }
+   switch(curChar)
+   {
+      case 101:
+         if ((active0 & 0x10000L) != 0L)
+            return jjStartNfaWithStates_1(3, 16, 6);
+         break;
+      case 108:
+         if ((active0 & 0x40000L) != 0L)
+            return jjStartNfaWithStates_1(3, 18, 6);
+         break;
+      case 115:
+         return jjMoveStringLiteralDfa4_1(active0, 0x20000L);
+      case 116:
+         return jjMoveStringLiteralDfa4_1(active0, 0x600000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_1(2, active0);
+}
+private int jjMoveStringLiteralDfa4_1(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_1(2, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(3, active0);
+      return 4;
+   }
+   switch(curChar)
+   {
+      case 97:
+         return jjMoveStringLiteralDfa5_1(active0, 0x400000000000L);
+      case 101:
+         if ((active0 & 0x20000L) != 0L)
+            return jjStartNfaWithStates_1(4, 17, 6);
+         break;
+      case 121:
+         if ((active0 & 0x200000000000L) != 0L)
+            return jjStartNfaWithStates_1(4, 45, 6);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_1(3, active0);
+}
+private int jjMoveStringLiteralDfa5_1(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_1(3, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(4, active0);
+      return 5;
+   }
+   switch(curChar)
+   {
+      case 110:
+         return jjMoveStringLiteralDfa6_1(active0, 0x400000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_1(4, active0);
+}
+private int jjMoveStringLiteralDfa6_1(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_1(4, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(5, active0);
+      return 6;
+   }
+   switch(curChar)
+   {
+      case 99:
+         return jjMoveStringLiteralDfa7_1(active0, 0x400000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_1(5, active0);
+}
+private int jjMoveStringLiteralDfa7_1(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_1(5, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(6, active0);
+      return 7;
+   }
+   switch(curChar)
+   {
+      case 101:
+         return jjMoveStringLiteralDfa8_1(active0, 0x400000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_1(6, active0);
+}
+private int jjMoveStringLiteralDfa8_1(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_1(6, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(7, active0);
+      return 8;
+   }
+   switch(curChar)
+   {
+      case 111:
+         return jjMoveStringLiteralDfa9_1(active0, 0x400000000000L);
+      default :
+         break;
+   }
+   return jjStartNfa_1(7, active0);
+}
+private int jjMoveStringLiteralDfa9_1(long old0, long active0)
+{
+   if (((active0 &= old0)) == 0L)
+      return jjStartNfa_1(7, old0);
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) {
+      jjStopStringLiteralDfa_1(8, active0);
+      return 9;
+   }
+   switch(curChar)
+   {
+      case 102:
+         if ((active0 & 0x400000000000L) != 0L)
+            return jjStartNfaWithStates_1(9, 46, 6);
+         break;
+      default :
+         break;
+   }
+   return jjStartNfa_1(8, active0);
+}
+private int jjStartNfaWithStates_1(int pos, int kind, int state)
+{
+   jjmatchedKind = kind;
+   jjmatchedPos = pos;
+   try { curChar = input_stream.readChar(); }
+   catch(java.io.IOException e) { return pos + 1; }
+   return jjMoveNfa_1(state, pos + 1);
+}
+private int jjMoveNfa_1(int startState, int curPos)
+{
+   int startsAt = 0;
+   jjnewStateCnt = 35;
+   int i = 1;
+   jjstateSet[0] = startState;
+   int kind = 0x7fffffff;
+   for (;;)
+   {
+      if (++jjround == 0x7fffffff)
+         ReInitRounds();
+      if (curChar < 64)
+      {
+         long l = 1L << curChar;
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 0:
+                  if ((0x3ff000000000000L & l) != 0L)
+                  {
+                     if (kind > 11)
+                        kind = 11;
+                     jjCheckNAddStates(4, 8);
+                  }
+                  else if ((0x1800000000L & l) != 0L)
+                  {
+                     if (kind > 58)
+                        kind = 58;
+                     jjCheckNAdd(6);
+                  }
+                  else if (curChar == 39)
+                     jjCheckNAddStates(9, 13);
+                  else if (curChar == 34)
+                     jjCheckNAddStates(14, 18);
+                  else if (curChar == 46)
+                     jjCheckNAdd(1);
+                  break;
+               case 1:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddTwoStates(1, 2);
+                  break;
+               case 3:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(4);
+                  break;
+               case 4:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAdd(4);
+                  break;
+               case 5:
+                  if ((0x1800000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAdd(6);
+                  break;
+               case 6:
+                  if ((0x3ff001000000000L & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAdd(6);
+                  break;
+               case 7:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 11)
+                     kind = 11;
+                  jjCheckNAddStates(4, 8);
+                  break;
+               case 8:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 11)
+                     kind = 11;
+                  jjCheckNAdd(8);
+                  break;
+               case 9:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(9, 10);
+                  break;
+               case 10:
+                  if (curChar != 46)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddTwoStates(11, 12);
+                  break;
+               case 11:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAddTwoStates(11, 12);
+                  break;
+               case 13:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(14);
+                  break;
+               case 14:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAdd(14);
+                  break;
+               case 15:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(15, 16);
+                  break;
+               case 17:
+                  if ((0x280000000000L & l) != 0L)
+                     jjCheckNAdd(18);
+                  break;
+               case 18:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 12)
+                     kind = 12;
+                  jjCheckNAdd(18);
+                  break;
+               case 19:
+                  if (curChar == 34)
+                     jjCheckNAddStates(14, 18);
+                  break;
+               case 20:
+                  if ((0xfffffffbffffffffL & l) != 0L)
+                     jjCheckNAddStates(19, 21);
+                  break;
+               case 22:
+                  if (curChar == 34)
+                     jjCheckNAddStates(19, 21);
+                  break;
+               case 23:
+                  if (curChar == 34 && kind > 14)
+                     kind = 14;
+                  break;
+               case 24:
+                  if ((0xfffffffbffffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(24, 25);
+                  break;
+               case 26:
+                  if ((0xfffffffbffffffffL & l) != 0L && kind > 15)
+                     kind = 15;
+                  break;
+               case 27:
+                  if (curChar == 39)
+                     jjCheckNAddStates(9, 13);
+                  break;
+               case 28:
+                  if ((0xffffff7fffffffffL & l) != 0L)
+                     jjCheckNAddStates(22, 24);
+                  break;
+               case 30:
+                  if (curChar == 39)
+                     jjCheckNAddStates(22, 24);
+                  break;
+               case 31:
+                  if (curChar == 39 && kind > 14)
+                     kind = 14;
+                  break;
+               case 32:
+                  if ((0xffffff7fffffffffL & l) != 0L)
+                     jjCheckNAddTwoStates(32, 33);
+                  break;
+               case 34:
+                  if ((0xffffff7fffffffffL & l) != 0L && kind > 15)
+                     kind = 15;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else if (curChar < 128)
+      {
+         long l = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 0:
+               case 6:
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAdd(6);
+                  break;
+               case 2:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(25, 26);
+                  break;
+               case 12:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(27, 28);
+                  break;
+               case 16:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(29, 30);
+                  break;
+               case 20:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(19, 21);
+                  break;
+               case 21:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 22;
+                  break;
+               case 22:
+                  if (curChar == 92)
+                     jjCheckNAddStates(19, 21);
+                  break;
+               case 24:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjAddStates(31, 32);
+                  break;
+               case 25:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 26;
+                  break;
+               case 26:
+               case 34:
+                  if ((0xffffffffefffffffL & l) != 0L && kind > 15)
+                     kind = 15;
+                  break;
+               case 28:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjCheckNAddStates(22, 24);
+                  break;
+               case 29:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 30;
+                  break;
+               case 30:
+                  if (curChar == 92)
+                     jjCheckNAddStates(22, 24);
+                  break;
+               case 32:
+                  if ((0xffffffffefffffffL & l) != 0L)
+                     jjAddStates(33, 34);
+                  break;
+               case 33:
+                  if (curChar == 92)
+                     jjstateSet[jjnewStateCnt++] = 34;
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      else
+      {
+         int hiByte = (int)(curChar >> 8);
+         int i1 = hiByte >> 6;
+         long l1 = 1L << (hiByte & 077);
+         int i2 = (curChar & 0xff) >> 6;
+         long l2 = 1L << (curChar & 077);
+         do
+         {
+            switch(jjstateSet[--i])
+            {
+               case 0:
+               case 6:
+                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 58)
+                     kind = 58;
+                  jjCheckNAdd(6);
+                  break;
+               case 20:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(19, 21);
+                  break;
+               case 24:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(31, 32);
+                  break;
+               case 26:
+               case 34:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 15)
+                     kind = 15;
+                  break;
+               case 28:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(22, 24);
+                  break;
+               case 32:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjAddStates(33, 34);
+                  break;
+               default : break;
+            }
+         } while(i != startsAt);
+      }
+      if (kind != 0x7fffffff)
+      {
+         jjmatchedKind = kind;
+         jjmatchedPos = curPos;
+         kind = 0x7fffffff;
+      }
+      ++curPos;
+      if ((i = jjnewStateCnt) == (startsAt = 35 - (jjnewStateCnt = startsAt)))
+         return curPos;
+      try { curChar = input_stream.readChar(); }
+      catch(java.io.IOException e) { return curPos; }
+   }
+}
+static final int[] jjnextStates = {
+   0, 1, 3, 5, 8, 9, 10, 15, 16, 28, 29, 31, 32, 33, 20, 21, 
+   23, 24, 25, 20, 21, 23, 28, 29, 31, 3, 4, 13, 14, 17, 18, 24, 
+   25, 32, 33, 
+};
+private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec2[i2] & l2) != 0L);
+      default :
+         if ((jjbitVec0[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2)
+{
+   switch(hiByte)
+   {
+      case 0:
+         return ((jjbitVec4[i2] & l2) != 0L);
+      case 48:
+         return ((jjbitVec5[i2] & l2) != 0L);
+      case 49:
+         return ((jjbitVec6[i2] & l2) != 0L);
+      case 51:
+         return ((jjbitVec7[i2] & l2) != 0L);
+      case 61:
+         return ((jjbitVec8[i2] & l2) != 0L);
+      default :
+         if ((jjbitVec3[i1] & l1) != 0L)
+            return true;
+         return false;
+   }
+}
+
+/** Token literal values. */
+public static final String[] jjstrLiteralImages = {
+"", null, "\44\173", "\43\173", null, null, null, null, null, "\173", "\175", 
+null, null, null, null, null, "\164\162\165\145", "\146\141\154\163\145", 
+"\156\165\154\154", "\56", "\50", "\51", "\133", "\135", "\72", "\54", "\73", "\76", "\147\164", 
+"\74", "\154\164", "\76\75", "\147\145", "\74\75", "\154\145", "\75\75", "\145\161", 
+"\41\75", "\156\145", "\41", "\156\157\164", "\46\46", "\141\156\144", "\174\174", 
+"\157\162", "\145\155\160\164\171", "\151\156\163\164\141\156\143\145\157\146", "\52", 
+"\53", "\55", "\77", "\57", "\144\151\166", "\45", "\155\157\144", "\53\75", "\75", 
+"\55\76", null, null, null, null, null, };
+
+/** Lexer state names. */
+public static final String[] lexStateNames = {
+   "DEFAULT",
+   "IN_EXPRESSION",
+   "IN_MAP",
+};
+
+/** Lex State array. */
+public static final int[] jjnewLexState = {
+   -1, -1, 1, 1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+   -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 
+};
+static final long[] jjtoToken = {
+   0x47ffffffffffde0fL, 
+};
+static final long[] jjtoSkip = {
+   0x1f0L, 
+};
+protected SimpleCharStream input_stream;
+private final int[] jjrounds = new int[35];
+private final int[] jjstateSet = new int[70];
+private final StringBuilder jjimage = new StringBuilder();
+private StringBuilder image = jjimage;
+private int jjimageLen;
+private int lengthOfMatch;
+protected char curChar;
+/** Constructor. */
+public ELParserTokenManager(SimpleCharStream stream){
+   if (SimpleCharStream.staticFlag)
+      throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
+   input_stream = stream;
+}
+
+/** Constructor. */
+public ELParserTokenManager(SimpleCharStream stream, int lexState){
+   this(stream);
+   SwitchTo(lexState);
+}
+
+/** Reinitialise parser. */
+public void ReInit(SimpleCharStream stream)
+{
+   jjmatchedPos = jjnewStateCnt = 0;
+   curLexState = defaultLexState;
+   input_stream = stream;
+   ReInitRounds();
+}
+private void ReInitRounds()
+{
+   int i;
+   jjround = 0x80000001;
+   for (i = 35; i-- > 0;)
+      jjrounds[i] = 0x80000000;
+}
+
+/** Reinitialise parser. */
+public void ReInit(SimpleCharStream stream, int lexState)
+{
+   ReInit(stream);
+   SwitchTo(lexState);
+}
+
+/** Switch to specified lex state. */
+public void SwitchTo(int lexState)
+{
+   if (lexState >= 3 || lexState < 0)
+      throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
+   else
+      curLexState = lexState;
+}
+
+protected Token jjFillToken()
+{
+   final Token t;
+   final String curTokenImage;
+   final int beginLine;
+   final int endLine;
+   final int beginColumn;
+   final int endColumn;
+   String im = jjstrLiteralImages[jjmatchedKind];
+   curTokenImage = (im == null) ? input_stream.GetImage() : im;
+   beginLine = input_stream.getBeginLine();
+   beginColumn = input_stream.getBeginColumn();
+   endLine = input_stream.getEndLine();
+   endColumn = input_stream.getEndColumn();
+   t = Token.newToken(jjmatchedKind);
+   t.kind = jjmatchedKind;
+   t.image = curTokenImage;
+
+   t.beginLine = beginLine;
+   t.endLine = endLine;
+   t.beginColumn = beginColumn;
+   t.endColumn = endColumn;
+
+   return t;
+}
+
+int curLexState = 0;
+int defaultLexState = 0;
+int jjnewStateCnt;
+int jjround;
+int jjmatchedPos;
+int jjmatchedKind;
+
+/** Get the next Token. */
+public Token getNextToken() 
+{
+  Token matchedToken;
+  int curPos = 0;
+
+  EOFLoop :
+  for (;;)
+  {
+   try
+   {
+      curChar = input_stream.BeginToken();
+   }
+   catch(java.io.IOException e)
+   {
+      jjmatchedKind = 0;
+      matchedToken = jjFillToken();
+      return matchedToken;
+   }
+   image = jjimage;
+   image.setLength(0);
+   jjimageLen = 0;
+
+   switch(curLexState)
+   {
+     case 0:
+       jjmatchedKind = 0x7fffffff;
+       jjmatchedPos = 0;
+       curPos = jjMoveStringLiteralDfa0_0();
+       break;
+     case 1:
+       try { input_stream.backup(0);
+          while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L)
+             curChar = input_stream.BeginToken();
+       }
+       catch (java.io.IOException e1) { continue EOFLoop; }
+       jjmatchedKind = 0x7fffffff;
+       jjmatchedPos = 0;
+       curPos = jjMoveStringLiteralDfa0_1();
+       if (jjmatchedPos == 0 && jjmatchedKind > 62)
+       {
+          jjmatchedKind = 62;
+       }
+       break;
+     case 2:
+       try { input_stream.backup(0);
+          while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L)
+             curChar = input_stream.BeginToken();
+       }
+       catch (java.io.IOException e1) { continue EOFLoop; }
+       jjmatchedKind = 0x7fffffff;
+       jjmatchedPos = 0;
+       curPos = jjMoveStringLiteralDfa0_2();
+       if (jjmatchedPos == 0 && jjmatchedKind > 62)
+       {
+          jjmatchedKind = 62;
+       }
+       break;
+   }
+     if (jjmatchedKind != 0x7fffffff)
+     {
+        if (jjmatchedPos + 1 < curPos)
+           input_stream.backup(curPos - jjmatchedPos - 1);
+        if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L)
+        {
+           matchedToken = jjFillToken();
+           TokenLexicalActions(matchedToken);
+       if (jjnewLexState[jjmatchedKind] != -1)
+         curLexState = jjnewLexState[jjmatchedKind];
+           return matchedToken;
         }
-        return jjStartNfa_1(8, active0);
-    }
-
-    private int jjStartNfaWithStates_1(int pos, int kind, int state) {
-        jjmatchedKind = kind;
-        jjmatchedPos = pos;
-        try {
-            curChar = input_stream.readChar();
-        } catch (java.io.IOException e) {
-            return pos + 1;
+        else
+        {
+         if (jjnewLexState[jjmatchedKind] != -1)
+           curLexState = jjnewLexState[jjmatchedKind];
+           continue EOFLoop;
         }
-        return jjMoveNfa_1(state, pos + 1);
-    }
-
-    private int jjMoveNfa_1(int startState, int curPos) {
-        int startsAt = 0;
-        jjnewStateCnt = 35;
-        int i = 1;
-        jjstateSet[0] = startState;
-        int kind = 0x7fffffff;
-        for (;;) {
-            if (++jjround == 0x7fffffff) {
-                ReInitRounds();
-            }
-            if (curChar < 64) {
-                long l = 1L << curChar;
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 0:
-                        if ((0x3ff000000000000L & l) != 0L) {
-                            if (kind > 11) {
-                                kind = 11;
-                            }
-                            jjCheckNAddStates(4, 8);
-                        } else if ((0x1800000000L & l) != 0L) {
-                            if (kind > 58) {
-                                kind = 58;
-                            }
-                            jjCheckNAdd(6);
-                        } else if (curChar == 39) {
-                            jjCheckNAddStates(9, 13);
-                        } else if (curChar == 34) {
-                            jjCheckNAddStates(14, 18);
-                        } else if (curChar == 46) {
-                            jjCheckNAdd(1);
-                        }
-                        break;
-                    case 1:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAddTwoStates(1, 2);
-                        break;
-                    case 3:
-                        if ((0x280000000000L & l) != 0L) {
-                            jjCheckNAdd(4);
-                        }
-                        break;
-                    case 4:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAdd(4);
-                        break;
-                    case 5:
-                        if ((0x1800000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 58) {
-                            kind = 58;
-                        }
-                        jjCheckNAdd(6);
-                        break;
-                    case 6:
-                        if ((0x3ff001000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 58) {
-                            kind = 58;
-                        }
-                        jjCheckNAdd(6);
-                        break;
-                    case 7:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 11) {
-                            kind = 11;
-                        }
-                        jjCheckNAddStates(4, 8);
-                        break;
-                    case 8:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 11) {
-                            kind = 11;
-                        }
-                        jjCheckNAdd(8);
-                        break;
-                    case 9:
-                        if ((0x3ff000000000000L & l) != 0L) {
-                            jjCheckNAddTwoStates(9, 10);
-                        }
-                        break;
-                    case 10:
-                        if (curChar != 46) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAddTwoStates(11, 12);
-                        break;
-                    case 11:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAddTwoStates(11, 12);
-                        break;
-                    case 13:
-                        if ((0x280000000000L & l) != 0L) {
-                            jjCheckNAdd(14);
-                        }
-                        break;
-                    case 14:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAdd(14);
-                        break;
-                    case 15:
-                        if ((0x3ff000000000000L & l) != 0L) {
-                            jjCheckNAddTwoStates(15, 16);
-                        }
-                        break;
-                    case 17:
-                        if ((0x280000000000L & l) != 0L) {
-                            jjCheckNAdd(18);
-                        }
-                        break;
-                    case 18:
-                        if ((0x3ff000000000000L & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 12) {
-                            kind = 12;
-                        }
-                        jjCheckNAdd(18);
-                        break;
-                    case 19:
-                        if (curChar == 34) {
-                            jjCheckNAddStates(14, 18);
-                        }
-                        break;
-                    case 20:
-                        if ((0xfffffffbffffffffL & l) != 0L) {
-                            jjCheckNAddStates(19, 21);
-                        }
-                        break;
-                    case 22:
-                        if (curChar == 34) {
-                            jjCheckNAddStates(19, 21);
-                        }
-                        break;
-                    case 23:
-                        if (curChar == 34 && kind > 14) {
-                            kind = 14;
-                        }
-                        break;
-                    case 24:
-                        if ((0xfffffffbffffffffL & l) != 0L) {
-                            jjCheckNAddTwoStates(24, 25);
-                        }
-                        break;
-                    case 26:
-                        if ((0xfffffffbffffffffL & l) != 0L && kind > 15) {
-                            kind = 15;
-                        }
-                        break;
-                    case 27:
-                        if (curChar == 39) {
-                            jjCheckNAddStates(9, 13);
-                        }
-                        break;
-                    case 28:
-                        if ((0xffffff7fffffffffL & l) != 0L) {
-                            jjCheckNAddStates(22, 24);
-                        }
-                        break;
-                    case 30:
-                        if (curChar == 39) {
-                            jjCheckNAddStates(22, 24);
-                        }
-                        break;
-                    case 31:
-                        if (curChar == 39 && kind > 14) {
-                            kind = 14;
-                        }
-                        break;
-                    case 32:
-                        if ((0xffffff7fffffffffL & l) != 0L) {
-                            jjCheckNAddTwoStates(32, 33);
-                        }
-                        break;
-                    case 34:
-                        if ((0xffffff7fffffffffL & l) != 0L && kind > 15) {
-                            kind = 15;
-                        }
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            } else if (curChar < 128) {
-                long l = 1L << (curChar & 077);
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 0:
-                    case 6:
-                        if ((0x7fffffe87fffffeL & l) == 0L) {
-                            break;
-                        }
-                        if (kind > 58) {
-                            kind = 58;
-                        }
-                        jjCheckNAdd(6);
-                        break;
-                    case 2:
-                        if ((0x2000000020L & l) != 0L) {
-                            jjAddStates(25, 26);
-                        }
-                        break;
-                    case 12:
-                        if ((0x2000000020L & l) != 0L) {
-                            jjAddStates(27, 28);
-                        }
-                        break;
-                    case 16:
-                        if ((0x2000000020L & l) != 0L) {
-                            jjAddStates(29, 30);
-                        }
-                        break;
-                    case 20:
-                        if ((0xffffffffefffffffL & l) != 0L) {
-                            jjCheckNAddStates(19, 21);
-                        }
-                        break;
-                    case 21:
-                        if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 22;
-                        }
-                        break;
-                    case 22:
-                        if (curChar == 92) {
-                            jjCheckNAddStates(19, 21);
-                        }
-                        break;
-                    case 24:
-                        if ((0xffffffffefffffffL & l) != 0L) {
-                            jjAddStates(31, 32);
-                        }
-                        break;
-                    case 25:
-                        if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 26;
-                        }
-                        break;
-                    case 26:
-                    case 34:
-                        if ((0xffffffffefffffffL & l) != 0L && kind > 15) {
-                            kind = 15;
-                        }
-                        break;
-                    case 28:
-                        if ((0xffffffffefffffffL & l) != 0L) {
-                            jjCheckNAddStates(22, 24);
-                        }
-                        break;
-                    case 29:
-                        if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 30;
-                        }
-                        break;
-                    case 30:
-                        if (curChar == 92) {
-                            jjCheckNAddStates(22, 24);
-                        }
-                        break;
-                    case 32:
-                        if ((0xffffffffefffffffL & l) != 0L) {
-                            jjAddStates(33, 34);
-                        }
-                        break;
-                    case 33:
-                        if (curChar == 92) {
-                            jjstateSet[jjnewStateCnt++] = 34;
-                        }
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            } else {
-                int hiByte = curChar >> 8;
-                int i1 = hiByte >> 6;
-                long l1 = 1L << (hiByte & 077);
-                int i2 = (curChar & 0xff) >> 6;
-                long l2 = 1L << (curChar & 077);
-                do {
-                    switch (jjstateSet[--i]) {
-                    case 0:
-                    case 6:
-                        if (!jjCanMove_1(hiByte, i1, i2, l1, l2)) {
-                            break;
-                        }
-                        if (kind > 58) {
-                            kind = 58;
-                        }
-                        jjCheckNAdd(6);
-                        break;
-                    case 20:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                            jjAddStates(19, 21);
-                        }
-                        break;
-                    case 24:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                            jjAddStates(31, 32);
-                        }
-                        break;
-                    case 26:
-                    case 34:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2) && kind > 15) {
-                            kind = 15;
-                        }
-                        break;
-                    case 28:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                            jjAddStates(22, 24);
-                        }
-                        break;
-                    case 32:
-                        if (jjCanMove_0(hiByte, i1, i2, l1, l2)) {
-                            jjAddStates(33, 34);
-                        }
-                        break;
-                    default:
-                        break;
-                    }
-                } while (i != startsAt);
-            }
-            if (kind != 0x7fffffff) {
-                jjmatchedKind = kind;
-                jjmatchedPos = curPos;
-                kind = 0x7fffffff;
-            }
-            ++curPos;
-            if ((i = jjnewStateCnt) == (startsAt = 35 - (jjnewStateCnt = startsAt))) {
-                return curPos;
-            }
-            try {
-                curChar = input_stream.readChar();
-            } catch (java.io.IOException e) {
-                return curPos;
-            }
+     }
+     int error_line = input_stream.getEndLine();
+     int error_column = input_stream.getEndColumn();
+     String error_after = null;
+     boolean EOFSeen = false;
+     try { input_stream.readChar(); input_stream.backup(1); }
+     catch (java.io.IOException e1) {
+        EOFSeen = true;
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+        if (curChar == '\n' || curChar == '\r') {
+           error_line++;
+           error_column = 0;
         }
-    }
+        else
+           error_column++;
+     }
+     if (!EOFSeen) {
+        input_stream.backup(1);
+        error_after = curPos <= 1 ? "" : input_stream.GetImage();
+     }
+     throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
+  }
+}
 
-    static final int[] jjnextStates = { 0, 1, 3, 5, 8, 9, 10, 15, 16, 28, 29, 31, 32, 33, 20, 21, 23, 24, 25, 20, 21, 23, 28, 29, 31, 3, 4, 13, 14, 17, 18, 24,
-            25, 32, 33, };
+void TokenLexicalActions(Token matchedToken)
+{
+   switch(jjmatchedKind)
+   {
+      case 2 :
+        image.append(jjstrLiteralImages[2]);
+        lengthOfMatch = jjstrLiteralImages[2].length();
+                                      stack.push(DEFAULT);
+         break;
+      case 3 :
+        image.append(jjstrLiteralImages[3]);
+        lengthOfMatch = jjstrLiteralImages[3].length();
+                                       stack.push(DEFAULT);
+         break;
+      case 9 :
+        image.append(jjstrLiteralImages[9]);
+        lengthOfMatch = jjstrLiteralImages[9].length();
+                             stack.push(curLexState);
+         break;
+      case 10 :
+        image.append(jjstrLiteralImages[10]);
+        lengthOfMatch = jjstrLiteralImages[10].length();
+                        SwitchTo(stack.pop());
+         break;
+      default :
+         break;
+   }
+}
+private void jjCheckNAdd(int state)
+{
+   if (jjrounds[state] != jjround)
+   {
+      jjstateSet[jjnewStateCnt++] = state;
+      jjrounds[state] = jjround;
+   }
+}
+private void jjAddStates(int start, int end)
+{
+   do {
+      jjstateSet[jjnewStateCnt++] = jjnextStates[start];
+   } while (start++ != end);
+}
+private void jjCheckNAddTwoStates(int state1, int state2)
+{
+   jjCheckNAdd(state1);
+   jjCheckNAdd(state2);
+}
 
-    private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2) {
-        switch (hiByte) {
-        case 0:
-            return ((jjbitVec2[i2] & l2) != 0L);
-        default:
-            if ((jjbitVec0[i1] & l1) != 0L) {
-                return true;
-            }
-            return false;
-        }
-    }
-
-    private static final boolean jjCanMove_1(int hiByte, int i1, int i2, long l1, long l2) {
-        switch (hiByte) {
-        case 0:
-            return ((jjbitVec4[i2] & l2) != 0L);
-        case 48:
-            return ((jjbitVec5[i2] & l2) != 0L);
-        case 49:
-            return ((jjbitVec6[i2] & l2) != 0L);
-        case 51:
-            return ((jjbitVec7[i2] & l2) != 0L);
-        case 61:
-            return ((jjbitVec8[i2] & l2) != 0L);
-        default:
-            if ((jjbitVec3[i1] & l1) != 0L) {
-                return true;
-            }
-            return false;
-        }
-    }
-
-    /** Token literal values. */
-    public static final String[] jjstrLiteralImages = { "", null, "\44\173", "\43\173", null, null, null, null, null, "\173", "\175", null, null, null, null,
-            null, "\164\162\165\145", "\146\141\154\163\145", "\156\165\154\154", "\56", "\50", "\51", "\133", "\135", "\72", "\54", "\73", "\76", "\147\164",
-            "\74", "\154\164", "\76\75", "\147\145", "\74\75", "\154\145", "\75\75", "\145\161", "\41\75", "\156\145", "\41", "\156\157\164", "\46\46",
-            "\141\156\144", "\174\174", "\157\162", "\145\155\160\164\171", "\151\156\163\164\141\156\143\145\157\146", "\52", "\53", "\55", "\77", "\57",
-            "\144\151\166", "\45", "\155\157\144", "\53\75", "\75", "\55\76", null, null, null, null, null, };
-
-    /** Lexer state names. */
-    public static final String[] lexStateNames = { "DEFAULT", "IN_EXPRESSION", "IN_MAP", };
-
-    /** Lex State array. */
-    public static final int[] jjnewLexState = { -1, -1, 1, 1, -1, -1, -1, -1, -1, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-            -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, };
-    static final long[] jjtoToken = { 0x47ffffffffffde0fL, };
-    static final long[] jjtoSkip = { 0x1f0L, };
-    protected SimpleCharStream input_stream;
-    private final int[] jjrounds = new int[35];
-    private final int[] jjstateSet = new int[70];
-    private final StringBuilder jjimage = new StringBuilder();
-    private StringBuilder image = jjimage;
-    private int jjimageLen;
-    private int lengthOfMatch;
-    protected char curChar;
-
-    /** Constructor. */
-    public ELParserTokenManager(SimpleCharStream stream) {
-        if (SimpleCharStream.staticFlag) {
-            throw new Error("ERROR: Cannot use a static CharStream class with a non-static lexical analyzer.");
-        }
-        input_stream = stream;
-    }
-
-    /** Constructor. */
-    public ELParserTokenManager(SimpleCharStream stream, int lexState) {
-        this(stream);
-        SwitchTo(lexState);
-    }
-
-    /** Reinitialise parser. */
-    public void ReInit(SimpleCharStream stream) {
-        jjmatchedPos = jjnewStateCnt = 0;
-        curLexState = defaultLexState;
-        input_stream = stream;
-        ReInitRounds();
-    }
-
-    private void ReInitRounds() {
-        int i;
-        jjround = 0x80000001;
-        for (i = 35; i-- > 0;) {
-            jjrounds[i] = 0x80000000;
-        }
-    }
-
-    /** Reinitialise parser. */
-    public void ReInit(SimpleCharStream stream, int lexState) {
-        ReInit(stream);
-        SwitchTo(lexState);
-    }
-
-    /** Switch to specified lex state. */
-    public void SwitchTo(int lexState) {
-        if (lexState >= 3 || lexState < 0) {
-            throw new TokenMgrError("Error: Ignoring invalid lexical state : " + lexState + ". State unchanged.", TokenMgrError.INVALID_LEXICAL_STATE);
-        } else {
-            curLexState = lexState;
-        }
-    }
-
-    protected Token jjFillToken() {
-        final Token t;
-        final String curTokenImage;
-        final int beginLine;
-        final int endLine;
-        final int beginColumn;
-        final int endColumn;
-        String im = jjstrLiteralImages[jjmatchedKind];
-        curTokenImage = (im == null) ? input_stream.GetImage() : im;
-        beginLine = input_stream.getBeginLine();
-        beginColumn = input_stream.getBeginColumn();
-        endLine = input_stream.getEndLine();
-        endColumn = input_stream.getEndColumn();
-        t = Token.newToken(jjmatchedKind);
-        t.kind = jjmatchedKind;
-        t.image = curTokenImage;
-
-        t.beginLine = beginLine;
-        t.endLine = endLine;
-        t.beginColumn = beginColumn;
-        t.endColumn = endColumn;
-
-        return t;
-    }
-
-    int curLexState = 0;
-    int defaultLexState = 0;
-    int jjnewStateCnt;
-    int jjround;
-    int jjmatchedPos;
-    int jjmatchedKind;
-
-    /** Get the next Token. */
-    public Token getNextToken() {
-        Token matchedToken;
-        int curPos = 0;
-
-        EOFLoop: for (;;) {
-            try {
-                curChar = input_stream.BeginToken();
-            } catch (java.io.IOException e) {
-                jjmatchedKind = 0;
-                matchedToken = jjFillToken();
-                return matchedToken;
-            }
-            image = jjimage;
-            image.setLength(0);
-            jjimageLen = 0;
-
-            switch (curLexState) {
-            case 0:
-                jjmatchedKind = 0x7fffffff;
-                jjmatchedPos = 0;
-                curPos = jjMoveStringLiteralDfa0_0();
-                break;
-            case 1:
-                try {
-                    input_stream.backup(0);
-                    while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L) {
-                        curChar = input_stream.BeginToken();
-                    }
-                } catch (java.io.IOException e1) {
-                    continue EOFLoop;
-                }
-                jjmatchedKind = 0x7fffffff;
-                jjmatchedPos = 0;
-                curPos = jjMoveStringLiteralDfa0_1();
-                if (jjmatchedPos == 0 && jjmatchedKind > 62) {
-                    jjmatchedKind = 62;
-                }
-                break;
-            case 2:
-                try {
-                    input_stream.backup(0);
-                    while (curChar <= 32 && (0x100002600L & (1L << curChar)) != 0L) {
-                        curChar = input_stream.BeginToken();
-                    }
-                } catch (java.io.IOException e1) {
-                    continue EOFLoop;
-                }
-                jjmatchedKind = 0x7fffffff;
-                jjmatchedPos = 0;
-                curPos = jjMoveStringLiteralDfa0_2();
-                if (jjmatchedPos == 0 && jjmatchedKind > 62) {
-                    jjmatchedKind = 62;
-                }
-                break;
-            }
-            if (jjmatchedKind != 0x7fffffff) {
-                if (jjmatchedPos + 1 < curPos) {
-                    input_stream.backup(curPos - jjmatchedPos - 1);
-                }
-                if ((jjtoToken[jjmatchedKind >> 6] & (1L << (jjmatchedKind & 077))) != 0L) {
-                    matchedToken = jjFillToken();
-                    TokenLexicalActions(matchedToken);
-                    if (jjnewLexState[jjmatchedKind] != -1) {
-                        curLexState = jjnewLexState[jjmatchedKind];
-                    }
-                    return matchedToken;
-                } else {
-                    if (jjnewLexState[jjmatchedKind] != -1) {
-                        curLexState = jjnewLexState[jjmatchedKind];
-                    }
-                    continue EOFLoop;
-                }
-            }
-            int error_line = input_stream.getEndLine();
-            int error_column = input_stream.getEndColumn();
-            String error_after = null;
-            boolean EOFSeen = false;
-            try {
-                input_stream.readChar();
-                input_stream.backup(1);
-            } catch (java.io.IOException e1) {
-                EOFSeen = true;
-                error_after = curPos <= 1 ? "" : input_stream.GetImage();
-                if (curChar == '\n' || curChar == '\r') {
-                    error_line++;
-                    error_column = 0;
-                } else {
-                    error_column++;
-                }
-            }
-            if (!EOFSeen) {
-                input_stream.backup(1);
-                error_after = curPos <= 1 ? "" : input_stream.GetImage();
-            }
-            throw new TokenMgrError(EOFSeen, curLexState, error_line, error_column, error_after, curChar, TokenMgrError.LEXICAL_ERROR);
-        }
-    }
-
-    void TokenLexicalActions(Token matchedToken) {
-        switch (jjmatchedKind) {
-        case 2:
-            image.append(jjstrLiteralImages[2]);
-            lengthOfMatch = jjstrLiteralImages[2].length();
-            stack.push(DEFAULT);
-            break;
-        case 3:
-            image.append(jjstrLiteralImages[3]);
-            lengthOfMatch = jjstrLiteralImages[3].length();
-            stack.push(DEFAULT);
-            break;
-        case 9:
-            image.append(jjstrLiteralImages[9]);
-            lengthOfMatch = jjstrLiteralImages[9].length();
-            stack.push(curLexState);
-            break;
-        case 10:
-            image.append(jjstrLiteralImages[10]);
-            lengthOfMatch = jjstrLiteralImages[10].length();
-            SwitchTo(stack.pop());
-            break;
-        default:
-            break;
-        }
-    }
-
-    private void jjCheckNAdd(int state) {
-        if (jjrounds[state] != jjround) {
-            jjstateSet[jjnewStateCnt++] = state;
-            jjrounds[state] = jjround;
-        }
-    }
-
-    private void jjAddStates(int start, int end) {
-        do {
-            jjstateSet[jjnewStateCnt++] = jjnextStates[start];
-        } while (start++ != end);
-    }
-
-    private void jjCheckNAddTwoStates(int state1, int state2) {
-        jjCheckNAdd(state1);
-        jjCheckNAdd(state2);
-    }
-
-    private void jjCheckNAddStates(int start, int end) {
-        do {
-            jjCheckNAdd(jjnextStates[start]);
-        } while (start++ != end);
-    }
+private void jjCheckNAddStates(int start, int end)
+{
+   do {
+      jjCheckNAdd(jjnextStates[start]);
+   } while (start++ != end);
+}
 
 }
diff --git a/impl/src/main/java/com/sun/el/parser/ELParserTreeConstants.java b/impl/src/main/java/com/sun/el/parser/ELParserTreeConstants.java
index 8a2762f..656c392 100644
--- a/impl/src/main/java/com/sun/el/parser/ELParserTreeConstants.java
+++ b/impl/src/main/java/com/sun/el/parser/ELParserTreeConstants.java
@@ -13,57 +13,99 @@
  *
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
-
+ 
 /* Generated By:JavaCC: Do not edit this line. ELParserTreeConstants.java Version 5.0 */
 package com.sun.el.parser;
 
-public interface ELParserTreeConstants {
-    int JJTCOMPOSITEEXPRESSION = 0;
-    int JJTLITERALEXPRESSION = 1;
-    int JJTDEFERREDEXPRESSION = 2;
-    int JJTDYNAMICEXPRESSION = 3;
-    int JJTVOID = 4;
-    int JJTSEMICOLON = 5;
-    int JJTASSIGN = 6;
-    int JJTLAMBDAEXPRESSION = 7;
-    int JJTLAMBDAPARAMETERS = 8;
-    int JJTCHOICE = 9;
-    int JJTOR = 10;
-    int JJTAND = 11;
-    int JJTEQUAL = 12;
-    int JJTNOTEQUAL = 13;
-    int JJTLESSTHAN = 14;
-    int JJTGREATERTHAN = 15;
-    int JJTLESSTHANEQUAL = 16;
-    int JJTGREATERTHANEQUAL = 17;
-    int JJTCONCAT = 18;
-    int JJTPLUS = 19;
-    int JJTMINUS = 20;
-    int JJTMULT = 21;
-    int JJTDIV = 22;
-    int JJTMOD = 23;
-    int JJTNEGATIVE = 24;
-    int JJTNOT = 25;
-    int JJTEMPTY = 26;
-    int JJTVALUE = 27;
-    int JJTDOTSUFFIX = 28;
-    int JJTBRACKETSUFFIX = 29;
-    int JJTMETHODARGUMENTS = 30;
-    int JJTMAPDATA = 31;
-    int JJTMAPENTRY = 32;
-    int JJTLISTDATA = 33;
-    int JJTIDENTIFIER = 34;
-    int JJTFUNCTION = 35;
-    int JJTTRUE = 36;
-    int JJTFALSE = 37;
-    int JJTFLOATINGPOINT = 38;
-    int JJTINTEGER = 39;
-    int JJTSTRING = 40;
-    int JJTNULL = 41;
+public interface ELParserTreeConstants
+{
+  public int JJTCOMPOSITEEXPRESSION = 0;
+  public int JJTLITERALEXPRESSION = 1;
+  public int JJTDEFERREDEXPRESSION = 2;
+  public int JJTDYNAMICEXPRESSION = 3;
+  public int JJTVOID = 4;
+  public int JJTSEMICOLON = 5;
+  public int JJTASSIGN = 6;
+  public int JJTLAMBDAEXPRESSION = 7;
+  public int JJTLAMBDAPARAMETERS = 8;
+  public int JJTCHOICE = 9;
+  public int JJTOR = 10;
+  public int JJTAND = 11;
+  public int JJTEQUAL = 12;
+  public int JJTNOTEQUAL = 13;
+  public int JJTLESSTHAN = 14;
+  public int JJTGREATERTHAN = 15;
+  public int JJTLESSTHANEQUAL = 16;
+  public int JJTGREATERTHANEQUAL = 17;
+  public int JJTCONCAT = 18;
+  public int JJTPLUS = 19;
+  public int JJTMINUS = 20;
+  public int JJTMULT = 21;
+  public int JJTDIV = 22;
+  public int JJTMOD = 23;
+  public int JJTNEGATIVE = 24;
+  public int JJTNOT = 25;
+  public int JJTEMPTY = 26;
+  public int JJTVALUE = 27;
+  public int JJTDOTSUFFIX = 28;
+  public int JJTBRACKETSUFFIX = 29;
+  public int JJTMETHODARGUMENTS = 30;
+  public int JJTMAPDATA = 31;
+  public int JJTMAPENTRY = 32;
+  public int JJTLISTDATA = 33;
+  public int JJTIDENTIFIER = 34;
+  public int JJTFUNCTION = 35;
+  public int JJTTRUE = 36;
+  public int JJTFALSE = 37;
+  public int JJTFLOATINGPOINT = 38;
+  public int JJTINTEGER = 39;
+  public int JJTSTRING = 40;
+  public int JJTNULL = 41;
 
-    String[] jjtNodeName = { "CompositeExpression", "LiteralExpression", "DeferredExpression", "DynamicExpression", "void", "SemiColon", "Assign",
-            "LambdaExpression", "LambdaParameters", "Choice", "Or", "And", "Equal", "NotEqual", "LessThan", "GreaterThan", "LessThanEqual", "GreaterThanEqual",
-            "Concat", "Plus", "Minus", "Mult", "Div", "Mod", "Negative", "Not", "Empty", "Value", "DotSuffix", "BracketSuffix", "MethodArguments", "MapData",
-            "MapEntry", "ListData", "Identifier", "Function", "True", "False", "FloatingPoint", "Integer", "String", "Null", };
+
+  public String[] jjtNodeName = {
+    "CompositeExpression",
+    "LiteralExpression",
+    "DeferredExpression",
+    "DynamicExpression",
+    "void",
+    "SemiColon",
+    "Assign",
+    "LambdaExpression",
+    "LambdaParameters",
+    "Choice",
+    "Or",
+    "And",
+    "Equal",
+    "NotEqual",
+    "LessThan",
+    "GreaterThan",
+    "LessThanEqual",
+    "GreaterThanEqual",
+    "Concat",
+    "Plus",
+    "Minus",
+    "Mult",
+    "Div",
+    "Mod",
+    "Negative",
+    "Not",
+    "Empty",
+    "Value",
+    "DotSuffix",
+    "BracketSuffix",
+    "MethodArguments",
+    "MapData",
+    "MapEntry",
+    "ListData",
+    "Identifier",
+    "Function",
+    "True",
+    "False",
+    "FloatingPoint",
+    "Integer",
+    "String",
+    "Null",
+  };
 }
 /* JavaCC - OriginalChecksum=295bae338407e43a1d349f1ce802614a (do not edit this line) */
diff --git a/impl/src/main/java/com/sun/el/parser/JJTELParserState.java b/impl/src/main/java/com/sun/el/parser/JJTELParserState.java
index 80c0298..bef1968 100644
--- a/impl/src/main/java/com/sun/el/parser/JJTELParserState.java
+++ b/impl/src/main/java/com/sun/el/parser/JJTELParserState.java
@@ -13,128 +13,127 @@
  *
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
-
+ 
 /* Generated By:JavaCC: Do not edit this line. JJTELParserState.java Version 5.0 */
 package com.sun.el.parser;
 
 public class JJTELParserState {
-    private java.util.List<Node> nodes;
-    private java.util.List<Integer> marks;
+  private java.util.List<Node> nodes;
+  private java.util.List<Integer> marks;
 
-    private int sp; // number of nodes on stack
-    private int mk; // current mark
-    private boolean node_created;
+  private int sp;        // number of nodes on stack
+  private int mk;        // current mark
+  private boolean node_created;
 
-    public JJTELParserState() {
-        nodes = new java.util.ArrayList<Node>();
-        marks = new java.util.ArrayList<Integer>();
-        sp = 0;
-        mk = 0;
+  public JJTELParserState() {
+    nodes = new java.util.ArrayList<Node>();
+    marks = new java.util.ArrayList<Integer>();
+    sp = 0;
+    mk = 0;
+  }
+
+  /* Determines whether the current node was actually closed and
+     pushed.  This should only be called in the final user action of a
+     node scope.  */
+  public boolean nodeCreated() {
+    return node_created;
+  }
+
+  /* Call this to reinitialize the node stack.  It is called
+     automatically by the parser's ReInit() method. */
+  public void reset() {
+    nodes.clear();
+    marks.clear();
+    sp = 0;
+    mk = 0;
+  }
+
+  /* Returns the root node of the AST.  It only makes sense to call
+     this after a successful parse. */
+  public Node rootNode() {
+    return nodes.get(0);
+  }
+
+  /* Pushes a node on to the stack. */
+  public void pushNode(Node n) {
+    nodes.add(n);
+    ++sp;
+  }
+
+  /* Returns the node on the top of the stack, and remove it from the
+     stack.  */
+  public Node popNode() {
+    if (--sp < mk) {
+      mk = marks.remove(marks.size()-1);
     }
+    return nodes.remove(nodes.size()-1);
+  }
 
-    /*
-     * Determines whether the current node was actually closed and pushed. This should only be called in the final user
-     * action of a node scope.
-     */
-    public boolean nodeCreated() {
-        return node_created;
-    }
+  /* Returns the node currently on the top of the stack. */
+  public Node peekNode() {
+    return nodes.get(nodes.size()-1);
+  }
 
-    /*
-     * Call this to reinitialize the node stack. It is called automatically by the parser's ReInit() method.
-     */
-    public void reset() {
-        nodes.clear();
-        marks.clear();
-        sp = 0;
-        mk = 0;
-    }
+  /* Returns the number of children on the stack in the current node
+     scope. */
+  public int nodeArity() {
+    return sp - mk;
+  }
 
-    /*
-     * Returns the root node of the AST. It only makes sense to call this after a successful parse.
-     */
-    public Node rootNode() {
-        return nodes.get(0);
-    }
 
-    /* Pushes a node on to the stack. */
-    public void pushNode(Node n) {
-        nodes.add(n);
-        ++sp;
+  public void clearNodeScope(Node n) {
+    while (sp > mk) {
+      popNode();
     }
+    mk = marks.remove(marks.size()-1);
+  }
 
-    /*
-     * Returns the node on the top of the stack, and remove it from the stack.
-     */
-    public Node popNode() {
-        if (--sp < mk) {
-            mk = marks.remove(marks.size() - 1);
-        }
-        return nodes.remove(nodes.size() - 1);
-    }
 
-    /* Returns the node currently on the top of the stack. */
-    public Node peekNode() {
-        return nodes.get(nodes.size() - 1);
-    }
+  public void openNodeScope(Node n) {
+    marks.add(mk);
+    mk = sp;
+    n.jjtOpen();
+  }
 
-    /*
-     * Returns the number of children on the stack in the current node scope.
-     */
-    public int nodeArity() {
-        return sp - mk;
-    }
 
-    public void clearNodeScope(Node n) {
-        while (sp > mk) {
-            popNode();
-        }
-        mk = marks.remove(marks.size() - 1);
+  /* A definite node is constructed from a specified number of
+     children.  That number of nodes are popped from the stack and
+     made the children of the definite node.  Then the definite node
+     is pushed on to the stack. */
+  public void closeNodeScope(Node n, int num) {
+    mk = marks.remove(marks.size()-1);
+    while (num-- > 0) {
+      Node c = popNode();
+      c.jjtSetParent(n);
+      n.jjtAddChild(c, num);
     }
+    n.jjtClose();
+    pushNode(n);
+    node_created = true;
+  }
 
-    public void openNodeScope(Node n) {
-        marks.add(mk);
-        mk = sp;
-        n.jjtOpen();
-    }
 
-    /*
-     * A definite node is constructed from a specified number of children. That number of nodes are popped from the stack
-     * and made the children of the definite node. Then the definite node is pushed on to the stack.
-     */
-    public void closeNodeScope(Node n, int num) {
-        mk = marks.remove(marks.size() - 1);
-        while (num-- > 0) {
-            Node c = popNode();
-            c.jjtSetParent(n);
-            n.jjtAddChild(c, num);
-        }
-        n.jjtClose();
-        pushNode(n);
-        node_created = true;
+  /* A conditional node is constructed if its condition is true.  All
+     the nodes that have been pushed since the node was opened are
+     made children of the conditional node, which is then pushed
+     on to the stack.  If the condition is false the node is not
+     constructed and they are left on the stack. */
+  public void closeNodeScope(Node n, boolean condition) {
+    if (condition) {
+      int a = nodeArity();
+      mk = marks.remove(marks.size()-1);
+      while (a-- > 0) {
+        Node c = popNode();
+        c.jjtSetParent(n);
+        n.jjtAddChild(c, a);
+      }
+      n.jjtClose();
+      pushNode(n);
+      node_created = true;
+    } else {
+      mk = marks.remove(marks.size()-1);
+      node_created = false;
     }
-
-    /*
-     * A conditional node is constructed if its condition is true. All the nodes that have been pushed since the node was
-     * opened are made children of the conditional node, which is then pushed on to the stack. If the condition is false the
-     * node is not constructed and they are left on the stack.
-     */
-    public void closeNodeScope(Node n, boolean condition) {
-        if (condition) {
-            int a = nodeArity();
-            mk = marks.remove(marks.size() - 1);
-            while (a-- > 0) {
-                Node c = popNode();
-                c.jjtSetParent(n);
-                n.jjtAddChild(c, a);
-            }
-            n.jjtClose();
-            pushNode(n);
-            node_created = true;
-        } else {
-            mk = marks.remove(marks.size() - 1);
-            node_created = false;
-        }
-    }
+  }
 }
 /* JavaCC - OriginalChecksum=a169ec9bf66edaa6db0c5550b112beee (do not edit this line) */
diff --git a/impl/src/main/java/com/sun/el/parser/SimpleCharStream.java b/impl/src/main/java/com/sun/el/parser/SimpleCharStream.java
index 4b0b619..3e97009 100644
--- a/impl/src/main/java/com/sun/el/parser/SimpleCharStream.java
+++ b/impl/src/main/java/com/sun/el/parser/SimpleCharStream.java
@@ -13,424 +13,475 @@
  *
  * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
  */
-
+ 
 /* Generated By:JavaCC: Do not edit this line. SimpleCharStream.java Version 5.0 */
 /* JavaCCOptions:STATIC=false,SUPPORT_CLASS_VISIBILITY_PUBLIC=true */
 package com.sun.el.parser;
 
 /**
- * An implementation of interface CharStream, where the stream is assumed to contain only ASCII characters (without
- * unicode processing).
+ * An implementation of interface CharStream, where the stream is assumed to
+ * contain only ASCII characters (without unicode processing).
  */
 
-public class SimpleCharStream {
-    /** Whether parser is static. */
-    public static final boolean staticFlag = false;
-    int bufsize;
-    int available;
-    int tokenBegin;
-    /** Position in buffer. */
-    public int bufpos = -1;
-    protected int bufline[];
-    protected int bufcolumn[];
+public class SimpleCharStream
+{
+/** Whether parser is static. */
+  public static final boolean staticFlag = false;
+  int bufsize;
+  int available;
+  int tokenBegin;
+/** Position in buffer. */
+  public int bufpos = -1;
+  protected int bufline[];
+  protected int bufcolumn[];
 
-    protected int column = 0;
-    protected int line = 1;
+  protected int column = 0;
+  protected int line = 1;
 
-    protected boolean prevCharIsCR = false;
-    protected boolean prevCharIsLF = false;
+  protected boolean prevCharIsCR = false;
+  protected boolean prevCharIsLF = false;
 
-    protected java.io.Reader inputStream;
+  protected java.io.Reader inputStream;
 
-    protected char[] buffer;
-    protected int maxNextCharInd = 0;
-    protected int inBuf = 0;
-    protected int tabSize = 8;
+  protected char[] buffer;
+  protected int maxNextCharInd = 0;
+  protected int inBuf = 0;
+  protected int tabSize = 8;
 
-    protected void setTabSize(int i) {
-        tabSize = i;
+  protected void setTabSize(int i) { tabSize = i; }
+  protected int getTabSize(int i) { return tabSize; }
+
+
+  protected void ExpandBuff(boolean wrapAround)
+  {
+    char[] newbuffer = new char[bufsize + 2048];
+    int newbufline[] = new int[bufsize + 2048];
+    int newbufcolumn[] = new int[bufsize + 2048];
+
+    try
+    {
+      if (wrapAround)
+      {
+        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+        System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
+        buffer = newbuffer;
+
+        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+        System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
+        bufline = newbufline;
+
+        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+        System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
+        bufcolumn = newbufcolumn;
+
+        maxNextCharInd = (bufpos += (bufsize - tokenBegin));
+      }
+      else
+      {
+        System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
+        buffer = newbuffer;
+
+        System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
+        bufline = newbufline;
+
+        System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
+        bufcolumn = newbufcolumn;
+
+        maxNextCharInd = (bufpos -= tokenBegin);
+      }
+    }
+    catch (Throwable t)
+    {
+      throw new Error(t.getMessage());
     }
 
-    protected int getTabSize(int i) {
-        return tabSize;
-    }
 
-    protected void ExpandBuff(boolean wrapAround) {
-        char[] newbuffer = new char[bufsize + 2048];
-        int newbufline[] = new int[bufsize + 2048];
-        int newbufcolumn[] = new int[bufsize + 2048];
+    bufsize += 2048;
+    available = bufsize;
+    tokenBegin = 0;
+  }
 
-        try {
-            if (wrapAround) {
-                System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
-                System.arraycopy(buffer, 0, newbuffer, bufsize - tokenBegin, bufpos);
-                buffer = newbuffer;
-
-                System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
-                System.arraycopy(bufline, 0, newbufline, bufsize - tokenBegin, bufpos);
-                bufline = newbufline;
-
-                System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
-                System.arraycopy(bufcolumn, 0, newbufcolumn, bufsize - tokenBegin, bufpos);
-                bufcolumn = newbufcolumn;
-
-                maxNextCharInd = (bufpos += (bufsize - tokenBegin));
-            } else {
-                System.arraycopy(buffer, tokenBegin, newbuffer, 0, bufsize - tokenBegin);
-                buffer = newbuffer;
-
-                System.arraycopy(bufline, tokenBegin, newbufline, 0, bufsize - tokenBegin);
-                bufline = newbufline;
-
-                System.arraycopy(bufcolumn, tokenBegin, newbufcolumn, 0, bufsize - tokenBegin);
-                bufcolumn = newbufcolumn;
-
-                maxNextCharInd = (bufpos -= tokenBegin);
-            }
-        } catch (Throwable t) {
-            throw new Error(t.getMessage());
+  protected void FillBuff() throws java.io.IOException
+  {
+    if (maxNextCharInd == available)
+    {
+      if (available == bufsize)
+      {
+        if (tokenBegin > 2048)
+        {
+          bufpos = maxNextCharInd = 0;
+          available = tokenBegin;
         }
-
-        bufsize += 2048;
+        else if (tokenBegin < 0)
+          bufpos = maxNextCharInd = 0;
+        else
+          ExpandBuff(false);
+      }
+      else if (available > tokenBegin)
         available = bufsize;
-        tokenBegin = 0;
+      else if ((tokenBegin - available) < 2048)
+        ExpandBuff(true);
+      else
+        available = tokenBegin;
     }
 
-    protected void FillBuff() throws java.io.IOException {
-        if (maxNextCharInd == available) {
-            if (available == bufsize) {
-                if (tokenBegin > 2048) {
-                    bufpos = maxNextCharInd = 0;
-                    available = tokenBegin;
-                } else if (tokenBegin < 0) {
-                    bufpos = maxNextCharInd = 0;
-                } else {
-                    ExpandBuff(false);
-                }
-            } else if (available > tokenBegin) {
-                available = bufsize;
-            } else if ((tokenBegin - available) < 2048) {
-                ExpandBuff(true);
-            } else {
-                available = tokenBegin;
-            }
-        }
-
-        int i;
-        try {
-            if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1) {
-                inputStream.close();
-                throw new java.io.IOException();
-            } else {
-                maxNextCharInd += i;
-            }
-            return;
-        } catch (java.io.IOException e) {
-            --bufpos;
-            backup(0);
-            if (tokenBegin == -1) {
-                tokenBegin = bufpos;
-            }
-            throw e;
-        }
+    int i;
+    try {
+      if ((i = inputStream.read(buffer, maxNextCharInd, available - maxNextCharInd)) == -1)
+      {
+        inputStream.close();
+        throw new java.io.IOException();
+      }
+      else
+        maxNextCharInd += i;
+      return;
     }
-
-    /** Start. */
-    public char BeginToken() throws java.io.IOException {
-        tokenBegin = -1;
-        char c = readChar();
+    catch(java.io.IOException e) {
+      --bufpos;
+      backup(0);
+      if (tokenBegin == -1)
         tokenBegin = bufpos;
+      throw e;
+    }
+  }
 
-        return c;
+/** Start. */
+  public char BeginToken() throws java.io.IOException
+  {
+    tokenBegin = -1;
+    char c = readChar();
+    tokenBegin = bufpos;
+
+    return c;
+  }
+
+  protected void UpdateLineColumn(char c)
+  {
+    column++;
+
+    if (prevCharIsLF)
+    {
+      prevCharIsLF = false;
+      line += (column = 1);
+    }
+    else if (prevCharIsCR)
+    {
+      prevCharIsCR = false;
+      if (c == '\n')
+      {
+        prevCharIsLF = true;
+      }
+      else
+        line += (column = 1);
     }
 
-    protected void UpdateLineColumn(char c) {
-        column++;
-
-        if (prevCharIsLF) {
-            prevCharIsLF = false;
-            line += (column = 1);
-        } else if (prevCharIsCR) {
-            prevCharIsCR = false;
-            if (c == '\n') {
-                prevCharIsLF = true;
-            } else {
-                line += (column = 1);
-            }
-        }
-
-        switch (c) {
-        case '\r':
-            prevCharIsCR = true;
-            break;
-        case '\n':
-            prevCharIsLF = true;
-            break;
-        case '\t':
-            column--;
-            column += (tabSize - (column % tabSize));
-            break;
-        default:
-            break;
-        }
-
-        bufline[bufpos] = line;
-        bufcolumn[bufpos] = column;
+    switch (c)
+    {
+      case '\r' :
+        prevCharIsCR = true;
+        break;
+      case '\n' :
+        prevCharIsLF = true;
+        break;
+      case '\t' :
+        column--;
+        column += (tabSize - (column % tabSize));
+        break;
+      default :
+        break;
     }
 
-    /** Read a character. */
-    public char readChar() throws java.io.IOException {
-        if (inBuf > 0) {
-            --inBuf;
+    bufline[bufpos] = line;
+    bufcolumn[bufpos] = column;
+  }
 
-            if (++bufpos == bufsize) {
-                bufpos = 0;
-            }
+/** Read a character. */
+  public char readChar() throws java.io.IOException
+  {
+    if (inBuf > 0)
+    {
+      --inBuf;
 
-            return buffer[bufpos];
-        }
+      if (++bufpos == bufsize)
+        bufpos = 0;
 
-        if (++bufpos >= maxNextCharInd) {
-            FillBuff();
-        }
-
-        char c = buffer[bufpos];
-
-        UpdateLineColumn(c);
-        return c;
+      return buffer[bufpos];
     }
 
-    @Deprecated
-    /**
-     * @deprecated
-     * @see #getEndColumn
-     */
+    if (++bufpos >= maxNextCharInd)
+      FillBuff();
 
-    public int getColumn() {
-        return bufcolumn[bufpos];
+    char c = buffer[bufpos];
+
+    UpdateLineColumn(c);
+    return c;
+  }
+
+  @Deprecated
+  /**
+   * @deprecated
+   * @see #getEndColumn
+   */
+
+  public int getColumn() {
+    return bufcolumn[bufpos];
+  }
+
+  @Deprecated
+  /**
+   * @deprecated
+   * @see #getEndLine
+   */
+
+  public int getLine() {
+    return bufline[bufpos];
+  }
+
+  /** Get token end column number. */
+  public int getEndColumn() {
+    return bufcolumn[bufpos];
+  }
+
+  /** Get token end line number. */
+  public int getEndLine() {
+     return bufline[bufpos];
+  }
+
+  /** Get token beginning column number. */
+  public int getBeginColumn() {
+    return bufcolumn[tokenBegin];
+  }
+
+  /** Get token beginning line number. */
+  public int getBeginLine() {
+    return bufline[tokenBegin];
+  }
+
+/** Backup a number of characters. */
+  public void backup(int amount) {
+
+    inBuf += amount;
+    if ((bufpos -= amount) < 0)
+      bufpos += bufsize;
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.Reader dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    available = bufsize = buffersize;
+    buffer = new char[buffersize];
+    bufline = new int[buffersize];
+    bufcolumn = new int[buffersize];
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.Reader dstream, int startline,
+                          int startcolumn)
+  {
+    this(dstream, startline, startcolumn, 4096);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.Reader dstream)
+  {
+    this(dstream, 1, 1, 4096);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.Reader dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    inputStream = dstream;
+    line = startline;
+    column = startcolumn - 1;
+
+    if (buffer == null || buffersize != buffer.length)
+    {
+      available = bufsize = buffersize;
+      buffer = new char[buffersize];
+      bufline = new int[buffersize];
+      bufcolumn = new int[buffersize];
+    }
+    prevCharIsLF = prevCharIsCR = false;
+    tokenBegin = inBuf = maxNextCharInd = 0;
+    bufpos = -1;
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.Reader dstream, int startline,
+                     int startcolumn)
+  {
+    ReInit(dstream, startline, startcolumn, 4096);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.Reader dstream)
+  {
+    ReInit(dstream, 1, 1, 4096);
+  }
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
+  int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+    this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, int startline,
+  int startcolumn, int buffersize)
+  {
+    this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline,
+                          int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+    this(dstream, encoding, startline, startcolumn, 4096);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, int startline,
+                          int startcolumn)
+  {
+    this(dstream, startline, startcolumn, 4096);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+    this(dstream, encoding, 1, 1, 4096);
+  }
+
+  /** Constructor. */
+  public SimpleCharStream(java.io.InputStream dstream)
+  {
+    this(dstream, 1, 1, 4096);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+                          int startcolumn, int buffersize) throws java.io.UnsupportedEncodingException
+  {
+    ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, int startline,
+                          int startcolumn, int buffersize)
+  {
+    ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException
+  {
+    ReInit(dstream, encoding, 1, 1, 4096);
+  }
+
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream)
+  {
+    ReInit(dstream, 1, 1, 4096);
+  }
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, String encoding, int startline,
+                     int startcolumn) throws java.io.UnsupportedEncodingException
+  {
+    ReInit(dstream, encoding, startline, startcolumn, 4096);
+  }
+  /** Reinitialise. */
+  public void ReInit(java.io.InputStream dstream, int startline,
+                     int startcolumn)
+  {
+    ReInit(dstream, startline, startcolumn, 4096);
+  }
+  /** Get token literal value. */
+  public String GetImage()
+  {
+    if (bufpos >= tokenBegin)
+      return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
+    else
+      return new String(buffer, tokenBegin, bufsize - tokenBegin) +
+                            new String(buffer, 0, bufpos + 1);
+  }
+
+  /** Get the suffix. */
+  public char[] GetSuffix(int len)
+  {
+    char[] ret = new char[len];
+
+    if ((bufpos + 1) >= len)
+      System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
+    else
+    {
+      System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0,
+                                                        len - bufpos - 1);
+      System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
     }
 
-    @Deprecated
-    /**
-     * @deprecated
-     * @see #getEndLine
-     */
+    return ret;
+  }
 
-    public int getLine() {
-        return bufline[bufpos];
+  /** Reset buffer when finished. */
+  public void Done()
+  {
+    buffer = null;
+    bufline = null;
+    bufcolumn = null;
+  }
+
+  /**
+   * Method to adjust line and column numbers for the start of a token.
+   */
+  public void adjustBeginLineColumn(int newLine, int newCol)
+  {
+    int start = tokenBegin;
+    int len;
+
+    if (bufpos >= tokenBegin)
+    {
+      len = bufpos - tokenBegin + inBuf + 1;
+    }
+    else
+    {
+      len = bufsize - tokenBegin + bufpos + 1 + inBuf;
     }
 
-    /** Get token end column number. */
-    public int getEndColumn() {
-        return bufcolumn[bufpos];
+    int i = 0, j = 0, k = 0;
+    int nextColDiff = 0, columnDiff = 0;
+
+    while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize])
+    {
+      bufline[j] = newLine;
+      nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
+      bufcolumn[j] = newCol + columnDiff;
+      columnDiff = nextColDiff;
+      i++;
     }
 
-    /** Get token end line number. */
-    public int getEndLine() {
-        return bufline[bufpos];
+    if (i < len)
+    {
+      bufline[j] = newLine++;
+      bufcolumn[j] = newCol + columnDiff;
+
+      while (i++ < len)
+      {
+        if (bufline[j = start % bufsize] != bufline[++start % bufsize])
+          bufline[j] = newLine++;
+        else
+          bufline[j] = newLine;
+      }
     }
 
-    /** Get token beginning column number. */
-    public int getBeginColumn() {
-        return bufcolumn[tokenBegin];
-    }
-
-    /** Get token beginning line number. */
-    public int getBeginLine() {
-        return bufline[tokenBegin];
-    }
-
-    /** Backup a number of characters. */
-    public void backup(int amount) {
-
-        inBuf += amount;
-        if ((bufpos -= amount) < 0) {
-            bufpos += bufsize;
-        }
-    }
-
-    /** Constructor. */
-    public SimpleCharStream(java.io.Reader dstream, int startline, int startcolumn, int buffersize) {
-        inputStream = dstream;
-        line = startline;
-        column = startcolumn - 1;
-
-        available = bufsize = buffersize;
-        buffer = new char[buffersize];
-        bufline = new int[buffersize];
-        bufcolumn = new int[buffersize];
-    }
-
-    /** Constructor. */
-    public SimpleCharStream(java.io.Reader dstream, int startline, int startcolumn) {
-        this(dstream, startline, startcolumn, 4096);
-    }
-
-    /** Constructor. */
-    public SimpleCharStream(java.io.Reader dstream) {
-        this(dstream, 1, 1, 4096);
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.Reader dstream, int startline, int startcolumn, int buffersize) {
-        inputStream = dstream;
-        line = startline;
-        column = startcolumn - 1;
-
-        if (buffer == null || buffersize != buffer.length) {
-            available = bufsize = buffersize;
-            buffer = new char[buffersize];
-            bufline = new int[buffersize];
-            bufcolumn = new int[buffersize];
-        }
-        prevCharIsLF = prevCharIsCR = false;
-        tokenBegin = inBuf = maxNextCharInd = 0;
-        bufpos = -1;
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.Reader dstream, int startline, int startcolumn) {
-        ReInit(dstream, startline, startcolumn, 4096);
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.Reader dstream) {
-        ReInit(dstream, 1, 1, 4096);
-    }
-
-    /** Constructor. */
-    public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline, int startcolumn, int buffersize)
-            throws java.io.UnsupportedEncodingException {
-        this(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn, buffersize);
-    }
-
-    /** Constructor. */
-    public SimpleCharStream(java.io.InputStream dstream, int startline, int startcolumn, int buffersize) {
-        this(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
-    }
-
-    /** Constructor. */
-    public SimpleCharStream(java.io.InputStream dstream, String encoding, int startline, int startcolumn) throws java.io.UnsupportedEncodingException {
-        this(dstream, encoding, startline, startcolumn, 4096);
-    }
-
-    /** Constructor. */
-    public SimpleCharStream(java.io.InputStream dstream, int startline, int startcolumn) {
-        this(dstream, startline, startcolumn, 4096);
-    }
-
-    /** Constructor. */
-    public SimpleCharStream(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException {
-        this(dstream, encoding, 1, 1, 4096);
-    }
-
-    /** Constructor. */
-    public SimpleCharStream(java.io.InputStream dstream) {
-        this(dstream, 1, 1, 4096);
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream dstream, String encoding, int startline, int startcolumn, int buffersize)
-            throws java.io.UnsupportedEncodingException {
-        ReInit(encoding == null ? new java.io.InputStreamReader(dstream) : new java.io.InputStreamReader(dstream, encoding), startline, startcolumn,
-                buffersize);
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream dstream, int startline, int startcolumn, int buffersize) {
-        ReInit(new java.io.InputStreamReader(dstream), startline, startcolumn, buffersize);
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream dstream, String encoding) throws java.io.UnsupportedEncodingException {
-        ReInit(dstream, encoding, 1, 1, 4096);
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream dstream) {
-        ReInit(dstream, 1, 1, 4096);
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream dstream, String encoding, int startline, int startcolumn) throws java.io.UnsupportedEncodingException {
-        ReInit(dstream, encoding, startline, startcolumn, 4096);
-    }
-
-    /** Reinitialise. */
-    public void ReInit(java.io.InputStream dstream, int startline, int startcolumn) {
-        ReInit(dstream, startline, startcolumn, 4096);
-    }
-
-    /** Get token literal value. */
-    public String GetImage() {
-        if (bufpos >= tokenBegin) {
-            return new String(buffer, tokenBegin, bufpos - tokenBegin + 1);
-        } else {
-            return new String(buffer, tokenBegin, bufsize - tokenBegin) + new String(buffer, 0, bufpos + 1);
-        }
-    }
-
-    /** Get the suffix. */
-    public char[] GetSuffix(int len) {
-        char[] ret = new char[len];
-
-        if ((bufpos + 1) >= len) {
-            System.arraycopy(buffer, bufpos - len + 1, ret, 0, len);
-        } else {
-            System.arraycopy(buffer, bufsize - (len - bufpos - 1), ret, 0, len - bufpos - 1);
-            System.arraycopy(buffer, 0, ret, len - bufpos - 1, bufpos + 1);
-        }
-
-        return ret;
-    }
-
-    /** Reset buffer when finished. */
-    public void Done() {
-        buffer = null;
-        bufline = null;
-        bufcolumn = null;
-    }
-
-    /**
-     * Method to adjust line and column numbers for the start of a token.
-     */
-    public void adjustBeginLineColumn(int newLine, int newCol) {
-        int start = tokenBegin;
-        int len;
-
-        if (bufpos >= tokenBegin) {
-            len = bufpos - tokenBegin + inBuf + 1;
-        } else {
-            len = bufsize - tokenBegin + bufpos + 1 + inBuf;
-        }
-
-        int i = 0, j = 0, k = 0;
-        int nextColDiff = 0, columnDiff = 0;
-
-        while (i < len && bufline[j = start % bufsize] == bufline[k = ++start % bufsize]) {
-            bufline[j] = newLine;
-            nextColDiff = columnDiff + bufcolumn[k] - bufcolumn[j];
-            bufcolumn[j] = newCol + columnDiff;
-            columnDiff = nextColDiff;
-            i++;
-        }
-
-        if (i < len) {
-            bufline[j] = newLine++;
-            bufcolumn[j] = newCol + columnDiff;
-
-            while (i++ < len) {
-                if (bufline[j = start % bufsize] != bufline[++start % bufsize]) {
-                    bufline[j] = newLine++;
-                } else {
-                    bufline[j] = newLine;
-                }
-            }
-        }
-
-        line = bufline[j];
-        column = bufcolumn[j];
-    }
+    line = bufline[j];
+    column = bufcolumn[j];
+  }
 
 }
 /* JavaCC - OriginalChecksum=7ea14199259e7ce0336b228c8cdb9958 (do not edit this line) */
diff --git a/src/test/java/org/glassfish/el/test/ELProcessorTest.java b/src/test/java/org/glassfish/el/test/ELProcessorTest.java
index 3381e7d..be19e8a 100644
--- a/src/test/java/org/glassfish/el/test/ELProcessorTest.java
+++ b/src/test/java/org/glassfish/el/test/ELProcessorTest.java
@@ -93,6 +93,13 @@
     }
     
     @Test
+    public void testParenthesis() {
+        elp.setVariable("xx", "1");
+        Object result = elp.eval("((xx)) + 1");
+        assertEquals(result, 2L);
+    }
+    
+    @Test
     public void defineFuncTest() {
         Class c = MyBean.class;
         Method meth = null;
diff --git a/src/test/java/org/glassfish/el/test/LambdaTest.java b/src/test/java/org/glassfish/el/test/LambdaTest.java
index 2734e0c..924c37e 100644
--- a/src/test/java/org/glassfish/el/test/LambdaTest.java
+++ b/src/test/java/org/glassfish/el/test/LambdaTest.java
@@ -86,12 +86,14 @@
     @Test
     public void testLambda() {
         ELProcessor elp = new ELProcessor();
-        testExpr(elp, "Lambda Lambda", "f = ()->y->y+1; f()(100)", 101L);
+        testExpr(elp, "Lambda Lambda 1", "f = ()->y->y+1; f()(100)", 101L);
         testExpr(elp, "Lambda Lambda 2", "f = (x)->(tem=x; y->tem+y); f(1)(100)", 101L);
         testExpr(elp, "Lambda Lambda 3", "(()->y->y+1)()(100)", 101L);
         testExpr(elp, "Lambda Lambda 4", "(x->(y->x+y)(1))(100)", 101L);
-        testExpr(elp, "Lambda Lambda 5", "(x->(y->x+y))(1)(100)", 101L);
+        testExpr(elp, "Lambda Lambda 5", "((x)->(y->x+y))(1)(100)", 101L);
         testExpr(elp, "Lambda Lambda 6"
                 , "(x->y->x(0)+y)(x->x+1)(100)", 101L);
+        testExpr(elp, "Lambda Lambda 7", "f = ()->((1)); f()", 1L);
+        testExpr(elp, "Lambda Lambda 8", "f = ()->(y)->y+1; f()(100)", 101L);
     }
 }
diff --git a/src/test/java/org/glassfish/el/test/OperatorTest.java b/src/test/java/org/glassfish/el/test/OperatorTest.java
index a9d512f..020c15a 100644
--- a/src/test/java/org/glassfish/el/test/OperatorTest.java
+++ b/src/test/java/org/glassfish/el/test/OperatorTest.java
@@ -71,6 +71,7 @@
     public void testConcat() {
         testExpr("concat", "a = null; b = null; a + b", 0L);
         testExpr("add", "10 + 11", 21L);
+        testExpr("add 2", "((1)) + 1", 2L);
         testExpr("concat", "'10' + 11", 21L);
         testExpr("concat 2", "11 + '10'", 21L);
         testExpr("concat 3", "100 += 10 ", "10010");