This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/main by this push:
new e4628dacbb Production-annotated Turtle Grammar
e4628dacbb is described below
commit e4628dacbbc9298369799b8a73be5054e13fa85e
Author: Andy Seaborne <[email protected]>
AuthorDate: Fri Feb 13 10:15:49 2026 +0000
Production-annotated Turtle Grammar
---
jena-arq/Grammar/Turtle/turtle.jj | 162 ++++++++------
.../riot/lang/turtlejcc/javacc/TurtleJavacc.java | 248 ++++++++++++---------
2 files changed, 236 insertions(+), 174 deletions(-)
diff --git a/jena-arq/Grammar/Turtle/turtle.jj
b/jena-arq/Grammar/Turtle/turtle.jj
index c84622c0dd..816b18a41e 100644
--- a/jena-arq/Grammar/Turtle/turtle.jj
+++ b/jena-arq/Grammar/Turtle/turtle.jj
@@ -19,7 +19,9 @@
* SPDX-License-Identifier: Apache-2.0
*/
-// Turtle RDF 1.1 Grammar.
+// Turtle RDF 1.2 Grammar.
+// https://www.w3.org/TR/rdf12-turtle/#sec-grammar
+//
// This is not the usual parser used by RIOT.
// RIOT has it's own tokenizer/parser which is faster.
// This grammar exists as a more convenient base for new languages
@@ -71,16 +73,22 @@ PARSER_END(TurtleJavacc)
void parse(): { }
{
ByteOrderMark()
- (Statement())*
+ TurtleDoc()
<EOF>
}
+// Turtle [1] -- turtleDoc ::= statement*
+void TurtleDoc() : {}
+{
+ (Statement())*
+}
+
void ByteOrderMark() : {}
{
(<BOM>)?
}
-// Turtle [2] statement
+// Turtle [2] -- statement ::= directive | (triples '.')
void Statement() : {}
{
Directive()
@@ -90,7 +98,7 @@ void Statement() : {}
| (Triples() <DOT> )
}
-// Turtle [3] directive
+// Turtle [3] -- directive ::= ... | sparqlPrefix | sparqlBase | sparqlVersion
void Directive() : { Token t ; String iri ; String verStr ;}
{
<PREFIX> t = <PNAME_NS> iri = IRIREF()
@@ -104,6 +112,21 @@ void Directive() : { Token t ; String iri ; String verStr
;}
{ declareVersion(verStr, t.beginLine, t.beginColumn); }
}
+// Turtle [3] -- directive ::= prefixID | base | version | ...
+void DirectiveOld() : { Token t ; Token t2 ; String iri ; String verStr ; }
+{
+ <PREFIX_OLD> t = <PNAME_NS> iri = IRIREF() <DOT>
+ { String s = canonicalPrefix(t.image, t.beginLine, t.beginColumn) ;
+ setPrefix(s, iri, t.beginLine, t.beginColumn) ; }
+ |
+ t = <BASE_OLD> iri = IRIREF() <DOT>
+ { setBase(iri, t.beginLine, t.beginColumn) ; }
+ |
+ t = <VERSION_OLD> verStr = VersionSpecificer() <DOT>
+ { declareVersion(verStr, t.beginLine, t.beginColumn); }
+}
+
+// Turtle [10] -- VersionSpecifier ::= STRING_LITERAL_QUOTE |
STRING_LITERAL_SINGLE_QUOTE
String VersionSpecificer() : { Token t; String verStr; }
{
@@ -119,19 +142,9 @@ String VersionSpecificer() : { Token t; String verStr; }
}
}
-void DirectiveOld() : { Token t ; Token t2 ; String iri ; String verStr ; }
-{
- <PREFIX_OLD> t = <PNAME_NS> iri = IRIREF() <DOT>
- { String s = canonicalPrefix(t.image, t.beginLine, t.beginColumn) ;
- setPrefix(s, iri, t.beginLine, t.beginColumn) ; }
- |
- t = <BASE_OLD> iri = IRIREF() <DOT>
- { setBase(iri, t.beginLine, t.beginColumn) ; }
- |
- t = <VERSION_OLD> verStr = VersionSpecificer() <DOT>
- { declareVersion(verStr, t.beginLine, t.beginColumn); }
-}
-
+// Turtle [11] -- triples ::= (subject predicateObjectList)
+// | (blankNodePropertyList predicateObjectList?)
+// | (reifiedTriple predicateObjectList?)
void Triples() : { Node n; }
{
n = Subject() PredicateObjectList(n)
@@ -141,6 +154,7 @@ void Triples() : { Node n; }
n = ReifiedTriple() ( PredicateObjectList(n) )?
}
+// Turtle [12] -- predicateObjectList ::= verb objectList (';' (verb
objectList)?)*
void PredicateObjectList(Node s) : { Node p = null ; }
{
p = Verb()
@@ -148,25 +162,37 @@ void PredicateObjectList(Node s) : { Node p = null ; }
(<SEMICOLON> (p = Verb() ObjectList(s, p))? )*
}
+// Turtle [13] -- objectList ::= object annotation (',' object annotation)*
void ObjectList(Node s, Node p): { Node o ; }
{
o = Object()
{ emitTriple(s, p, o, token.beginLine, token.beginColumn) ; }
Annotation(s, p, o)
+ // Strict
(
<COMMA> o = Object()
{ emitTriple(s, p, o, token.beginLine, token.beginColumn) ; }
Annotation(s, p, o)
)*
-}
-
-// Turtle [9] verb
+// // Trailing comma allowed
+// (
+// <COMMA>
+// (
+// o = Object()
+// { emitTriple(s, p, o, token.beginLine, token.beginColumn) ; }
+// Annotation(s, p, o)
+// )?
+// )*
+}
+
+// Turtle [14] -- verb ::= predicate | 'a'
Node Verb() : { Node p ; }
{
( p = Predicate() | <KW_A> { p = nRDFtype ; } )
{ return p ; }
}
+// Turtle [15] -- subject ::= iri | BlankNode | collection
Node Subject() : { Node s; String iri ; }
{
(
@@ -179,14 +205,15 @@ Node Subject() : { Node s; String iri ; }
{ return s ; }
}
-// Turtle [11] predicate
+// Turtle [16] -- predicate ::= verb
Node Predicate() : { String iri;}
{
iri = iri()
{ return createURI(iri, token.beginLine, token.beginColumn); }
}
-// Turtle [12] object
+// Turtle [17] -- object ::= iri | BlankNode | collection |
blankNodePropertyList
+// | literal | tripleTerm | reifiedTriple
Node Object(): { Node o ; String iri; }
{
( iri = iri() { o = createURI(iri, token.beginLine, token.beginColumn) ; }
@@ -200,7 +227,7 @@ Node Object(): { Node o ; String iri; }
{ return o; }
}
-// Turtle [13] literal
+// Turtle [18] literal ::= RDFLiteral | NumericLiteral | BooleanLiteral
Node Literal() : { Node n ;}
{
n = RDFLiteral() { return n ; }
@@ -208,7 +235,7 @@ Node Literal() : { Node n ;}
| n = BooleanLiteral() { return n ; }
}
-// Turtle [14] blankNodePropertyList
+// Turtle [19] -- blankNodePropertyList ::= '[' predicateObjectList ']'
Node BlankNodePropertyList() : { Token t ; }
{
t = <LBRACKET>
@@ -218,9 +245,8 @@ Node BlankNodePropertyList() : { Token t ; }
{ return n ; }
}
-// Turtle [15] collection
-Node Collection() :
- { Node listHead = nRDFnil ; Node lastCell = null ; int mark ; Node n ;
Token t ; }
+// Turtle [20] -- collection ::= '(' object* ')'
+Node Collection() : { Node listHead = nRDFnil ; Node lastCell = null ; int
mark ; Node n ; Token t ; }
{
t = <LPAREN>
{ int line = t.beginLine; int column = t.beginColumn;
@@ -246,14 +272,14 @@ Node Collection() :
return listHead ; }
}
-// Turtle: Gramnmar has "object" directly in the collection rule.
+// Turtle: Grammar has "object" directly in the collection rule.
Node CollectionElt() : { Node o;}
{
o = Object()
{ return o; }
}
-// Turtle [16] NumericLiteral
+// Turtle [21] -- NumericLiteral ::= INTEGER | DECIMAL | DOUBLE
Node NumericLiteral() : { Token t ; }
{
(
@@ -263,7 +289,7 @@ Node NumericLiteral() : { Token t ; }
)
}
-// Turtle [128s] RDFLiteral
+// Turtle [22] -- RDFLiteral ::= String (LANG_DIR | ('^^' iri))?
Node RDFLiteral() : { Token t ; String lex = null ; }
{
lex = String()
@@ -277,20 +303,7 @@ Node RDFLiteral() : { Token t ; String lex = null ; }
{ return createLiteral(lex, lang, uri, token.beginLine, token.beginColumn)
; }
}
-String LangTag() : { Token t ; }
-{
- // Enumerate the directives here because they look like language tags.
- ( t = <LANG_DIR> | t = AnyDirective() )
- { String lang = stripChars(t.image, 1) ; return lang ; }
-}
-
-Token AnyDirective() : { Token t ; }
-{
- ( t = <PREFIX_OLD> | t = <BASE_OLD> | t = <VERSION_OLD> )
- { return t ; }
-}
-
-// Turtle [133s] BooleanLiteral
+// Turtle [23] -- BooleanLiteral ::= 'true' | 'false'
Node BooleanLiteral() : {}
{
<TRUE> { return XSD_TRUE ; }
@@ -298,7 +311,10 @@ Node BooleanLiteral() : {}
<FALSE> { return XSD_FALSE ; }
}
-// Turtle [17] String
+// Turtle [24] -- String ::= STRING_LITERAL_QUOTE
+// | STRING_LITERAL_SINGLE_QUOTE
+// | STRING_LITERAL_LONG_SINGLE_QUOTE
+// | STRING_LITERAL_LONG_QUOTE
String String() : { Token t ; String lex ; }
{
( t = <STRING_LITERAL1> { lex = stripQuotes(t.image) ; }
@@ -312,7 +328,7 @@ String String() : { Token t ; String lex ; }
}
}
-// Turtle [135s] iri
+// Turtle [25] -- iri ::= IRIREF | PrefixedName
String iri() : { String iri ; }
{
iri = IRIREF() { return iri ; }
@@ -320,7 +336,7 @@ String iri() : { String iri ; }
iri = PrefixedName() { return iri ; }
}
-// Turtle [136s] PrefixedName
+// Turtle [26] -- PrefixedName ::= PNAME_LN | PNAME_NS
String PrefixedName() : { Token t ; }
{
( t = <PNAME_LN>
@@ -331,7 +347,7 @@ String PrefixedName() : { Token t ; }
)
}
-// Turtle [137s] BlankNode
+// Turtle [27] -- BlankNode ::= BLANK_NODE_LABEL | ANON
Node BlankNode() : { Token t = null ; }
{
t = <BLANK_NODE_LABEL>
@@ -341,12 +357,7 @@ Node BlankNode() : { Token t = null ; }
}
-String IRIREF() : { Token t ; }
-{
- t = <IRIref>
- { return resolveQuotedIRI(t.image, t.beginLine, t.beginColumn) ; }
-}
-
+// Turtle [28] -- reifier ::= '~' (iri | BlankNode)?
Node Reifier() : { Node n = null; String iriStr; Token t; }
{
t = <TILDE>
@@ -358,6 +369,7 @@ Node Reifier() : { Node n = null; String iriStr; Token t; }
{ return n ; }
}
+// Turtle [29] -- reifiedTriple ::= '<<' rtSubject verb rtObject reifier? '>>'
Node ReifiedTriple() : { Node reifId = null ; Token tok ; Node s; Node p ;
Node o ; }
{
tok = <LT2>
@@ -370,7 +382,7 @@ Node ReifiedTriple() : { Node reifId = null ; Token tok ;
Node s; Node p ; Node
{ return reifId ; }
}
-// rtSubject
+// Turtle [30] -- rtSubject ::= iri | BlankNode | reifiedTriple
Node ReifiedTripleSubject() : { Node s; String iri; } {
( iri = iri() { s = createURI(iri, token.beginLine, token.beginColumn) ; }
| s = BlankNode()
@@ -379,7 +391,7 @@ Node ReifiedTripleSubject() : { Node s; String iri; } {
{ return s; }
}
-// rtObject
+// Turtle [31] -- rtObject ::= iri | BlankNode | literal | tripleTerm |
reifiedTriple
Node ReifiedTripleObject() : { Node o; String iri; } {
( iri = iri() { o = createURI(iri, token.beginLine, token.beginColumn) ; }
| o = BlankNode()
@@ -390,6 +402,7 @@ Node ReifiedTripleObject() : { Node o; String iri; } {
{ return o; }
}
+// Turtle [32] -- tripleTerm ::= '<<(' ttSubject verb ttObject ')>>'
Node TripleTerm() : { Node n = null ; Token openToken ; String iri ; Node s ,
p , o ; }
{
<L_TRIPLE>
@@ -400,7 +413,7 @@ Node TripleTerm() : { Node n = null ; Token openToken ;
String iri ; Node s , p
{ return createTripleTerm(s, p, o, token.beginLine, token.beginColumn) ; }
}
-// ttSubject
+// Turtle [33] -- ttSubject ::= iri | BlankNode
Node TripleTermSubject(): { Node o ; String iri; }
{
( iri = iri() { o = createURI(iri, token.beginLine, token.beginColumn) ; }
@@ -409,7 +422,7 @@ Node TripleTermSubject(): { Node o ; String iri; }
{ return o; }
}
-// ttObject
+// Turtle [34] -- ttObject ::= iri | BlankNode | literal | tripleTerm
Node TripleTermObject(): { Node o ; String iri; }
{
( iri = iri() { o = createURI(iri, token.beginLine, token.beginColumn) ; }
@@ -421,6 +434,7 @@ Node TripleTermObject(): { Node o ; String iri; }
}
// RDF-star Annotation Syntax
+// Turtle [35] -- annotation ::= (reifier | annotationBlock)*
void Annotation(Node s, Node p, Node o) : { Node reifId = null; }
{
(
@@ -434,17 +448,37 @@ void Annotation(Node s, Node p, Node o) : { Node reifId =
null; }
) *
}
+// Turtle [36] -- annotationBlock ::= '{|' predicateObjectList '|}'
void AnnotationBlock( Node reifId ) : {}
{
<L_ANN>
PredicateObjectList(reifId)
<R_ANN>
-// (
-// <L_ANN>
-// { Node x = createQuotedTriple(s, p, o, token.beginLine,
token.beginColumn); }
-// PredicateObjectList(x)
-// <R_ANN>
-// )?
+}
+
+// ---- Turtle Terminals
+
+// Turtle [38] -- IRIREF ::= ...
+String IRIREF() : { Token t ; }
+{
+ t = <IRIref>
+ { return resolveQuotedIRI(t.image, t.beginLine, t.beginColumn) ; }
+}
+
+// Turtle [42] -- LANG_DIR ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* ('--'
[a-zA-Z]+)?
+// modified to enumerate the @-directives here because they look like
language tags.
+String LangTag() : { Token t ; }
+{
+ // Enumerate the directives here because they look like language tags.
+ ( t = <LANG_DIR> | t = AnyAtDirective() )
+ { String lang = stripChars(t.image, 1) ; return lang ; }
+}
+
+// @-directives are legal as language tags.
+Token AnyAtDirective() : { Token t ; }
+{
+ ( t = <PREFIX_OLD> | t = <BASE_OLD> | t = <VERSION_OLD> )
+ { return t ; }
}
// ------------------------------------------
diff --git
a/jena-arq/src/main/java/org/apache/jena/riot/lang/turtlejcc/javacc/TurtleJavacc.java
b/jena-arq/src/main/java/org/apache/jena/riot/lang/turtlejcc/javacc/TurtleJavacc.java
index f735481ef4..3f25c3739d 100644
---
a/jena-arq/src/main/java/org/apache/jena/riot/lang/turtlejcc/javacc/TurtleJavacc.java
+++
b/jena-arq/src/main/java/org/apache/jena/riot/lang/turtlejcc/javacc/TurtleJavacc.java
@@ -31,6 +31,12 @@ public class TurtleJavacc extends LangTurtleJCCParserBase
implements TurtleJavac
// Entry point
final public void parse() throws ParseException {
ByteOrderMark();
+ TurtleDoc();
+ jj_consume_token(0);
+}
+
+// Turtle [1] -- turtleDoc ::= statement*
+ final public void TurtleDoc() throws ParseException {
label_1:
while (true) {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -57,7 +63,6 @@ public class TurtleJavacc extends LangTurtleJCCParserBase
implements TurtleJavac
}
Statement();
}
- jj_consume_token(0);
}
final public void ByteOrderMark() throws ParseException {
@@ -72,7 +77,7 @@ public class TurtleJavacc extends LangTurtleJCCParserBase
implements TurtleJavac
}
}
-// Turtle [2] statement
+// Turtle [2] -- statement ::= directive | (triples '.')
final public void Statement() throws ParseException {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BASE:
@@ -106,7 +111,7 @@ public class TurtleJavacc extends LangTurtleJCCParserBase
implements TurtleJavac
}
}
-// Turtle [3] directive
+// Turtle [3] -- directive ::= ... | sparqlPrefix | sparqlBase | sparqlVersion
final public void Directive() throws ParseException {Token t ; String iri ;
String verStr ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case PREFIX:{
@@ -136,29 +141,7 @@ declareVersion(verStr, t.beginLine, t.beginColumn);
}
}
- final public String VersionSpecificer() throws ParseException {Token t;
String verStr;
- switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case STRING_LITERAL1:{
- t = jj_consume_token(STRING_LITERAL1);
-verStr = stripQuotes(t.image) ;
- break;
- }
- case STRING_LITERAL2:{
- t = jj_consume_token(STRING_LITERAL2);
-verStr = stripQuotes(t.image) ;
- break;
- }
- default:
- jj_la1[4] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
-verStr = unescapeStr(verStr, t.beginLine, t.beginColumn) ;
- checkRDFString(verStr, t.beginLine, t.beginColumn) ;
- {if ("" != null) return verStr ;}
- throw new Error("Missing return statement in function");
-}
-
+// Turtle [3] -- directive ::= prefixID | base | version | ...
final public void DirectiveOld() throws ParseException {Token t ; Token t2 ;
String iri ; String verStr ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case PREFIX_OLD:{
@@ -184,13 +167,40 @@ setBase(iri, t.beginLine, t.beginColumn) ;
declareVersion(verStr, t.beginLine, t.beginColumn);
break;
}
+ default:
+ jj_la1[4] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+}
+
+// Turtle [10] -- VersionSpecifier ::= STRING_LITERAL_QUOTE |
STRING_LITERAL_SINGLE_QUOTE
+ final public String VersionSpecificer() throws ParseException {Token t;
String verStr;
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ case STRING_LITERAL1:{
+ t = jj_consume_token(STRING_LITERAL1);
+verStr = stripQuotes(t.image) ;
+ break;
+ }
+ case STRING_LITERAL2:{
+ t = jj_consume_token(STRING_LITERAL2);
+verStr = stripQuotes(t.image) ;
+ break;
+ }
default:
jj_la1[5] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
+verStr = unescapeStr(verStr, t.beginLine, t.beginColumn) ;
+ checkRDFString(verStr, t.beginLine, t.beginColumn) ;
+ {if ("" != null) return verStr ;}
+ throw new Error("Missing return statement in function");
}
+// Turtle [11] -- triples ::= (subject predicateObjectList)
+// | (blankNodePropertyList predicateObjectList?)
+// | (reifiedTriple predicateObjectList?)
final public void Triples() throws ParseException {Node n;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IRIref:
@@ -242,6 +252,7 @@ declareVersion(verStr, t.beginLine, t.beginColumn);
}
}
+// Turtle [12] -- predicateObjectList ::= verb objectList (';' (verb
objectList)?)*
final public void PredicateObjectList(Node s) throws ParseException {Node p
= null ;
p = Verb();
ObjectList(s, p);
@@ -273,6 +284,7 @@ declareVersion(verStr, t.beginLine, t.beginColumn);
}
}
+// Turtle [13] -- objectList ::= object annotation (',' object annotation)*
final public void ObjectList(Node s, Node p) throws ParseException {Node o ;
o = Object();
emitTriple(s, p, o, token.beginLine, token.beginColumn) ;
@@ -295,7 +307,7 @@ emitTriple(s, p, o, token.beginLine, token.beginColumn) ;
}
}
-// Turtle [9] verb
+// Turtle [14] -- verb ::= predicate | 'a'
final public Node Verb() throws ParseException {Node p ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IRIref:
@@ -318,6 +330,7 @@ p = nRDFtype ;
throw new Error("Missing return statement in function");
}
+// Turtle [15] -- subject ::= iri | BlankNode | collection
final public Node Subject() throws ParseException {Node s; String iri ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IRIref:
@@ -345,14 +358,15 @@ s = createURI(iri, token.beginLine, token.beginColumn) ;
throw new Error("Missing return statement in function");
}
-// Turtle [11] predicate
+// Turtle [16] -- predicate ::= verb
final public Node Predicate() throws ParseException {String iri;
iri = iri();
{if ("" != null) return createURI(iri, token.beginLine, token.beginColumn);}
throw new Error("Missing return statement in function");
}
-// Turtle [12] object
+// Turtle [17] -- object ::= iri | BlankNode | collection |
blankNodePropertyList
+// | literal | tripleTerm | reifiedTriple
final public Node Object() throws ParseException {Node o ; String iri;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IRIref:
@@ -404,7 +418,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
throw new Error("Missing return statement in function");
}
-// Turtle [13] literal
+// Turtle [18] literal ::= RDFLiteral | NumericLiteral | BooleanLiteral
final public Node Literal() throws ParseException {Node n ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case STRING_LITERAL1:
@@ -436,7 +450,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
throw new Error("Missing return statement in function");
}
-// Turtle [14] blankNodePropertyList
+// Turtle [19] -- blankNodePropertyList ::= '[' predicateObjectList ']'
final public Node BlankNodePropertyList() throws ParseException {Token t ;
t = jj_consume_token(LBRACKET);
Node n = createBNode(t.beginLine, t.beginColumn) ;
@@ -446,7 +460,7 @@ Node n = createBNode(t.beginLine, t.beginColumn) ;
throw new Error("Missing return statement in function");
}
-// Turtle [15] collection
+// Turtle [20] -- collection ::= '(' object* ')'
final public Node Collection() throws ParseException {Node listHead =
nRDFnil ; Node lastCell = null ; int mark ; Node n ; Token t ;
t = jj_consume_token(LPAREN);
int line = t.beginLine; int column = t.beginColumn;
@@ -496,14 +510,14 @@ if ( lastCell != null )
throw new Error("Missing return statement in function");
}
-// Turtle: Gramnmar has "object" directly in the collection rule.
+// Turtle: Grammar has "object" directly in the collection rule.
final public Node CollectionElt() throws ParseException {Node o;
o = Object();
{if ("" != null) return o;}
throw new Error("Missing return statement in function");
}
-// Turtle [16] NumericLiteral
+// Turtle [21] -- NumericLiteral ::= INTEGER | DECIMAL | DOUBLE
final public Node NumericLiteral() throws ParseException {Token t ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case INTEGER:{
@@ -529,7 +543,7 @@ if ( lastCell != null )
throw new Error("Missing return statement in function");
}
-// Turtle [128s] RDFLiteral
+// Turtle [22] -- RDFLiteral ::= String (LANG_DIR | ('^^' iri))?
final public Node RDFLiteral() throws ParseException {Token t ; String lex =
null ;
lex = String();
String lang = null ; String uri = null ;
@@ -567,51 +581,7 @@ String lang = null ; String uri = null ;
throw new Error("Missing return statement in function");
}
- final public String LangTag() throws ParseException {Token t ;
- switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case LANG_DIR:{
- t = jj_consume_token(LANG_DIR);
- break;
- }
- case PREFIX_OLD:
- case BASE_OLD:
- case VERSION_OLD:{
- t = AnyDirective();
- break;
- }
- default:
- jj_la1[20] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
-String lang = stripChars(t.image, 1) ; {if ("" != null) return lang ;}
- throw new Error("Missing return statement in function");
-}
-
- final public Token AnyDirective() throws ParseException {Token t ;
- switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
- case PREFIX_OLD:{
- t = jj_consume_token(PREFIX_OLD);
- break;
- }
- case BASE_OLD:{
- t = jj_consume_token(BASE_OLD);
- break;
- }
- case VERSION_OLD:{
- t = jj_consume_token(VERSION_OLD);
- break;
- }
- default:
- jj_la1[21] = jj_gen;
- jj_consume_token(-1);
- throw new ParseException();
- }
-{if ("" != null) return t ;}
- throw new Error("Missing return statement in function");
-}
-
-// Turtle [133s] BooleanLiteral
+// Turtle [23] -- BooleanLiteral ::= 'true' | 'false'
final public Node BooleanLiteral() throws ParseException {
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case TRUE:{
@@ -625,14 +595,17 @@ String lang = stripChars(t.image, 1) ; {if ("" != null)
return lang ;}
break;
}
default:
- jj_la1[22] = jj_gen;
+ jj_la1[20] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
-// Turtle [17] String
+// Turtle [24] -- String ::= STRING_LITERAL_QUOTE
+// | STRING_LITERAL_SINGLE_QUOTE
+// | STRING_LITERAL_LONG_SINGLE_QUOTE
+// | STRING_LITERAL_LONG_QUOTE
final public String String() throws ParseException {Token t ; String lex ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case STRING_LITERAL1:{
@@ -656,7 +629,7 @@ lex = stripQuotes3(t.image) ;
break;
}
default:
- jj_la1[23] = jj_gen;
+ jj_la1[21] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -665,7 +638,7 @@ lex = unescapeStr(lex, t.beginLine, t.beginColumn) ;
throw new Error("Missing return statement in function");
}
-// Turtle [135s] iri
+// Turtle [25] -- iri ::= IRIREF | PrefixedName
final public String iri() throws ParseException {String iri ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IRIref:{
@@ -680,14 +653,14 @@ lex = unescapeStr(lex, t.beginLine, t.beginColumn) ;
break;
}
default:
- jj_la1[24] = jj_gen;
+ jj_la1[22] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
-// Turtle [136s] PrefixedName
+// Turtle [26] -- PrefixedName ::= PNAME_LN | PNAME_NS
final public String PrefixedName() throws ParseException {Token t ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case PNAME_LN:{
@@ -701,14 +674,14 @@ lex = unescapeStr(lex, t.beginLine, t.beginColumn) ;
break;
}
default:
- jj_la1[25] = jj_gen;
+ jj_la1[23] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
-// Turtle [137s] BlankNode
+// Turtle [27] -- BlankNode ::= BLANK_NODE_LABEL | ANON
final public Node BlankNode() throws ParseException {Token t = null ;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case BLANK_NODE_LABEL:{
@@ -722,19 +695,14 @@ lex = unescapeStr(lex, t.beginLine, t.beginColumn) ;
break;
}
default:
- jj_la1[26] = jj_gen;
+ jj_la1[24] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
throw new Error("Missing return statement in function");
}
- final public String IRIREF() throws ParseException {Token t ;
- t = jj_consume_token(IRIref);
-{if ("" != null) return resolveQuotedIRI(t.image, t.beginLine, t.beginColumn)
;}
- throw new Error("Missing return statement in function");
-}
-
+// Turtle [28] -- reifier ::= '~' (iri | BlankNode)?
final public Node Reifier() throws ParseException {Node n = null; String
iriStr; Token t;
t = jj_consume_token(TILDE);
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -757,14 +725,14 @@ n = createURI(iriStr, token.beginLine, token.beginColumn)
;
break;
}
default:
- jj_la1[27] = jj_gen;
+ jj_la1[25] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
break;
}
default:
- jj_la1[28] = jj_gen;
+ jj_la1[26] = jj_gen;
;
}
if ( n == null ) n = createBNode(t.beginLine, t.beginColumn) ;
@@ -772,6 +740,7 @@ if ( n == null ) n = createBNode(t.beginLine,
t.beginColumn) ;
throw new Error("Missing return statement in function");
}
+// Turtle [29] -- reifiedTriple ::= '<<' rtSubject verb rtObject reifier? '>>'
final public Node ReifiedTriple() throws ParseException {Node reifId = null
; Token tok ; Node s; Node p ; Node o ;
tok = jj_consume_token(LT2);
s = ReifiedTripleSubject();
@@ -783,7 +752,7 @@ if ( n == null ) n = createBNode(t.beginLine,
t.beginColumn) ;
break;
}
default:
- jj_la1[29] = jj_gen;
+ jj_la1[27] = jj_gen;
;
}
reifId = emitTripleReifier(reifId, s, p, o, tok.beginLine, tok.beginColumn);
@@ -792,7 +761,7 @@ reifId = emitTripleReifier(reifId, s, p, o, tok.beginLine,
tok.beginColumn);
throw new Error("Missing return statement in function");
}
-// rtSubject
+// Turtle [30] -- rtSubject ::= iri | BlankNode | reifiedTriple
final public Node ReifiedTripleSubject() throws ParseException {Node s;
String iri;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IRIref:
@@ -812,7 +781,7 @@ s = createURI(iri, token.beginLine, token.beginColumn) ;
break;
}
default:
- jj_la1[30] = jj_gen;
+ jj_la1[28] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -820,7 +789,7 @@ s = createURI(iri, token.beginLine, token.beginColumn) ;
throw new Error("Missing return statement in function");
}
-// rtObject
+// Turtle [31] -- rtObject ::= iri | BlankNode | literal | tripleTerm |
reifiedTriple
final public Node ReifiedTripleObject() throws ParseException {Node o;
String iri;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IRIref:
@@ -856,7 +825,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
break;
}
default:
- jj_la1[31] = jj_gen;
+ jj_la1[29] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -864,6 +833,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
throw new Error("Missing return statement in function");
}
+// Turtle [32] -- tripleTerm ::= '<<(' ttSubject verb ttObject ')>>'
final public Node TripleTerm() throws ParseException {Node n = null ; Token
openToken ; String iri ; Node s , p , o ;
jj_consume_token(L_TRIPLE);
s = TripleTermSubject();
@@ -874,7 +844,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
throw new Error("Missing return statement in function");
}
-// ttSubject
+// Turtle [33] -- ttSubject ::= iri | BlankNode
final public Node TripleTermSubject() throws ParseException {Node o ; String
iri;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IRIref:
@@ -890,7 +860,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
break;
}
default:
- jj_la1[32] = jj_gen;
+ jj_la1[30] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -898,7 +868,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
throw new Error("Missing return statement in function");
}
-// ttObject
+// Turtle [34] -- ttObject ::= iri | BlankNode | literal | tripleTerm
final public Node TripleTermObject() throws ParseException {Node o ; String
iri;
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
case IRIref:
@@ -930,7 +900,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
break;
}
default:
- jj_la1[33] = jj_gen;
+ jj_la1[31] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
@@ -939,6 +909,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
}
// RDF-star Annotation Syntax
+// Turtle [35] -- annotation ::= (reifier | annotationBlock)*
final public void Annotation(Node s, Node p, Node o) throws ParseException
{Node reifId = null;
label_5:
while (true) {
@@ -949,7 +920,7 @@ o = createURI(iri, token.beginLine, token.beginColumn) ;
break;
}
default:
- jj_la1[34] = jj_gen;
+ jj_la1[32] = jj_gen;
break label_5;
}
switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
@@ -966,19 +937,76 @@ clearReifierId();
break;
}
default:
- jj_la1[35] = jj_gen;
+ jj_la1[33] = jj_gen;
jj_consume_token(-1);
throw new ParseException();
}
}
}
+// Turtle [36] -- annotationBlock ::= '{|' predicateObjectList '|}'
final public void AnnotationBlock(Node reifId) throws ParseException {
jj_consume_token(L_ANN);
PredicateObjectList(reifId);
jj_consume_token(R_ANN);
}
+// ---- Turtle Terminals
+
+// Turtle [38] -- IRIREF ::= ...
+ final public String IRIREF() throws ParseException {Token t ;
+ t = jj_consume_token(IRIref);
+{if ("" != null) return resolveQuotedIRI(t.image, t.beginLine, t.beginColumn)
;}
+ throw new Error("Missing return statement in function");
+}
+
+// Turtle [42] -- LANG_DIR ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)* ('--'
[a-zA-Z]+)?
+// modified to enumerate the @-directives here because they look like
language tags.
+ final public String LangTag() throws ParseException {Token t ;
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ case LANG_DIR:{
+ t = jj_consume_token(LANG_DIR);
+ break;
+ }
+ case PREFIX_OLD:
+ case BASE_OLD:
+ case VERSION_OLD:{
+ t = AnyAtDirective();
+ break;
+ }
+ default:
+ jj_la1[34] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+String lang = stripChars(t.image, 1) ; {if ("" != null) return lang ;}
+ throw new Error("Missing return statement in function");
+}
+
+// @-directives are legal as language tags.
+ final public Token AnyAtDirective() throws ParseException {Token t ;
+ switch ((jj_ntk==-1)?jj_ntk_f():jj_ntk) {
+ case PREFIX_OLD:{
+ t = jj_consume_token(PREFIX_OLD);
+ break;
+ }
+ case BASE_OLD:{
+ t = jj_consume_token(BASE_OLD);
+ break;
+ }
+ case VERSION_OLD:{
+ t = jj_consume_token(VERSION_OLD);
+ break;
+ }
+ default:
+ jj_la1[35] = jj_gen;
+ jj_consume_token(-1);
+ throw new ParseException();
+ }
+{if ("" != null) return t ;}
+ throw new Error("Missing return statement in function");
+}
+
/** Generated Token Manager. */
public TurtleJavaccTokenManager token_source;
SimpleCharStream jj_input_stream;
@@ -998,10 +1026,10 @@ clearReifierId();
jj_la1_init_2();
}
private static void jj_la1_init_0() {
- jj_la1_0 = new int[]
{0x87e00,0x40000,0x87e00,0x7000,0x0,0xe00,0x80100,0x80100,0x80000,0x0,0x80100,0x0,0x80100,0x80000,0x3898000,0x3818000,0x3898000,0x3800000,0xe00,0xe00,0xe00,0xe00,0x18000,0x0,0x80000,0x0,0x0,0x80000,0x80000,0x0,0x80000,0x3898000,0x80000,0x3898000,0x0,0x0,};
+ jj_la1_0 = new int[]
{0x87e00,0x40000,0x87e00,0x7000,0xe00,0x0,0x80100,0x80100,0x80000,0x0,0x80100,0x0,0x80100,0x80000,0x3898000,0x3818000,0x3898000,0x3800000,0xe00,0xe00,0x18000,0x0,0x80000,0x0,0x0,0x80000,0x80000,0x0,0x80000,0x3898000,0x80000,0x3898000,0x0,0x0,0xe00,0xe00,};
}
private static void jj_la1_init_1() {
- jj_la1_1 = new int[]
{0xe080a20,0x0,0xe080a20,0x0,0x6,0x0,0x6000000,0x6000000,0xe080a20,0x1000,0x6000000,0x2000,0x6000000,0xe000820,0xe0a0a3e,0x1e,0xe0a0a3e,0x0,0x10008000,0x10008000,0x10000000,0x0,0x0,0x1e,0x6000000,0x6000000,0x8000800,0xe000800,0xe000800,0x800000,0xe080800,0xe0a081e,0xe000800,0xe02081e,0xa00000,0xa00000,};
+ jj_la1_1 = new int[]
{0xe080a20,0x0,0xe080a20,0x0,0x0,0x6,0x6000000,0x6000000,0xe080a20,0x1000,0x6000000,0x2000,0x6000000,0xe000820,0xe0a0a3e,0x1e,0xe0a0a3e,0x0,0x10008000,0x10008000,0x0,0x1e,0x6000000,0x6000000,0x8000800,0xe000800,0xe000800,0x800000,0xe080800,0xe0a081e,0xe000800,0xe02081e,0xa00000,0xa00000,0x10000000,0x0,};
}
private static void jj_la1_init_2() {
jj_la1_2 = 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,};