[Mulgara-svn] r591 - in branches/mgr-61-sparql: . src/jar src/jar/sparql src/jar/sparql/grammar

pag at mulgara.org pag at mulgara.org
Mon Dec 3 04:53:47 UTC 2007


Author: pag
Date: 2007-12-02 22:53:46 -0600 (Sun, 02 Dec 2007)
New Revision: 591

Added:
   branches/mgr-61-sparql/src/jar/sparql/
   branches/mgr-61-sparql/src/jar/sparql/build.xml
   branches/mgr-61-sparql/src/jar/sparql/grammar/
   branches/mgr-61-sparql/src/jar/sparql/grammar/expr.flex
   branches/mgr-61-sparql/src/jar/sparql/grammar/expr.grammar
   branches/mgr-61-sparql/src/jar/sparql/sparql-build.properties
Modified:
   branches/mgr-61-sparql/build.properties
   branches/mgr-61-sparql/build.xml
Log:
Initial attempt to add in Beaver/JFlex parser for SPARQL. Haven't attempted to compile yet.

Modified: branches/mgr-61-sparql/build.properties
===================================================================
--- branches/mgr-61-sparql/build.properties	2007-11-30 16:48:12 UTC (rev 590)
+++ branches/mgr-61-sparql/build.properties	2007-12-03 04:53:46 UTC (rev 591)
@@ -147,6 +147,7 @@
 xerces.jar               =xercesImpl.jar
 xmlParserAPIs.jar        =xmlParserAPIs.jar
 xom.jar                  =xom-1.0d21.jar
+beaver.jar               =beaver.jar
 
 drools-version  =2.0-beta-15
 drools-base.jar =drools-base-${drools-version}.jar

Modified: branches/mgr-61-sparql/build.xml
===================================================================
--- branches/mgr-61-sparql/build.xml	2007-11-30 16:48:12 UTC (rev 590)
+++ branches/mgr-61-sparql/build.xml	2007-12-03 04:53:46 UTC (rev 591)
@@ -28,6 +28,7 @@
   <property file="${jar.src.dir}/driver/driver-build.properties"/>
   <property file="${jar.src.dir}/dtd/dtd-build.properties"/>
   <property file="${jar.src.dir}/itql/itql-build.properties"/>
+  <property file="${jar.src.dir}/sparql/sparql-build.properties"/>
   <property file="${jar.src.dir}/jrdf/jrdf-build.properties"/>
   <property file="${jar.src.dir}/query/query-build.properties"/>
   <!--property file="${jar.src.dir}/rdql/rdql-build.properties"/-->
@@ -99,6 +100,7 @@
   <import file="${jar.src.dir}/driver/build.xml"/>
   <import file="${jar.src.dir}/dtd/build.xml"/>
   <import file="${jar.src.dir}/itql/build.xml"/>
+  <import file="${jar.src.dir}/sparql/build.xml"/>
   <import file="${jar.src.dir}/jrdf/build.xml"/>
   <import file="${jar.src.dir}/query/build.xml"/>
   <!--import file="${jar.src.dir}/rdql/build.xml"/-->
@@ -313,7 +315,7 @@
           depends="ant-task-dist,
                    client-jrdf-dist, connector-dist, connection-dist, content-mbox-dist,
                    content-mp3-dist, content-rdfxml-dist, content-rio-dist,
-                   descriptor-dist, driver-dist, dtd-dist, itql-dist, jrdf-dist,
+                   descriptor-dist, driver-dist, dtd-dist, itql-dist, sparql-dist, jrdf-dist,
                    store-dist, store-xa-dist, store-nodepool-dist,
                    store-nodepool-memory-dist,
                    store-nodepool-xa-dist, query-dist,
@@ -730,7 +732,7 @@
              ant-task-jar, client-jrdf-jar, config-jar,
              connection-jar, content-mbox-jar, content-mp3-jar,
              content-n3-jar, content-rdfxml-jar, content-rio-jar,
-             doclet.jar, itql-jar, jrdf-jar, store-jar,
+             doclet.jar, itql-jar, sparql-jar, jrdf-jar, store-jar,
              store-xa-jar, connection-jar,
              store-nodepool-jar, store-nodepool-memory-jar,
              store-nodepool-xa-jar, query-jar,
@@ -758,6 +760,7 @@
                       org.mulgara.driver.*,
                       org.mulgara.extractor.tag,
                       org.mulgara.itql,
+                      org.mulgara.sparql,
                       org.mulgara.jrdf,
                       org.mulgara.local.*,
                       org.mulgara.query.*,
@@ -812,8 +815,6 @@
       <classpath path="${lib.dir}/${jid3.jar}"/>
       <classpath path="${lib.dir}/jsr173_07_api.jar"/>
       <classpath path="${lib.dir}/${lucene.jar}"/>
-      <classpath path="${lib.dir}/krule-1.0-alpha.jar"/>
-      <classpath path="${lib.dir}/rules-1.0-alpha.jar"/>
       <classpath path="${lib.dir}/${sofa.jar}"/>
       <classpath path="${lib.dir}/xmlc-all-runtime-2.2.jar"/>
       <classpath path="${lib.dir}/xom-1.0d21.jar"/>
@@ -891,7 +892,7 @@
                    content-mp3-javadoc, content-n3-javadoc,
                    content-rdfxml-javadoc, content-rio-javadoc,
                    descriptor-javadoc, driver-javadoc, dtd-javadoc,
-                   itql-javadoc, store-javadoc, store-xa-javadoc,
+                   itql-javadoc, sparql-javadoc, store-javadoc, store-xa-javadoc,
                    store-nodepool-javadoc,
                    store-nodepool-memory-javadoc, jrdf-javadoc,
                    store-nodepool-xa-javadoc, query-javadoc,
@@ -1709,7 +1710,7 @@
              content-mbox-jar, content-mp3-jar, content-n3-jar,
              content-rdfxml-jar, content-rio-jar,
              create-manifest, demo-jar, dtd-jar, driver-jar, dtd-jar, itql-jar,
-             javadoc-dist, jrdf-jar, store-jar, store-xa-jar,
+             sparql-jar, javadoc-dist, jrdf-jar, store-jar, store-xa-jar,
              store-nodepool-jar,
              store-nodepool-memory-jar, store-nodepool-xa-jar,
              query-jar, resolver-jar, resolver-file-jar, resolver-filesystem-jar,
@@ -1786,6 +1787,7 @@
       <zipfileset src="${bin.dir}/${query.jar}" excludes="META-INF/**"/>
       <zipfileset src="${bin.dir}/${driver.jar}" excludes="META-INF/**"/>
       <zipfileset src="${bin.dir}/${itql.jar}" excludes="META-INF/**"/>
+      <zipfileset src="${bin.dir}/${sparql.jar}" excludes="META-INF/**"/>
       <zipfileset src="${bin.dir}/${rmi.jar}" excludes="META-INF/**"/>
       <zipfileset src="${bin.dir}/${server.jar}" excludes="META-INF/**"/>
       <zipfileset src="${bin.dir}/${server-beep.jar}" excludes="META-INF/**"/>
@@ -1894,26 +1896,6 @@
     <manifest file="${obj.dir}/META-INF/MANIFEST_Mulgara_BOOTSTRAP.MF">
 
       <attribute name="Main-Class" value="org.mulgara.util.Bootstrap"/>
-<!--
-<attribute name="Embedded-Jar" value="lib/${client-jrdf.jar}, lib/${client-jena.jar}, lib/${config.jar},
-lib/${content-n3.jar}, lib/${content-rdfxml.jar}, lib/${content-rio.jar}, lib/${descriptor.jar},lib/${driver.jar},
-lib/${itql.jar}, lib/${jrdf.base.jar}, lib${store-nodepool.jar},
-lib/${store-nodepool-memory.jar}, lib/${store-nodepool-xa.jar},lib/${query.jar}, lib/${resolver.jar},
-lib/${resolver-file.jar}, lib/${resolver-filesystem.jar}, lib/${resolver-http.jar}, lib/${resolver-memory.jar},
-lib/${resolver-nodetype.jar}, lib/${resolver-prefix.jar}, lib/${resolver-spi.jar}, lib/${resolver-store.jar}, lib/${resolver-jar.jar},
-lib/${resolver-view.jar}, lib/${resolver-xsd.jar}, lib/${resolver-test.jar}, lib/${resolver-url.jar}, lib/${resolver-lucene.jar}, lib/${content-mp3.jar},
-lib/${content-mbox.jar}, lib/${rmi.jar}, lib/${server.jar}, lib/${server-beep.jar},
-lib/${server-rmi.jar}, lib/${sofa.base.jar}, lib/${rules.base.jar}, lib/${krule.base.jar}, lib/${store.jar},
-lib/${store-stringpool.jar}
-lib/${store-stringpool-memory.jar}, lib/${store-stringpool-xa.jar}, lib/${tuples.jar},lib/${tuples-hybrid.jar},
-lib/${util.jar}, lib/${util-xa.jar}, lib/activation-1.0.2.jar,lib/icu4j.jar, lib/jena-2.1.jar, lib/${jid3.jar},
-lib/antlr.jar, lib/${date-utils.jar}, lib/${commons-logging.jar}, lib/beepcore-0.9.08.jar,lib/connector-1_5.jar,
-lib/${jotm.jar}, lib/${jotm_carol.jar}, lib/${jotm_iiop_stubs.jar},lib/jta-spec1_0_1.jar, lib/log4j-1.2.8.jar, lib/${lucene.jar},
-lib/mail-1.3.jar, lib/${jetty.jar},lib/${jetty.plus.jar}, lib/${jasper.runtime.jar}, lib/${jasper.compiler.jar},
-lib/${servlet.jar},lib/jargs-0.2.jar, lib/castor-0.9.3.9-xml.jar, lib/xercesImpl.jar, lib/xmlParserAPIs.jar,
-lib/trove-1.0.2.jar,lib/${jrdf.jar}, lib/${sofa.jar}, lib/${rules.jar}, lib/${krule.jar}, lib/${saaj.jar}, lib/${axis.jar}, lib/${commons-discovery.jar},
-lib/${jaxrpc.jar},lib/${wsdl4j.jar}, lib/${emory-util.jar}, lib/${httpclient.jar}"/>
--->
       <attribute name="Embedded-Main-Class" value="org.mulgara.server.EmbeddedMulgaraServer"/>
     </manifest>
   </target>
@@ -1964,8 +1946,7 @@
   </target>
 
   <target name="utils-test"
-    depends="ant-task-test, dtd-test, sofa-test, rules-test, krule-test, tag-test, util-test,
-             util-xa-test"
+    depends="ant-task-test, dtd-test, sofa-test, rules-test, krule-test, tag-test, util-test, util-xa-test"
     description="Runs miscellaneous utility tests">
   </target>
 

Added: branches/mgr-61-sparql/src/jar/sparql/build.xml
===================================================================
--- branches/mgr-61-sparql/src/jar/sparql/build.xml	2007-11-30 16:48:12 UTC (rev 590)
+++ branches/mgr-61-sparql/src/jar/sparql/build.xml	2007-12-03 04:53:46 UTC (rev 591)
@@ -0,0 +1,165 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<!DOCTYPE project>
+
+<!-- =================================================================== -->
+<!--                       Project definition                            -->
+<!-- =================================================================== -->
+<project name="sparql" default="sparql-jar" basedir="../../..">
+
+  <!-- =================================================================== -->
+  <!--                      Property Definitions                           -->
+  <!-- =================================================================== -->
+
+  <!-- =================================================================== -->
+  <!--                              Imports                                -->
+  <!-- =================================================================== -->
+
+  <!-- =================================================================== -->
+  <!--                          Path Definitions                           -->
+  <!-- =================================================================== -->
+  <path id="sparql-classpath">
+    <path refid="common-classpath"/>
+    <fileset file="${query.dist.dir}/${query.jar}"/>
+  </path>
+
+  <path id="sparql-test-classpath">
+    <path refid="sparql-classpath"/>
+  </path>
+
+  <available file="${jflex_jar}" type="file" property="jflex.file.local"/>
+
+  <target name="sparql-clean" description="Removes all compile generated files for sparql">
+    <tstamp/>
+    <delete dir="${sparql.obj.dir}"/>
+    <delete dir="${sparql.test.dir}"/>
+    <delete dir="${sparql.dist.dir}"/>
+  </target>
+
+  <target name="sparql-prepare" description="Creates all directories associated with sparql's compilation" depends="-prepare-build">
+    <mkdir dir="${sparql.obj.dir}"/>
+    <mkdir dir="${sparql.test.dir}"/>
+    <mkdir dir="${sparql.dist.dir}"/>
+    <mkdir dir="${sparql.obj.dir}/classes"/>
+    <mkdir dir="${sparql.obj.dir}/java"/>
+  </target>
+
+  <target name="download-jflex" unless="jflex.file.local" description="Gets JFlex Jar if it is not available">
+    <mkdir dir="${tmp.dir}"/>
+    <get src="jflex.location" dest="${tmp.dir}/jflex-1.4.1.zip" usetimestamp="true"/>
+    <unzip src="${tmp.dir}/jflex-1.4.1.zip" dest="${lib.dir}">
+      <patternset>
+        <include name="**/JFlex.jar"/>
+      </patternset>
+      <mapper type="flatten"/>
+    </unzip>
+  </target>
+
+  <!-- Create the JFlex task for use further down -->
+  <target name="jflextask" unless="jflex.already.available" depends="download-jflex" description="creates JFlex Ant task">
+    <taskdef name="jflex" classname="JFlex.anttask.JFlexTask" classpath="${jflex_jar}"/>
+    <property name="jflex.already.available" value="yes"/>
+  </target>
+
+  <!-- Create the Beaver task for use further down -->
+  <target name="beavertask" unless="beaver.already.available" description="creates Beaver Ant task">
+    <taskdef name="beaver" classname="beaver.comp.run.AntTask" classpath="${lib.dir}/${beaver.jar}"/>
+    <property name="beaver.already.available" value="yes"/>
+  </target>
+
+
+  <target name="sparql-parser-uptodate" depends="-prepare-build" description="Tests output files from the parser generation against the grammar to see if the parser is up to date">
+    <uptodate property="sparql-parser-uptodate" targetfile="${obj.dir}/jar/sparql/java/org/mulgara/sparql/ExpressionParser.java">
+      <srcfiles dir="${sparql.base.dir}/grammar" includes="expr.grammar,expr.flex"/>
+    </uptodate>
+  </target>
+
+
+  <target name="gen-sparql-lexer" depends="jflextask,sparql-parser-uptodate,sparql-prepare" description="Generate the SPARQL Lexer source files - output into the source arena">
+    <jflex file="${sparql.base.dir}/grammar/expr.flex" nobak="yes" destdir="${sparql.obj.dir}/java"/>
+  </target>
+
+
+  <target name="gen-sparql-parser" depends="beavertask,gen-sparql-lexer" description="Generate the SPARQL Parser source files - output into the source arena">
+    <beaver file="${sparql.base.dir}/grammar/expr.grammar" terminalNames="no" destdir="${sparql.obj.dir}/java"/>
+  </target>
+
+
+  <target name="sparql-compile" depends="gen-sparql-parser,driver-jar" description="Compiles all sparql related files included generated source code">
+    <copy todir="${sparql.obj.dir}/java/" preservelastmodified="yes">
+      <fileset dir="${sparql.src.dir}/java/" includes="**/*.java"/>
+    </copy>
+    <javac destdir="${sparql.obj.dir}/classes" debug="on" deprecation="on" source="1.5" classpathref="sparql-classpath">
+      <src path="${sparql.obj.dir}/java"/>
+    </javac>
+  </target>
+
+
+  <target name="sparql-jar-uptodate" description="Tests if the SPARQL jar file is more recent than the classes it is comprised of">
+    <uptodate property="sparql.jar.uptodate" targetfile="${sparql.dist.dir}/${sparql.jar}">
+      <srcfiles dir="${sparql.obj.dir}/classes" includes="**/*"/>
+    </uptodate>
+  </target>
+
+
+  <target name="sparql-jar" depends="sparql-compile,sparql-jar-uptodate" unless="sparql.jar.uptodate" description="Creates the SPARQL jar">
+    <jar jarfile="${sparql.dist.dir}/${sparql.jar}">
+      <fileset dir="${sparql.obj.dir}/classes" excludes="**/*.java"/>
+    </jar>
+  </target>
+
+
+  <target name="sparql-uptodate" description="Test if the SPARQL distribuion is up to date">
+    <uptodate property="sparql.uptodate" targetfile="${sparql.dist.dir}/${sparql.jar}">
+      <srcfiles dir="${sparql.obj.dir}/classes" includes="**/*"/>
+    </uptodate>
+  </target>
+
+
+  <target name="sparql-dist" depends="sparql-uptodate,sparql-jar" unless="sparql.uptodate"
+          description="Performs all tasks related to finalising SPARQL and readying it for distribution">
+    <!-- For now, relying on dependencies to do the dirty work -->
+  </target>
+
+
+  <target name="sparql-test" depends="sparql-jar, test-data" description="Carries out unit testing for SPARQL">
+
+    <!-- start the Mulgara server -->
+    <antcall target="start"/>
+
+    <!-- Call the SPARQL unit test classes -->
+    <antcall target="component-test">
+      <param name="classpath.id" value="sparql-test-classpath"/>
+      <param name="dir" value="${sparql.src.dir}"/>
+      <param name="jar" value="${sparql.jar}"/>
+    </antcall>
+
+    <!-- stop the Mulgara server -->
+    <antcall target="stop"/>
+  </target>
+
+
+  <target name="sparql-javadoc" depends="sparql-jar" description="Creates the javadoc for SPARQL">
+
+    <antcall target="javadoc">
+      <param name="javadoc.package" value="org.mulgara.sparql.*"/>
+      <param name="javadoc.classpath" value="sparql-classpath"/>
+      <param name="javadoc.sourcepath" value="${sparql.src.dir}/java"/>
+    </antcall>
+  </target>
+
+
+  <target name="sparql-help" description="Displays the help information for SPARQL">
+    <!-- This is similar to the main project's help except the information is specific to this sub-project -->
+    <echo message="Welcome to the build script for ${sparql.name}."/>
+    <echo message=""/>
+    <echo message="These targets can be invoked as follows:"/>
+    <echo message="  ./build.sh &lt;target&gt;"/>
+    <echo message=""/>
+
+    <java fork="false" classname="org.apache.tools.ant.Main" newenvironment="false">
+      <jvmarg value="${arch.bits}"/>
+      <arg line="-buildfile ${sparql.src.dir}/build.xml -projecthelp"/>
+    </java>
+  </target>
+
+</project>

Added: branches/mgr-61-sparql/src/jar/sparql/grammar/expr.flex
===================================================================
--- branches/mgr-61-sparql/src/jar/sparql/grammar/expr.flex	2007-11-30 16:48:12 UTC (rev 590)
+++ branches/mgr-61-sparql/src/jar/sparql/grammar/expr.flex	2007-12-03 04:53:46 UTC (rev 591)
@@ -0,0 +1,148 @@
+package org.mulgara.sparql;
+
+import beaver.Symbol;
+import beaver.Scanner;
+
+import org.mulgara.sparql.ExpressionParser.Terminals;
+
+%%
+
+%public
+%class ExpressionScanner
+%extends Scanner
+%function nextToken
+%type Symbol
+%yylexthrow Scanner.Exception
+%eofval{
+	return newToken(Terminals.EOF, "end-of-file");
+%eofval}
+%unicode
+%line
+%column
+%{
+	StringBuffer string = new StringBuffer(128);
+	private Symbol newToken(short id)
+	{
+		return new Symbol(id, yyline + 1, yycolumn + 1, yylength());
+	}
+
+	private Symbol newToken(short id, Object value)
+	{
+		return new Symbol(id, yyline + 1, yycolumn + 1, yylength(), value);
+	}
+%}
+LineTerminator = \r|\n|\r\n
+WhiteSpace     = {LineTerminator} | [ \t\f]
+WS = \u0020 | \u0009 | \u000D | \u000A
+StringCharacter = [^\r\n\"\\]
+
+Number = [:digit:] [:digit:]*
+Identifier = [:jletter:][:jletterdigit:]*
+Variable = [$?]{Identifier}
+VariableStart = [$?]
+NIL = \({WS}*\)
+Q_IRI_REF = <[^<>{}]*>
+NCCHAR1P = [a-zA-Z]
+NCCHAR1 = {NCCHAR1P} | "_"
+NCCHAR = {NCCHAR1} | "-" | [0-9]
+NCNAME_PREFIX = {NCCHAR1P} (({NCCHAR} | ".")* {NCCHAR})?
+NCNAME = {NCCHAR1}(({NCCHAR} | ".")* {NCCHAR})?
+QNAME_NS = {NCNAME_PREFIX}?[ ]*:
+QNAME_LN = {QNAME_NS}{NCNAME}
+
+NCNAME = {NCCHAR1} (({NCCHAR} | ".")* {NCCHAR})?
+
+ORDER_BY = ORDER{WhiteSpace}+BY 
+
+SignlessInteger = {Number}
+SignlessDecimal = [.]{Number} | {Number}[.][:digit:]*
+Exponent = [eE][+-]?{Number}
+SignlessDouble = [.]{Number}{Exponent} | {Number}[.][:digit:]*{Exponent} | {Number}{Exponent}
+SignedInteger = [+-]{SignlessInteger}
+SignedDecimal = [+-]{SignlessDecimal}
+SignedDouble = [+-]{SignlessDouble}
+
+Integer = {SignlessInteger} | {SignedInteger}
+Decimal = {SignlessDecimal} | {SignedDecimal}
+Double = {SignlessDouble} | {SignedDouble}
+
+
+%state STRING
+%state VARIABLE
+
+%%
+
+{WhiteSpace}+   { /* ignore */ }
+
+<YYINITIAL> {
+	{Integer}  	{ return newToken(Terminals.INTEGER, new Integer(yytext())); }
+	{Decimal}   	{ return newToken(Terminals.DECIMAL, new Float(yytext())); }
+	{Double}    	{ return newToken(Terminals.DOUBLE, new Double(yytext())); }
+
+	"("		{ return newToken(Terminals.LPAREN, yytext()); }
+	")"        	{ return newToken(Terminals.RPAREN, yytext()); }
+	"*"        	{ return newToken(Terminals.MULT,   yytext()); }
+	"/"        	{ return newToken(Terminals.DIV,    yytext()); }
+	"+"        	{ return newToken(Terminals.PLUS,   yytext()); }
+	"-"        	{ return newToken(Terminals.MINUS,  yytext()); }
+	"SELECT"|"select"	{ return newToken(Terminals.SELECT, yytext()); }
+	"DISTINCT"|"distinct"	{return newToken(Terminals.DISTINCT, yytext()); }
+	"REDUCED"|"reduced"	{ return newToken(Terminals.REDUCED, yytext()); }
+	"FROM"|"from"	{ return newToken(Terminals.FROM, yytext()); }
+	"WHERE"|"where"	{ System.out.println("flex: doing the where"); return newToken(Terminals.WHERE, yytext()); }
+	"{"		{ System.out.println("flex: Got the lbrace"); return newToken(Terminals.LBRACE, yytext()); }
+	"}"		{ System.out.println("flex: Got the rbrace");return newToken(Terminals.RBRACE, yytext()); }
+	"."		{ return newToken(Terminals.DOT, yytext()); }
+	"OPTIONAL"|"optional" { return newToken(Terminals.OPTIONAL, yytext()); }
+	"FILTER" | "filter"   { return newToken(Terminals.FILTER, yytext()); }
+	"||"	   	{ return newToken(Terminals.OR, yytext()); }
+	"&&"	   	{ return newToken(Terminals.AND, yytext()); }
+	"="	   	{ return newToken(Terminals.EQUALS, yytext()); }
+	"!="	   	{ return newToken(Terminals.NOT_EQUALS, yytext()); }
+	"<"		{ return newToken(Terminals.LESS_THAN, yytext()); }
+	"<="		{ return newToken(Terminals.LESS_THAN_EQUALS, yytext()); }
+	">"		{ return newToken(Terminals.GREATER_THAN, yytext()); }
+	">="		{ return newToken(Terminals.GREATER_THAN_EQUALS, yytext()); }
+	"!"		{ return newToken(Terminals.NOT, yytext()); }
+	"STR" | "str"	{ return newToken(Terminals.STR, yytext()); }
+	"LANG" | "lang"	{ return newToken(Terminals.LANG, yytext()); }
+	"LANGMATCHES" | "langmatches"	{ return newToken(Terminals.LANGMATCHES, yytext()); }
+	"DATATYPE" | "datatype"	{ return newToken(Terminals.DATATYPE, yytext()); }
+	"BOUND" | "bound"	{ return newToken(Terminals.BOUND, yytext()); }
+	"SAMETERM" | "sameterm" | "sameTerm"	{ return newToken(Terminals.SAME_TERM, yytext()); }
+	"ISIRI" | "isiri" | "isIRI"	{ return newToken(Terminals.IS_IRI, yytext()); }
+	"ISURI" | "isuri" | "isURI"	{ return newToken(Terminals.IS_URI, yytext()); }
+	"ISBLANK" | "isblank" | "isBLANK"	{ return newToken(Terminals.IS_BLANK, yytext()); }
+	"ISLITERAL" | "isliteral" | "isLITERAL"	{ return newToken(Terminals.IS_LITERAL, yytext()); }
+	"REGEX" | "regex"	{ return newToken(Terminals.REGEX, yytext()); }
+	";"		{ return newToken(Terminals.SEMI_COLON, yytext()); }
+	","		{ return newToken(Terminals.COMMA, yytext()); }
+	"a"		{ return newToken(Terminals.LETTER_A, yytext()); }
+	"NAMED" | "named"	{ return newToken(Terminals.NAMED, yytext()); }
+	"UNION" | "union"	{ return newToken(Terminals.UNION, yytext()); }
+	"GRAPH" | "graph"	{ return newToken(Terminals.GRAPH, yytext()); }
+	{VariableStart} { string.setLength(0); yybegin(VARIABLE); }
+	\"	        { yybegin(STRING); string.setLength(0); }
+	{Q_IRI_REF}	{ return newToken(Terminals.Q_IRI_REF, yytext()); }
+	{QNAME_NS}	{ return newToken(Terminals.QNAME_NS, yytext()); }
+	{QNAME_LN}	{ return newToken(Terminals.QNAME_LN, yytext()); }
+	{NIL}		{ return newToken(Terminals.NIL, yytext()); }
+	{ORDER_BY}	{ return newToken(Terminals.ORDER_BY, yytext()); }
+	"ASC" | "asc" { return newToken(Terminals.ASC, yytext()); }
+	"DESC" | "desc" { return newToken(Terminals.DESC, yytext()); }
+	"LIMIT" | "limit" { return newToken(Terminals.LIMIT, yytext()); }
+	"OFFSET" | "offset" { return newToken(Terminals.OFFSET, yytext()); }
+}
+
+<VARIABLE> {
+	{Identifier} { yybegin(YYINITIAL); return newToken(Terminals.VARIABLE, yytext()); }
+}
+
+<STRING> {
+	\"		{ 	
+			}
+	{StringCharacter}+	{ string.append(yytext()); }
+}
+
+
+.|\n            { throw new Scanner.Exception("unexpected character '" + yytext() + "'"); }

Added: branches/mgr-61-sparql/src/jar/sparql/grammar/expr.grammar
===================================================================
--- branches/mgr-61-sparql/src/jar/sparql/grammar/expr.grammar	2007-11-30 16:48:12 UTC (rev 590)
+++ branches/mgr-61-sparql/src/jar/sparql/grammar/expr.grammar	2007-12-03 04:53:46 UTC (rev 591)
@@ -0,0 +1,541 @@
+%package "org.mulgara.sparql";
+%import "cst.*";
+%import "java.util.ArrayList";
+%import "java.util.List";
+%class "ExpressionParser";
+
+%terminals MULT, DIV, PLUS, MINUS, LPAREN, RPAREN;
+%terminals EQUALS, NOT_EQUALS, LESS_THAN, GREATER_THAN, LESS_THAN_EQUALS, GREATER_THAN_EQUALS;
+%terminals SELECT, DISTINCT, REDUCED, FROM, WHERE, GRAPH;
+%terminals LBRACE, RBRACE, DOT, OPTIONAL, SEMI_COLON, COMMA, LETTER_A, VARIABLE, FILTER;
+%terminals OR, AND, NOT, STR, LANG, LANGMATCHES, DATATYPE, BOUND, SAME_TERM, IS_IRI, IS_URI, IS_BLANK, IS_LITERAL, REGEX;
+%terminals INTEGER, DECIMAL, DOUBLE, Q_IRI_REF, QNAME_NS, QNAME_LN, NAMED, UNION, NIL, LIMIT, ORDER_BY, ASC, DESC;
+%terminals LIMIT, OFFSET;
+
+%left  RPAREN;
+%left  MULT, DIV;
+%left  PLUS, MINUS;
+%left  EQUALS, NOT_EQUALS, LESS_THAN, LESS_THAN_EQUALS, GREATER_THAN, GREATER_THAN_EQUALS;
+%left  AND;
+%left  OR;
+
+
+%typeof from_clause = "From";
+%typeof where_clause = "GroupGraphPattern";
+%typeof VARIABLE, Q_IRI_REF, QNAME_NS, QNAME_LN = "String";
+%typeof var_or_iriref = "Predicate";
+%typeof object_list = "ArrayList";
+%typeof object = "RDFObject";
+%typeof group_graph_pattern = "GroupGraphPattern";
+%typeof graph_element_list = "ArrayList<GraphElement>";
+%typeof graph_element = "GraphElement";
+%typeof optional_graph_element = "OptionalGraphPatternElement";
+%typeof triples_same_subject = "ArrayList<Triple>";
+%typeof verb_object_list = "ArrayList<Triple>";
+%typeof verb_object_list_list, verb_object_list_list_element = "ArrayList<Triple>";
+%typeof prop_list_not_empty = "ArrayList<Triple>";
+%typeof triples_block = "ArrayList<Triple>";
+%typeof var_list = "ArrayList<>";
+%typeof var_or_term, var, iri_ref = "String";
+%typeof verb = "Predicate";
+%typeof INTEGER = "Integer";
+%typeof DECIMAL = "Float";
+%typeof DOUBLE = "Double";
+%typeof distinct_or_reduced, named_graph_clause, data_graph_clause_or_named_graph_clause = "String";
+%typeof expression, numeric_literal, primary_expression, bracketted_expression = "Expression";
+%typeof builtin_call, regex_expression = "BuiltinCall";
+%typeof group_graph_pattern_union = "ArrayList<GroupGraphPattern>";
+%typeof group_or_union_graph_element = "GroupOrUnionGraphPatternElement";
+%typeof graph_pattern_not_triples = "NonTriple";
+
+%typeof filter, constraint = "Constraint";
+%typeof function_call = "FunctionCall";
+%typeof arg_list, expression_list = "ArrayList<Expression>";
+%typeof limit_clause, offset_clause = "Integer";
+%typeof solution_modifier = "SolutionModifier";
+%typeof limit_offset_clause = "LimitOffset";
+%typeof order_clause, order_condition_list = "ArrayList<OrderByClause>";
+%typeof order_condition = "OrderByClause";
+
+%goal select_query;
+
+select_query
+	= SELECT distinct_or_reduced.d select_vars dataset_clause.f where_clause.w solution_modifier.s 
+		{: 
+			return new SelectQuery(d, f, w, s); 
+		:}
+	;
+	
+distinct_or_reduced
+	= DISTINCT
+	| REDUCED
+	|
+	;
+	
+select_vars
+	= var_list
+	| MULT
+	;
+	
+var_list
+	= var
+	| var_list var
+	;
+
+dataset_clause
+	= from_clause
+	|
+	;
+	
+from_clause
+	= FROM data_graph_clause_or_named_graph_clause.e 
+			{:
+				return new From(e);
+			:}
+	;
+	
+data_graph_clause_or_named_graph_clause
+	= default_graph_clause
+	| named_graph_clause
+	;
+	
+default_graph_clause
+	= iri_ref;
+	
+named_graph_clause
+	= NAMED iri_ref
+	;
+
+where_clause
+	= WHERE group_graph_pattern
+	| group_graph_pattern
+	;
+
+group_graph_pattern
+	= LBRACE triples_block.triplesBlock graph_element_list.graphElementList RBRACE
+					{:
+						return new GroupGraphPattern(triplesBlock, graphElementList);
+					:}
+	| LBRACE triples_block.triplesBlock RBRACE
+					{:
+						return new GroupGraphPattern(triplesBlock);
+					:}
+	| LBRACE graph_element_list.graphElementList RBRACE
+					{:
+						return new GroupGraphPattern(graphElementList, true);
+					:}
+	| LBRACE RBRACE
+					{:
+						System.out.println("got brace brace");
+						return new GroupGraphPattern();
+					:}
+	;
+
+graph_element_list
+	= graph_element.ge		{:
+						ArrayList<GraphElement> graphElements = new ArrayList<GraphElement>();
+						graphElements.add(ge);
+						System.out.println("expr.grammar: graph_element: " + ge);
+						return new Symbol(graphElements);
+					:}
+	| graph_element_list.gel graph_element.ge
+					{:
+						System.out.println("expr.grammar: graph_element (list): " + ge);
+						gel.add(ge);
+						return _symbol_gel;
+					:}
+	;
+	
+graph_element
+	= graph_pattern_not_triples.gp DOT triples_block.tb
+			{:
+				return new GraphElement(tb, true, gp);
+			:}
+	| filter.f DOT triples_block.tb
+			{:
+				return new GraphElement(tb, true, f);
+			:}
+	| graph_pattern_not_triples.gp triples_block.tb
+			{:
+				return new GraphElement(tb, false, gp);
+			:}
+	| filter.f triples_block.tb
+			{:
+				return new GraphElement(tb, false, f);
+			:}
+	| graph_pattern_not_triples.gp
+			{:
+				System.out.println("expr.grammar: graph_pattern_not_triples: " + gp);
+				return new GraphElement(gp);
+			:}
+	| filter.f
+			{:
+				return new GraphElement(f);
+			:}
+	;
+
+graph_pattern_not_triples
+	= optional_graph_element
+	| group_or_union_graph_element
+	| graph_graph_pattern
+	;
+
+optional_graph_element
+	= OPTIONAL group_graph_pattern.ggp
+					{:
+						return new OptionalGraphPatternElement(ggp);
+					:}
+	;
+	
+group_or_union_graph_element
+	= group_graph_pattern.ggp
+		{:
+			ArrayList<GroupGraphPattern> patterns = new ArrayList<GroupGraphPattern>();
+			patterns.add(ggp);
+			return new GroupOrUnionGraphPatternElement(patterns);
+		:}
+	| group_graph_pattern.ggp group_graph_pattern_union.ggpu
+		{:
+			ggpu.add(ggp);
+			return new GroupOrUnionGraphPatternElement(ggpu);
+		:}
+	;
+	
+group_graph_pattern_union
+	= UNION group_graph_pattern.ggp
+		{:
+			ArrayList<GroupGraphPattern> patterns = new ArrayList<GroupGraphPattern>();
+			patterns.add(ggp);
+			return new Symbol(patterns);
+		:}
+	| group_graph_pattern_union.ggpu UNION group_graph_pattern.ggp
+		{:
+			ggpu.add(ggp);
+			return _symbol_ggpu;
+		:}
+	;
+	
+graph_graph_pattern
+	= GRAPH var_or_iriref.v group_graph_pattern.ggp
+		{:
+			return new GraphGraphPatternElement(v, ggp);
+		:}
+	;
+
+filter
+	= FILTER constraint
+	;
+
+constraint
+	= bracketted_expression.e
+	| builtin_call
+	| function_call
+	;
+
+bracketted_expression
+	= LPAREN expression.e RPAREN	{: return e; :}
+	;
+
+expression
+	= expression.e1 OR expression.e2
+					{: return new OrExpression(e1, e2); :}
+	| expression.e1 AND expression.e2
+					{: return new AndExpression(e1, e2); :}
+	| expression.e1 EQUALS expression.e2
+					{: return new EqualsExpression(e1, e2); :}
+	| expression.e1 NOT_EQUALS expression.e2
+					{: return new NotEqualsExpression(e1, e2); :}
+	| expression.e1 LESS_THAN expression.e2
+					{: return new LessThanExpression(e1, e2); :}
+	| expression.e1 LESS_THAN_EQUALS expression.e2
+					{: return new LessThanEqualsExpression(e1, e2); :}
+	| expression.e1 GREATER_THAN expression.e2
+					{: return new GreaterThanExpression(e1, e2); :}
+	| expression.e1 GREATER_THAN_EQUALS expression.e2
+					{: return new GreaterThanEqualsExpression(e1, e2); :}
+	| expression.e1 PLUS expression.e2
+					{: return new PlusExpression(e1, e2); :}
+	| expression.e1 MINUS expression.e2
+					{: return new MinusExpression(e1, e2); :}	
+	| expression.e1 MULT expression.e2
+					{: return new MultExpression(e1, e2); :}
+	| expression.e1 DIV expression.e2
+					{: return new DivExpression(e1, e2); :}
+	| numeric_literal.e		{: return e; :}
+	| NOT primary_expression.pe	{: return new NotPrimaryExpression(pe); :}
+	| PLUS primary_expression.pe	{: return new PlusPrimaryExpression(pe); :}
+	| MINUS primary_expression.pe	{: return new MinusPrimaryExpression(pe); :}
+	| primary_expression
+	;
+
+primary_expression
+	= bracketted_expression
+	| builtin_call
+	| var.v				{: return new VariableExpression(v); :}
+	;
+
+builtin_call
+	= STR LPAREN expression.e RPAREN
+					{: return new StrBuiltinCall(e); :}
+	| LANG LPAREN expression.e RPAREN
+					{: return new LangBuiltinCall(e); :}
+	| LANGMATCHES LPAREN expression.e1 COMMA expression.e2 RPAREN
+					{: return new LangMatchesBuiltinCall(e1, e2); :}
+	| DATATYPE LPAREN expression.e RPAREN
+					{: return new DatatypeBuiltinCall(e); :}
+	| BOUND LPAREN var.v RPAREN	{: return new BoundBuiltinCall(v); :}
+	| SAME_TERM LPAREN expression.e1 COMMA expression.e2 RPAREN
+					{: return new SameTermBuiltinCall(e1, e2); :}
+	| IS_IRI LPAREN expression.e RPAREN
+					{: return new IsIRIBuiltinCall(e); :}
+	| IS_URI LPAREN expression.e RPAREN
+					{: return new IsURIBuiltinCall(e); :}
+	| IS_BLANK LPAREN expression.e RPAREN
+					{: return new IsBlankBuiltinCall(e); :}
+	| IS_LITERAL LPAREN expression.e RPAREN
+					{: return new IsLiteralBuiltinCall(e); :}
+	| regex_expression
+	;
+	
+regex_expression
+	= REGEX LPAREN expression.e1 COMMA expression.e2 RPAREN
+					{: return new RegularExpression(e1, e2); :}
+	| REGEX LPAREN expression.e1 COMMA expression.e2 COMMA expression.e3 RPAREN
+					{: return new RegularExpression(e1, e2, e3); :}
+	;
+	
+function_call
+	= iri_ref.iri arg_list.al
+		{:
+			return new FunctionCall(iri, al);
+		:}
+	;
+	
+arg_list
+	= NIL
+		{:
+			return new Symbol(new ArrayList<Expression>());
+		:}
+	| LPAREN expression_list.el RPAREN
+		{:
+			return _symbol_el;
+		:}
+	;
+	
+expression_list
+	=  expression.e
+		{:
+			ArrayList<Expression> expressions = new ArrayList<Expression>();
+			expressions.add(e);
+			return new Symbol(expressions);
+		:}
+	| expression_list.el COMMA expression.e
+		{:
+			el.add(e);
+			return _symbol_el;
+		:}
+	;
+
+solution_modifier
+	= order_clause.oc limit_offset_clause.loc
+		{:
+			return new SolutionModifier(oc, loc);
+		:}
+	| order_clause.oc
+		{:
+			return new SolutionModifier(oc);
+		:}
+	| limit_offset_clause.loc
+		{:
+			return new SolutionModifier(loc);
+		:}
+	|
+	;
+	
+order_clause
+	= ORDER_BY order_condition_list.ocl
+		{:
+			return _symbol_ocl;
+		:}
+	;
+	
+order_condition_list
+	= order_condition.oc
+		{:
+			ArrayList<OrderByClause> ocl = new ArrayList<OrderByClause>();
+			ocl.add(oc);
+			return new Symbol(ocl);
+		:}
+	| order_condition_list.oclist order_condition.oc
+		{:
+			oclist.add(oc);
+			return _symbol_oclist;
+		:}
+	;
+	
+order_condition
+	= ASC bracketted_expression.e
+		{:
+			return new OrderByClause(e, OrderByClause.OrderDirection.ASCENDING);
+		:}
+	| DESC bracketted_expression.e
+		{:
+			return new OrderByClause(e, OrderByClause.OrderDirection.DESCENDING);
+		:}
+	| constraint.c
+		{:
+			return new OrderByClause(c);
+		:}
+	| var.v
+		{:
+			return new OrderByClause(new VariableExpression(v));
+		:}
+	;
+	
+limit_offset_clause
+	= limit_clause.l offset_clause.o
+		{:
+			return new LimitOffset(l, o);
+		:}
+	| limit_clause.l
+		{:
+			LimitOffset limo = new LimitOffset();
+			limo.setLimit(l); 
+			return limo;
+		:}
+	| offset_clause.o
+		{:
+			LimitOffset limo = new LimitOffset();
+			limo.setOffset(o); 
+			return limo;
+		:}
+	| offset_clause.o limit_clause.l
+		{:
+			return new LimitOffset(l, o);
+		:}
+	;
+	
+limit_clause
+	= LIMIT INTEGER.e
+		{:
+			return _symbol_e;
+		:}
+	;
+		
+offset_clause
+	= OFFSET INTEGER.e
+		{:
+			return _symbol_e;
+		:}
+	;
+
+numeric_literal
+	= INTEGER.e			{: return new IntegerExpression(e); :}
+	| DECIMAL.e			{: return new DecimalExpression(e); :}
+	| DOUBLE.e			{: return new DoubleExpression(e); :}
+	;
+
+triples_block
+	= triples_same_subject
+	| triples_same_subject.oneSubjectTriples another_triples_block.anotherSubjectTriples
+					{:
+						oneSubjectTriples.addAll((List<Triple>)anotherSubjectTriples.value);
+						return _symbol_oneSubjectTriples;
+					:}
+	;
+
+another_triples_block
+	= DOT
+	| DOT triples_block
+	;
+
+triples_same_subject
+	= var_or_term.v prop_list_not_empty.triples
+					{:
+						for (Triple t : triples) {
+							System.out.println("Setting subject for: " + t);
+							t.setSubject(v);
+							System.out.println("new triple: " + t);
+						}
+						return _symbol_triples;						
+					:}
+	;
+
+prop_list_not_empty
+	= verb_object_list
+	| verb_object_list.vol verb_object_list_list.voll
+					{:
+						voll.addAll(vol);
+						return _symbol_voll;
+					:}
+	;
+
+verb_object_list_list
+	= verb_object_list_list_element.e
+	| verb_object_list_list.listOfVerbObjectLists verb_object_list_list_element.verbObjectList
+					{:
+						listOfVerbObjectLists.addAll(verbObjectList);
+						return _symbol_listOfVerbObjectLists;
+					:}
+	;
+
+verb_object_list_list_element
+	= SEMI_COLON
+	| SEMI_COLON verb_object_list.vol	{: System.out.println("Semi colon: " + vol); return _symbol_vol; :}
+	;
+
+verb_object_list
+	= verb.v object_list.ol		{:
+						ArrayList<Triple> triples = new ArrayList<Triple>();
+						for (RDFObject object : (ArrayList<RDFObject>)ol) {
+							Triple t = new Triple(v, object);
+							triples.add(t);
+						}
+						return new Symbol(triples);
+					:}
+	;
+
+object_list
+	= object.o			{: 
+						ArrayList<RDFObject> ol = new ArrayList<RDFObject>();
+						ol.add(o);
+						return new Symbol(ol);
+					:}
+	| object_list.ol COMMA object.o	{:
+						ol.add(o);
+						return _symbol_ol;
+					:}
+					
+	;
+
+object
+	= var_or_term.e		{: return new RDFObject(e); :}
+	;
+
+verb
+	= var_or_iriref
+	| LETTER_A		{: return new ConstantPredicate(); :}
+	;
+
+var_or_iriref
+	= var.e			{: return new VariablePredicate(e); :}
+	| iri_ref.e		{: return new IRIPredicate(e); :}
+	;
+
+var_or_term
+	= var
+	;
+
+var
+	= VARIABLE.e		{: return new Symbol(e); :}
+	;
+
+iri_ref
+	= Q_IRI_REF
+	| Q_Name
+	;
+
+Q_Name
+	= QNAME_NS
+	| QNAME_LN
+	;

Added: branches/mgr-61-sparql/src/jar/sparql/sparql-build.properties
===================================================================
--- branches/mgr-61-sparql/src/jar/sparql/sparql-build.properties	2007-11-30 16:48:12 UTC (rev 590)
+++ branches/mgr-61-sparql/src/jar/sparql/sparql-build.properties	2007-12-03 04:53:46 UTC (rev 591)
@@ -0,0 +1,19 @@
+#
+# Properties used by the SPARQL module
+#
+
+# Module Name
+sparql.name = SPARQL
+
+# General module properties
+sparql.conf.dir      =${conf.dir}
+
+sparql.base.dir       =${jar.src.dir}/sparql
+sparql.src.dir       =${sparql.base.dir}/java
+sparql.obj.dir       =${jar.obj.dir}/sparql
+
+sparql.dist.dir      =${bin.dir}
+sparql.test.dir      =${test.dir}/sparql
+sparql.jxtest.dir    =${jxtest.dir}/sparql
+sparql.jar           =sparql-base-${mulgara-version}.jar
+jflex.location       =http://jflex.de/jflex-1.4.1.zip




More information about the Mulgara-svn mailing list