[1] turtleDoc ::= statement*
[2] statement ::= directive | (triples ".")
[3] directive ::= prefixID | base | sparqlPrefix | sparqlBase
[4] prefixID ::= "@prefix" PNAME_NS IRIREF "."
[5] base ::= "@base" IRIREF "."
[28s] sparqlPrefix ::= SPARQL_PREFIX PNAME_NS IRIREF
[29s] sparqlBase ::= SPARQL_BASE IRIREF
[6] triples ::= (subject predicateObjectList) | (blankNodePropertyList predicateObjectList?)
[7] predicateObjectList ::= verb objectList (";" (verb objectList)?)*
[8] objectList ::= object ("," object)*
[9] verb ::= predicate | "a"
[10] subject ::= iri | BlankNode | collection
[11] predicate ::= iri
[12] object ::= iri | BlankNode | collection | blankNodePropertyList | literal
[13] literal ::= RDFLiteral | NumericLiteral | BooleanLiteral
[14] blankNodePropertyList ::= "[" predicateObjectList "]"
[15] collection ::= "(" object* ")"
[16] NumericLiteral ::= INTEGER | DECIMAL | DOUBLE
[128s] RDFLiteral ::= String (LANGTAG | ("^^" iri))?
[133s] BooleanLiteral ::= "true" | "false"
[17] String ::= STRING_LITERAL_QUOTE | STRING_LITERAL_SINGLE_QUOTE | STRING_LITERAL_LONG_SINGLE_QUOTE | STRING_LITERAL_LONG_QUOTE
[135s] iri ::= IRIREF | PrefixedName
[136s] PrefixedName ::= PNAME_LN | PNAME_NS
[137s] BlankNode ::= BLANK_NODE_LABEL | ANON
@terminals # Productions for terminals
[18] IRIREF ::= "<" ([^<>"{}|^`]-[#x00-#x20] | UCHAR)* ">"
[139s] PNAME_NS ::= PN_PREFIX? ":"
[140s] PNAME_LN ::= PNAME_NS PN_LOCAL
[141s] BLANK_NODE_LABEL ::= "_:" (PN_CHARS_U | [0-9]) ((PN_CHARS | ".")* PN_CHARS)?
[144s] LANGTAG ::= "@" [a-zA-Z]+ ("-" [a-zA-Z0-9]+)*
[19] INTEGER ::= [+-]? [0-9]+
[20] DECIMAL ::= [+-]? ([0-9]* "." [0-9]+)
[21] DOUBLE ::= [+-]? (([0-9]+ "." [0-9]* EXPONENT) | ("." [0-9]+ EXPONENT) | ([0-9]+ EXPONENT))
[154s] EXPONENT ::= [eE] [+-]? [0-9]+
[22] STRING_LITERAL_QUOTE ::= '"' ([^>"#x5C#x0A#x0D] | ECHAR | UCHAR)* '"'
[23] STRING_LITERAL_SINGLE_QUOTE ::= "'" ([^#x27#x5C#x0A#x0D] | ECHAR | UCHAR)* "'"
[24] STRING_LITERAL_LONG_SINGLE_QUOTE ::= "'''" (("'" | "''")? [^']#x20|#x20ECHAR#x20|#x20UCHAR#x20)#x20)*#x20"'''"])
[25] STRING_LITERAL_LONG_QUOTE ::= '"""' (('"' | '""')? [^"]#x20|#x20ECHAR#x20|#x20UCHAR#x20)#x20)*#x20'"""'])
[26] UCHAR ::= ("u" HEX HEX HEX HEX) | ("U" HEX HEX HEX HEX HEX HEX HEX HEX)
[159s] ECHAR ::= "\" [tbnrf"']
[28t] SPARQL_PREFIX ::= [Pp] [Rr] [Ee] [Ff] [Ii] [Xx]
[29t] SPARQL_BASE ::= [Bb] [Aa] [Ss] [Ee]
[161s] WS ::= #x20 | #x09 | #x0D | #x0A
[162s] ANON ::= "[" WS* "]"
[163s] PN_CHARS_BASE ::= [A-Z]
| [a-z]
| [#xC0-#xD6]
| [#xD8-#xF6]
| [#xF8-#x02FF]
| [#x0370-#x037D]
| [#x037F-#x1FFF]
| [#x200C-#x200D]
| [#x2070-#x218F]
| [#x2C00-#x2FEF]
| [#x3001-#xD7FF]
| [#xF900-#xFDCF]
| [#xFDF0-#xFFFD]
| [#x00010000-#x000EFFFF]
[164s] PN_CHARS_U ::= PN_CHARS_BASE | "_"
[166s] PN_CHARS ::= PN_CHARS_U | "-" | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040]
[167s] PN_PREFIX ::= PN_CHARS_BASE ((PN_CHARS | ".")* PN_CHARS)?
[168s] PN_LOCAL ::= (PN_CHARS_U | ":" | [0-9] | PLX) ((PN_CHARS | "." | ":" | PLX)* (PN_CHARS | ":" | PLX))?
[169s] PLX ::= PERCENT | PN_LOCAL_ESC
[170s] PERCENT ::= "%" HEX HEX
[171s] HEX ::= [0-9A-Fa-f]
[172s] PN_LOCAL_ESC ::= "\" ("_" | "~" | "." | "-" | "!" | "$" | "&" | "'" | "(" | ")" | "*" | "+" | "," | ";" | "=" | "/" | "?" | "#" | "@" | "%")