## Licensed under the terms of http://www.apache.org/licenses/LICENSE-2.0

==== The Grammars
See Archive for old, historical material.

main.jj - Template for SPARQL and ARQ
    cpp input to produce sparql.jj or arq.jj

sparql_11.jj - The SPARQL working group syntax
    This should be exactly the grammar in the SPARQL rec.
    Generates org.apache.jena.query.parser.sparql_11.SPARQLParser

arq.jj - The native query language of the query engine
    Generates org.apache.jena.query.parser.arq.ARQParser


sparql_10-final.jj - SPARQL 1.0, but updated to match internal chnages in ARQ.
    This should produce the grammar in the SPARQ 1.0/DAWG rec.
    Generates org.apache.jena.query.parser.sparql_10.SPARQLParser
    
Final/sparql_10-final.jj is original for the SPARQL 1.0 specification. 
Final/sparql_11-final.jj is original for the SPARQL 1.1 specification.

This should produce the HTML grammar in the SPARQL 1.0/DAWG and SPARQL 1.1
specifications.

==== Making the parsers

See "grammar"
Note this runs cpp over main.jj to produce arq.jj or sparql.jj

==== Making the HTML

sparql_N.txt is produced by "grammar", used to make HTML.
We don't use jjdoc to produce HTML but instead get jjdoc to produce
its text form and process that, toegther with a hand-managed
token.txt file.

== Tokens

Run "jj2tokens sparql_11.jj > tokens.txt" to get a first pass at a tokens file.
Manually tidy, noting which to inline

Produce HTML suiatble for inclusion in the SPARQL recomendations.
Includes some hand-craft tidying up. 
  jj2html arq.txt tokens.txt 
