[Mulgara-svn] r2070 - in trunk/src/jar: query/java/org/mulgara/query querylang/java/org/mulgara/sparql querylang/java/org/mulgara/sparql/parser/cst querylang/javacc/org/mulgara/sparql/parser resolver/java/org/mulgara/resolver

pag at mulgara.org pag at mulgara.org
Wed Nov 9 00:51:23 UTC 2011


Author: pag
Date: 2011-11-09 00:51:22 +0000 (Wed, 09 Nov 2011)
New Revision: 2070

Added:
   trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Modifier.java
   trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Verb.java
Modified:
   trunk/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java
   trunk/src/jar/querylang/java/org/mulgara/sparql/PatternMapper.java
   trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Expression.java
   trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/IRIReference.java
   trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Triple.java
   trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Variable.java
   trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.java
   trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.jj
   trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParserConstants.java
   trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParserTokenManager.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/DirectTransitiveFunction.java
   trunk/src/jar/resolver/java/org/mulgara/resolver/ExhaustiveTransitiveFunction.java
Log:
Updated SPARQL to accept * and + modifiers on predicates, and then mapping them to transitive constraints. Added a zero-step inference for transitivity to for the sake of the * operator.

Modified: trunk/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java
===================================================================
--- trunk/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/query/java/org/mulgara/query/SingleTransitiveConstraint.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -81,6 +81,9 @@
    */
   private final boolean anchored;
 
+  /** Indicates that a zero step must be included */
+  private final boolean zeroStep;
+
   /**
    * Constructor.
    *
@@ -88,7 +91,7 @@
    *        is: {$var <uri> $var}
    * @throws IllegalArgumentException If trans is null.
    */
-  public SingleTransitiveConstraint(Constraint trans) throws IllegalArgumentException {
+  public SingleTransitiveConstraint(Constraint trans, boolean zeroStep) throws IllegalArgumentException {
 
     // Validate parameters
     if (trans == null) {
@@ -108,8 +111,13 @@
 
     // Initialize fields
     this.transConstraint = trans;
+    this.zeroStep = zeroStep;
   }
 
+  public SingleTransitiveConstraint(Constraint trans) throws IllegalArgumentException {
+    this(trans, false);
+  }
+
   public boolean isRepeating() {
     return false;
   }
@@ -210,6 +218,13 @@
     return buffer.toString();
   }
 
+  /**
+   * If true then this constraint requires a zero step to be included in the results.
+   * @return <code>true</code> when results need to include a zero step.
+   */
+  public boolean isZeroStep() {
+    return zeroStep;
+  }
 
   /**
    * Not sure what associativity would mean here, but it shouldn't be possible.

Modified: trunk/src/jar/querylang/java/org/mulgara/sparql/PatternMapper.java
===================================================================
--- trunk/src/jar/querylang/java/org/mulgara/sparql/PatternMapper.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/querylang/java/org/mulgara/sparql/PatternMapper.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -36,12 +36,14 @@
 import org.mulgara.sparql.parser.cst.GroupGraphPattern;
 import org.mulgara.sparql.parser.cst.IRIReference;
 import org.mulgara.sparql.parser.cst.IntegerLiteral;
+import org.mulgara.sparql.parser.cst.Modifier;
 import org.mulgara.sparql.parser.cst.Node;
 import org.mulgara.sparql.parser.cst.RDFLiteral;
 import org.mulgara.sparql.parser.cst.Triple;
 import org.mulgara.sparql.parser.cst.TripleList;
 import org.mulgara.sparql.parser.cst.VarAssign;
 import org.mulgara.parser.MulgaraParserException;
+import org.mulgara.query.Constraint;
 import org.mulgara.query.ConstraintAssignment;
 import org.mulgara.query.ConstraintConjunction;
 import org.mulgara.query.ConstraintDisjunction;
@@ -52,6 +54,7 @@
 import org.mulgara.query.ConstraintImpl;
 import org.mulgara.query.ConstraintIn;
 import org.mulgara.query.ConstraintOptionalJoin;
+import org.mulgara.query.SingleTransitiveConstraint;
 import org.mulgara.query.Variable;
 import org.mulgara.query.rdf.LiteralImpl;
 import org.mulgara.query.rdf.URIReferenceImpl;
@@ -185,21 +188,29 @@
   private static ConstraintExpression newConstraintImpl(Triple t) {
     ConstraintElement s = convertElement(t.getSubject());
     ConstraintElement p = convertElement(t.getPredicate());
+    Modifier m = t.getPredicateModifier();
     // if the object it a literal, then it may need to be expanded into various equivalent types
     Node n = t.getObject();
     if (n instanceof IntegerLiteral) {
       ConstraintElement[] numbers = createIntLiterals((IntegerLiteral)n);
       List<ConstraintExpression> options = new ArrayList<ConstraintExpression>();
       for (ConstraintElement obj: numbers) {
-        options.add(new ConstraintImpl(s, p, obj));
+        options.add(newConstraint(s, p, obj, m));
       }
       return new ConstraintDisjunction(options);
     }
 
     ConstraintElement o = convertElement(n);
-    return new ConstraintImpl(s, p, o);
+    return newConstraint(s, p, o, m);
   }
 
+  private static ConstraintExpression newConstraint(ConstraintElement s, ConstraintElement p, ConstraintElement o, Modifier m) {
+    Constraint c = new ConstraintImpl(s, p, o);
+    if (m == Modifier.none) return c;
+    boolean zeroStep = m == Modifier.star;
+    return new ConstraintDisjunction(c, new SingleTransitiveConstraint(c, zeroStep));
+  }
+
   /**
    * Create an array of the literals represented by a number.
    * @param nrText The text of a number.

Modified: trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Expression.java
===================================================================
--- trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Expression.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Expression.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -24,5 +24,4 @@
  * @licence <a href="{@docRoot}/../LICENCE.txt">Apache License, Version 2.0</a>
  */
 public interface Expression extends Node {
-
 }

Modified: trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/IRIReference.java
===================================================================
--- trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/IRIReference.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/IRIReference.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -35,7 +35,7 @@
  * @copyright © 2008 <a href="http://www.fedora-commons.org/">Fedora Commons</a>
  * @licence <a href="{@docRoot}/../LICENCE.txt">Apache License, Version 2.0</a>
  */
-public class IRIReference implements Node, PrimaryExpression {
+public class IRIReference implements Node, PrimaryExpression, Verb, Cloneable {
   
   /** The RDF namespace */
   private static final String RDF_NS = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
@@ -79,6 +79,9 @@
   /** The qname form, if available */
   private QName qname;
 
+  /** A modifier when this reference is used as a predicate */
+  private Modifier mod = Modifier.none;
+
   static {
     SPARQL_NS = URI.create("http://www.w3.org/2006/sparql-functions#");
     FN_NS = URI.create("http://www.w3.org/2005/xpath-functions/#");
@@ -258,4 +261,20 @@
            (c >= 0xFDF0 && c <= 0xFFFD) ||
            (c >= 0x10000 && c <= 0xEFFFF);
   }
+
+  public Object clone() {
+    try {
+      return super.clone();
+    } catch (CloneNotSupportedException e) {
+      throw new RuntimeException("Unable to copy an IRIReference");
+    }
+  }
+
+  public void setModifier(Modifier m) {
+    mod = m;
+  }
+  
+  public Modifier getModifier() {
+    return mod;
+  }
 }

Added: trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Modifier.java
===================================================================
--- trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Modifier.java	                        (rev 0)
+++ trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Modifier.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2011 Revelytix, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mulgara.sparql.parser.cst;
+
+
+/**
+ * Used for expressions in functions.
+ *
+ * @created Oct 28, 2011
+ * @author Paul Gearon
+ * @licence <a href="{@docRoot}/../LICENCE.txt">Apache License, Version 2.0</a>
+ */
+public enum Modifier {
+  star, plus, optional, none;
+  
+  public static Modifier get(String s) {
+    if ("*".equals(s)) return star;
+    if ("+".equals(s)) return plus;
+    return none;
+  }
+}

Modified: trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Triple.java
===================================================================
--- trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Triple.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Triple.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -65,6 +65,14 @@
   }
 
   /**
+   * @return the modifier on the predicate, if one exists.
+   */
+  public Modifier getPredicateModifier() {
+    if (predicate instanceof Verb) return ((Verb)predicate).getModifier();
+    return Modifier.none;
+  }
+
+  /**
    * Returns this object as a list.
    * @see org.mulgara.sparql.parser.cst.GroupGraphPattern#getElements()
    */

Modified: trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Variable.java
===================================================================
--- trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Variable.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Variable.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -23,11 +23,14 @@
  * @copyright © 2008 <a href="http://www.fedora-commons.org/">Fedora Commons</a>
  * @licence <a href="{@docRoot}/../LICENCE.txt">Apache License, Version 2.0</a>
  */
-public class Variable implements Node, PrimaryExpression, NumericExpression, LogicExpression {
+public class Variable implements Node, PrimaryExpression, NumericExpression, LogicExpression, Verb {
 
   /** The name of this variable */
   private String name;
-  
+
+  /** The modifier for this variable */
+  private Modifier mod = Modifier.none;
+
   /** Constructs a named variable */
   public Variable(String name) {
     this.name = name;
@@ -53,4 +56,12 @@
   public String toString() {
     return getImage();
   }
+
+  public void setModifier(Modifier m) {
+    mod = m;
+  }
+  
+  public Modifier getModifier() {
+    return mod;
+  }
 }

Added: trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Verb.java
===================================================================
--- trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Verb.java	                        (rev 0)
+++ trunk/src/jar/querylang/java/org/mulgara/sparql/parser/cst/Verb.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2011 Revelytix, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.mulgara.sparql.parser.cst;
+
+
+/**
+ * Used for expressions in functions.
+ *
+ * @created Oct 28, 2011
+ * @author Paul Gearon
+ * @licence <a href="{@docRoot}/../LICENCE.txt">Apache License, Version 2.0</a>
+ */
+public interface Verb extends Node, PrimaryExpression {
+  void setModifier(Modifier m);
+
+  Modifier getModifier();
+}

Modified: trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.java
===================================================================
--- trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -537,7 +537,7 @@
     case TRUE:
     case FALSE:
     case 47:
-    case 53:
+    case 55:
     case IRI_REF:
     case PNAME_NS:
     case PNAME_LN:
@@ -608,7 +608,7 @@
       case TRUE:
       case FALSE:
       case 47:
-      case 53:
+      case 55:
       case IRI_REF:
       case PNAME_NS:
       case PNAME_LN:
@@ -664,7 +664,7 @@
       case TRUE:
       case FALSE:
       case 47:
-      case 53:
+      case 55:
       case IRI_REF:
       case PNAME_NS:
       case PNAME_LN:
@@ -883,7 +883,7 @@
     case TRUE:
     case FALSE:
     case 47:
-    case 53:
+    case 55:
     case IRI_REF:
     case PNAME_NS:
     case PNAME_LN:
@@ -926,7 +926,7 @@
       case TRUE:
       case FALSE:
       case 47:
-      case 53:
+      case 55:
       case IRI_REF:
       case PNAME_NS:
       case PNAME_LN:
@@ -996,7 +996,7 @@
                                               {if (true) return new TripleList(s, pl);}
       break;
     case 47:
-    case 53:
+    case 55:
       an = TriplesNode();
       pl = PropertyList();
                                          {if (true) return new TripleList(an, pl);}
@@ -1028,11 +1028,16 @@
       jj_consume_token(51);
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case 52:
+      case 53:
+      case 54:
       case IRI_REF:
       case PNAME_NS:
       case PNAME_LN:
       case VAR1:
       case VAR2:
+      case IRI_REF_MOD:
+      case PNAME_NS_MOD:
+      case PNAME_LN_MOD:
         v = Verb();
         o = ObjectList();
                                       pl.add(v, o);
@@ -1051,11 +1056,16 @@
                                 PropertyList pl = null;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case 52:
+    case 53:
+    case 54:
     case IRI_REF:
     case PNAME_NS:
     case PNAME_LN:
     case VAR1:
     case VAR2:
+    case IRI_REF_MOD:
+    case PNAME_NS_MOD:
+    case PNAME_LN_MOD:
       pl = PropertyListNotEmpty();
       break;
     default:
@@ -1083,8 +1093,8 @@
         break label_13;
       }
       jj_consume_token(50);
-      Object();
-                     l.add(n);
+      n = Object();
+                       l.add(n);
     }
       {if (true) return l;}
     throw new Error("Missing return statement in function");
@@ -1100,25 +1110,36 @@
 
 /* [37]    Verb    ::=    VarOrIRIref | 'a' */
   final public Expression Verb() throws ParseException {
-                      Expression e;
+                      Expression e; IRIReference r;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case IRI_REF:
     case PNAME_NS:
     case PNAME_LN:
     case VAR1:
     case VAR2:
-      e = VarOrIRIref();
-                      {if (true) return e;}
+    case IRI_REF_MOD:
+    case PNAME_NS_MOD:
+    case PNAME_LN_MOD:
+      e = VarOrIRIrefM();
       break;
     case 52:
       jj_consume_token(52);
-            {if (true) return IRIReference.RDF_TYPE;}
+            e = IRIReference.RDF_TYPE;
       break;
+    case 53:
+      jj_consume_token(53);
+             r = (IRIReference)IRIReference.RDF_TYPE.clone(); r.setModifier(Modifier.star); e = r;
+      break;
+    case 54:
+      jj_consume_token(54);
+             r = (IRIReference)IRIReference.RDF_TYPE.clone(); r.setModifier(Modifier.plus); e = r;
+      break;
     default:
       jj_la1[45] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
+    {if (true) return e;}
     throw new Error("Missing return statement in function");
   }
 
@@ -1130,7 +1151,7 @@
     case 47:
       n = Collection();
       break;
-    case 53:
+    case 55:
       n = BlankNodePropertyList();
       break;
     default:
@@ -1145,9 +1166,9 @@
 /* [39]    BlankNodePropertyList    ::=    '[' PropertyListNotEmpty ']' */
   final public AnnotatedNode BlankNodePropertyList() throws ParseException {
                                           PropertyList pl;
-    jj_consume_token(53);
+    jj_consume_token(55);
     pl = PropertyListNotEmpty();
-    jj_consume_token(54);
+    jj_consume_token(56);
       {if (true) return new AnnotatedNode(queryStructure.newBlankNode(), pl);}
     throw new Error("Missing return statement in function");
   }
@@ -1165,7 +1186,7 @@
       case TRUE:
       case FALSE:
       case 47:
-      case 53:
+      case 55:
       case IRI_REF:
       case PNAME_NS:
       case PNAME_LN:
@@ -1229,7 +1250,7 @@
       n = VarOrTerm();
       break;
     case 47:
-    case 53:
+    case 55:
       n = TriplesNode();
       break;
     default:
@@ -1303,6 +1324,31 @@
     throw new Error("Missing return statement in function");
   }
 
+/* [43*]    VarOrIRIrefM    ::=    Var | IRIrefM */
+  final public Expression VarOrIRIrefM() throws ParseException {
+                              Expression e;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case VAR1:
+    case VAR2:
+      e = Var();
+      break;
+    case IRI_REF:
+    case PNAME_NS:
+    case PNAME_LN:
+    case IRI_REF_MOD:
+    case PNAME_NS_MOD:
+    case PNAME_LN_MOD:
+      e = IRIrefM();
+      break;
+    default:
+      jj_la1[51] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+      {if (true) return e;}
+    throw new Error("Missing return statement in function");
+  }
+
 /* [44]    Var    ::=    VAR1 | VAR2 */
   final public Variable Var() throws ParseException {
                    Token t;
@@ -1314,7 +1360,7 @@
       t = jj_consume_token(VAR2);
       break;
     default:
-      jj_la1[51] = jj_gen;
+      jj_la1[52] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1361,7 +1407,7 @@
                                                                                                      n = NIL_NODE;
       break;
     default:
-      jj_la1[52] = jj_gen;
+      jj_la1[53] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1384,14 +1430,14 @@
     label_15:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 55:
+      case 57:
         ;
         break;
       default:
-        jj_la1[53] = jj_gen;
+        jj_la1[54] = jj_gen;
         break label_15;
       }
-      jj_consume_token(55);
+      jj_consume_token(57);
       ae = ConditionalAndExpression();
                                                                         e = new OrExpression(e, ae);
     }
@@ -1406,14 +1452,14 @@
     label_16:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 56:
+      case 58:
         ;
         break;
       default:
-        jj_la1[54] = jj_gen;
+        jj_la1[55] = jj_gen;
         break label_16;
       }
-      jj_consume_token(56);
+      jj_consume_token(58);
       e2 = ValueLogical();
                                                 e = new AndExpression(e, e2);
     }
@@ -1434,51 +1480,51 @@
                                       Expression e, e2;
     e = NumericExpression();
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 57:
-    case 58:
     case 59:
     case 60:
     case 61:
     case 62:
+    case 63:
+    case 64:
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 57:
-        jj_consume_token(57);
+      case 59:
+        jj_consume_token(59);
         e2 = NumericExpression();
                                    e = new Equals(e, e2);
         break;
-      case 58:
-        jj_consume_token(58);
+      case 60:
+        jj_consume_token(60);
         e2 = NumericExpression();
                                       e = new NotEquals(e, e2);
         break;
-      case 59:
-        jj_consume_token(59);
+      case 61:
+        jj_consume_token(61);
         e2 = NumericExpression();
                                      e = new LessThan(e, e2);
         break;
-      case 60:
-        jj_consume_token(60);
+      case 62:
+        jj_consume_token(62);
         e2 = NumericExpression();
                                      e = new GreaterThan(e, e2);
         break;
-      case 61:
-        jj_consume_token(61);
+      case 63:
+        jj_consume_token(63);
         e2 = NumericExpression();
                                       e = new LessThanEqual(e, e2);
         break;
-      case 62:
-        jj_consume_token(62);
+      case 64:
+        jj_consume_token(64);
         e2 = NumericExpression();
                                       e = new GreaterThanEqual(e, e2);
         break;
       default:
-        jj_la1[55] = jj_gen;
+        jj_la1[56] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[56] = jj_gen;
+      jj_la1[57] = jj_gen;
       ;
     }
       {if (true) return e;}
@@ -1500,8 +1546,8 @@
     label_17:
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 63:
-      case 64:
+      case 65:
+      case 66:
       case INTEGER_POSITIVE:
       case DECIMAL_POSITIVE:
       case DOUBLE_POSITIVE:
@@ -1511,17 +1557,17 @@
         ;
         break;
       default:
-        jj_la1[57] = jj_gen;
+        jj_la1[58] = jj_gen;
         break label_17;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-      case 63:
-        jj_consume_token(63);
+      case 65:
+        jj_consume_token(65);
         e2 = MultiplicativeExpression();
                                           e = new Plus(e, e2);
         break;
-      case 64:
-        jj_consume_token(64);
+      case 66:
+        jj_consume_token(66);
         e2 = MultiplicativeExpression();
                                             e = new Minus(e, e2);
         break;
@@ -1538,7 +1584,7 @@
                                       e = new Minus(e, e2);
         break;
       default:
-        jj_la1[58] = jj_gen;
+        jj_la1[59] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -1555,11 +1601,11 @@
     while (true) {
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case 41:
-      case 65:
+      case 67:
         ;
         break;
       default:
-        jj_la1[59] = jj_gen;
+        jj_la1[60] = jj_gen;
         break label_18;
       }
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
@@ -1568,13 +1614,13 @@
         e2 = UnaryExpression();
                                  e = new Multiply(e, e2);
         break;
-      case 65:
-        jj_consume_token(65);
+      case 67:
+        jj_consume_token(67);
         e2 = UnaryExpression();
                                    e = new Divide(e, e2);
         break;
       default:
-        jj_la1[60] = jj_gen;
+        jj_la1[61] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
@@ -1587,18 +1633,18 @@
   final public Expression UnaryExpression() throws ParseException {
                                  Expression e;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 66:
-      jj_consume_token(66);
+    case 68:
+      jj_consume_token(68);
       e = PrimaryExpression();
                                 {if (true) return new Not(e);}
       break;
-    case 63:
-      jj_consume_token(63);
+    case 65:
+      jj_consume_token(65);
       e = PrimaryExpression();
                                   {if (true) return new UnaryPlus(e);}
       break;
-    case 64:
-      jj_consume_token(64);
+    case 66:
+      jj_consume_token(66);
       e = PrimaryExpression();
                                   {if (true) return new UnaryMinus(e);}
       break;
@@ -1638,7 +1684,7 @@
                               {if (true) return e;}
       break;
     default:
-      jj_la1[61] = jj_gen;
+      jj_la1[62] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1696,7 +1742,7 @@
       e = Var();
       break;
     default:
-      jj_la1[62] = jj_gen;
+      jj_la1[63] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1807,7 +1853,7 @@
                             {if (true) return (BuiltInCall)e;}
       break;
     default:
-      jj_la1[63] = jj_gen;
+      jj_la1[64] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1828,7 +1874,7 @@
       e3 = Expression();
       break;
     default:
-      jj_la1[64] = jj_gen;
+      jj_la1[65] = jj_gen;
       ;
     }
     jj_consume_token(49);
@@ -1847,7 +1893,7 @@
                                    {if (true) return new FunctionCall(ref, list);}
       break;
     default:
-      jj_la1[65] = jj_gen;
+      jj_la1[66] = jj_gen;
       ;
     }
       {if (true) return ref;}
@@ -1860,26 +1906,26 @@
     s = String();
                    l = new RDFLiteral(s);
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
-    case 67:
+    case 69:
     case LANGTAG:
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case LANGTAG:
         t = jj_consume_token(LANGTAG);
                     l.setLanguage(t.image);
         break;
-      case 67:
-        jj_consume_token(67);
+      case 69:
+        jj_consume_token(69);
         ref = IRIref();
                             l.setDatatype(ref);
         break;
       default:
-        jj_la1[66] = jj_gen;
+        jj_la1[67] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[67] = jj_gen;
+      jj_la1[68] = jj_gen;
       ;
     }
       {if (true) return l;}
@@ -1906,7 +1952,7 @@
       l = NumericLiteralNegative();
       break;
     default:
-      jj_la1[68] = jj_gen;
+      jj_la1[69] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1931,7 +1977,7 @@
                    {if (true) return new DoubleLiteral(t.image);}
       break;
     default:
-      jj_la1[69] = jj_gen;
+      jj_la1[70] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1955,7 +2001,7 @@
                             {if (true) return new DoubleLiteral(t.image.substring(1));}
       break;
     default:
-      jj_la1[70] = jj_gen;
+      jj_la1[71] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1979,7 +2025,7 @@
                             {if (true) return new DoubleLiteral(t.image);}
       break;
     default:
-      jj_la1[71] = jj_gen;
+      jj_la1[72] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -1998,7 +2044,7 @@
                 {if (true) return BooleanLiteral.FALSE;}
       break;
     default:
-      jj_la1[72] = jj_gen;
+      jj_la1[73] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2026,7 +2072,7 @@
                                  {if (true) return unTripleQuote(t.image) ;}
       break;
     default:
-      jj_la1[73] = jj_gen;
+      jj_la1[74] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2047,13 +2093,45 @@
                          {if (true) return i;}
       break;
     default:
-      jj_la1[74] = jj_gen;
+      jj_la1[75] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
     throw new Error("Missing return statement in function");
   }
 
+/* [67*]    IRIrefM    ::=    IRI_REF_MOD |  PrefixedNameM */
+  final public IRIReference IRIrefM() throws ParseException {
+                           IRIReference i; Token t;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case IRI_REF_MOD:
+      t = jj_consume_token(IRI_REF_MOD);
+      String s = t.image;
+      int len = s.length();
+      String refImage = s.substring(0, len - 1);
+      IRIReference r = queryStructure.newIRIRef(unquote(refImage));
+      r.setModifier(Modifier.get(s.substring(len - 1)));
+      {if (true) return r;}
+      break;
+    case IRI_REF:
+      t = jj_consume_token(IRI_REF);
+                    {if (true) return queryStructure.newIRIRef(unquote(t.image));}
+      break;
+    case PNAME_NS:
+    case PNAME_LN:
+    case PNAME_NS_MOD:
+    case PNAME_LN_MOD:
+      i = PrefixedNameM();
+                          {if (true) return i;}
+      break;
+    default:
+      jj_la1[76] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    throw new Error("Missing return statement in function");
+  }
+
 /* [68]    PrefixedName    ::=    PNAME_LN | PNAME_NS */
   final public IRIReference PrefixedName() throws ParseException {
                                 Token t;
@@ -2065,7 +2143,7 @@
       t = jj_consume_token(PNAME_NS);
       break;
     default:
-      jj_la1[75] = jj_gen;
+      jj_la1[77] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2073,6 +2151,54 @@
     throw new Error("Missing return statement in function");
   }
 
+/* [68*]    PrefixedName    ::=    PNAME_LN_MOD | PNAME_NS_MOD */
+  final public IRIReference PrefixedNameM() throws ParseException {
+                                 Token t;
+    switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+    case PNAME_NS_MOD:
+    case PNAME_LN_MOD:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case PNAME_LN_MOD:
+        t = jj_consume_token(PNAME_LN_MOD);
+        break;
+      case PNAME_NS_MOD:
+        t = jj_consume_token(PNAME_NS_MOD);
+        break;
+      default:
+        jj_la1[78] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      String s = t.image;
+      int len = s.length();
+      IRIReference r = queryStructure.newPrefixedName(s.substring(0, len - 1));
+      r.setModifier(Modifier.get(s.substring(len - 1)));
+      {if (true) return r;}
+      break;
+    case PNAME_NS:
+    case PNAME_LN:
+      switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+      case PNAME_LN:
+        t = jj_consume_token(PNAME_LN);
+        break;
+      case PNAME_NS:
+        t = jj_consume_token(PNAME_NS);
+        break;
+      default:
+        jj_la1[79] = jj_gen;
+        jj_consume_token(-1);
+        throw new ParseException();
+      }
+      {if (true) return queryStructure.newPrefixedName(t.image);}
+      break;
+    default:
+      jj_la1[80] = jj_gen;
+      jj_consume_token(-1);
+      throw new ParseException();
+    }
+    throw new Error("Missing return statement in function");
+  }
+
 /* [69]    BlankNode    ::=    BLANK_NODE_LABEL |  ANON */
   final public BlankNode BlankNode() throws ParseException {
                           Token t;
@@ -2086,7 +2212,7 @@
                {if (true) return queryStructure.newBlankNode();}
       break;
     default:
-      jj_la1[76] = jj_gen;
+      jj_la1[81] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -2098,7 +2224,7 @@
   public Token token, jj_nt;
   private int jj_ntk;
   private int jj_gen;
-  final private int[] jj_la1 = new int[77];
+  final private int[] jj_la1 = new int[82];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -2110,16 +2236,16 @@
       jj_la1_3();
    }
    private static void jj_la1_0() {
-      jj_la1_0 = new int[] {0x40820100,0x200,0x10000,0x80000000,0x80000000,0x0,0x0,0x1000,0x1000,0x0,0x0,0x1000,0x2000000,0x1000,0x80000,0x2000000,0x400,0x1040000,0x1000000,0x40000,0x1040000,0x3860c000,0x0,0x3860c000,0x3860c000,0x0,0x102000,0x102000,0x0,0x0,0x0,0x0,0x102000,0x4000000,0x3860c000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3860c000,0x3860c000,0x3860c000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_0 = new int[] {0x40820100,0x200,0x10000,0x80000000,0x80000000,0x0,0x0,0x1000,0x1000,0x0,0x0,0x1000,0x2000000,0x1000,0x80000,0x2000000,0x400,0x1040000,0x1000000,0x40000,0x1040000,0x3860c000,0x0,0x3860c000,0x3860c000,0x0,0x102000,0x102000,0x0,0x0,0x0,0x0,0x102000,0x4000000,0x3860c000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3860c000,0x3860c000,0x3860c000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x0,0x8,0x8,0x0,0x200,0x0,0x0,0x0,0x200,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8c56,0xc00,0x8056,0x8c56,0x2080a0,0x1101,0x1101,0x2000,0x2080a0,0x2080a0,0x2000,0x1100,0x0,0x8056,0x40000,0x8000,0x2080a0,0x2080a0,0x2000,0x2080a0,0x80000,0x100000,0x100000,0x40000,0x100000,0x208000,0x2080a0,0x2080a0,0xa0,0x0,0x0,0xa0,0x800000,0x1000000,0x7e000000,0x7e000000,0x80000000,0x80000000,0x200,0x200,0x800080f6,0x80f6,0x56,0x40000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x0,0x0,0x0,0x0,};
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x8,0x8,0x0,0x200,0x0,0x0,0x0,0x200,0x0,0x1000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x8c56,0xc00,0x8056,0x8c56,0x8080a0,0x1101,0x1101,0x2000,0x8080a0,0x8080a0,0x2000,0x1100,0x0,0x8056,0x40000,0x8000,0x8080a0,0x8080a0,0x2000,0x8080a0,0x80000,0x700000,0x700000,0x40000,0x700000,0x808000,0x8080a0,0x8080a0,0xa0,0x0,0x0,0x0,0xa0,0x2000000,0x4000000,0xf8000000,0xf8000000,0x0,0x0,0x200,0x200,0x80f6,0x80f6,0x56,0x40000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0xa0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_2() {
-      jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x300,0x300,0x0,0x0,0x370,0x370,0x0,0x0,0x0,0x70,0x0,0x0,0x0,0x0,0x0,0x0,0x370,0x0,0x370,0x370,0xaf7fc3f0,0x0,0x0,0x0,0xaf7fc3f0,0xaf7fc3f0,0x0,0x0,0x0,0x70,0x0,0x20000000,0xaf7fc3f0,0xaf7fc3f0,0x0,0xaf7fc3f0,0x0,0x370,0x370,0x0,0x370,0x0,0xaf7fc3f0,0xaf7fc3f0,0xaf7fc3f0,0x370,0x300,0xaf7fc0f0,0x0,0x0,0x0,0x0,0x7e0001,0x7e0001,0x2,0x2,0xf7fc375,0xf7fc370,0x0,0x0,0x20000000,0x408,0x408,0x7fc000,0x1c000,0xe0000,0x700000,0x0,0xf000000,0x70,0x60,0x80000080,};
+      jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0xc00,0xc00,0x0,0x0,0xdc0,0xdc0,0x0,0x0,0x0,0x1c0,0x0,0x0,0x0,0x0,0x0,0x0,0xdc0,0x0,0xdc0,0xdc0,0xdff00fc0,0x0,0x0,0x0,0xdff00fc0,0xdff00fc0,0x0,0x0,0x0,0x1c0,0x0,0x0,0xdff00fc0,0xdff00fc0,0x0,0xdff00fc0,0x0,0x1cdc0,0x1cdc0,0x0,0x1cdc0,0x0,0xdff00fc0,0xdff00fc0,0xdff00fc0,0xdc0,0x1cdc0,0xc00,0xdff003c0,0x0,0x0,0x1,0x1,0x1f800006,0x1f800006,0x8,0x8,0xdff00dd6,0xdff00dc0,0x0,0x0,0x0,0x1020,0x1020,0x1ff00000,0x700000,0x3800000,0x1c000000,0x0,0xc0000000,0x1c0,0x1c1c0,0x180,0x18000,0x180,0x18180,0x200,};
    }
    private static void jj_la1_3() {
-      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x2b,0x2b,0x0,0x0,0x0,0x0,0x0,0x8,0x2b,0x2b,0x0,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x2b,0x2b,0x2b,0x0,0x0,0x0,0x2b,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x3,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x20,};
    }
 
   public SparqlParser(java.io.InputStream stream) {
@@ -2131,7 +2257,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 82; i++) jj_la1[i] = -1;
   }
 
   public void ReInit(java.io.InputStream stream) {
@@ -2143,7 +2269,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 82; i++) jj_la1[i] = -1;
   }
 
   public SparqlParser(java.io.Reader stream) {
@@ -2152,7 +2278,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 82; i++) jj_la1[i] = -1;
   }
 
   public void ReInit(java.io.Reader stream) {
@@ -2161,7 +2287,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 82; i++) jj_la1[i] = -1;
   }
 
   public SparqlParser(SparqlParserTokenManager tm) {
@@ -2169,7 +2295,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 82; i++) jj_la1[i] = -1;
   }
 
   public void ReInit(SparqlParserTokenManager tm) {
@@ -2177,7 +2303,7 @@
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 77; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 82; i++) jj_la1[i] = -1;
   }
 
   final private Token jj_consume_token(int kind) throws ParseException {
@@ -2224,15 +2350,15 @@
 
   public ParseException generateParseException() {
     jj_expentries.removeAllElements();
-    boolean[] la1tokens = new boolean[102];
-    for (int i = 0; i < 102; i++) {
+    boolean[] la1tokens = new boolean[108];
+    for (int i = 0; i < 108; i++) {
       la1tokens[i] = false;
     }
     if (jj_kind >= 0) {
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 77; i++) {
+    for (int i = 0; i < 82; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -2250,7 +2376,7 @@
         }
       }
     }
-    for (int i = 0; i < 102; i++) {
+    for (int i = 0; i < 108; i++) {
       if (la1tokens[i]) {
         jj_expentry = new int[1];
         jj_expentry[0] = i;

Modified: trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.jj
===================================================================
--- trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.jj	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParser.jj	2011-11-09 00:51:22 UTC (rev 2070)
@@ -460,7 +460,7 @@
 {
 	{ l = new LinkedList<Node>(); }
     n=Object() { l.add(n); }
-    ( "," Object() { l.add(n); } )*
+    ( "," n=Object() { l.add(n); } )*
     { return l; }
 }
 
@@ -471,10 +471,17 @@
 }
 
 /* [37]    Verb    ::=    VarOrIRIref | 'a' */
-Expression Verb() : { Expression e; }
+Expression Verb() : { Expression e; IRIReference r; }
 {
-    e=VarOrIRIref() { return e; }
-    | "a" { return IRIReference.RDF_TYPE; }
+  (+      e=VarOrIRIrefM()
+    | "a" { e = IRIReference.RDF_TYPE; }
+    | "a*" { r = (IRIReference)IRIReference.RDF_TYPE.clone(); r.setModifier(Modifier.star); e = r; }
+    | "a+" { r = (IRIReference)IRIReference.RDF_TYPE.clone(); r.setModifier(Modifier.plus); e = r; }
+  )
+  {
+    return e;
+  } }
 
 // Return a node AND a conjunction to the current context
@@ -523,6 +530,13 @@
     { return e; }
 }
 
+/* [43*]    VarOrIRIrefM    ::=    Var | IRIrefM */
+Expression VarOrIRIrefM() : { Expression e; }
+{
+    (e=Var() | e=IRIrefM())
+    { return e; }
+}
+
 /* [44]    Var    ::=    VAR1 | VAR2 */
 Variable Var() : { Token t;}
 {
@@ -735,6 +749,21 @@
     | i=PrefixedName() { return i; }
 }
 
+/* [67*]    IRIrefM    ::=    IRI_REF_MOD |  PrefixedNameM */
+IRIReference IRIrefM() : { IRIReference i; Token t; }
+{
+    t=<IRI_REF_MOD> {
+      String s = t.image;
+      int len = s.length();
+      String refImage = s.substring(0, len - 1);
+      IRIReference r = queryStructure.newIRIRef(unquote(refImage));
+      r.setModifier(Modifier.get(s.substring(len - 1)));
+      return r;
+    }
+    | t=<IRI_REF> { return queryStructure.newIRIRef(unquote(t.image)); }
+    | i=PrefixedNameM() { return i; }
+}
+
 /* [68]    PrefixedName    ::=    PNAME_LN | PNAME_NS */
 IRIReference PrefixedName() : { Token t; }
 {
@@ -742,6 +771,21 @@
     { return queryStructure.newPrefixedName(t.image); }
 }
 
+/* [68*]    PrefixedName    ::=    PNAME_LN_MOD | PNAME_NS_MOD */
+IRIReference PrefixedNameM() : { Token t; }
+{
+    ( t=<PNAME_LN_MOD> | t=<PNAME_NS_MOD> )
+    {
+      String s = t.image;
+      int len = s.length();
+      IRIReference r = queryStructure.newPrefixedName(s.substring(0, len - 1));
+      r.setModifier(Modifier.get(s.substring(len - 1)));
+      return r;
+    }
+  | ( t=<PNAME_LN> | t=<PNAME_NS> )
+    { return queryStructure.newPrefixedName(t.image); }
+}
+
 /* [69]    BlankNode    ::=    BLANK_NODE_LABEL |  ANON */
 BlankNode BlankNode() : { Token t; }
 {
@@ -771,6 +815,14 @@
   |
   /* [76]    LANGTAG    ::=    '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* */
   < LANGTAG : "@" (["a"-"z", "A"-"Z"])+ ( "-" (["a"-"z", "A"-"Z", "0"-"9"])+ )* >
+  |
+  < MODIFIER : [ "*", "+" ] >
+  | 
+  < IRI_REF_MOD : <IRI_REF> <MODIFIER> >
+  |
+  < PNAME_NS_MOD : <PNAME_NS> <MODIFIER> >
+  |
+  < PNAME_LN_MOD : <PNAME_LN> <MODIFIER> >
 }
 
 TOKEN : {

Modified: trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParserConstants.java
===================================================================
--- trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParserConstants.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParserConstants.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -38,40 +38,44 @@
   int SAME_TERM = 38;
   int FALSE = 39;
   int LET = 40;
-  int IRI_REF = 68;
-  int PNAME_NS = 69;
-  int PNAME_LN = 70;
-  int BLANK_NODE_LABEL = 71;
-  int VAR1 = 72;
-  int VAR2 = 73;
-  int LANGTAG = 74;
-  int Z_9 = 75;
-  int Z_9r = 76;
-  int Z_9o = 77;
-  int INTEGER = 78;
-  int DECIMAL = 79;
-  int DOUBLE = 80;
-  int INTEGER_POSITIVE = 81;
-  int DECIMAL_POSITIVE = 82;
-  int DOUBLE_POSITIVE = 83;
-  int INTEGER_NEGATIVE = 84;
-  int DECIMAL_NEGATIVE = 85;
-  int DOUBLE_NEGATIVE = 86;
-  int EXPONENT = 87;
-  int STRING_LITERAL1 = 88;
-  int STRING_LITERAL2 = 89;
-  int STRING_LITERAL_LONG1 = 90;
-  int STRING_LITERAL_LONG2 = 91;
-  int ECHAR = 92;
-  int NIL = 93;
-  int WS = 94;
-  int ANON = 95;
-  int PN_CHARS_BASE = 96;
-  int PN_CHARS_U = 97;
-  int VARNAME = 98;
-  int PN_CHARS = 99;
-  int PN_PREFIX = 100;
-  int PN_LOCAL = 101;
+  int IRI_REF = 70;
+  int PNAME_NS = 71;
+  int PNAME_LN = 72;
+  int BLANK_NODE_LABEL = 73;
+  int VAR1 = 74;
+  int VAR2 = 75;
+  int LANGTAG = 76;
+  int MODIFIER = 77;
+  int IRI_REF_MOD = 78;
+  int PNAME_NS_MOD = 79;
+  int PNAME_LN_MOD = 80;
+  int Z_9 = 81;
+  int Z_9r = 82;
+  int Z_9o = 83;
+  int INTEGER = 84;
+  int DECIMAL = 85;
+  int DOUBLE = 86;
+  int INTEGER_POSITIVE = 87;
+  int DECIMAL_POSITIVE = 88;
+  int DOUBLE_POSITIVE = 89;
+  int INTEGER_NEGATIVE = 90;
+  int DECIMAL_NEGATIVE = 91;
+  int DOUBLE_NEGATIVE = 92;
+  int EXPONENT = 93;
+  int STRING_LITERAL1 = 94;
+  int STRING_LITERAL2 = 95;
+  int STRING_LITERAL_LONG1 = 96;
+  int STRING_LITERAL_LONG2 = 97;
+  int ECHAR = 98;
+  int NIL = 99;
+  int WS = 100;
+  int ANON = 101;
+  int PN_CHARS_BASE = 102;
+  int PN_CHARS_U = 103;
+  int VARNAME = 104;
+  int PN_CHARS = 105;
+  int PN_PREFIX = 106;
+  int PN_LOCAL = 107;
 
   int DEFAULT = 0;
   int IN_COMMENT = 1;
@@ -130,6 +134,8 @@
     "\",\"",
     "\";\"",
     "\"a\"",
+    "\"a*\"",
+    "\"a+\"",
     "\"[\"",
     "\"]\"",
     "\"||\"",
@@ -152,6 +158,10 @@
     "<VAR1>",
     "<VAR2>",
     "<LANGTAG>",
+    "<MODIFIER>",
+    "<IRI_REF_MOD>",
+    "<PNAME_NS_MOD>",
+    "<PNAME_LN_MOD>",
     "<Z_9>",
     "<Z_9r>",
     "<Z_9o>",

Modified: trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParserTokenManager.java
===================================================================
--- trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParserTokenManager.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/querylang/javacc/org/mulgara/sparql/parser/SparqlParserTokenManager.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -25,65 +25,65 @@
    {
       case 9:
          jjmatchedKind = 1;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 10:
          jjmatchedKind = 2;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 12:
          jjmatchedKind = 4;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 13:
          jjmatchedKind = 3;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 32:
          jjmatchedKind = 5;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 33:
-         jjmatchedKind = 66;
-         return jjMoveStringLiteralDfa1_0(0x400000000000000L, 0x0L);
+         jjmatchedKind = 68;
+         return jjMoveStringLiteralDfa1_0(0x1000000000000000L, 0x0L);
       case 35:
          jjmatchedKind = 6;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 38:
-         return jjMoveStringLiteralDfa1_0(0x100000000000000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x400000000000000L, 0x0L);
       case 40:
          jjmatchedKind = 47;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 41:
          jjmatchedKind = 49;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 42:
          jjmatchedKind = 41;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 43:
-         jjmatchedKind = 63;
-         return jjMoveNfa_0(0, 0);
+         jjmatchedKind = 65;
+         return jjMoveNfa_0(4, 0);
       case 44:
          jjmatchedKind = 50;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 45:
-         jjmatchedKind = 64;
-         return jjMoveNfa_0(0, 0);
+         jjmatchedKind = 66;
+         return jjMoveNfa_0(4, 0);
       case 46:
          jjmatchedKind = 45;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 47:
-         jjmatchedKind = 65;
-         return jjMoveNfa_0(0, 0);
+         jjmatchedKind = 67;
+         return jjMoveNfa_0(4, 0);
       case 58:
          return jjMoveStringLiteralDfa1_0(0x1000000000000L, 0x0L);
       case 59:
          jjmatchedKind = 51;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 60:
+         jjmatchedKind = 61;
+         return jjMoveStringLiteralDfa1_0(0x8000000000000000L, 0x0L);
+      case 61:
          jjmatchedKind = 59;
-         return jjMoveStringLiteralDfa1_0(0x2000000000000000L, 0x0L);
-      case 61:
-         jjmatchedKind = 57;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 62:
-         jjmatchedKind = 60;
-         return jjMoveStringLiteralDfa1_0(0x4000000000000000L, 0x0L);
+         jjmatchedKind = 62;
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x1L);
       case 65:
          return jjMoveStringLiteralDfa1_0(0x40040000000L, 0x0L);
       case 66:
@@ -117,16 +117,16 @@
       case 87:
          return jjMoveStringLiteralDfa1_0(0x2000000L, 0x0L);
       case 91:
-         jjmatchedKind = 53;
-         return jjMoveNfa_0(0, 0);
+         jjmatchedKind = 55;
+         return jjMoveNfa_0(4, 0);
       case 93:
-         jjmatchedKind = 54;
-         return jjMoveNfa_0(0, 0);
+         jjmatchedKind = 56;
+         return jjMoveNfa_0(4, 0);
       case 94:
-         return jjMoveStringLiteralDfa1_0(0x0L, 0x8L);
+         return jjMoveStringLiteralDfa1_0(0x0L, 0x20L);
       case 97:
          jjmatchedKind = 52;
-         return jjMoveStringLiteralDfa1_0(0x40000000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x60000040000000L, 0x0L);
       case 98:
          return jjMoveStringLiteralDfa1_0(0x1000000a00L, 0x0L);
       case 99:
@@ -159,50 +159,64 @@
          return jjMoveStringLiteralDfa1_0(0x2000000L, 0x0L);
       case 123:
          jjmatchedKind = 44;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       case 124:
-         return jjMoveStringLiteralDfa1_0(0x80000000000000L, 0x0L);
+         return jjMoveStringLiteralDfa1_0(0x200000000000000L, 0x0L);
       case 125:
          jjmatchedKind = 46;
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
       default :
-         return jjMoveNfa_0(0, 0);
+         return jjMoveNfa_0(4, 0);
    }
 }
 private final int jjMoveStringLiteralDfa1_0(long active0, long active1)
 {
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 0);
+   return jjMoveNfa_0(4, 0);
    }
    switch(curChar)
    {
       case 38:
-         if ((active0 & 0x100000000000000L) != 0L)
+         if ((active0 & 0x400000000000000L) != 0L)
          {
-            jjmatchedKind = 56;
+            jjmatchedKind = 58;
             jjmatchedPos = 1;
          }
          break;
+      case 42:
+         if ((active0 & 0x20000000000000L) != 0L)
+         {
+            jjmatchedKind = 53;
+            jjmatchedPos = 1;
+         }
+         break;
+      case 43:
+         if ((active0 & 0x40000000000000L) != 0L)
+         {
+            jjmatchedKind = 54;
+            jjmatchedPos = 1;
+         }
+         break;
       case 61:
          if ((active0 & 0x1000000000000L) != 0L)
          {
             jjmatchedKind = 48;
             jjmatchedPos = 1;
          }
-         else if ((active0 & 0x400000000000000L) != 0L)
+         else if ((active0 & 0x1000000000000000L) != 0L)
          {
-            jjmatchedKind = 58;
+            jjmatchedKind = 60;
             jjmatchedPos = 1;
          }
-         else if ((active0 & 0x2000000000000000L) != 0L)
+         else if ((active0 & 0x8000000000000000L) != 0L)
          {
-            jjmatchedKind = 61;
+            jjmatchedKind = 63;
             jjmatchedPos = 1;
          }
-         else if ((active0 & 0x4000000000000000L) != 0L)
+         else if ((active1 & 0x1L) != 0L)
          {
-            jjmatchedKind = 62;
+            jjmatchedKind = 64;
             jjmatchedPos = 1;
          }
          break;
@@ -236,9 +250,9 @@
          }
          break;
       case 94:
-         if ((active1 & 0x8L) != 0L)
+         if ((active1 & 0x20L) != 0L)
          {
-            jjmatchedKind = 67;
+            jjmatchedKind = 69;
             jjmatchedPos = 1;
          }
          break;
@@ -272,24 +286,24 @@
          }
          break;
       case 124:
-         if ((active0 & 0x80000000000000L) != 0L)
+         if ((active0 & 0x200000000000000L) != 0L)
          {
-            jjmatchedKind = 55;
+            jjmatchedKind = 57;
             jjmatchedPos = 1;
          }
          break;
       default :
          break;
    }
-   return jjMoveNfa_0(0, 1);
+   return jjMoveNfa_0(4, 1);
 }
 private final int jjMoveStringLiteralDfa2_0(long old0, long active0, long old1, long active1)
 {
    if (((active0 &= old0) | (active1 &= old1)) == 0L)
-      return jjMoveNfa_0(0, 1);
+      return jjMoveNfa_0(4, 1);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 1);
+   return jjMoveNfa_0(4, 1);
    }
    switch(curChar)
    {
@@ -397,15 +411,15 @@
       default :
          break;
    }
-   return jjMoveNfa_0(0, 2);
+   return jjMoveNfa_0(4, 2);
 }
 private final int jjMoveStringLiteralDfa3_0(long old0, long active0)
 {
    if (((active0 &= old0)) == 0L)
-      return jjMoveNfa_0(0, 2);
+      return jjMoveNfa_0(4, 2);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 2);
+   return jjMoveNfa_0(4, 2);
    }
    switch(curChar)
    {
@@ -517,15 +531,15 @@
       default :
          break;
    }
-   return jjMoveNfa_0(0, 3);
+   return jjMoveNfa_0(4, 3);
 }
 private final int jjMoveStringLiteralDfa4_0(long old0, long active0)
 {
    if (((active0 &= old0)) == 0L)
-      return jjMoveNfa_0(0, 3);
+      return jjMoveNfa_0(4, 3);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 3);
+   return jjMoveNfa_0(4, 3);
    }
    switch(curChar)
    {
@@ -690,15 +704,15 @@
       default :
          break;
    }
-   return jjMoveNfa_0(0, 4);
+   return jjMoveNfa_0(4, 4);
 }
 private final int jjMoveStringLiteralDfa5_0(long old0, long active0)
 {
    if (((active0 &= old0)) == 0L)
-      return jjMoveNfa_0(0, 4);
+      return jjMoveNfa_0(4, 4);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 4);
+   return jjMoveNfa_0(4, 4);
    }
    switch(curChar)
    {
@@ -777,15 +791,15 @@
       default :
          break;
    }
-   return jjMoveNfa_0(0, 5);
+   return jjMoveNfa_0(4, 5);
 }
 private final int jjMoveStringLiteralDfa6_0(long old0, long active0)
 {
    if (((active0 &= old0)) == 0L)
-      return jjMoveNfa_0(0, 5);
+      return jjMoveNfa_0(4, 5);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 5);
+   return jjMoveNfa_0(4, 5);
    }
    switch(curChar)
    {
@@ -848,15 +862,15 @@
       default :
          break;
    }
-   return jjMoveNfa_0(0, 6);
+   return jjMoveNfa_0(4, 6);
 }
 private final int jjMoveStringLiteralDfa7_0(long old0, long active0)
 {
    if (((active0 &= old0)) == 0L)
-      return jjMoveNfa_0(0, 6);
+      return jjMoveNfa_0(4, 6);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 6);
+   return jjMoveNfa_0(4, 6);
    }
    switch(curChar)
    {
@@ -937,15 +951,15 @@
       default :
          break;
    }
-   return jjMoveNfa_0(0, 7);
+   return jjMoveNfa_0(4, 7);
 }
 private final int jjMoveStringLiteralDfa8_0(long old0, long active0)
 {
    if (((active0 &= old0)) == 0L)
-      return jjMoveNfa_0(0, 7);
+      return jjMoveNfa_0(4, 7);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 7);
+   return jjMoveNfa_0(4, 7);
    }
    switch(curChar)
    {
@@ -984,15 +998,15 @@
       default :
          break;
    }
-   return jjMoveNfa_0(0, 8);
+   return jjMoveNfa_0(4, 8);
 }
 private final int jjMoveStringLiteralDfa9_0(long old0, long active0)
 {
    if (((active0 &= old0)) == 0L)
-      return jjMoveNfa_0(0, 8);
+      return jjMoveNfa_0(4, 8);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 8);
+   return jjMoveNfa_0(4, 8);
    }
    switch(curChar)
    {
@@ -1003,15 +1017,15 @@
       default :
          break;
    }
-   return jjMoveNfa_0(0, 9);
+   return jjMoveNfa_0(4, 9);
 }
 private final int jjMoveStringLiteralDfa10_0(long old0, long active0)
 {
    if (((active0 &= old0)) == 0L)
-      return jjMoveNfa_0(0, 9);
+      return jjMoveNfa_0(4, 9);
    try { curChar = input_stream.readChar(); }
    catch(java.io.IOException e) {
-   return jjMoveNfa_0(0, 9);
+   return jjMoveNfa_0(4, 9);
    }
    switch(curChar)
    {
@@ -1032,7 +1046,7 @@
       default :
          break;
    }
-   return jjMoveNfa_0(0, 10);
+   return jjMoveNfa_0(4, 10);
 }
 private final void jjCheckNAdd(int state)
 {
@@ -1065,43 +1079,43 @@
    jjCheckNAdd(jjnextStates[start + 1]);
 }
 static final long[] jjbitVec0 = {
-   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+   0xfffe7000fffffff6L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x5e00000000ffffffL
 };
 static final long[] jjbitVec2 = {
-   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
+   0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL
 };
 static final long[] jjbitVec3 = {
-   0xfffe7000fffffff6L, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x5e00000000ffffffL
+   0x0L, 0xbfff000000000000L, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
 static final long[] jjbitVec4 = {
-   0x0L, 0x0L, 0x0L, 0xff7fffffff7fffffL
+   0x3000L, 0xffff000000000000L, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
 static final long[] jjbitVec5 = {
-   0x0L, 0xbfff000000000000L, 0xffffffffffffffffL, 0xffffffffffffffffL
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L
 };
 static final long[] jjbitVec6 = {
-   0x3000L, 0xffff000000000000L, 0xffffffffffffffffL, 0xffffffffffffffffL
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffL
 };
 static final long[] jjbitVec7 = {
-   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffL, 0x0L
+   0xfffffffffffffffeL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
 static final long[] jjbitVec8 = {
-   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffL
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffff00000000ffffL
 };
 static final long[] jjbitVec9 = {
-   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0xffff00000000ffffL
+   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x3fffffffffffffffL
 };
 static final long[] jjbitVec10 = {
-   0xffffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL, 0x3fffffffffffffffL
+   0x0L, 0x0L, 0x80000000000000L, 0xff7fffffff7fffffL
 };
 static final long[] jjbitVec11 = {
-   0x0L, 0x0L, 0x80000000000000L, 0xff7fffffff7fffffL
+   0xffffffffffffffffL, 0xbfffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
 static final long[] jjbitVec12 = {
-   0xffffffffffffffffL, 0xbfffffffffffffffL, 0xffffffffffffffffL, 0xffffffffffffffffL
+   0x8000000000003000L, 0xffff000000000001L, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
 static final long[] jjbitVec13 = {
-   0x8000000000003000L, 0xffff000000000001L, 0xffffffffffffffffL, 0xffffffffffffffffL
+   0x0L, 0x0L, 0xffffffffffffffffL, 0xffffffffffffffffL
 };
 private final int jjMoveNfa_0(int startState, int curPos)
 {
@@ -1114,7 +1128,7 @@
    curPos = 0;
    int[] nextStates;
    int startsAt = 0;
-   jjnewStateCnt = 139;
+   jjnewStateCnt = 154;
    int i = 1;
    jjstateSet[0] = startState;
    int j, kind = 0x7fffffff;
@@ -1129,598 +1143,667 @@
          {
             switch(jjstateSet[--i])
             {
-               case 0:
+               case 4:
                   if ((0x3ff000000000000L & l) != 0L)
                   {
-                     if (kind > 78)
-                        kind = 78;
+                     if (kind > 84)
+                        kind = 84;
                      jjCheckNAddStates(0, 6);
                   }
+                  else if ((0xc0000000000L & l) != 0L)
+                  {
+                     if (kind > 77)
+                        kind = 77;
+                  }
                   else if (curChar == 45)
                      jjCheckNAddStates(7, 11);
-                  else if (curChar == 43)
-                     jjCheckNAddStates(12, 16);
                   else if (curChar == 46)
-                     jjCheckNAddTwoStates(88, 89);
+                     jjCheckNAddTwoStates(103, 104);
                   else if (curChar == 58)
                   {
-                     if (kind > 69)
-                        kind = 69;
-                     jjCheckNAdd(66);
+                     if (kind > 71)
+                        kind = 71;
+                     jjCheckNAddStates(12, 14);
                   }
+                  else if (curChar == 60)
+                     jjCheckNAddStates(15, 18);
                   else if (curChar == 40)
-                     jjCheckNAddTwoStates(51, 52);
+                     jjCheckNAddTwoStates(49, 50);
                   else if (curChar == 34)
-                     jjstateSet[jjnewStateCnt++] = 48;
+                     jjstateSet[jjnewStateCnt++] = 46;
                   else if (curChar == 39)
-                     jjstateSet[jjnewStateCnt++] = 37;
+                     jjstateSet[jjnewStateCnt++] = 35;
                   else if (curChar == 36)
-                     jjstateSet[jjnewStateCnt++] = 12;
-                  else if (curChar == 60)
-                     jjCheckNAddTwoStates(1, 2);
+                     jjstateSet[jjnewStateCnt++] = 9;
                   else if (curChar == 63)
-                     jjstateSet[jjnewStateCnt++] = 9;
+                     jjstateSet[jjnewStateCnt++] = 6;
                   if ((0x3ff000000000000L & l) != 0L)
                   {
-                     if (kind > 101)
-                        kind = 101;
-                     jjCheckNAddTwoStates(57, 58);
+                     if (kind > 107)
+                        kind = 107;
+                     jjCheckNAddTwoStates(55, 56);
                   }
+                  else if (curChar == 43)
+                     jjCheckNAddStates(19, 23);
                   else if (curChar == 34)
-                     jjCheckNAddStates(17, 19);
+                     jjCheckNAddStates(24, 26);
                   else if (curChar == 39)
-                     jjCheckNAddStates(20, 22);
+                     jjCheckNAddStates(27, 29);
                   break;
+               case 0:
+                  if (curChar == 58)
+                     jjstateSet[jjnewStateCnt++] = 1;
+                  break;
                case 1:
-                  if ((0xaffffffa00000000L & l) != 0L)
-                     jjCheckNAddTwoStates(1, 2);
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 73)
+                     kind = 73;
+                  jjCheckNAddTwoStates(2, 3);
                   break;
                case 2:
-                  if (curChar == 62 && kind > 68)
-                     kind = 68;
+                  if ((0x3ff600000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(2, 3);
                   break;
                case 3:
-                  if (curChar == 58)
-                     jjstateSet[jjnewStateCnt++] = 4;
+                  if ((0x3ff200000000000L & l) != 0L && kind > 73)
+                     kind = 73;
                   break;
-               case 4:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 71)
-                     kind = 71;
-                  jjCheckNAddTwoStates(5, 6);
-                  break;
                case 5:
-                  if ((0x3ff600000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(5, 6);
+                  if (curChar == 63)
+                     jjstateSet[jjnewStateCnt++] = 6;
                   break;
                case 6:
-                  if ((0x3ff200000000000L & l) != 0L && kind > 71)
-                     kind = 71;
+               case 7:
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 74)
+                     kind = 74;
+                  jjCheckNAdd(7);
                   break;
                case 8:
-                  if (curChar == 63)
+                  if (curChar == 36)
                      jjstateSet[jjnewStateCnt++] = 9;
                   break;
                case 9:
                case 10:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 72)
-                     kind = 72;
+                  if (kind > 75)
+                     kind = 75;
                   jjCheckNAdd(10);
                   break;
-               case 11:
-                  if (curChar == 36)
-                     jjstateSet[jjnewStateCnt++] = 12;
-                  break;
-               case 12:
                case 13:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 73)
-                     kind = 73;
-                  jjCheckNAdd(13);
-                  break;
-               case 16:
                   if (curChar == 45)
-                     jjCheckNAdd(17);
+                     jjCheckNAdd(14);
                   break;
-               case 17:
+               case 14:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 74)
-                     kind = 74;
-                  jjCheckNAddTwoStates(16, 17);
+                  if (kind > 76)
+                     kind = 76;
+                  jjCheckNAddTwoStates(13, 14);
                   break;
-               case 18:
+               case 15:
+                  if ((0xc0000000000L & l) != 0L && kind > 77)
+                     kind = 77;
+                  break;
+               case 16:
                   if (curChar == 39)
-                     jjCheckNAddStates(20, 22);
+                     jjCheckNAddStates(27, 29);
                   break;
-               case 19:
+               case 17:
                   if ((0xffffff7fffffdbffL & l) != 0L)
-                     jjCheckNAddStates(20, 22);
+                     jjCheckNAddStates(27, 29);
                   break;
-               case 21:
+               case 19:
                   if ((0x8400000000L & l) != 0L)
-                     jjCheckNAddStates(20, 22);
+                     jjCheckNAddStates(27, 29);
                   break;
-               case 22:
-                  if (curChar == 39 && kind > 88)
-                     kind = 88;
+               case 20:
+                  if (curChar == 39 && kind > 94)
+                     kind = 94;
                   break;
-               case 23:
+               case 21:
                   if (curChar == 34)
-                     jjCheckNAddStates(17, 19);
+                     jjCheckNAddStates(24, 26);
                   break;
-               case 24:
+               case 22:
                   if ((0xfffffffbffffdbffL & l) != 0L)
-                     jjCheckNAddStates(17, 19);
+                     jjCheckNAddStates(24, 26);
                   break;
-               case 26:
+               case 24:
                   if ((0x8400000000L & l) != 0L)
-                     jjCheckNAddStates(17, 19);
+                     jjCheckNAddStates(24, 26);
                   break;
-               case 27:
-                  if (curChar == 34 && kind > 89)
-                     kind = 89;
+               case 25:
+                  if (curChar == 34 && kind > 95)
+                     kind = 95;
                   break;
-               case 28:
+               case 26:
                   if (curChar == 39)
-                     jjCheckNAddStates(23, 26);
+                     jjCheckNAddStates(30, 33);
                   break;
-               case 29:
-               case 34:
+               case 27:
+               case 32:
                   if (curChar == 39)
-                     jjCheckNAddTwoStates(30, 31);
+                     jjCheckNAddTwoStates(28, 29);
                   break;
-               case 30:
+               case 28:
                   if ((0xffffff7fffffffffL & l) != 0L)
-                     jjCheckNAddStates(23, 26);
+                     jjCheckNAddStates(30, 33);
                   break;
-               case 32:
+               case 30:
                   if ((0x8400000000L & l) != 0L)
-                     jjCheckNAddStates(23, 26);
+                     jjCheckNAddStates(30, 33);
                   break;
+               case 31:
+                  if (curChar == 39)
+                     jjAddStates(34, 35);
+                  break;
                case 33:
+                  if (curChar == 39 && kind > 96)
+                     kind = 96;
+                  break;
+               case 34:
                   if (curChar == 39)
-                     jjAddStates(27, 28);
+                     jjstateSet[jjnewStateCnt++] = 33;
                   break;
                case 35:
-                  if (curChar == 39 && kind > 90)
-                     kind = 90;
+                  if (curChar == 39)
+                     jjstateSet[jjnewStateCnt++] = 26;
                   break;
                case 36:
                   if (curChar == 39)
                      jjstateSet[jjnewStateCnt++] = 35;
                   break;
                case 37:
-                  if (curChar == 39)
-                     jjstateSet[jjnewStateCnt++] = 28;
+                  if (curChar == 34)
+                     jjCheckNAddStates(36, 39);
                   break;
                case 38:
-                  if (curChar == 39)
-                     jjstateSet[jjnewStateCnt++] = 37;
+               case 43:
+                  if (curChar == 34)
+                     jjCheckNAddTwoStates(39, 40);
                   break;
                case 39:
-                  if (curChar == 34)
-                     jjCheckNAddStates(29, 32);
+                  if ((0xfffffffbffffffffL & l) != 0L)
+                     jjCheckNAddStates(36, 39);
                   break;
-               case 40:
-               case 45:
-                  if (curChar == 34)
-                     jjCheckNAddTwoStates(41, 42);
-                  break;
                case 41:
-                  if ((0xfffffffbffffffffL & l) != 0L)
-                     jjCheckNAddStates(29, 32);
-                  break;
-               case 43:
                   if ((0x8400000000L & l) != 0L)
-                     jjCheckNAddStates(29, 32);
+                     jjCheckNAddStates(36, 39);
                   break;
+               case 42:
+                  if (curChar == 34)
+                     jjAddStates(40, 41);
+                  break;
                case 44:
+                  if (curChar == 34 && kind > 97)
+                     kind = 97;
+                  break;
+               case 45:
                   if (curChar == 34)
-                     jjAddStates(33, 34);
+                     jjstateSet[jjnewStateCnt++] = 44;
                   break;
                case 46:
-                  if (curChar == 34 && kind > 91)
-                     kind = 91;
+                  if (curChar == 34)
+                     jjstateSet[jjnewStateCnt++] = 37;
                   break;
                case 47:
                   if (curChar == 34)
                      jjstateSet[jjnewStateCnt++] = 46;
                   break;
                case 48:
-                  if (curChar == 34)
-                     jjstateSet[jjnewStateCnt++] = 39;
+                  if (curChar == 40)
+                     jjCheckNAddTwoStates(49, 50);
                   break;
                case 49:
-                  if (curChar == 34)
-                     jjstateSet[jjnewStateCnt++] = 48;
+                  if ((0x100002600L & l) != 0L)
+                     jjCheckNAddTwoStates(49, 50);
                   break;
                case 50:
-                  if (curChar == 40)
-                     jjCheckNAddTwoStates(51, 52);
+                  if (curChar == 41 && kind > 99)
+                     kind = 99;
                   break;
-               case 51:
+               case 52:
                   if ((0x100002600L & l) != 0L)
-                     jjCheckNAddTwoStates(51, 52);
+                     jjAddStates(42, 43);
                   break;
-               case 52:
-                  if (curChar == 41 && kind > 93)
-                     kind = 93;
-                  break;
                case 54:
-                  if ((0x100002600L & l) != 0L)
-                     jjAddStates(35, 36);
-                  break;
-               case 56:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 101)
-                     kind = 101;
-                  jjCheckNAddTwoStates(57, 58);
+                  if (kind > 107)
+                     kind = 107;
+                  jjCheckNAddTwoStates(55, 56);
                   break;
-               case 57:
+               case 55:
                   if ((0x3ff600000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(57, 58);
+                     jjCheckNAddTwoStates(55, 56);
                   break;
+               case 56:
+                  if ((0x3ff200000000000L & l) != 0L && kind > 107)
+                     kind = 107;
+                  break;
+               case 57:
+                  if (curChar == 60)
+                     jjCheckNAddStates(15, 18);
+                  break;
                case 58:
-                  if ((0x3ff200000000000L & l) != 0L && kind > 101)
-                     kind = 101;
+                  if ((0xaffffffa00000000L & l) != 0L)
+                     jjCheckNAddTwoStates(58, 59);
                   break;
+               case 59:
+                  if (curChar == 62 && kind > 70)
+                     kind = 70;
+                  break;
                case 60:
-                  if ((0x3ff600000000000L & l) != 0L)
-                     jjAddStates(37, 38);
+                  if ((0xaffffffa00000000L & l) != 0L)
+                     jjCheckNAddTwoStates(60, 61);
                   break;
                case 61:
-                  if ((0x3ff200000000000L & l) != 0L)
+                  if (curChar == 62)
                      jjstateSet[jjnewStateCnt++] = 62;
                   break;
                case 62:
-                  if (curChar == 58 && kind > 69)
-                     kind = 69;
+                  if ((0xc0000000000L & l) != 0L && kind > 78)
+                     kind = 78;
                   break;
-               case 63:
+               case 64:
                   if ((0x3ff600000000000L & l) != 0L)
-                     jjAddStates(39, 40);
+                     jjAddStates(44, 45);
                   break;
-               case 64:
+               case 65:
                   if ((0x3ff200000000000L & l) != 0L)
-                     jjstateSet[jjnewStateCnt++] = 65;
+                     jjstateSet[jjnewStateCnt++] = 66;
                   break;
-               case 65:
-                  if (curChar == 58)
-                     jjCheckNAdd(66);
-                  break;
                case 66:
-                  if ((0x3ff000000000000L & l) == 0L)
-                     break;
-                  if (kind > 70)
-                     kind = 70;
-                  jjCheckNAddTwoStates(67, 68);
+                  if (curChar == 58 && kind > 71)
+                     kind = 71;
                   break;
                case 67:
                   if ((0x3ff600000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(67, 68);
+                     jjAddStates(46, 47);
                   break;
                case 68:
-                  if ((0x3ff200000000000L & l) != 0L && kind > 70)
-                     kind = 70;
+                  if ((0x3ff200000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 69;
                   break;
                case 69:
-                  if ((0x3ff600000000000L & l) != 0L)
-                     jjAddStates(41, 42);
+                  if (curChar == 58)
+                     jjCheckNAdd(70);
                   break;
                case 70:
-                  if ((0x3ff200000000000L & l) != 0L && kind > 100)
-                     kind = 100;
+                  if ((0x3ff000000000000L & l) == 0L)
+                     break;
+                  if (kind > 72)
+                     kind = 72;
+                  jjCheckNAddTwoStates(71, 72);
                   break;
                case 71:
+                  if ((0x3ff600000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(71, 72);
+                  break;
+               case 72:
+                  if ((0x3ff200000000000L & l) != 0L && kind > 72)
+                     kind = 72;
+                  break;
+               case 73:
+                  if ((0x3ff600000000000L & l) != 0L)
+                     jjAddStates(48, 49);
+                  break;
+               case 74:
+                  if ((0x3ff200000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 75;
+                  break;
+               case 75:
+                  if (curChar == 58)
+                     jjCheckNAdd(76);
+                  break;
+               case 76:
+                  if ((0xc0000000000L & l) != 0L && kind > 79)
+                     kind = 79;
+                  break;
+               case 77:
+                  if ((0x3ff600000000000L & l) != 0L)
+                     jjAddStates(50, 51);
+                  break;
+               case 78:
+                  if ((0x3ff200000000000L & l) != 0L)
+                     jjstateSet[jjnewStateCnt++] = 79;
+                  break;
+               case 79:
+                  if (curChar == 58)
+                     jjCheckNAdd(80);
+                  break;
+               case 80:
+                  if ((0x3ff000000000000L & l) != 0L)
+                     jjCheckNAddStates(52, 54);
+                  break;
+               case 81:
+                  if ((0x3ff600000000000L & l) != 0L)
+                     jjCheckNAddTwoStates(81, 82);
+                  break;
+               case 82:
+                  if ((0x3ff200000000000L & l) != 0L)
+                     jjCheckNAdd(83);
+                  break;
+               case 83:
+                  if ((0xc0000000000L & l) != 0L && kind > 80)
+                     kind = 80;
+                  break;
+               case 84:
+                  if ((0x3ff600000000000L & l) != 0L)
+                     jjAddStates(55, 56);
+                  break;
+               case 85:
+                  if ((0x3ff200000000000L & l) != 0L && kind > 106)
+                     kind = 106;
+                  break;
+               case 86:
                   if (curChar != 58)
                      break;
-                  if (kind > 69)
-                     kind = 69;
-                  jjCheckNAdd(66);
+                  if (kind > 71)
+                     kind = 71;
+                  jjCheckNAddStates(12, 14);
                   break;
-               case 72:
+               case 87:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 78)
-                     kind = 78;
+                  if (kind > 84)
+                     kind = 84;
                   jjCheckNAddStates(0, 6);
                   break;
-               case 73:
+               case 88:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 78)
-                     kind = 78;
-                  jjCheckNAdd(73);
+                  if (kind > 84)
+                     kind = 84;
+                  jjCheckNAdd(88);
                   break;
-               case 74:
+               case 89:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(74, 75);
+                     jjCheckNAddTwoStates(89, 90);
                   break;
-               case 75:
+               case 90:
                   if (curChar != 46)
                      break;
-                  if (kind > 79)
-                     kind = 79;
-                  jjCheckNAdd(76);
+                  if (kind > 85)
+                     kind = 85;
+                  jjCheckNAdd(91);
                   break;
-               case 76:
+               case 91:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 79)
-                     kind = 79;
-                  jjCheckNAdd(76);
+                  if (kind > 85)
+                     kind = 85;
+                  jjCheckNAdd(91);
                   break;
-               case 77:
+               case 92:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(77, 78);
+                     jjCheckNAddTwoStates(92, 93);
                   break;
-               case 78:
+               case 93:
                   if (curChar == 46)
-                     jjCheckNAddTwoStates(79, 80);
+                     jjCheckNAddTwoStates(94, 95);
                   break;
-               case 79:
+               case 94:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(79, 80);
+                     jjCheckNAddTwoStates(94, 95);
                   break;
-               case 81:
+               case 96:
                   if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(82);
+                     jjCheckNAdd(97);
                   break;
-               case 82:
+               case 97:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 80)
-                     kind = 80;
-                  jjCheckNAdd(82);
+                  if (kind > 86)
+                     kind = 86;
+                  jjCheckNAdd(97);
                   break;
-               case 83:
+               case 98:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(83, 84);
+                     jjCheckNAddTwoStates(98, 99);
                   break;
-               case 85:
+               case 100:
                   if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(86);
+                     jjCheckNAdd(101);
                   break;
-               case 86:
+               case 101:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 80)
-                     kind = 80;
-                  jjCheckNAdd(86);
+                  if (kind > 86)
+                     kind = 86;
+                  jjCheckNAdd(101);
                   break;
-               case 87:
+               case 102:
                   if (curChar == 46)
-                     jjCheckNAddTwoStates(88, 89);
+                     jjCheckNAddTwoStates(103, 104);
                   break;
-               case 88:
+               case 103:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 79)
-                     kind = 79;
-                  jjCheckNAdd(88);
+                  if (kind > 85)
+                     kind = 85;
+                  jjCheckNAdd(103);
                   break;
-               case 89:
+               case 104:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(89, 90);
+                     jjCheckNAddTwoStates(104, 105);
                   break;
-               case 91:
+               case 106:
                   if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(92);
+                     jjCheckNAdd(107);
                   break;
-               case 92:
+               case 107:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 80)
-                     kind = 80;
-                  jjCheckNAdd(92);
+                  if (kind > 86)
+                     kind = 86;
+                  jjCheckNAdd(107);
                   break;
-               case 93:
+               case 108:
                   if (curChar == 43)
-                     jjCheckNAddStates(12, 16);
+                     jjCheckNAddStates(19, 23);
                   break;
-               case 94:
+               case 109:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 81)
-                     kind = 81;
-                  jjCheckNAdd(94);
+                  if (kind > 87)
+                     kind = 87;
+                  jjCheckNAdd(109);
                   break;
-               case 95:
+               case 110:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(95, 96);
+                     jjCheckNAddTwoStates(110, 111);
                   break;
-               case 96:
+               case 111:
                   if (curChar != 46)
                      break;
-                  if (kind > 82)
-                     kind = 82;
-                  jjCheckNAdd(97);
+                  if (kind > 88)
+                     kind = 88;
+                  jjCheckNAdd(112);
                   break;
-               case 97:
+               case 112:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 82)
-                     kind = 82;
-                  jjCheckNAdd(97);
+                  if (kind > 88)
+                     kind = 88;
+                  jjCheckNAdd(112);
                   break;
-               case 98:
+               case 113:
                   if (curChar == 46)
-                     jjCheckNAdd(99);
+                     jjCheckNAdd(114);
                   break;
-               case 99:
+               case 114:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 82)
-                     kind = 82;
-                  jjCheckNAdd(99);
+                  if (kind > 88)
+                     kind = 88;
+                  jjCheckNAdd(114);
                   break;
-               case 100:
+               case 115:
                   if (curChar == 46)
-                     jjCheckNAdd(101);
+                     jjCheckNAdd(116);
                   break;
-               case 101:
+               case 116:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(101, 102);
+                     jjCheckNAddTwoStates(116, 117);
                   break;
-               case 103:
+               case 118:
                   if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(104);
+                     jjCheckNAdd(119);
                   break;
-               case 104:
+               case 119:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 83)
-                     kind = 83;
-                  jjCheckNAdd(104);
+                  if (kind > 89)
+                     kind = 89;
+                  jjCheckNAdd(119);
                   break;
-               case 105:
+               case 120:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(43, 46);
+                     jjCheckNAddStates(57, 60);
                   break;
-               case 106:
+               case 121:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(106, 107);
+                     jjCheckNAddTwoStates(121, 122);
                   break;
-               case 107:
+               case 122:
                   if (curChar == 46)
-                     jjCheckNAddTwoStates(108, 109);
+                     jjCheckNAddTwoStates(123, 124);
                   break;
-               case 108:
+               case 123:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(108, 109);
+                     jjCheckNAddTwoStates(123, 124);
                   break;
-               case 110:
+               case 125:
                   if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(111);
+                     jjCheckNAdd(126);
                   break;
-               case 111:
+               case 126:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 83)
-                     kind = 83;
-                  jjCheckNAdd(111);
+                  if (kind > 89)
+                     kind = 89;
+                  jjCheckNAdd(126);
                   break;
-               case 112:
+               case 127:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(112, 113);
+                     jjCheckNAddTwoStates(127, 128);
                   break;
-               case 114:
+               case 129:
                   if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(115);
+                     jjCheckNAdd(130);
                   break;
-               case 115:
+               case 130:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 83)
-                     kind = 83;
-                  jjCheckNAdd(115);
+                  if (kind > 89)
+                     kind = 89;
+                  jjCheckNAdd(130);
                   break;
-               case 116:
+               case 131:
                   if (curChar == 45)
                      jjCheckNAddStates(7, 11);
                   break;
-               case 117:
+               case 132:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 84)
-                     kind = 84;
-                  jjCheckNAdd(117);
+                  if (kind > 90)
+                     kind = 90;
+                  jjCheckNAdd(132);
                   break;
-               case 118:
+               case 133:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(118, 119);
+                     jjCheckNAddTwoStates(133, 134);
                   break;
-               case 119:
+               case 134:
                   if (curChar != 46)
                      break;
-                  if (kind > 85)
-                     kind = 85;
-                  jjCheckNAdd(120);
+                  if (kind > 91)
+                     kind = 91;
+                  jjCheckNAdd(135);
                   break;
-               case 120:
+               case 135:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 85)
-                     kind = 85;
-                  jjCheckNAdd(120);
+                  if (kind > 91)
+                     kind = 91;
+                  jjCheckNAdd(135);
                   break;
-               case 121:
+               case 136:
                   if (curChar == 46)
-                     jjCheckNAdd(122);
+                     jjCheckNAdd(137);
                   break;
-               case 122:
+               case 137:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 85)
-                     kind = 85;
-                  jjCheckNAdd(122);
+                  if (kind > 91)
+                     kind = 91;
+                  jjCheckNAdd(137);
                   break;
-               case 123:
+               case 138:
                   if (curChar == 46)
-                     jjCheckNAdd(124);
+                     jjCheckNAdd(139);
                   break;
-               case 124:
+               case 139:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(124, 125);
+                     jjCheckNAddTwoStates(139, 140);
                   break;
-               case 126:
+               case 141:
                   if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(127);
+                     jjCheckNAdd(142);
                   break;
-               case 127:
+               case 142:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 86)
-                     kind = 86;
-                  jjCheckNAdd(127);
+                  if (kind > 92)
+                     kind = 92;
+                  jjCheckNAdd(142);
                   break;
-               case 128:
+               case 143:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddStates(47, 50);
+                     jjCheckNAddStates(61, 64);
                   break;
-               case 129:
+               case 144:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(129, 130);
+                     jjCheckNAddTwoStates(144, 145);
                   break;
-               case 130:
+               case 145:
                   if (curChar == 46)
-                     jjCheckNAddTwoStates(131, 132);
+                     jjCheckNAddTwoStates(146, 147);
                   break;
-               case 131:
+               case 146:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(131, 132);
+                     jjCheckNAddTwoStates(146, 147);
                   break;
-               case 133:
+               case 148:
                   if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(134);
+                     jjCheckNAdd(149);
                   break;
-               case 134:
+               case 149:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 86)
-                     kind = 86;
-                  jjCheckNAdd(134);
+                  if (kind > 92)
+                     kind = 92;
+                  jjCheckNAdd(149);
                   break;
-               case 135:
+               case 150:
                   if ((0x3ff000000000000L & l) != 0L)
-                     jjCheckNAddTwoStates(135, 136);
+                     jjCheckNAddTwoStates(150, 151);
                   break;
-               case 137:
+               case 152:
                   if ((0x280000000000L & l) != 0L)
-                     jjCheckNAdd(138);
+                     jjCheckNAdd(153);
                   break;
-               case 138:
+               case 153:
                   if ((0x3ff000000000000L & l) == 0L)
                      break;
-                  if (kind > 86)
-                     kind = 86;
-                  jjCheckNAdd(138);
+                  if (kind > 92)
+                     kind = 92;
+                  jjCheckNAdd(153);
                   break;
                default : break;
             }
@@ -1733,236 +1816,264 @@
          {
             switch(jjstateSet[--i])
             {
-               case 0:
+               case 4:
                   if ((0x7fffffe87fffffeL & l) != 0L)
                   {
-                     if (kind > 101)
-                        kind = 101;
-                     jjCheckNAddTwoStates(57, 58);
+                     if (kind > 107)
+                        kind = 107;
+                     jjCheckNAddTwoStates(55, 56);
                   }
                   else if (curChar == 91)
-                     jjAddStates(35, 36);
+                     jjAddStates(42, 43);
                   else if (curChar == 64)
-                     jjCheckNAdd(15);
+                     jjCheckNAdd(12);
                   if ((0x7fffffe07fffffeL & l) != 0L)
                   {
-                     if (kind > 100)
-                        kind = 100;
-                     jjCheckNAddStates(51, 58);
+                     if (kind > 106)
+                        kind = 106;
+                     jjCheckNAddStates(65, 78);
                   }
                   else if (curChar == 95)
-                     jjstateSet[jjnewStateCnt++] = 3;
+                     jjstateSet[jjnewStateCnt++] = 0;
                   break;
                case 1:
-                  if ((0xc7fffffeafffffffL & l) != 0L)
-                     jjAddStates(59, 60);
-                  break;
-               case 4:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
-                  if (kind > 71)
-                     kind = 71;
-                  jjCheckNAddTwoStates(5, 6);
+                  if (kind > 73)
+                     kind = 73;
+                  jjCheckNAddTwoStates(2, 3);
                   break;
-               case 5:
+               case 2:
                   if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(5, 6);
+                     jjCheckNAddTwoStates(2, 3);
                   break;
+               case 3:
+                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 73)
+                     kind = 73;
+                  break;
                case 6:
-                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 71)
-                     kind = 71;
-                  break;
                case 7:
-                  if (curChar == 95)
-                     jjstateSet[jjnewStateCnt++] = 3;
+                  if ((0x7fffffe87fffffeL & l) == 0L)
+                     break;
+                  if (kind > 74)
+                     kind = 74;
+                  jjCheckNAdd(7);
                   break;
                case 9:
                case 10:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
-                  if (kind > 72)
-                     kind = 72;
+                  if (kind > 75)
+                     kind = 75;
                   jjCheckNAdd(10);
                   break;
+               case 11:
+                  if (curChar == 64)
+                     jjCheckNAdd(12);
+                  break;
                case 12:
-               case 13:
-                  if ((0x7fffffe87fffffeL & l) == 0L)
+                  if ((0x7fffffe07fffffeL & l) == 0L)
                      break;
-                  if (kind > 73)
-                     kind = 73;
-                  jjCheckNAdd(13);
+                  if (kind > 76)
+                     kind = 76;
+                  jjCheckNAddTwoStates(12, 13);
                   break;
                case 14:
-                  if (curChar == 64)
-                     jjCheckNAdd(15);
-                  break;
-               case 15:
                   if ((0x7fffffe07fffffeL & l) == 0L)
                      break;
-                  if (kind > 74)
-                     kind = 74;
-                  jjCheckNAddTwoStates(15, 16);
+                  if (kind > 76)
+                     kind = 76;
+                  jjCheckNAddTwoStates(13, 14);
                   break;
                case 17:
-                  if ((0x7fffffe07fffffeL & l) == 0L)
-                     break;
-                  if (kind > 74)
-                     kind = 74;
-                  jjCheckNAddTwoStates(16, 17);
-                  break;
-               case 19:
                   if ((0xffffffffefffffffL & l) != 0L)
-                     jjCheckNAddStates(20, 22);
+                     jjCheckNAddStates(27, 29);
                   break;
-               case 20:
+               case 18:
                   if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 21;
+                     jjstateSet[jjnewStateCnt++] = 19;
                   break;
-               case 21:
+               case 19:
                   if ((0x14404410000000L & l) != 0L)
-                     jjCheckNAddStates(20, 22);
+                     jjCheckNAddStates(27, 29);
                   break;
-               case 24:
+               case 22:
                   if ((0xffffffffefffffffL & l) != 0L)
-                     jjCheckNAddStates(17, 19);
+                     jjCheckNAddStates(24, 26);
                   break;
-               case 25:
+               case 23:
                   if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 26;
+                     jjstateSet[jjnewStateCnt++] = 24;
                   break;
-               case 26:
+               case 24:
                   if ((0x14404410000000L & l) != 0L)
-                     jjCheckNAddStates(17, 19);
+                     jjCheckNAddStates(24, 26);
                   break;
-               case 30:
+               case 28:
                   if ((0xffffffffefffffffL & l) != 0L)
-                     jjCheckNAddStates(23, 26);
+                     jjCheckNAddStates(30, 33);
                   break;
-               case 31:
+               case 29:
                   if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 32;
+                     jjstateSet[jjnewStateCnt++] = 30;
                   break;
-               case 32:
+               case 30:
                   if ((0x14404410000000L & l) != 0L)
-                     jjCheckNAddStates(23, 26);
+                     jjCheckNAddStates(30, 33);
                   break;
-               case 41:
+               case 39:
                   if ((0xffffffffefffffffL & l) != 0L)
-                     jjCheckNAddStates(29, 32);
+                     jjCheckNAddStates(36, 39);
                   break;
-               case 42:
+               case 40:
                   if (curChar == 92)
-                     jjstateSet[jjnewStateCnt++] = 43;
+                     jjstateSet[jjnewStateCnt++] = 41;
                   break;
-               case 43:
+               case 41:
                   if ((0x14404410000000L & l) != 0L)
-                     jjCheckNAddStates(29, 32);
+                     jjCheckNAddStates(36, 39);
                   break;
-               case 53:
+               case 51:
                   if (curChar == 91)
-                     jjAddStates(35, 36);
+                     jjAddStates(42, 43);
                   break;
-               case 55:
-                  if (curChar == 93 && kind > 95)
-                     kind = 95;
+               case 53:
+                  if (curChar == 93 && kind > 101)
+                     kind = 101;
                   break;
-               case 56:
+               case 54:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
-                  if (kind > 101)
-                     kind = 101;
-                  jjCheckNAddTwoStates(57, 58);
+                  if (kind > 107)
+                     kind = 107;
+                  jjCheckNAddTwoStates(55, 56);
                   break;
-               case 57:
+               case 55:
                   if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(57, 58);
+                     jjCheckNAddTwoStates(55, 56);
                   break;
+               case 56:
+                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 107)
+                     kind = 107;
+                  break;
                case 58:
-                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 101)
-                     kind = 101;
+                  if ((0xc7fffffeafffffffL & l) != 0L)
+                     jjAddStates(79, 80);
                   break;
-               case 59:
+               case 60:
+                  if ((0xc7fffffeafffffffL & l) != 0L)
+                     jjAddStates(81, 82);
+                  break;
+               case 63:
                   if ((0x7fffffe07fffffeL & l) == 0L)
                      break;
-                  if (kind > 100)
-                     kind = 100;
-                  jjCheckNAddStates(51, 58);
+                  if (kind > 106)
+                     kind = 106;
+                  jjCheckNAddStates(65, 78);
                   break;
-               case 60:
+               case 64:
                   if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(60, 61);
+                     jjCheckNAddTwoStates(64, 65);
                   break;
-               case 61:
+               case 65:
                   if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAdd(62);
+                     jjCheckNAdd(66);
                   break;
-               case 63:
+               case 67:
                   if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(63, 64);
+                     jjCheckNAddTwoStates(67, 68);
                   break;
-               case 64:
+               case 68:
                   if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAdd(65);
+                     jjCheckNAdd(69);
                   break;
-               case 66:
+               case 70:
                   if ((0x7fffffe87fffffeL & l) == 0L)
                      break;
-                  if (kind > 70)
-                     kind = 70;
-                  jjCheckNAddTwoStates(67, 68);
+                  if (kind > 72)
+                     kind = 72;
+                  jjCheckNAddTwoStates(71, 72);
                   break;
-               case 67:
+               case 71:
                   if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(67, 68);
+                     jjCheckNAddTwoStates(71, 72);
                   break;
-               case 68:
-                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 70)
-                     kind = 70;
+               case 72:
+                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 72)
+                     kind = 72;
                   break;
-               case 69:
+               case 73:
                   if ((0x7fffffe87fffffeL & l) != 0L)
-                     jjCheckNAddTwoStates(69, 70);
+                     jjCheckNAddTwoStates(73, 74);
                   break;
-               case 70:
-                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 100)
-                     kind = 100;
+               case 74:
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAdd(75);
                   break;
+               case 77:
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddTwoStates(77, 78);
+                  break;
+               case 78:
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAdd(79);
+                  break;
                case 80:
-                  if ((0x2000000020L & l) != 0L)
-                     jjAddStates(61, 62);
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddStates(52, 54);
                   break;
+               case 81:
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddTwoStates(81, 82);
+                  break;
+               case 82:
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAdd(83);
+                  break;
                case 84:
+                  if ((0x7fffffe87fffffeL & l) != 0L)
+                     jjCheckNAddTwoStates(84, 85);
+                  break;
+               case 85:
+                  if ((0x7fffffe87fffffeL & l) != 0L && kind > 106)
+                     kind = 106;
+                  break;
+               case 95:
                   if ((0x2000000020L & l) != 0L)
-                     jjAddStates(63, 64);
+                     jjAddStates(83, 84);
                   break;
-               case 90:
+               case 99:
                   if ((0x2000000020L & l) != 0L)
-                     jjAddStates(65, 66);
+                     jjAddStates(85, 86);
                   break;
-               case 102:
+               case 105:
                   if ((0x2000000020L & l) != 0L)
-                     jjAddStates(67, 68);
+                     jjAddStates(87, 88);
                   break;
-               case 109:
+               case 117:
                   if ((0x2000000020L & l) != 0L)
-                     jjAddStates(69, 70);
+                     jjAddStates(89, 90);
                   break;
-               case 113:
+               case 124:
                   if ((0x2000000020L & l) != 0L)
-                     jjAddStates(71, 72);
+                     jjAddStates(91, 92);
                   break;
-               case 125:
+               case 128:
                   if ((0x2000000020L & l) != 0L)
-                     jjAddStates(73, 74);
+                     jjAddStates(93, 94);
                   break;
-               case 132:
+               case 140:
                   if ((0x2000000020L & l) != 0L)
-                     jjAddStates(75, 76);
+                     jjAddStates(95, 96);
                   break;
-               case 136:
+               case 147:
                   if ((0x2000000020L & l) != 0L)
-                     jjAddStates(77, 78);
+                     jjAddStates(97, 98);
                   break;
+               case 151:
+                  if ((0x2000000020L & l) != 0L)
+                     jjAddStates(99, 100);
+                  break;
                default : break;
             }
          } while(i != startsAt);
@@ -1978,144 +2089,176 @@
          {
             switch(jjstateSet[--i])
             {
-               case 0:
-                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+               case 4:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                   {
-                     if (kind > 101)
-                        kind = 101;
-                     jjCheckNAddTwoStates(57, 58);
+                     if (kind > 107)
+                        kind = 107;
+                     jjCheckNAddTwoStates(55, 56);
                   }
-                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
                   {
-                     if (kind > 100)
-                        kind = 100;
-                     jjCheckNAddStates(51, 58);
+                     if (kind > 106)
+                        kind = 106;
+                     jjCheckNAddStates(65, 78);
                   }
                   break;
                case 1:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjAddStates(59, 60);
-                  break;
-               case 4:
-                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 71)
-                     kind = 71;
-                  jjCheckNAddTwoStates(5, 6);
+                  if (kind > 73)
+                     kind = 73;
+                  jjCheckNAddTwoStates(2, 3);
                   break;
-               case 5:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddTwoStates(5, 6);
+               case 2:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(2, 3);
                   break;
+               case 3:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2) && kind > 73)
+                     kind = 73;
+                  break;
                case 6:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2) && kind > 71)
-                     kind = 71;
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 74)
+                     kind = 74;
+                  jjCheckNAdd(7);
                   break;
-               case 9:
+               case 7:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 72)
-                     kind = 72;
-                  jjCheckNAdd(10);
+                  if (kind > 74)
+                     kind = 74;
+                  jjCheckNAdd(7);
                   break;
-               case 10:
-                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
+               case 9:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 72)
-                     kind = 72;
+                  if (kind > 75)
+                     kind = 75;
                   jjCheckNAdd(10);
                   break;
-               case 12:
+               case 10:
                   if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
                      break;
-                  if (kind > 73)
-                     kind = 73;
-                  jjCheckNAdd(13);
+                  if (kind > 75)
+                     kind = 75;
+                  jjCheckNAdd(10);
                   break;
-               case 13:
-                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 73)
-                     kind = 73;
-                  jjCheckNAdd(13);
+               case 17:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjAddStates(27, 29);
                   break;
-               case 19:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjAddStates(20, 22);
+               case 22:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjAddStates(24, 26);
                   break;
-               case 24:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjAddStates(17, 19);
+               case 28:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjAddStates(30, 33);
                   break;
-               case 30:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjAddStates(23, 26);
+               case 39:
+                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                     jjAddStates(36, 39);
                   break;
-               case 41:
-                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
-                     jjAddStates(29, 32);
+               case 54:
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 107)
+                     kind = 107;
+                  jjCheckNAddTwoStates(55, 56);
                   break;
+               case 55:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(55, 56);
+                  break;
                case 56:
-                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 101)
-                     kind = 101;
-                  jjCheckNAddTwoStates(57, 58);
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2) && kind > 107)
+                     kind = 107;
                   break;
-               case 57:
+               case 58:
                   if (jjCanMove_2(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddTwoStates(57, 58);
+                     jjAddStates(79, 80);
                   break;
-               case 58:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2) && kind > 101)
-                     kind = 101;
-                  break;
-               case 59:
-                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 100)
-                     kind = 100;
-                  jjCheckNAddStates(51, 58);
-                  break;
                case 60:
                   if (jjCanMove_2(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddTwoStates(60, 61);
+                     jjAddStates(81, 82);
                   break;
-               case 61:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
-                     jjCheckNAdd(62);
-                  break;
                case 63:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddTwoStates(63, 64);
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 106)
+                     kind = 106;
+                  jjCheckNAddStates(65, 78);
                   break;
                case 64:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
-                     jjCheckNAdd(65);
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(64, 65);
                   break;
-               case 66:
-                  if (!jjCanMove_1(hiByte, i1, i2, l1, l2))
-                     break;
-                  if (kind > 70)
-                     kind = 70;
-                  jjCheckNAddTwoStates(67, 68);
+               case 65:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAdd(66);
                   break;
                case 67:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
                      jjCheckNAddTwoStates(67, 68);
                   break;
                case 68:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2) && kind > 70)
-                     kind = 70;
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAdd(69);
                   break;
-               case 69:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2))
-                     jjCheckNAddTwoStates(69, 70);
-                  break;
                case 70:
-                  if (jjCanMove_2(hiByte, i1, i2, l1, l2) && kind > 100)
-                     kind = 100;
+                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     break;
+                  if (kind > 72)
+                     kind = 72;
+                  jjCheckNAddTwoStates(71, 72);
                   break;
+               case 71:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(71, 72);
+                  break;
+               case 72:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2) && kind > 72)
+                     kind = 72;
+                  break;
+               case 73:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(73, 74);
+                  break;
+               case 74:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAdd(75);
+                  break;
+               case 77:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(77, 78);
+                  break;
+               case 78:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAdd(79);
+                  break;
+               case 80:
+                  if (jjCanMove_0(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddStates(52, 54);
+                  break;
+               case 81:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(81, 82);
+                  break;
+               case 82:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAdd(83);
+                  break;
+               case 84:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2))
+                     jjCheckNAddTwoStates(84, 85);
+                  break;
+               case 85:
+                  if (jjCanMove_1(hiByte, i1, i2, l1, l2) && kind > 106)
+                     kind = 106;
+                  break;
                default : break;
             }
          } while(i != startsAt);
@@ -2127,7 +2270,7 @@
          kind = 0x7fffffff;
       }
       ++curPos;
-      if ((i = jjnewStateCnt) == (startsAt = 139 - (jjnewStateCnt = startsAt)))
+      if ((i = jjnewStateCnt) == (startsAt = 154 - (jjnewStateCnt = startsAt)))
          break;
       try { curChar = input_stream.readChar(); }
       catch(java.io.IOException e) { break; }
@@ -2212,7 +2355,7 @@
             switch(jjstateSet[--i])
             {
                case 0:
-                  if (!jjCanMove_0(hiByte, i1, i2, l1, l2))
+                  if (!jjCanMove_2(hiByte, i1, i2, l1, l2))
                      break;
                   if (kind > 7)
                      kind = 7;
@@ -2236,11 +2379,13 @@
    }
 }
 static final int[] jjnextStates = {
-   73, 74, 75, 77, 78, 83, 84, 117, 118, 121, 123, 128, 94, 95, 98, 100, 
-   105, 24, 25, 27, 19, 20, 22, 29, 30, 31, 33, 34, 36, 40, 41, 42, 
-   44, 45, 47, 54, 55, 60, 61, 63, 64, 69, 70, 106, 107, 112, 113, 129, 
-   130, 135, 136, 60, 61, 62, 63, 64, 65, 69, 70, 1, 2, 81, 82, 85, 
-   86, 91, 92, 103, 104, 110, 111, 114, 115, 126, 127, 133, 134, 137, 138, 
+   88, 89, 90, 92, 93, 98, 99, 132, 133, 136, 138, 143, 70, 76, 80, 58, 
+   59, 60, 61, 109, 110, 113, 115, 120, 22, 23, 25, 17, 18, 20, 27, 28, 
+   29, 31, 32, 34, 38, 39, 40, 42, 43, 45, 52, 53, 64, 65, 67, 68, 
+   73, 74, 77, 78, 81, 82, 83, 84, 85, 121, 122, 127, 128, 144, 145, 150, 
+   151, 64, 65, 66, 67, 68, 69, 73, 74, 75, 77, 78, 79, 84, 85, 58, 
+   59, 60, 61, 96, 97, 100, 101, 106, 107, 118, 119, 125, 126, 129, 130, 141, 
+   142, 148, 149, 152, 153, 
 };
 private static final boolean jjCanMove_0(int hiByte, int i1, int i2, long l1, long l2)
 {
@@ -2248,6 +2393,20 @@
    {
       case 0:
          return ((jjbitVec2[i2] & l2) != 0L);
+      case 3:
+         return ((jjbitVec3[i2] & l2) != 0L);
+      case 32:
+         return ((jjbitVec4[i2] & l2) != 0L);
+      case 33:
+         return ((jjbitVec5[i2] & l2) != 0L);
+      case 47:
+         return ((jjbitVec6[i2] & l2) != 0L);
+      case 48:
+         return ((jjbitVec7[i2] & l2) != 0L);
+      case 253:
+         return ((jjbitVec8[i2] & l2) != 0L);
+      case 255:
+         return ((jjbitVec9[i2] & l2) != 0L);
       default : 
          if ((jjbitVec0[i1] & l1) != 0L)
             return true;
@@ -2259,23 +2418,23 @@
    switch(hiByte)
    {
       case 0:
-         return ((jjbitVec4[i2] & l2) != 0L);
+         return ((jjbitVec10[i2] & l2) != 0L);
       case 3:
-         return ((jjbitVec5[i2] & l2) != 0L);
+         return ((jjbitVec11[i2] & l2) != 0L);
       case 32:
-         return ((jjbitVec6[i2] & l2) != 0L);
+         return ((jjbitVec12[i2] & l2) != 0L);
       case 33:
-         return ((jjbitVec7[i2] & l2) != 0L);
+         return ((jjbitVec5[i2] & l2) != 0L);
       case 47:
-         return ((jjbitVec8[i2] & l2) != 0L);
+         return ((jjbitVec6[i2] & l2) != 0L);
       case 48:
-         return ((jjbitVec0[i2] & l2) != 0L);
+         return ((jjbitVec7[i2] & l2) != 0L);
       case 253:
+         return ((jjbitVec8[i2] & l2) != 0L);
+      case 255:
          return ((jjbitVec9[i2] & l2) != 0L);
-      case 255:
-         return ((jjbitVec10[i2] & l2) != 0L);
       default : 
-         if ((jjbitVec3[i1] & l1) != 0L)
+         if ((jjbitVec0[i1] & l1) != 0L)
             return true;
          return false;
    }
@@ -2285,23 +2444,9 @@
    switch(hiByte)
    {
       case 0:
-         return ((jjbitVec11[i2] & l2) != 0L);
-      case 3:
-         return ((jjbitVec12[i2] & l2) != 0L);
-      case 32:
          return ((jjbitVec13[i2] & l2) != 0L);
-      case 33:
-         return ((jjbitVec7[i2] & l2) != 0L);
-      case 47:
-         return ((jjbitVec8[i2] & l2) != 0L);
-      case 48:
-         return ((jjbitVec0[i2] & l2) != 0L);
-      case 253:
-         return ((jjbitVec9[i2] & l2) != 0L);
-      case 255:
-         return ((jjbitVec10[i2] & l2) != 0L);
       default : 
-         if ((jjbitVec3[i1] & l1) != 0L)
+         if ((jjbitVec7[i1] & l1) != 0L)
             return true;
          return false;
    }
@@ -2311,11 +2456,11 @@
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
 "\52", "\101\123\103", "\104\105\123\103", "\173", "\56", "\175", "\50", "\72\75", 
-"\51", "\54", "\73", "\141", "\133", "\135", "\174\174", "\46\46", "\75", "\41\75", 
-"\74", "\76", "\74\75", "\76\75", "\53", "\55", "\57", "\41", "\136\136", null, null, 
+"\51", "\54", "\73", "\141", "\141\52", "\141\53", "\133", "\135", "\174\174", 
+"\46\46", "\75", "\41\75", "\74", "\76", "\74\75", "\76\75", "\53", "\55", "\57", "\41", 
+"\136\136", null, null, null, null, null, null, null, null, null, null, null, null, null, 
 null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
-null, null, null, null, null, null, null, null, null, null, null, null, null, null, 
-null, null, null, null, };
+null, null, null, null, null, null, null, null, null, null, null, };
 public static final String[] lexStateNames = {
    "DEFAULT", 
    "IN_COMMENT", 
@@ -2325,10 +2470,10 @@
    -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, -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 = {
-   0xffffffffffffff01L, 0x30af7fc7ffL, 
+   0xffffffffffffff01L, 0xc2bdff1ffffL, 
 };
 static final long[] jjtoSkip = {
    0xbeL, 0x0L, 
@@ -2340,8 +2485,8 @@
    0x40L, 0x0L, 
 };
 protected SimpleCharStream input_stream;
-private final int[] jjrounds = new int[139];
-private final int[] jjstateSet = new int[278];
+private final int[] jjrounds = new int[154];
+private final int[] jjstateSet = new int[308];
 StringBuffer image;
 int jjimageLen;
 int lengthOfMatch;
@@ -2366,7 +2511,7 @@
 {
    int i;
    jjround = 0x80000001;
-   for (i = 139; i-- > 0;)
+   for (i = 154; i-- > 0;)
       jjrounds[i] = 0x80000000;
 }
 public void ReInit(SimpleCharStream stream, int lexState)

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/DirectTransitiveFunction.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/DirectTransitiveFunction.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/DirectTransitiveFunction.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -193,6 +193,9 @@
     // set up given statement for inferences
     LiteralTuples given = new LiteralTuples(new Variable[] {tmpVariable});
 
+    // if there is a zero step, then start with the value
+    if (constraint.isZeroStep()) inferredResult.appendTuple(new long[] {value});
+
     // remember that the current value has been visited
     Set<Long> visited = new HashSet<Long>();
     visited.add(value);

Modified: trunk/src/jar/resolver/java/org/mulgara/resolver/ExhaustiveTransitiveFunction.java
===================================================================
--- trunk/src/jar/resolver/java/org/mulgara/resolver/ExhaustiveTransitiveFunction.java	2011-11-09 00:49:51 UTC (rev 2069)
+++ trunk/src/jar/resolver/java/org/mulgara/resolver/ExhaustiveTransitiveFunction.java	2011-11-09 00:51:22 UTC (rev 2070)
@@ -184,6 +184,9 @@
           logger.debug("Found tuple: subject="+subject+"; object="+object);
         }
 
+        // if using zero-step transitivity then add the subject-subject row
+        if (constraint.isZeroStep()) inferredResult.appendTuple(new long[] {subject, subject});
+
         // remember that the subject has been visited
         Set<Long> visited = new HashSet<Long>();
         visited.add(subjectL);
@@ -209,6 +212,8 @@
           if (logger.isDebugEnabled()) {
             logger.debug("Found subsequent tuple: *** object="+object);
           }
+          // if using zero-step transitivity then add the object-object row
+          if (constraint.isZeroStep()) inferredResult.appendTuple(new long[] {object, object});
         }
 
         // start inferring for the current subject, using this first set of objects



More information about the Mulgara-svn mailing list