[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 <target>"/>
+ <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