]> gerrit.simantics Code Review - simantics/sysdyn.git/commitdiff
Adding support for power
authorvillberg <villberg@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Wed, 23 Apr 2014 19:28:04 +0000 (19:28 +0000)
committervillberg <villberg@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Wed, 23 Apr 2014 19:28:04 +0000 (19:28 +0000)
refs #4765

git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@29333 ac1ea38d-2e2b-0410-8846-a27921b304fc

fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Array.java
fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwiseDivision.java [new file with mode: 0644]
fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwisePower.java [new file with mode: 0644]
fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/NodeClass.java
fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Parser.java
fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Power.java [new file with mode: 0644]
fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/parser/ModelParser.java
fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/parser/ModelicaParser.jj
fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/parser/ModelicaParser.jjt

index 4544936274cd53fdc4bcebd8b3e900421320d939..a14e5ace2a686aa6b85a4ae985a4bf79bd0c63b3 100644 (file)
@@ -140,6 +140,20 @@ public class Array implements IExpression {
                }\r
                return result;\r
        }\r
+\r
+       public Array pow(double d) {\r
+               Array result = new Array();\r
+               for(Object o : elements) {\r
+               if(o instanceof Double) {\r
+                       result.addElement(Math.pow((Double)o,d));\r
+               } else if (o instanceof Array) {\r
+                       result.addElement(((Array)o).pow(d));\r
+               } else {\r
+                       throw new IllegalStateException();\r
+               }\r
+               }\r
+               return result;\r
+       }\r
        \r
        public boolean validateDimensions(int[] dimensions, int index) {\r
                if(elements.size() != dimensions[index]) return false;\r
@@ -220,7 +234,30 @@ public class Array implements IExpression {
                        } else if (l instanceof Array && r instanceof Array) {\r
                                Array arr = (Array)l;\r
                                Array otherArr = (Array)r;\r
-                               result.addElement(arr.add(otherArr));\r
+                               result.addElement(arr.mul(otherArr));\r
+                       } else {\r
+                               throw new IllegalStateException();\r
+                       }\r
+               }\r
+               return result;\r
+       }\r
+\r
+       public Array pow(Array other) {\r
+               Array result = new Array();\r
+               Collection<Object> lae = elements();\r
+               Collection<Object> rae = other.elements();\r
+               if(lae.size() != rae.size()) throw new IllegalStateException();\r
+               Iterator<Object> li = lae.iterator();\r
+               Iterator<Object> ri = rae.iterator();\r
+               for(int i=0;i<lae.size();i++) {\r
+                       Object l = li.next();\r
+                       Object r = ri.next();\r
+                       if(l instanceof Double && r instanceof Double) {\r
+                               result.addElement(Math.pow(((Double)l),((Double)r)));\r
+                       } else if (l instanceof Array && r instanceof Array) {\r
+                               Array arr = (Array)l;\r
+                               Array otherArr = (Array)r;\r
+                               result.addElement(arr.pow(otherArr));\r
                        } else {\r
                                throw new IllegalStateException();\r
                        }\r
diff --git a/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwiseDivision.java b/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwiseDivision.java
new file mode 100644 (file)
index 0000000..6968835
--- /dev/null
@@ -0,0 +1,78 @@
+/*******************************************************************************\r
+ * Copyright (c) 2013 Semantum Oy.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     Semantum Oy - initial API and implementation\r
+ *******************************************************************************/\r
+package fi.semantum.sysdyn.solver;\r
+\r
+import java.util.Collection;\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+public class ElementwiseDivision implements IExpression {\r
+       \r
+    public IExpression exp1;\r
+    public IExpression exp2;\r
+    \r
+    public ElementwiseDivision(IExpression exp1, IExpression exp2) {\r
+       this.exp1 = exp1;\r
+       this.exp2 = exp2;\r
+    }\r
+    \r
+    @Override\r
+    public String toString() {\r
+       return exp1 + " / " + exp2;\r
+    }\r
+    \r
+       @Override\r
+       public Object evaluate(IEnvironment environment) {\r
+               Object left = exp1.evaluate(environment);\r
+               Object right = exp2.evaluate(environment);\r
+               if(left instanceof Array && right instanceof Array) {\r
+                       Array la = (Array)left;\r
+                       Array ra = (Array)right;\r
+                       Collection<Object> lae = la.elements();\r
+                       Collection<Object> rae = ra.elements();\r
+                       if(lae.size() != rae.size()) throw new UnsupportedOperationException();\r
+                       Iterator<Object> li = lae.iterator();\r
+                       Iterator<Object> ri = rae.iterator();\r
+                       Array result = new Array();\r
+                       for(int i=0;i<lae.size();i++) {\r
+                               double ld = (Double)li.next();\r
+                               double rd = (Double)ri.next();\r
+                               result.addElement(ld/rd);\r
+                       }\r
+                       return result;\r
+               } else throw new UnsupportedOperationException();\r
+       }\r
+       \r
+       @Override\r
+       public IExpression withBase(IFrame frame, String prefix) {\r
+               return new ElementwiseDivision(exp1.withBase(frame, prefix), exp2.withBase(frame, prefix));\r
+       }\r
+    \r
+       @Override\r
+       public Object getPossibleConstant() {\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       public IExpression rewrite(IFrame frame, Map<String, VariableBase> copies) {\r
+               exp1 = exp1.rewrite(frame, copies);\r
+               exp2 = exp2.rewrite(frame, copies);\r
+               return this;\r
+       }\r
+\r
+       @Override\r
+       public void accept(ExpressionVisitor visitor) {\r
+               visitor.visit(this);\r
+               exp1.accept(visitor);\r
+               exp2.accept(visitor);\r
+       }\r
+       \r
+}\r
diff --git a/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwisePower.java b/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/ElementwisePower.java
new file mode 100644 (file)
index 0000000..6fac728
--- /dev/null
@@ -0,0 +1,78 @@
+/*******************************************************************************\r
+ * Copyright (c) 2013 Semantum Oy.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     Semantum Oy - initial API and implementation\r
+ *******************************************************************************/\r
+package fi.semantum.sysdyn.solver;\r
+\r
+import java.util.Collection;\r
+import java.util.Iterator;\r
+import java.util.Map;\r
+\r
+public class ElementwisePower implements IExpression {\r
+       \r
+    public IExpression exp1;\r
+    public IExpression exp2;\r
+    \r
+    public ElementwisePower(IExpression exp1, IExpression exp2) {\r
+       this.exp1 = exp1;\r
+       this.exp2 = exp2;\r
+    }\r
+    \r
+    @Override\r
+    public String toString() {\r
+       return exp1 + " ^ " + exp2;\r
+    }\r
+    \r
+       @Override\r
+       public Object evaluate(IEnvironment environment) {\r
+               Object left = exp1.evaluate(environment);\r
+               Object right = exp2.evaluate(environment);\r
+               if(left instanceof Array && right instanceof Array) {\r
+                       Array la = (Array)left;\r
+                       Array ra = (Array)right;\r
+                       Collection<Object> lae = la.elements();\r
+                       Collection<Object> rae = ra.elements();\r
+                       if(lae.size() != rae.size()) throw new UnsupportedOperationException();\r
+                       Iterator<Object> li = lae.iterator();\r
+                       Iterator<Object> ri = rae.iterator();\r
+                       Array result = new Array();\r
+                       for(int i=0;i<lae.size();i++) {\r
+                               double ld = (Double)li.next();\r
+                               double rd = (Double)ri.next();\r
+                               result.addElement(Math.pow(ld,rd));\r
+                       }\r
+                       return result;\r
+               } else throw new UnsupportedOperationException();\r
+       }\r
+       \r
+       @Override\r
+       public IExpression withBase(IFrame frame, String prefix) {\r
+               return new ElementwisePower(exp1.withBase(frame, prefix), exp2.withBase(frame, prefix));\r
+       }\r
+    \r
+       @Override\r
+       public Object getPossibleConstant() {\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       public IExpression rewrite(IFrame frame, Map<String, VariableBase> copies) {\r
+               exp1 = exp1.rewrite(frame, copies);\r
+               exp2 = exp2.rewrite(frame, copies);\r
+               return this;\r
+       }\r
+\r
+       @Override\r
+       public void accept(ExpressionVisitor visitor) {\r
+               visitor.visit(this);\r
+               exp1.accept(visitor);\r
+               exp2.accept(visitor);\r
+       }\r
+       \r
+}\r
index 33415ec587043de52b068e1c94c8c4416ac8970f..81b86df71287487b91928ed8e5060a68d12bb5b4 100644 (file)
@@ -45,9 +45,11 @@ public enum NodeClass {
        logical_term,\r
        arithmetic_expression,\r
        term,\r
+       factor,\r
        if_expression,\r
        add_op,\r
        mul_op,\r
+       factor_op,\r
        rel_op,\r
        der_initial,\r
        output_expression_list,\r
index cbfac5e79952a71a6aaa3fba2ad92b6f5aa59aaf..175ea53cf0cae10453908f84e9dcb0ff96424b6b 100644 (file)
@@ -27,7 +27,7 @@ public class Parser {
        \r
 //     public IFrame currentFrame;\r
 \r
-       private int PRINT = 0;\r
+       private int PRINT = 1;\r
        \r
        public Object walk(SimpleNode n, int indent, IFrame model) {\r
                Object result = walk_(n, indent, model);\r
@@ -511,12 +511,26 @@ public class Parser {
                                        IExpression exp2 = (IExpression)walk((SimpleNode)n.jjtGetChild(i+1), indent+2, frame);\r
                                        if("*".equals(op)) term = new Multiplication(term, exp2);\r
                                        else if(".*".equals(op)) term = new ElementwiseProduct(term, exp2);\r
+                                       else if("./".equals(op)) term = new ElementwiseDivision(term, exp2);\r
                                        else if("/".equals(op)) term = new Division(term, exp2);\r
                                }\r
                                return term;\r
                        } else {\r
                                return walk((SimpleNode)n.jjtGetChild(0), indent+2, frame);\r
                        }\r
+               case factor:\r
+                       if(n.jjtGetNumChildren() > 1) {\r
+                               IExpression term = (IExpression)walk((SimpleNode)n.jjtGetChild(0), indent+2, frame);\r
+                               for(int i=1;i<n.jjtGetNumChildren();i+=2) {\r
+                                       String op = ((String)walk((SimpleNode)n.jjtGetChild(i), indent+2, model)).trim();\r
+                                       IExpression exp2 = (IExpression)walk((SimpleNode)n.jjtGetChild(i+1), indent+2, frame);\r
+                                       if("^".equals(op)) term = new Power(term, exp2);\r
+                                       else if(".^".equals(op)) term = new ElementwisePower(term, exp2);\r
+                               }\r
+                               return term;\r
+                       } else {\r
+                               return walk((SimpleNode)n.jjtGetChild(0), indent+2, frame);\r
+                       }                       \r
                case if_expression:\r
                        if(n.jjtGetNumChildren() == 3) {\r
                                IExpression exp1 = (IExpression)walk((SimpleNode)n.jjtGetChild(0), indent+2, frame);\r
@@ -528,6 +542,8 @@ public class Parser {
                        return n.op;\r
                case mul_op:\r
                        return n.op;\r
+               case factor_op:\r
+                       return n.op;\r
                case rel_op:\r
                        return n.op;\r
                case der_initial:\r
diff --git a/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Power.java b/fi.semantum.sysdyn.solver/src/fi/semantum/sysdyn/solver/Power.java
new file mode 100644 (file)
index 0000000..d25a0d0
--- /dev/null
@@ -0,0 +1,74 @@
+/*******************************************************************************\r
+ * Copyright (c) 2013 Semantum Oy.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ *     Semantum Oy - initial API and implementation\r
+ *******************************************************************************/\r
+package fi.semantum.sysdyn.solver;\r
+\r
+import java.util.Map;\r
+\r
+import fi.semantum.sysdyn.solver.IExpression.ExpressionVisitor;\r
+\r
+public class Power implements IExpression {\r
+       \r
+    public IExpression exp1;\r
+    public IExpression exp2;\r
+    \r
+    public Power(IExpression exp1, IExpression exp2) {\r
+       this.exp1 = exp1;\r
+       this.exp2 = exp2;\r
+    }\r
+    \r
+    @Override\r
+    public String toString() {\r
+       return exp1 + " ^ " + exp2;\r
+    }\r
+    \r
+       @Override\r
+       public Object evaluate(IEnvironment environment) {\r
+               Object left = exp1.evaluate(environment);\r
+               Object right = exp2.evaluate(environment);\r
+               if(left instanceof Double && right instanceof Double) {\r
+                       return Math.pow(((Double)left),((Double)right));\r
+               } \r
+               else if(left instanceof Array && right instanceof Array) {\r
+                       Array la = (Array)left;\r
+                       Array ra = (Array)right;\r
+                       return la.pow(ra);\r
+               }\r
+               else if (left instanceof Array && right instanceof Double) return ((Array)left).pow((Double)right);\r
+               else if (left instanceof Double && right instanceof Array) return ((Array)right).pow((Double)left);\r
+               throw new IllegalStateException();\r
+               \r
+       }\r
+       \r
+       @Override\r
+       public IExpression withBase(IFrame frame, String prefix) {\r
+               return new Power(exp1.withBase(frame, prefix), exp2.withBase(frame, prefix));\r
+       }\r
+    \r
+       @Override\r
+       public Object getPossibleConstant() {\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       public IExpression rewrite(IFrame frame, Map<String, VariableBase> copies) {\r
+               exp1 = exp1.rewrite(frame, copies);\r
+               exp2 = exp2.rewrite(frame, copies);\r
+               return this;\r
+       }\r
+       \r
+       @Override\r
+       public void accept(ExpressionVisitor visitor) {\r
+               visitor.visit(this);\r
+               exp1.accept(visitor);\r
+               exp2.accept(visitor);\r
+       }\r
+       \r
+}\r
index 29ef1f1e0e8041c877a79f8f6c54a8e63a7ba241..de6a2b2501c89ac425f6bbf506c750e48278c6a3 100644 (file)
@@ -3686,6 +3686,9 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
         break;\r
       case 85:\r
         jj_consume_token(85);\r
+                                                                                               jjtree.closeNodeScope(jjtn000, true);\r
+                                                                                               jjtc000 = false;\r
+                                                                                               jjtn000.op = "./";\r
         break;\r
       default:\r
         jj_la1[105] = jj_gen;\r
@@ -4655,13 +4658,13 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     if (jj_scan_token(62)) return true;\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_165()) jj_scanpos = xsp;\r
+    if (jj_3R_166()) jj_scanpos = xsp;\r
     if (jj_scan_token(63)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_85() {\r
-    if (jj_3R_95()) return true;\r
+  private boolean jj_3R_129() {\r
+    if (jj_scan_token(49)) return true;\r
     return false;\r
   }\r
 \r
@@ -4670,36 +4673,17 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_129() {\r
-    if (jj_scan_token(49)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_152() {\r
+  private boolean jj_3R_153() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
     if (jj_scan_token(68)) jj_scanpos = xsp;\r
     if (jj_scan_token(IDENT)) return true;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_160()) jj_scanpos = xsp;\r
-    while (true) {\r
-      xsp = jj_scanpos;\r
-      if (jj_3R_161()) { jj_scanpos = xsp; break; }\r
-    }\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_42() {\r
-    if (jj_3R_43()) return true;\r
-    Token xsp;\r
+    if (jj_3R_161()) jj_scanpos = xsp;\r
     while (true) {\r
       xsp = jj_scanpos;\r
-      if (jj_3R_50()) { jj_scanpos = xsp; break; }\r
+      if (jj_3R_162()) { jj_scanpos = xsp; break; }\r
     }\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_51()) jj_scanpos = xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_52()) jj_scanpos = xsp;\r
     return false;\r
   }\r
 \r
@@ -4709,13 +4693,13 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_158() {\r
+  private boolean jj_3R_159() {\r
     if (jj_scan_token(58)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_106() {\r
-    if (jj_scan_token(7)) return true;\r
+  private boolean jj_3R_77() {\r
+    if (jj_scan_token(68)) return true;\r
     return false;\r
   }\r
 \r
@@ -4724,11 +4708,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_77() {\r
-    if (jj_scan_token(68)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_60() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -4741,12 +4720,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_71() {\r
-    if (jj_scan_token(21)) return true;\r
-    if (jj_3R_85()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_46() {\r
     if (jj_3R_60()) return true;\r
     return false;\r
@@ -4766,42 +4739,28 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_163() {\r
-    if (jj_scan_token(70)) return true;\r
+  private boolean jj_3R_123() {\r
+    if (jj_scan_token(74)) return true;\r
     return false;\r
   }\r
 \r
   private boolean jj_3R_146() {\r
-    if (jj_3R_154()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_123() {\r
-    if (jj_scan_token(74)) return true;\r
+    if (jj_3R_155()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3_4() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    if (jj_scan_token(40)) return true;\r
+  private boolean jj_3R_164() {\r
+    if (jj_scan_token(70)) return true;\r
     return false;\r
   }\r
 \r
   private boolean jj_3R_145() {\r
     if (jj_scan_token(66)) return true;\r
-    if (jj_3R_153()) return true;\r
+    if (jj_3R_154()) return true;\r
     if (jj_scan_token(67)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3_3() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    if (jj_scan_token(58)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_144() {\r
     if (jj_scan_token(62)) return true;\r
     if (jj_3R_47()) return true;\r
@@ -4809,42 +4768,18 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3_2() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_156() {\r
-    if (jj_scan_token(87)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_142() {\r
-    if (jj_3R_151()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_143() {\r
     if (jj_3R_152()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3_1() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_3R_41()) return true;\r
-    if (jj_3R_42()) return true;\r
-    if (jj_scan_token(35)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_141() {\r
-    if (jj_scan_token(33)) return true;\r
+  private boolean jj_3R_157() {\r
+    if (jj_scan_token(87)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_137() {\r
-    if (jj_scan_token(UNSIGNED_NUMBER)) return true;\r
+  private boolean jj_3R_143() {\r
+    if (jj_3R_153()) return true;\r
     return false;\r
   }\r
 \r
@@ -4885,6 +4820,16 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
+  private boolean jj_3R_137() {\r
+    if (jj_scan_token(UNSIGNED_NUMBER)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_141() {\r
+    if (jj_scan_token(33)) return true;\r
+    return false;\r
+  }\r
+\r
   private boolean jj_3R_140() {\r
     if (jj_scan_token(6)) return true;\r
     return false;\r
@@ -4895,11 +4840,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_108() {\r
-    if (jj_scan_token(26)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_138() {\r
     if (jj_scan_token(UNSIGNED_INTEGER)) return true;\r
     return false;\r
@@ -4915,9 +4855,9 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_154() {\r
+  private boolean jj_3R_155() {\r
     if (jj_scan_token(64)) return true;\r
-    if (jj_3R_164()) return true;\r
+    if (jj_3R_165()) return true;\r
     if (jj_scan_token(65)) return true;\r
     return false;\r
   }\r
@@ -4928,22 +4868,17 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_105() {\r
-    if (jj_scan_token(34)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_153() {\r
-    if (jj_3R_162()) return true;\r
+  private boolean jj_3R_154() {\r
+    if (jj_3R_163()) return true;\r
     Token xsp;\r
     while (true) {\r
       xsp = jj_scanpos;\r
-      if (jj_3R_163()) { jj_scanpos = xsp; break; }\r
+      if (jj_3R_164()) { jj_scanpos = xsp; break; }\r
     }\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_157() {\r
+  private boolean jj_3R_158() {\r
     if (jj_3R_60()) return true;\r
     return false;\r
   }\r
@@ -4953,14 +4888,14 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_151() {\r
+  private boolean jj_3R_152() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_157()) {\r
-    jj_scanpos = xsp;\r
     if (jj_3R_158()) {\r
     jj_scanpos = xsp;\r
-    if (jj_3R_159()) return true;\r
+    if (jj_3R_159()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_160()) return true;\r
     }\r
     }\r
     if (jj_3R_74()) return true;\r
@@ -4972,62 +4907,21 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_101() {\r
+  private boolean jj_3R_147() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_scan_token(30)) jj_scanpos = xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_scan_token(47)) jj_scanpos = xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_105()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_106()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(61)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(24)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_107()) {\r
+    if (jj_3R_156()) {\r
     jj_scanpos = xsp;\r
-    if (jj_scan_token(38)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(37)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_108()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(17)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(95)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(96)) return true;\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
+    if (jj_3R_157()) return true;\r
     }\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_155() {\r
+  private boolean jj_3R_156() {\r
     if (jj_scan_token(86)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_147() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_155()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_156()) return true;\r
-    }\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_119() {\r
     if (jj_3R_134()) return true;\r
     Token xsp;\r
@@ -5042,20 +4936,15 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_113() {\r
-    if (jj_3R_118()) return true;\r
-    if (jj_3R_112()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_104() {\r
     if (jj_3R_114()) return true;\r
     if (jj_3R_103()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_148() {\r
-    if (jj_scan_token(82)) return true;\r
+  private boolean jj_3R_113() {\r
+    if (jj_3R_118()) return true;\r
+    if (jj_3R_112()) return true;\r
     return false;\r
   }\r
 \r
@@ -5068,13 +4957,18 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     jj_scanpos = xsp;\r
     if (jj_3R_150()) {\r
     jj_scanpos = xsp;\r
-    if (jj_scan_token(85)) return true;\r
+    if (jj_3R_151()) return true;\r
     }\r
     }\r
     }\r
     return false;\r
   }\r
 \r
+  private boolean jj_3R_148() {\r
+    if (jj_scan_token(82)) return true;\r
+    return false;\r
+  }\r
+\r
   private boolean jj_3R_110() {\r
     if (jj_3R_60()) return true;\r
     return false;\r
@@ -5090,17 +4984,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_70() {\r
-    if (jj_scan_token(31)) return true;\r
-    if (jj_3R_47()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_132() {\r
-    if (jj_scan_token(78)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_131() {\r
     if (jj_scan_token(56)) return true;\r
     return false;\r
@@ -5122,8 +5005,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3_7() {\r
-    if (jj_3R_44()) return true;\r
+  private boolean jj_3R_132() {\r
+    if (jj_scan_token(78)) return true;\r
     return false;\r
   }\r
 \r
@@ -5133,8 +5016,13 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_111() {\r
-    if (jj_3R_118()) return true;\r
+  private boolean jj_3R_117() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_130()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_131()) return true;\r
+    }\r
     return false;\r
   }\r
 \r
@@ -5143,16 +5031,29 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_117() {\r
+  private boolean jj_3R_111() {\r
+    if (jj_3R_118()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_116() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_130()) {\r
+    if (jj_3R_127()) {\r
     jj_scanpos = xsp;\r
-    if (jj_3R_131()) return true;\r
+    if (jj_3R_128()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_129()) return true;\r
+    }\r
     }\r
     return false;\r
   }\r
 \r
+  private boolean jj_3R_127() {\r
+    if (jj_scan_token(5)) return true;\r
+    return false;\r
+  }\r
+\r
   private boolean jj_3R_103() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -5165,25 +5066,12 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_127() {\r
-    if (jj_scan_token(5)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_121() {\r
-    if (jj_scan_token(72)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_116() {\r
+  private boolean jj_3R_115() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
-    if (jj_3R_127()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_128()) {\r
+    if (jj_scan_token(16)) {\r
     jj_scanpos = xsp;\r
-    if (jj_3R_129()) return true;\r
-    }\r
+    if (jj_scan_token(23)) return true;\r
     }\r
     return false;\r
   }\r
@@ -5210,13 +5098,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_115() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_scan_token(16)) {\r
-    jj_scanpos = xsp;\r
-    if (jj_scan_token(23)) return true;\r
-    }\r
+  private boolean jj_3R_121() {\r
+    if (jj_scan_token(72)) return true;\r
     return false;\r
   }\r
 \r
@@ -5269,27 +5152,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_58() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_3R_74()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_57() {\r
-    if (jj_3R_73()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_56() {\r
-    if (jj_3R_72()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_55() {\r
-    if (jj_3R_71()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_86() {\r
     if (jj_3R_96()) return true;\r
     Token xsp;\r
@@ -5300,8 +5162,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_54() {\r
-    if (jj_3R_70()) return true;\r
+  private boolean jj_3R_92() {\r
+    if (jj_scan_token(27)) return true;\r
     return false;\r
   }\r
 \r
@@ -5315,16 +5177,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_92() {\r
-    if (jj_scan_token(27)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3_8() {\r
-    if (jj_3R_45()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_59() {\r
     if (jj_3R_75()) return true;\r
     Token xsp;\r
@@ -5333,8 +5185,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_172() {\r
-    if (jj_3R_47()) return true;\r
+  private boolean jj_3R_66() {\r
+    if (jj_3R_80()) return true;\r
     return false;\r
   }\r
 \r
@@ -5344,16 +5196,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_66() {\r
-    if (jj_3R_80()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_61() {\r
-    if (jj_3R_59()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_47() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -5364,36 +5206,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_68() {\r
-    if (jj_scan_token(14)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_44() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3_8()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_54()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_55()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_56()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_57()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_58()) return true;\r
-    }\r
-    }\r
-    }\r
-    }\r
-    }\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_161() {\r
-    if (jj_scan_token(68)) return true;\r
-    if (jj_scan_token(IDENT)) return true;\r
+  private boolean jj_3R_61() {\r
+    if (jj_3R_59()) return true;\r
     return false;\r
   }\r
 \r
@@ -5408,56 +5222,19 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_64() {\r
-    if (jj_scan_token(21)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_49() {\r
-    if (jj_scan_token(STRING)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3_6() {\r
     if (jj_scan_token(IDENT)) return true;\r
     if (jj_scan_token(88)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_41() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_49()) jj_scanpos = xsp;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_90() {\r
     if (jj_scan_token(55)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_126() {\r
-    if (jj_scan_token(77)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_45() {\r
-    if (jj_3R_59()) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    if (jj_3R_47()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_81() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_scan_token(46)) jj_scanpos = xsp;\r
-    if (jj_scan_token(4)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_88() {\r
-    if (jj_scan_token(46)) return true;\r
+  private boolean jj_3R_89() {\r
+    if (jj_scan_token(36)) return true;\r
     return false;\r
   }\r
 \r
@@ -5467,36 +5244,18 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_89() {\r
-    if (jj_scan_token(36)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_80() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_88()) jj_scanpos = xsp;\r
-    if (jj_scan_token(45)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_94() {\r
     if (jj_scan_token(13)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_65() {\r
-    if (jj_scan_token(52)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_98() {\r
     if (jj_3R_101()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_171() {\r
-    if (jj_scan_token(69)) return true;\r
+  private boolean jj_3R_65() {\r
+    if (jj_scan_token(52)) return true;\r
     return false;\r
   }\r
 \r
@@ -5510,18 +5269,8 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_169() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_171()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_172()) return true;\r
-    }\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_167() {\r
-    if (jj_scan_token(71)) return true;\r
+  private boolean jj_3R_91() {\r
+    if (jj_scan_token(51)) return true;\r
     return false;\r
   }\r
 \r
@@ -5533,16 +5282,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_91() {\r
-    if (jj_scan_token(51)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_160() {\r
-    if (jj_3R_166()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_84() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -5566,32 +5305,11 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_166() {\r
-    if (jj_scan_token(66)) return true;\r
-    if (jj_3R_169()) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_82() {\r
     if (jj_3R_89()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_63() {\r
-    if (jj_scan_token(71)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_48() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_63()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_64()) return true;\r
-    }\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_69() {\r
     Token xsp;\r
     xsp = jj_scanpos;\r
@@ -5605,21 +5323,6 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_162() {\r
-    if (jj_3R_47()) return true;\r
-    Token xsp;\r
-    while (true) {\r
-      xsp = jj_scanpos;\r
-      if (jj_3R_167()) { jj_scanpos = xsp; break; }\r
-    }\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_125() {\r
-    if (jj_scan_token(76)) return true;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_53() {\r
     if (jj_3R_69()) return true;\r
     return false;\r
@@ -5640,57 +5343,19 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3R_173() {\r
-    if (jj_scan_token(IDENT)) return true;\r
-    if (jj_scan_token(88)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_159() {\r
-    if (jj_scan_token(46)) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_170() {\r
-    if (jj_3R_173()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_168() {\r
-    if (jj_3R_170()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3_10() {\r
-    if (jj_3R_47()) return true;\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3R_48()) jj_scanpos = xsp;\r
-    return false;\r
-  }\r
-\r
   private boolean jj_3R_52() {\r
     if (jj_3R_68()) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_165() {\r
-    if (jj_3R_164()) return true;\r
-    return false;\r
-  }\r
-\r
-  private boolean jj_3R_164() {\r
-    Token xsp;\r
-    xsp = jj_scanpos;\r
-    if (jj_3_10()) {\r
-    jj_scanpos = xsp;\r
-    if (jj_3R_168()) return true;\r
-    }\r
+  private boolean jj_3R_51() {\r
+    if (jj_scan_token(59)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_51() {\r
-    if (jj_scan_token(59)) return true;\r
+  private boolean jj_3_5() {\r
+    if (jj_scan_token(57)) return true;\r
+    if (jj_3R_43()) return true;\r
     return false;\r
   }\r
 \r
@@ -5710,14 +5375,357 @@ public class ModelParser/*@bgen(jjtree)*/implements ModelParserTreeConstants, Mo
     return false;\r
   }\r
 \r
-  private boolean jj_3_5() {\r
-    if (jj_scan_token(57)) return true;\r
-    if (jj_3R_43()) return true;\r
+  private boolean jj_3R_95() {\r
+    if (jj_scan_token(IDENT)) return true;\r
     return false;\r
   }\r
 \r
-  private boolean jj_3R_95() {\r
+  private boolean jj_3R_85() {\r
+    if (jj_3R_95()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_42() {\r
+    if (jj_3R_43()) return true;\r
+    Token xsp;\r
+    while (true) {\r
+      xsp = jj_scanpos;\r
+      if (jj_3R_50()) { jj_scanpos = xsp; break; }\r
+    }\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_51()) jj_scanpos = xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_52()) jj_scanpos = xsp;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_106() {\r
+    if (jj_scan_token(7)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_71() {\r
+    if (jj_scan_token(21)) return true;\r
+    if (jj_3R_85()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_4() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    if (jj_scan_token(40)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_3() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    if (jj_scan_token(58)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_2() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_1() {\r
     if (jj_scan_token(IDENT)) return true;\r
+    if (jj_3R_41()) return true;\r
+    if (jj_3R_42()) return true;\r
+    if (jj_scan_token(35)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_108() {\r
+    if (jj_scan_token(26)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_105() {\r
+    if (jj_scan_token(34)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_101() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_scan_token(30)) jj_scanpos = xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_scan_token(47)) jj_scanpos = xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_105()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_106()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(61)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(24)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_107()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(38)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(37)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_108()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(17)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(95)) {\r
+    jj_scanpos = xsp;\r
+    if (jj_scan_token(96)) return true;\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_70() {\r
+    if (jj_scan_token(31)) return true;\r
+    if (jj_3R_47()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_7() {\r
+    if (jj_3R_44()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_58() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_3R_74()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_57() {\r
+    if (jj_3R_73()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_56() {\r
+    if (jj_3R_72()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_55() {\r
+    if (jj_3R_71()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_54() {\r
+    if (jj_3R_70()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_8() {\r
+    if (jj_3R_45()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_173() {\r
+    if (jj_3R_47()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_68() {\r
+    if (jj_scan_token(14)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_44() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3_8()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_54()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_55()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_56()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_57()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_58()) return true;\r
+    }\r
+    }\r
+    }\r
+    }\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_162() {\r
+    if (jj_scan_token(68)) return true;\r
+    if (jj_scan_token(IDENT)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_64() {\r
+    if (jj_scan_token(21)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_49() {\r
+    if (jj_scan_token(STRING)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_41() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_49()) jj_scanpos = xsp;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_81() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_scan_token(46)) jj_scanpos = xsp;\r
+    if (jj_scan_token(4)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_45() {\r
+    if (jj_3R_59()) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    if (jj_3R_47()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_126() {\r
+    if (jj_scan_token(77)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_88() {\r
+    if (jj_scan_token(46)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_80() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_88()) jj_scanpos = xsp;\r
+    if (jj_scan_token(45)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_172() {\r
+    if (jj_scan_token(69)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_168() {\r
+    if (jj_scan_token(71)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_170() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_172()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_173()) return true;\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_161() {\r
+    if (jj_3R_167()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_48() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_63()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_64()) return true;\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_63() {\r
+    if (jj_scan_token(71)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_167() {\r
+    if (jj_scan_token(66)) return true;\r
+    if (jj_3R_170()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_125() {\r
+    if (jj_scan_token(76)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_163() {\r
+    if (jj_3R_47()) return true;\r
+    Token xsp;\r
+    while (true) {\r
+      xsp = jj_scanpos;\r
+      if (jj_3R_168()) { jj_scanpos = xsp; break; }\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_174() {\r
+    if (jj_scan_token(IDENT)) return true;\r
+    if (jj_scan_token(88)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_160() {\r
+    if (jj_scan_token(46)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_171() {\r
+    if (jj_3R_174()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_151() {\r
+    if (jj_scan_token(85)) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_169() {\r
+    if (jj_3R_171()) return true;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3_10() {\r
+    if (jj_3R_47()) return true;\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3R_48()) jj_scanpos = xsp;\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_165() {\r
+    Token xsp;\r
+    xsp = jj_scanpos;\r
+    if (jj_3_10()) {\r
+    jj_scanpos = xsp;\r
+    if (jj_3R_169()) return true;\r
+    }\r
+    return false;\r
+  }\r
+\r
+  private boolean jj_3R_166() {\r
+    if (jj_3R_165()) return true;\r
     return false;\r
   }\r
 \r
index 2ba477f3a85ed3191fba293a9daa363f0c2c499d..190ea2f86aa97874f7044825e92805dd3d47b0e5 100644 (file)
@@ -2365,6 +2365,11 @@ void mul_op() : {/*@bgen(jjtree) mul_op */
                                                                  jjtc000 = false;\r
                                                                }\r
 /*@egen*/ { jjtn000.op = ".*";} | "./"/*@bgen(jjtree)*/\r
+                                                                                             {\r
+                                                                                               jjtree.closeNodeScope(jjtn000, true);\r
+                                                                                               jjtc000 = false;\r
+                                                                                             }\r
+/*@egen*/  { jjtn000.op = "./";}/*@bgen(jjtree)*/\r
     } finally {\r
       if (jjtc000) {\r
         jjtree.closeNodeScope(jjtn000, true);\r
index 0296fd88e30c78d960d9ee2e7c6a664ca2a8556a..2fc5f9ce5e00c77b55e4b20a7179a72f980cbe65 100644 (file)
@@ -652,7 +652,7 @@ void term() : {
 \r
 void mul_op() : {\r
 } {\r
-    "*" { jjtThis.op = "*";} | "/" { jjtThis.op = "/";} | ".*" { jjtThis.op = ".*";} | "./"\r
+    "*" { jjtThis.op = "*";} | "/" { jjtThis.op = "/";} | ".*" { jjtThis.op = ".*";} | "./"  { jjtThis.op = "./";}\r
 }\r
 \r
 void factor() : {\r