You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2011/05/31 13:58:53 UTC

svn commit: r1129636 - in /incubator/jena/Jena2/ARQ/trunk: ./ Grammar/ src-dev/dev/ src/com/hp/hpl/jena/sparql/expr/aggregate/ src/com/hp/hpl/jena/sparql/lang/arq/ src/com/hp/hpl/jena/sparql/lang/sparql_11/ src/com/hp/hpl/jena/sparql/sse/builders/

Author: andy
Date: Tue May 31 11:58:53 2011
New Revision: 1129636

URL: http://svn.apache.org/viewvc?rev=1129636&view=rev
Log:
Syntax (not implementation) for GROUP_CONCAT(;GROUP BY)

Modified:
    incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj
    incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj
    incubator/jena/Jena2/ARQ/trunk/Grammar/sparql_11.jj
    incubator/jena/Jena2/ARQ/trunk/Q.arq
    incubator/jena/Jena2/ARQ/trunk/Q.rq
    incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java
    incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/expr/aggregate/AggregatorFactory.java
    incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java
    incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/sparql_11/SPARQLParser11.java
    incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderExpr.java

Modified: incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj (original)
+++ incubator/jena/Jena2/ARQ/trunk/Grammar/arq.jj Tue May 31 11:58:53 2011
@@ -1377,7 +1377,9 @@ Expr NotExistsFunc() : { Element el ; }
 }
 Expr Aggregate() : { Aggregator agg = null ; String sep = null ;
                      boolean distinct = false ;
-                     Expr expr = null ; ExprList a = new ExprList() ;
+                     Expr expr = null ; Expr expr2 = null ;
+                     ExprList a = new ExprList() ;
+                     ExprList ordered = new ExprList() ;
                      Token t ; }
 {
   // Count is special because of COUNT(*)
@@ -1403,14 +1405,16 @@ Expr Aggregate() : { Aggregator agg = nu
     <LPAREN>
     (t = <DISTINCT> { distinct = true ; })?
     expr = Expression() { a.add(expr) ; }
-    // Single arg version
-    (<SEMICOLON> <SEPARATOR> <EQ> sep=String())?
+       // JavcaCC 5.0 - rewriting as LL(1) didn't work - code generated was wrong
+    (LOOKAHEAD(2)
+       ( <SEMICOLON> <SEPARATOR> <EQ> sep=String()
+           (<SEMICOLON> <ORDER><BY> expr2 = Expression() { ordered.add(expr2) ; })?
+       )
+       |
+       (<SEMICOLON> <ORDER><BY> expr2 = Expression() { ordered.add(expr2) ; } )
+    )?
     <RPAREN>
-    { agg = AggregatorFactory.createGroupConcat(distinct, expr, sep) ; }
-//     (<COMMA> expr = Expression() { a.add(expr) ; } )*
-//     (<SEMICOLON> <SEPARATOR> <EQ> sep=String())?
-//     <RPAREN>
-//     { agg = AggregatorFactory.createGroupConcat(distinct, a, sep) ; }
+    { agg = AggregatorFactory.createGroupConcat(distinct, expr, sep, ordered) ; }
    )
    {
      if ( ! allowAggregatesInExpressions )

Modified: incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj (original)
+++ incubator/jena/Jena2/ARQ/trunk/Grammar/master.jj Tue May 31 11:58:53 2011
@@ -1736,7 +1736,9 @@ Expr NotExistsFunc() : { Element el ; }
 
 Expr Aggregate() : { Aggregator agg = null ; String sep = null ;
                      boolean distinct = false ;
-                     Expr expr = null ; ExprList a = new ExprList() ;
+                     Expr expr = null ;  Expr expr2 = null ;
+                     ExprList a = new ExprList() ;
+                     ExprList ordered = new ExprList() ;
                      Token t ; }
 {
   // Count is special because of COUNT(*)
@@ -1769,19 +1771,22 @@ Expr Aggregate() : { Aggregator agg = nu
     <LPAREN>
     (t = <DISTINCT> { distinct = true ; })?
     expr = Expression() { a.add(expr) ; } 
+#ifdef SPARQL_11
     // Single arg version
     (<SEMICOLON> <SEPARATOR> <EQ> sep=String())?
-#ifdef false
-    { Expr expr2 ; }
-    // Limited GROUP BY
-    (<SEMICOLON> <GROUP><BY> expr2 = Expression()
+#endif
+#ifdef ARQ
+       // JavcaCC 5.0 - rewriting as LL(1) didn't work - code generated was wrong
+    (LOOKAHEAD(2)
+       ( <SEMICOLON>  <SEPARATOR> <EQ> sep=String()
+           (<SEMICOLON> <ORDER><BY> expr2 = Expression() { ordered.add(expr2) ; })?
+       )
+       |
+       (<SEMICOLON> <ORDER><BY> expr2 = Expression() { ordered.add(expr2) ; } )
+    )?
 #endif
     <RPAREN>
-    { agg = AggregatorFactory.createGroupConcat(distinct, expr, sep) ; }
-//     (<COMMA> expr = Expression() { a.add(expr) ; } )*
-//     (<SEMICOLON> <SEPARATOR> <EQ> sep=String())?
-//     <RPAREN>
-//     { agg = AggregatorFactory.createGroupConcat(distinct, a, sep) ; }
+    { agg = AggregatorFactory.createGroupConcat(distinct, expr, sep, ordered) ; }
    )
 
    {

Modified: incubator/jena/Jena2/ARQ/trunk/Grammar/sparql_11.jj
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/Grammar/sparql_11.jj?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/Grammar/sparql_11.jj (original)
+++ incubator/jena/Jena2/ARQ/trunk/Grammar/sparql_11.jj Tue May 31 11:58:53 2011
@@ -1281,7 +1281,9 @@ Expr NotExistsFunc() : { Element el ; }
 }
 Expr Aggregate() : { Aggregator agg = null ; String sep = null ;
                      boolean distinct = false ;
-                     Expr expr = null ; ExprList a = new ExprList() ;
+                     Expr expr = null ; Expr expr2 = null ;
+                     ExprList a = new ExprList() ;
+                     ExprList ordered = new ExprList() ;
                      Token t ; }
 {
   // Count is special because of COUNT(*)
@@ -1310,11 +1312,7 @@ Expr Aggregate() : { Aggregator agg = nu
     // Single arg version
     (<SEMICOLON> <SEPARATOR> <EQ> sep=String())?
     <RPAREN>
-    { agg = AggregatorFactory.createGroupConcat(distinct, expr, sep) ; }
-//     (<COMMA> expr = Expression() { a.add(expr) ; } )*
-//     (<SEMICOLON> <SEPARATOR> <EQ> sep=String())?
-//     <RPAREN>
-//     { agg = AggregatorFactory.createGroupConcat(distinct, a, sep) ; }
+    { agg = AggregatorFactory.createGroupConcat(distinct, expr, sep, ordered) ; }
    )
    {
      if ( ! allowAggregatesInExpressions )

Modified: incubator/jena/Jena2/ARQ/trunk/Q.arq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/Q.arq?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/Q.arq (original)
+++ incubator/jena/Jena2/ARQ/trunk/Q.arq Tue May 31 11:58:53 2011
@@ -1,3 +1,4 @@
-CONSTRUCT 
-FROM <D.ttl>
-WHERE { ?s ?p ?o }
+SELECT GROUP_CONCAT(?o ; ORDER BY ?p )
+{
+  ?s ?p ?o
+} GROUP BY ?o
\ No newline at end of file

Modified: incubator/jena/Jena2/ARQ/trunk/Q.rq
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/Q.rq?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/Q.rq (original)
+++ incubator/jena/Jena2/ARQ/trunk/Q.rq Tue May 31 11:58:53 2011
@@ -1,7 +1,4 @@
-PREFIX : <http://example/>
-
-SELECT (count(?x) AS ?C) 
+SELECT (GROUP_CONCAT(?o ; SEPARATOR = ":" ) AS ?c)
 {
-   ?z a :foo 
-   OPTIONAL { ?z :p ?x }   
-}
\ No newline at end of file
+  ?s ?p ?o
+} GROUP BY ?o
\ No newline at end of file

Modified: incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src-dev/dev/RunARQ.java Tue May 31 11:58:53 2011
@@ -110,6 +110,8 @@ public class RunARQ
 
     public static void main(String[] argv) throws Exception
     {
+        arq.qparse.main("--file=Q.arq") ; exit(0) ;
+        
         String x = StrUtils.strjoinNL("(join",
                                       //"  (conditional",
                                       "  (leftjoin",

Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/expr/aggregate/AggregatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/expr/aggregate/AggregatorFactory.java?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/expr/aggregate/AggregatorFactory.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/expr/aggregate/AggregatorFactory.java Tue May 31 11:58:53 2011
@@ -8,6 +8,9 @@
 package com.hp.hpl.jena.sparql.expr.aggregate;
 
 import com.hp.hpl.jena.sparql.expr.Expr ;
+import com.hp.hpl.jena.sparql.expr.ExprList ;
+
+import org.openjena.atlas.lib.NotImplemented ;
 import org.openjena.atlas.logging.Log ;
 
 public class AggregatorFactory
@@ -48,8 +51,10 @@ public class AggregatorFactory
         return distinct ? new AggSampleDistinct(expr) : new AggSample(expr) ;
     }
     
-    public static Aggregator createGroupConcat(boolean distinct, Expr expr, String separator)
+    public static Aggregator createGroupConcat(boolean distinct, Expr expr, String separator, ExprList orderedBy)
     { 
+        if ( orderedBy != null && ! orderedBy.isEmpty())
+            throw new NotImplemented("GROUP_CONCAT / ORDER BY not implemented yet") ;        
         return distinct ? new AggGroupConcatDistinct(expr, separator) : new AggGroupConcat(expr, separator) ;
     }
     

Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/arq/ARQParser.java Tue May 31 11:58:53 2011
@@ -4582,7 +4582,9 @@ public class ARQParser extends ARQParser
   final public Expr Aggregate() throws ParseException {
                      Aggregator agg = null ; String sep = null ;
                      boolean distinct = false ;
-                     Expr expr = null ; ExprList a = new ExprList() ;
+                     Expr expr = null ; Expr expr2 = null ;
+                     ExprList a = new ExprList() ;
+                     ExprList ordered = new ExprList() ;
                      Token t ;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COUNT:
@@ -4790,20 +4792,48 @@ public class ARQParser extends ARQParser
                           a.add(expr) ;
       switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
       case SEMICOLON:
-        jj_consume_token(SEMICOLON);
-        jj_consume_token(SEPARATOR);
-        jj_consume_token(EQ);
-        sep = String();
+        if (jj_2_3(2)) {
+          jj_consume_token(SEMICOLON);
+          jj_consume_token(SEPARATOR);
+          jj_consume_token(EQ);
+          sep = String();
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case SEMICOLON:
+            jj_consume_token(SEMICOLON);
+            jj_consume_token(ORDER);
+            jj_consume_token(BY);
+            expr2 = Expression();
+                                                           ordered.add(expr2) ;
+            break;
+          default:
+            jj_la1[155] = jj_gen;
+            ;
+          }
+        } else {
+          switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
+          case SEMICOLON:
+            jj_consume_token(SEMICOLON);
+            jj_consume_token(ORDER);
+            jj_consume_token(BY);
+            expr2 = Expression();
+                                                       ordered.add(expr2) ;
+            break;
+          default:
+            jj_la1[156] = jj_gen;
+            jj_consume_token(-1);
+            throw new ParseException();
+          }
+        }
         break;
       default:
-        jj_la1[155] = jj_gen;
+        jj_la1[157] = jj_gen;
         ;
       }
       jj_consume_token(RPAREN);
-      agg = AggregatorFactory.createGroupConcat(distinct, expr, sep) ;
+      agg = AggregatorFactory.createGroupConcat(distinct, expr, sep, ordered) ;
       break;
     default:
-      jj_la1[156] = jj_gen;
+      jj_la1[158] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4829,7 +4859,7 @@ public class ARQParser extends ARQParser
       a = ArgList();
       break;
     default:
-      jj_la1[157] = jj_gen;
+      jj_la1[159] = jj_gen;
       ;
     }
     if ( a == null )
@@ -4849,7 +4879,7 @@ public class ARQParser extends ARQParser
       a = ExpressionList();
       break;
     default:
-      jj_la1[158] = jj_gen;
+      jj_la1[160] = jj_gen;
       ;
     }
     if ( a == null ) {if (true) return ev ;}
@@ -4874,13 +4904,13 @@ public class ARQParser extends ARQParser
         uri = IRIref();
         break;
       default:
-        jj_la1[159] = jj_gen;
+        jj_la1[161] = jj_gen;
         jj_consume_token(-1);
         throw new ParseException();
       }
       break;
     default:
-      jj_la1[160] = jj_gen;
+      jj_la1[162] = jj_gen;
       ;
     }
       {if (true) return createLiteral(lex, lang, uri) ;}
@@ -4906,7 +4936,7 @@ public class ARQParser extends ARQParser
       n = NumericLiteralNegative();
       break;
     default:
-      jj_la1[161] = jj_gen;
+      jj_la1[163] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4930,7 +4960,7 @@ public class ARQParser extends ARQParser
                  {if (true) return createLiteralDouble(t.image) ;}
       break;
     default:
-      jj_la1[162] = jj_gen;
+      jj_la1[164] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4953,7 +4983,7 @@ public class ARQParser extends ARQParser
                           {if (true) return createLiteralDouble(t.image) ;}
       break;
     default:
-      jj_la1[163] = jj_gen;
+      jj_la1[165] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4976,7 +5006,7 @@ public class ARQParser extends ARQParser
                           {if (true) return createLiteralDouble(t.image) ;}
       break;
     default:
-      jj_la1[164] = jj_gen;
+      jj_la1[166] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -4994,7 +5024,7 @@ public class ARQParser extends ARQParser
             {if (true) return XSD_FALSE ;}
       break;
     default:
-      jj_la1[165] = jj_gen;
+      jj_la1[167] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5021,7 +5051,7 @@ public class ARQParser extends ARQParser
                                  lex = stripQuotes3(t.image) ;
       break;
     default:
-      jj_la1[166] = jj_gen;
+      jj_la1[168] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5043,7 +5073,7 @@ public class ARQParser extends ARQParser
                          {if (true) return iri ;}
       break;
     default:
-      jj_la1[167] = jj_gen;
+      jj_la1[169] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5062,7 +5092,7 @@ public class ARQParser extends ARQParser
       {if (true) return resolvePName(t.image, t.beginLine, t.beginColumn) ;}
       break;
     default:
-      jj_la1[168] = jj_gen;
+      jj_la1[170] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5082,7 +5112,7 @@ public class ARQParser extends ARQParser
                {if (true) return createBNode(t.beginLine, t.beginColumn) ;}
       break;
     default:
-      jj_la1[169] = jj_gen;
+      jj_la1[171] = jj_gen;
       jj_consume_token(-1);
       throw new ParseException();
     }
@@ -5110,6 +5140,23 @@ public class ARQParser extends ARQParser
     finally { jj_save(1, xla); }
   }
 
+  private boolean jj_2_3(int xla) {
+    jj_la = xla; jj_lastpos = jj_scanpos = token;
+    try { return !jj_3_3(); }
+    catch(LookaheadSuccess ls) { return true; }
+    finally { jj_save(2, xla); }
+  }
+
+  private boolean jj_3R_77() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_85()) {
+    jj_scanpos = xsp;
+    if (jj_3R_86()) return true;
+    }
+    return false;
+  }
+
   private boolean jj_3R_46() {
     Token xsp;
     xsp = jj_scanpos;
@@ -5125,23 +5172,13 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_85() {
-    if (jj_scan_token(PNAME_LN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_77() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_85()) {
-    jj_scanpos = xsp;
-    if (jj_3R_86()) return true;
-    }
+  private boolean jj_3R_67() {
+    if (jj_3R_77()) return true;
     return false;
   }
 
-  private boolean jj_3R_67() {
-    if (jj_3R_77()) return true;
+  private boolean jj_3R_66() {
+    if (jj_3R_76()) return true;
     return false;
   }
 
@@ -5155,13 +5192,9 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_66() {
-    if (jj_3R_76()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_44() {
-    if (jj_3R_46()) return true;
+  private boolean jj_3_3() {
+    if (jj_scan_token(SEMICOLON)) return true;
+    if (jj_scan_token(SEPARATOR)) return true;
     return false;
   }
 
@@ -5170,29 +5203,13 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_42() {
-    if (jj_scan_token(GROUP_CONCAT)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
   private boolean jj_3R_80() {
     if (jj_scan_token(STRING_LITERAL_LONG1)) return true;
     return false;
   }
 
-  private boolean jj_3R_43() {
-    if (jj_3R_45()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_35() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_43()) {
-    jj_scanpos = xsp;
-    if (jj_3R_44()) return true;
-    }
+  private boolean jj_3R_44() {
+    if (jj_3R_46()) return true;
     return false;
   }
 
@@ -5201,8 +5218,8 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_41() {
-    if (jj_scan_token(SAMPLE)) return true;
+  private boolean jj_3R_42() {
+    if (jj_scan_token(GROUP_CONCAT)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
@@ -5212,8 +5229,8 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_40() {
-    if (jj_scan_token(AVG)) return true;
+  private boolean jj_3R_41() {
+    if (jj_scan_token(SAMPLE)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
@@ -5234,20 +5251,29 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3_2() {
-    if (jj_scan_token(DOT)) return true;
-    if (jj_3R_35()) return true;
+  private boolean jj_3R_43() {
+    if (jj_3R_45()) return true;
     return false;
   }
 
-  private boolean jj_3R_39() {
-    if (jj_scan_token(MAX)) return true;
+  private boolean jj_3R_35() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_43()) {
+    jj_scanpos = xsp;
+    if (jj_3R_44()) return true;
+    }
+    return false;
+  }
+
+  private boolean jj_3R_40() {
+    if (jj_scan_token(AVG)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_38() {
-    if (jj_scan_token(MIN)) return true;
+  private boolean jj_3R_39() {
+    if (jj_scan_token(MAX)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
@@ -5257,13 +5283,14 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_60() {
-    if (jj_scan_token(NIL)) return true;
+  private boolean jj_3_2() {
+    if (jj_scan_token(DOT)) return true;
+    if (jj_3R_35()) return true;
     return false;
   }
 
-  private boolean jj_3R_37() {
-    if (jj_scan_token(SUM)) return true;
+  private boolean jj_3R_38() {
+    if (jj_scan_token(MIN)) return true;
     if (jj_scan_token(LPAREN)) return true;
     return false;
   }
@@ -5283,11 +5310,50 @@ public class ARQParser extends ARQParser
     return false;
   }
 
+  private boolean jj_3R_37() {
+    if (jj_scan_token(SUM)) return true;
+    if (jj_scan_token(LPAREN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_60() {
+    if (jj_scan_token(NIL)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_95() {
+    if (jj_scan_token(DOUBLE_NEGATIVE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_94() {
+    if (jj_scan_token(DECIMAL_NEGATIVE)) return true;
+    return false;
+  }
+
   private boolean jj_3R_59() {
     if (jj_3R_65()) return true;
     return false;
   }
 
+  private boolean jj_3R_93() {
+    if (jj_scan_token(INTEGER_NEGATIVE)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_84() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_93()) {
+    jj_scanpos = xsp;
+    if (jj_3R_94()) {
+    jj_scanpos = xsp;
+    if (jj_3R_95()) return true;
+    }
+    }
+    return false;
+  }
+
   private boolean jj_3R_58() {
     if (jj_3R_64()) return true;
     return false;
@@ -5298,18 +5364,14 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_95() {
-    if (jj_scan_token(DOUBLE_NEGATIVE)) return true;
-    return false;
-  }
-
   private boolean jj_3R_56() {
     if (jj_3R_62()) return true;
     return false;
   }
 
-  private boolean jj_3R_94() {
-    if (jj_scan_token(DECIMAL_NEGATIVE)) return true;
+  private boolean jj_3R_36() {
+    if (jj_scan_token(COUNT)) return true;
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
@@ -5340,42 +5402,8 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_93() {
-    if (jj_scan_token(INTEGER_NEGATIVE)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_84() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_93()) {
-    jj_scanpos = xsp;
-    if (jj_3R_94()) {
-    jj_scanpos = xsp;
-    if (jj_3R_95()) return true;
-    }
-    }
-    return false;
-  }
-
-  private boolean jj_3R_36() {
-    if (jj_scan_token(COUNT)) return true;
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
-  private boolean jj_3R_48() {
-    if (jj_3R_52()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_51() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_scan_token(13)) {
-    jj_scanpos = xsp;
-    if (jj_scan_token(14)) return true;
-    }
+  private boolean jj_3R_92() {
+    if (jj_scan_token(DOUBLE_POSITIVE)) return true;
     return false;
   }
 
@@ -5404,13 +5432,13 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_92() {
-    if (jj_scan_token(DOUBLE_POSITIVE)) return true;
+  private boolean jj_3R_91() {
+    if (jj_scan_token(DECIMAL_POSITIVE)) return true;
     return false;
   }
 
-  private boolean jj_3R_91() {
-    if (jj_scan_token(DECIMAL_POSITIVE)) return true;
+  private boolean jj_3R_48() {
+    if (jj_3R_52()) return true;
     return false;
   }
 
@@ -5432,6 +5460,16 @@ public class ARQParser extends ARQParser
     return false;
   }
 
+  private boolean jj_3R_51() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_scan_token(13)) {
+    jj_scanpos = xsp;
+    if (jj_scan_token(14)) return true;
+    }
+    return false;
+  }
+
   private boolean jj_3R_89() {
     if (jj_scan_token(DOUBLE)) return true;
     return false;
@@ -5460,21 +5498,6 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_47() {
-    if (jj_3R_51()) return true;
-    return false;
-  }
-
-  private boolean jj_3R_45() {
-    Token xsp;
-    xsp = jj_scanpos;
-    if (jj_3R_47()) {
-    jj_scanpos = xsp;
-    if (jj_3R_48()) return true;
-    }
-    return false;
-  }
-
   private boolean jj_3R_71() {
     if (jj_3R_84()) return true;
     return false;
@@ -5485,11 +5508,26 @@ public class ARQParser extends ARQParser
     return false;
   }
 
+  private boolean jj_3R_47() {
+    if (jj_3R_51()) return true;
+    return false;
+  }
+
   private boolean jj_3R_69() {
     if (jj_3R_82()) return true;
     return false;
   }
 
+  private boolean jj_3R_45() {
+    Token xsp;
+    xsp = jj_scanpos;
+    if (jj_3R_47()) {
+    jj_scanpos = xsp;
+    if (jj_3R_48()) return true;
+    }
+    return false;
+  }
+
   private boolean jj_3R_63() {
     Token xsp;
     xsp = jj_scanpos;
@@ -5513,23 +5551,18 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_53() {
-    if (jj_scan_token(LPAREN)) return true;
-    return false;
-  }
-
   private boolean jj_3R_76() {
     if (jj_scan_token(IRIref)) return true;
     return false;
   }
 
-  private boolean jj_3R_75() {
-    if (jj_scan_token(ANON)) return true;
+  private boolean jj_3R_53() {
+    if (jj_scan_token(LPAREN)) return true;
     return false;
   }
 
-  private boolean jj_3R_54() {
-    if (jj_scan_token(LBRACKET)) return true;
+  private boolean jj_3R_75() {
+    if (jj_scan_token(ANON)) return true;
     return false;
   }
 
@@ -5548,8 +5581,8 @@ public class ARQParser extends ARQParser
     return false;
   }
 
-  private boolean jj_3R_50() {
-    if (jj_3R_54()) return true;
+  private boolean jj_3R_54() {
+    if (jj_scan_token(LBRACKET)) return true;
     return false;
   }
 
@@ -5558,6 +5591,16 @@ public class ARQParser extends ARQParser
     return false;
   }
 
+  private boolean jj_3R_85() {
+    if (jj_scan_token(PNAME_LN)) return true;
+    return false;
+  }
+
+  private boolean jj_3R_50() {
+    if (jj_3R_54()) return true;
+    return false;
+  }
+
   /** Generated Token Manager. */
   public ARQParserTokenManager token_source;
   JavaCharStream jj_input_stream;
@@ -5569,7 +5612,7 @@ public class ARQParser extends ARQParser
   private Token jj_scanpos, jj_lastpos;
   private int jj_la;
   private int jj_gen;
-  final private int[] jj_la1 = new int[170];
+  final private int[] jj_la1 = new int[172];
   static private int[] jj_la1_0;
   static private int[] jj_la1_1;
   static private int[] jj_la1_2;
@@ -5587,27 +5630,27 @@ public class ARQParser extends ARQParser
       jj_la1_init_6();
    }
    private static void jj_la1_init_0() {
-      jj_la1_0 = new int[] {0x7200000,0x180000,0x180000,0x0,0xc00000,0xc00000,0xe00,0x0,0x6e00,0x6e00,0x6e00,0x0,0x0,0x7e00,0x0,0x6e00,0x6e00,0x0,0x0,0x0,0xe00,0x0,0x0,0x0,0x20000000,0x18000000,0x6e00,0x0,0x6e00,0xe00,0x6e00,0x0,0x6e00,0x6e00,0x10000000,0x8000000,0x18000000,0x6000,0x0,0xe00,0x0,0x80000000,0xe00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe00,0x0,0x0,0x0,0xe00,0x0,0xe00,0xe00,0x0,0xe00,0x0,0x0,0x7e00,0x0,0x0,0x7e00,0x7e00,0x7e00,0x0,0x200000,0x7e00,0x0,0x0,0x7e00,0x7e00,0x0,0x0,0x0,0x0,0xe00,0x400000,0x0,0x0,0x0,0x0,0x7e00,0x0,0x7e00,0x0,0x46e00,0x46e00,0x0,0x46e00,0x7e00,0x46e00,0x0,0x46e00,0x46e00,0x46e00,0x0,0x0,0x0,0x0,0x40e00,0x0,0x0,0x0,0x0,0x40e00,0x0,0x40e00,0x40e00,0x40e00,0x40e00,0x0,0x7e00,0x7e00,0x7e00,0x6e00,0x6000,0x1e00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6e00,0x6e00,0x0,0x0,0x0,0x0,0x400000,0x6e00,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x0,0x0,0x0,0x0,0x8000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,0xe00,0x
 c00,0x1000,};
+      jj_la1_0 = new int[] {0x7200000,0x180000,0x180000,0x0,0xc00000,0xc00000,0xe00,0x0,0x6e00,0x6e00,0x6e00,0x0,0x0,0x7e00,0x0,0x6e00,0x6e00,0x0,0x0,0x0,0xe00,0x0,0x0,0x0,0x20000000,0x18000000,0x6e00,0x0,0x6e00,0xe00,0x6e00,0x0,0x6e00,0x6e00,0x10000000,0x8000000,0x18000000,0x6000,0x0,0xe00,0x0,0x80000000,0xe00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xe00,0x0,0x0,0x0,0xe00,0x0,0xe00,0xe00,0x0,0xe00,0x0,0x0,0x7e00,0x0,0x0,0x7e00,0x7e00,0x7e00,0x0,0x200000,0x7e00,0x0,0x0,0x7e00,0x7e00,0x0,0x0,0x0,0x0,0xe00,0x400000,0x0,0x0,0x0,0x0,0x7e00,0x0,0x7e00,0x0,0x46e00,0x46e00,0x0,0x46e00,0x7e00,0x46e00,0x0,0x46e00,0x46e00,0x46e00,0x0,0x0,0x0,0x0,0x40e00,0x0,0x0,0x0,0x0,0x40e00,0x0,0x40e00,0x40e00,0x40e00,0x40e00,0x0,0x7e00,0x7e00,0x7e00,0x6e00,0x6000,0x1e00,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x6e00,0x6e00,0x0,0x0,0x0,0x0,0x400000,0x6e00,0x400000,0x400000,0x400000,0x400000,0x400000,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x8000,0x8000,0x0,0x0,0x0,0x0,0x0,0x0,
 0xe00,0xc00,0x1000,};
    }
    private static void jj_la1_init_1() {
-      jj_la1_1 = new int[] {0x0,0x0,0x0,0x10,0x0,0x0,0x80018000,0x20000,0xb7c18000,0xb7c18000,0xb7c18000,0x10,0x10,0x0,0x30,0x0,0x0,0x10,0x20,0x10,0x8,0x20,0x40000,0x80000,0x0,0x0,0x80018000,0x20000,0x80018000,0x80018000,0x80018006,0x6,0x80018000,0x80018006,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x8,0x80,0x80,0x88,0x88,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4001fd80,0x0,0x0,0x0,0x0,0x4001fd80,0x0,0x200,0x80018000,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,0x10000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb7c18000,0xb7c18000,0x0,0x80018000,0x0,0x0,0x0,0xb7c18000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x37c00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_1 = new int[] {0x0,0x0,0x0,0x10,0x0,0x0,0x80018000,0x20000,0xb7c18000,0xb7c18000,0xb7c18000,0x10,0x10,0x0,0x30,0x0,0x0,0x10,0x20,0x10,0x8,0x20,0x40000,0x80000,0x0,0x0,0x80018000,0x20000,0x80018000,0x80018000,0x80018006,0x6,0x80018000,0x80018006,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,0x10,0x8,0x80,0x80,0x88,0x88,0x0,0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x4001fd80,0x0,0x0,0x0,0x0,0x4001fd80,0x0,0x200,0x80018000,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,0x10000,0x10000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xb7c18000,0xb7c18000,0x0,0x80018000,0x0,0x0,0x0,0xb7c18000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x37c00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_2() {
-      jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0xffffffbd,0x0,0xffffffbd,0xffffffbd,0xffffffbd,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffbd,0x0,0xffffffbd,0xffffffbd,0xffffffbd,0x0,0xffffffbd,0xffffffbd,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,0xffffffbd,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,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffbd,0xffffffbd,0x0,0xffffffbd,0x0,0x0,0x0,0xffffffbd,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_2 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0xffffffbd,0x0,0xffffffbd,0xffffffbd,0xffffffbd,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffbd,0x0,0xffffffbd,0xffffffbd,0xffffffbd,0x0,0xffffffbd,0xffffffbd,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,0xffffffbd,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,0x2,0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0xffffffbd,0xffffffbd,0x0,0xffffffbd,0x0,0x0,0x0,0xffffffbd,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_3() {
-      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x1fefff,0x0,0x1fefff,0x1fefff,0x1fefff,0x0,0x0,0x180000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7efff,0x0,0x7efff,0x7efff,0x7efff,0x0,0x7efff,0x7efff,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x180000,0x0,0xffc00000,0xffc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0xc00000,0x0,0x0,0x800000,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x180000,0x180000,0x180000,0x0,0x0,0x180000,0x0,0x0,0x180000,0x180000,0x0,0x0,0x0,0x0,0x7efff,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x180000,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x180000,0x180000,0x0,0x0,0x180000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1fefff,0x1fefff,0x0,0x7efff,0x0,0x0,0x0,0x1fefff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x0,0x0,};
+      jj_la1_3 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x1fefff,0x0,0x1fefff,0x1fefff,0x1fefff,0x0,0x0,0x180000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x7efff,0x0,0x7efff,0x7efff,0x7efff,0x0,0x7efff,0x7efff,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x180000,0x0,0xffc00000,0xffc00000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x400000,0xc00000,0x0,0x0,0x800000,0x400000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x180000,0x180000,0x180000,0x0,0x0,0x180000,0x0,0x0,0x180000,0x180000,0x0,0x0,0x0,0x0,0x7efff,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x180000,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x180000,0x180000,0x0,0x0,0x180000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x1fefff,0x1fefff,0x0,0x7efff,0x0,0x0,0x0,0x1fefff,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x180000,0x0,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_4() {
-      jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x1e1ff000,0x0,0x3e1ff000,0x3e1ff000,0x3e1ff000,0x0,0x0,0xbe1ff000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0x20000000,0x20000000,0x20000000,0x0,0x20000000,0x20000000,0x0,0x0,0x0,0x0,0xa0000000,0x1e1ff000,0xa0000000,0x0,0x1e1ff000,0x0,0x213,0x213,0x8,0x0,0x20,0x8,0x8,0x8,0x8,0x8,0x8,0x200,0x0,0x0,0x400,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x0,0x80,0x180,0x180,0xbe1ff000,0x0,0x0,0xbe1ff000,0xbe1ff000,0xbe1ff000,0x0,0x0,0xbe1ff000,0x0,0x0,0xbe1ff000,0xbe1ff000,0x0,0x0,0x8,0x0,0x20000000,0x0,0x0,0xa0000000,0x0,0xa0000000,0xbe1ff000,0x0,0xbe1ff000,0x0,0x0,0x0,0x0,0x0,0xbe1ff000,0x20000000,0x0,0x20000000,0x20000000,0x0,0x0,0x0,0x0,0x0,0x20000000,0x1000,0x0,0x1000,0x0,0x20000000,0x0,0x0,0x20000000,0x0,0x0,0x20000000,0xbe1ff000,0xbe1ff000,0x9e1ff000,0x0,0x0,0x9e1ff000,0x0,0x0,0x0,0x0,0x1f8000,0x1f8000,0x0,0x0,0x1f8000,0x0,0x0,0x3e1ff000,0x3e1ff000,0xa0000000,0x0,0x0,0x0,0x0,0x3e1ff000,0x0,0x0,0x0,0x0,0x0,0x0,0x0
 ,0x0,0xa0000000,0xa0000000,0x0,0x0,0x1ff000,0x7000,0x38000,0x1c0000,0x0,0x1e000000,0x0,0x0,0x0,};
+      jj_la1_4 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x1e1ff000,0x0,0x3e1ff000,0x3e1ff000,0x3e1ff000,0x0,0x0,0xbe1ff000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20000000,0x0,0x20000000,0x20000000,0x20000000,0x0,0x20000000,0x20000000,0x0,0x0,0x0,0x0,0xa0000000,0x1e1ff000,0xa0000000,0x0,0x1e1ff000,0x0,0x213,0x213,0x8,0x0,0x20,0x8,0x8,0x8,0x8,0x8,0x8,0x200,0x0,0x0,0x400,0x0,0x0,0x0,0x20,0x20,0x0,0x0,0x0,0x0,0x80,0x180,0x180,0xbe1ff000,0x0,0x0,0xbe1ff000,0xbe1ff000,0xbe1ff000,0x0,0x0,0xbe1ff000,0x0,0x0,0xbe1ff000,0xbe1ff000,0x0,0x0,0x8,0x0,0x20000000,0x0,0x0,0xa0000000,0x0,0xa0000000,0xbe1ff000,0x0,0xbe1ff000,0x0,0x0,0x0,0x0,0x0,0xbe1ff000,0x20000000,0x0,0x20000000,0x20000000,0x0,0x0,0x0,0x0,0x0,0x20000000,0x1000,0x0,0x1000,0x0,0x20000000,0x0,0x0,0x20000000,0x0,0x0,0x20000000,0xbe1ff000,0xbe1ff000,0x9e1ff000,0x0,0x0,0x9e1ff000,0x0,0x0,0x0,0x0,0x1f8000,0x1f8000,0x0,0x0,0x1f8000,0x0,0x0,0x3e1ff000,0x3e1ff000,0xa0000000,0x0,0x0,0x0,0x0,0x3e1ff000,0x0,0x0,0x0,0x0,0x0,0x0,0x0
 ,0x0,0x0,0x0,0xa0000000,0xa0000000,0x0,0x0,0x1ff000,0x7000,0x38000,0x1c0000,0x0,0x1e000000,0x0,0x0,0x0,};
    }
    private static void jj_la1_init_5() {
-      jj_la1_5 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x0,0x14,0x1,0x0,0x200000,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,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,0x14,0x0,0x80,0x14,0x14,0x14,0x80,0x0,0x14,0x1,0x80,0x14,0x14,0x80,0x1,0x0,0x0,0x0,0x0,0x40,0x0,0x40,0x0,0x14,0x80,0x14,0x20,0x0,0x0,0x40,0x0,0x14,0x8004000,0x20,0x8004000,0x8004000,0x0,0x4000000,0x8400000,0x8400000,0x40280001,0x8004000,0x2,0x42,0x40,0x40280001,0x4000,0x4000000,0x8000000,0x8000000,0x0,0x8000000,0x4,0x14,0x14,0x10,0x0,0x0,0x10,0x20000,0x40000,0x3f00,0x3f00,0x180000,0x0,0x600000,0x600000,0x180000,0x600000,0x600000,0x184000,0x0,0x0,0x0,0x40,0x40,0x0,0x384000,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x0,0x0,0x0,0x800000,0x800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,};
+      jj_la1_5 = new int[] {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x200000,0x0,0x0,0x14,0x1,0x0,0x200000,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x20,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,0x14,0x0,0x80,0x14,0x14,0x14,0x80,0x0,0x14,0x1,0x80,0x14,0x14,0x80,0x1,0x0,0x0,0x0,0x0,0x40,0x0,0x40,0x0,0x14,0x80,0x14,0x20,0x0,0x0,0x40,0x0,0x14,0x8004000,0x20,0x8004000,0x8004000,0x0,0x4000000,0x8400000,0x8400000,0x40280001,0x8004000,0x2,0x42,0x40,0x40280001,0x4000,0x4000000,0x8000000,0x8000000,0x0,0x8000000,0x4,0x14,0x14,0x10,0x0,0x0,0x10,0x20000,0x40000,0x3f00,0x3f00,0x180000,0x0,0x600000,0x600000,0x180000,0x600000,0x600000,0x184000,0x0,0x0,0x0,0x40,0x40,0x0,0x384000,0x0,0x0,0x0,0x0,0x0,0x0,0x20,0x20,0x20,0x0,0x0,0x0,0x800000,0x800000,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x10,};
    }
    private static void jj_la1_init_6() {
-      jj_la1_6 = 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,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,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
+      jj_la1_6 = 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,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,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,};
    }
-  final private JJCalls[] jj_2_rtns = new JJCalls[2];
+  final private JJCalls[] jj_2_rtns = new JJCalls[3];
   private boolean jj_rescan = false;
   private int jj_gc = 0;
 
@@ -5622,7 +5665,7 @@ public class ARQParser extends ARQParser
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 170; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 172; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -5637,7 +5680,7 @@ public class ARQParser extends ARQParser
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 170; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 172; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -5648,7 +5691,7 @@ public class ARQParser extends ARQParser
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 170; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 172; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -5659,7 +5702,7 @@ public class ARQParser extends ARQParser
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 170; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 172; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -5669,7 +5712,7 @@ public class ARQParser extends ARQParser
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 170; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 172; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -5679,7 +5722,7 @@ public class ARQParser extends ARQParser
     token = new Token();
     jj_ntk = -1;
     jj_gen = 0;
-    for (int i = 0; i < 170; i++) jj_la1[i] = -1;
+    for (int i = 0; i < 172; i++) jj_la1[i] = -1;
     for (int i = 0; i < jj_2_rtns.length; i++) jj_2_rtns[i] = new JJCalls();
   }
 
@@ -5796,7 +5839,7 @@ public class ARQParser extends ARQParser
       la1tokens[jj_kind] = true;
       jj_kind = -1;
     }
-    for (int i = 0; i < 170; i++) {
+    for (int i = 0; i < 172; i++) {
       if (jj_la1[i] == jj_gen) {
         for (int j = 0; j < 32; j++) {
           if ((jj_la1_0[i] & (1<<j)) != 0) {
@@ -5850,7 +5893,7 @@ public class ARQParser extends ARQParser
 
   private void jj_rescan_token() {
     jj_rescan = true;
-    for (int i = 0; i < 2; i++) {
+    for (int i = 0; i < 3; i++) {
     try {
       JJCalls p = jj_2_rtns[i];
       do {
@@ -5859,6 +5902,7 @@ public class ARQParser extends ARQParser
           switch (i) {
             case 0: jj_3_1(); break;
             case 1: jj_3_2(); break;
+            case 2: jj_3_3(); break;
           }
         }
         p = p.next;

Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/sparql_11/SPARQLParser11.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/sparql_11/SPARQLParser11.java?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/sparql_11/SPARQLParser11.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/lang/sparql_11/SPARQLParser11.java Tue May 31 11:58:53 2011
@@ -4066,7 +4066,9 @@ public class SPARQLParser11 extends SPAR
   final public Expr Aggregate() throws ParseException {
                      Aggregator agg = null ; String sep = null ;
                      boolean distinct = false ;
-                     Expr expr = null ; ExprList a = new ExprList() ;
+                     Expr expr = null ; Expr expr2 = null ;
+                     ExprList a = new ExprList() ;
+                     ExprList ordered = new ExprList() ;
                      Token t ;
     switch ((jj_ntk==-1)?jj_ntk():jj_ntk) {
     case COUNT:
@@ -4283,7 +4285,7 @@ public class SPARQLParser11 extends SPAR
         ;
       }
       jj_consume_token(RPAREN);
-      agg = AggregatorFactory.createGroupConcat(distinct, expr, sep) ;
+      agg = AggregatorFactory.createGroupConcat(distinct, expr, sep, ordered) ;
       break;
     default:
       jj_la1[145] = jj_gen;

Modified: incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderExpr.java
URL: http://svn.apache.org/viewvc/incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderExpr.java?rev=1129636&r1=1129635&r2=1129636&view=diff
==============================================================================
--- incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderExpr.java (original)
+++ incubator/jena/Jena2/ARQ/trunk/src/com/hp/hpl/jena/sparql/sse/builders/BuilderExpr.java Tue May 31 11:58:53 2011
@@ -1154,6 +1154,7 @@ public class BuilderExpr
             String separator = null ;
             if ( x.get(0).isTagged(Tags.tagSeparator))
             {
+                // What about ORDERED BY
                 ItemList y = x.get(0).getList() ;
                 BuilderLib.checkLength(2, y, "Broken syntax: "+list) ;
                 Node n = y.get(1).getNode() ;
@@ -1164,7 +1165,7 @@ public class BuilderExpr
             }
             
             Expr expr = buildExpr(x.get(0)) ;
-            Aggregator agg = AggregatorFactory.createGroupConcat(distinct, expr, separator) ;
+            Aggregator agg = AggregatorFactory.createGroupConcat(distinct, expr, separator, null) ;
             return new ExprAggregator((Var)null, agg) ; 
         }
     };