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

//Tokens in BNF
// [] means will be inlined.
// The presense of a token in the file does not mean it is actually used.

[<EOF>]          ::=
[<IRIref>]   ::= '<' ([^<>"{}|^`\]-[#x00-#x20])* '>'
<PNAME_NS>   ::= <PN_PREFIX>? ':'
<PNAME_LN>   ::= <PNAME_NS> <PN_LOCAL>
<BLANK_NODE_LABEL> ::= '_:' ( <PN_CHARS_U> | [0-9] ) ((<PN_CHARS>|'.')* <PN_CHARS>)?

<VAR1>       ::= '?' <VARNAME>
<VAR2>       ::= '$' <VARNAME>
<LANGTAG>    ::= '@' [a-zA-Z]+ ('-' [a-zA-Z0-9]+)*

<INTEGER>	::= [0-9]+
<DECIMAL>   ::= ( [0-9]* '.' [0-9]+ )

// Required exponent
<DOUBLE> ::= [0-9]+ '.' [0-9]* <EXPONENT> | '.' ([0-9])+ <EXPONENT> | ([0-9])+ <EXPONENT>

<INTEGER_POSITIVE> ::= <PLUS> <INTEGER>
<DECIMAL_POSITIVE> ::= <PLUS> <DECIMAL>
<DOUBLE_POSITIVE> ::=  <PLUS> <DOUBLE>

<INTEGER_NEGATIVE> ::= <MINUS> <INTEGER>
<DECIMAL_NEGATIVE> ::= <MINUS> <DECIMAL>
<DOUBLE_NEGATIVE>  ::= <MINUS> <DOUBLE>

<#EXPONENT>  ::= [eE] [+-]? [0-9]+

<STRING_LITERAL1> ::= "'" ( ([^#x27#x5C#xA#xD]) | <ECHAR> )* "'"
<STRING_LITERAL2> ::= '"' ( ([^#x22#x5C#xA#xD]) | <ECHAR> )* '"'

<STRING_LITERAL_LONG1> ::= "'''" ( ( "'" | "''" )? ( [^'\] | <ECHAR> ) )* "'''"
<STRING_LITERAL_LONG2> ::= '"""' ( ( '"' | '""' )? ( [^"\] | <ECHAR> ) )* '"""'

<ECHAR>           ::= '\' [tbnrf\"']
// The print value is the whitespace trimmed value after ::=

[<KW_A>]       ::= 'a'

[<BASE>]       ::= 'BASE'
[<PREFIX>]     ::= 'PREFIX'
[<SELECT>]     ::= 'SELECT'
[<DESCRIBE>]   ::= 'DESCRIBE'
[<CONSTRUCT>]  ::= 'CONSTRUCT'
//[<CONSTRUCT_WHERE>]  ::= 'CONSTRUCT WHERE'
[<ASK>]        ::= 'ASK'
[<JSON>]       ::= 'JSON'
[<DISTINCT>]   ::= 'DISTINCT'
[<REDUCED>]    ::= 'REDUCED'
[<WHERE>]      ::= 'WHERE'

[<LIMIT>]      ::= 'LIMIT'
[<OFFSET>]     ::= 'OFFSET'
[<ORDER>]      ::= 'ORDER'
[<BY>]         ::= 'BY'
[<VALUES>]     ::= 'VALUES'
[<UNDEF>]      ::= 'UNDEF'

[<FROM>]       ::= 'FROM'
[<NAMED>]      ::= 'NAMED'

[<ASC>]        ::= 'ASC'
[<DESC>]       ::= 'DESC'

[<AS>]         ::= 'AS'
[<EXT>]        ::= 'EXT'
[<GROUP>]      ::= 'GROUP'
[<HAVING>]     ::= 'HAVING'
[<SEPARATOR>]  ::= 'SEPARATOR'
[<AGG>]        ::= 'AGG'
[<COUNT>]      ::= 'COUNT'
[<MIN>]        ::= 'MIN'
[<MAX>]        ::= 'MAX'
[<SUM>]        ::= 'SUM'
[<AVG>]        ::= 'AVG'
[<MEDIAN>]     ::= 'MEDIAN'
[<MODE>]       ::= 'MODE'
[<SAMPLE>]     ::= 'SAMPLE'
[<GROUP_CONCAT>]     ::= 'GROUP_CONCAT'

[<STDEV>]      ::= 'STDEV'
[<STDEV_SAMP>] ::= 'STDEVP_SAMP'
[<STDEV_POP>]  ::= 'STDEV_POP'
[<VARIANCE>]   ::= 'VARIANCE'
[<VAR_SAMP>]   ::= 'VAR_SAMP'
[<VAR_POP>]    ::= 'VAR_POP'

[<SERVICE>]    ::=    'SERVICE'
[<MINUS_P>]    ::=    'MINUS'
[<DIFF>]       ::=    'DIFF'
[<EXISTS>]     ::=    'EXISTS'
[<NOT>]        ::=    'NOT'
[<UNSAID>]     ::=    'UNSAID'
[<LET>]        ::=    'LET'
[<BIND>]       ::=    'BIND'

[<FILTER>]     ::= 'FILTER'
[<REGEXP>]     ::= 'REGEXP'
[<GRAPH>]      ::= 'GRAPH'
[<UNION>]      ::= 'UNION'
[<OPTIONAL>]   ::= 'OPTIONAL'
[<BOUND>]      ::= 'BOUND'
[<COALESCE>]   ::= 'COALESCE'
[<IF>]         ::= 'IF'
[<STR>]        ::= 'STR'
[<URI>]        ::= 'URI'
[<IRI>]        ::= 'IRI'
[<BNODE>]      ::= 'BNODE'
[<LITERAL>]    ::= 'LITERAL'
[<DTYPE>]      ::= 'DATATYPE'
[<LANG>]       ::= 'LANG'
[<LANGMATCHES>] ::= 'LANGMATCHES'

[<STRLANG>]     ::= 'STRLANG'
[<STRDT>]       ::= 'STRDT'
[<IN>]          ::= 'IN'

[<RAND>]        ::= 'RAND'
[<ABS>]         ::= 'ABS'
[<CEIL>]        ::= 'CEIL'
[<FLOOR>]       ::= 'FLOOR'
[<ROUND>]       ::= 'ROUND'
[<CONCAT>]      ::= 'CONCAT'
[<SUBSTR>]      ::= 'SUBSTR'
[<STRLEN>]      ::= 'STRLEN'
[<REPLACE>]     ::= 'REPLACE'
[<UCASE>]       ::= 'UCASE'
[<LCASE>]       ::= 'LCASE'
[<ENCODE_FOR_URI>]      ::= 'ENCODE_FOR_URI'
[<CONTAINS>]    ::= 'CONTAINS'
[<STRSTARTS>]   ::= 'STRSTARTS'
[<STRENDS>]     ::= 'STRENDS'
[<STRBEFORE>]   ::= 'STRBEFORE'
[<STRAFTER>]    ::= 'STRAFTER'
[<YEAR>]        ::= 'YEAR'
[<MONTH>]       ::= 'MONTH'
[<DAY>]         ::= 'DAY'
[<HOURS>]       ::= 'HOURS'
[<MINUTES>]     ::= 'MINUTES'
[<SECONDS>]     ::= 'SECONDS'
[<TIMEZONE>]    ::= 'TIMEZONE'
[<TZ>]          ::= 'TZ'
[<NOW>]         ::= 'NOW'
[<UUID>]        ::= 'UUID'
[<STRUUID>]     ::= 'STRUUID'
[<VERSION>]     ::= 'VERSION'
[<CAST>]        ::= 'CAST'
[<CALL>]        ::= 'CALL'
[<MULTI>]       ::= 'MULTI'
[<SHORTEST>]    ::= 'SHORTEST'

[<MD5>]         ::= 'MD5'
[<SHA1>]        ::= 'SHA1'
[<SHA224>]      ::= 'SHA224'
[<SHA256>]      ::= 'SHA256'
[<SHA384>]      ::= 'SHA384'
[<SHA512>]      ::= 'SHA512'

[<DFT>]        ::= 'DEFAULT'
[<ALL>]        ::= 'ALL'

[<IS_IRI>]     ::= 'isIRI'
[<IS_URI>]     ::= 'isURI'
[<IS_BLANK>]   ::= 'isBLANK'
[<IS_LITERAL>] ::= 'isLITERAL'
[<IS_NUMERIC>] ::= 'isNUMERIC'
[<SAME_TERM>]  ::= 'sameTerm'
[<REGEX>]      ::= 'REGEX'
[<TRUE>]       ::= 'true'
[<FALSE>]      ::= 'false'

[<MODIFY>]       ::= 'MODIFY'
[<INSERT>]       ::= 'INSERT'
[<DELETE>]       ::= 'DELETE'
[<DELETE_DATA>]  ::= 'DELETE DATA'
[<DELETE_WHERE>] ::= 'DELETE WHERE'
[<INSERT_DATA>]  ::= 'INSERT DATA'

[<ADD>]         ::= 'ADD'
[<MOVE>]        ::= 'MOVE'
[<COPY>]        ::= 'COPY'
[<META>]        ::= 'META'

[<DATA>]        ::= 'DATA'
[<VALUES>]      ::= 'VALUES'
[<LOAD>]        ::= 'LOAD' 
[<INTO>]        ::= 'INTO' 
[<WITH>]        ::= 'WITH' 
[<USING>]       ::= 'USING' 
[<CLEAR>]       ::= 'CLEAR' 
[<CREATE>]      ::= 'CREATE' 
[<SILENT>]      ::= 'SILENT' 
[<DROP>]        ::= 'DROP' 
[<TO>]          ::= 'TO' 
[<BEGIN>]       ::= 'BEGIN'
[<COMMIT>]      ::= 'COMMIT'
[<ABORT>]       ::= 'ABORT'

//[<NIL>]        ::= '(' ')'
<NIL>          ::= '(' <WS>* ')'
<WS>           ::= #x20 | #x9 | #xD | #xA

[<LPAREN>]     ::= '('
[<RPAREN>]     ::= ')'

[<LBRACE>]     ::= '{'
[<RBRACE>]     ::= '}'

[<LBRACKET>]   ::= '['
[<RBRACKET>]   ::= ']'

// Compound delimiters.

[<BLK1_L>]     ::= '(|'
[<BLK1_R>]     ::= '|)'

[<BLK2_L>]     ::= '{|'
[<BLK2_R>]     ::= '|}'

//[<ANON>]       ::= '[' ']'
<ANON>       ::= '['  <WS>* ']'

[<SEMICOLON>]  ::= ';'
[<COMMA>]      ::= ','
[<DOT>]        ::= '.'
[<GT>]         ::= '>'
[<LT>]         ::= '<'
[<BANG>]       ::= '!'
[<HOOK>]       ::= '?'
[<COLON>]      ::= ':'
[<EQ>]         ::= '='
[<NE>]         ::= '!='
[<LE>]         ::= '<='
[<GE>]         ::= '>='
[<SC_OR>]      ::= '||'
[<SC_AND>]     ::= '&&'
[<INCR>]       ::= '++'
[<DECR>]       ::= '--'
[<PLUS>]       ::= '+'
[<MINUS>]      ::= '-'
[<STAR>]       ::= '*'
[<SLASH>]      ::= '/'
[<DATATYPE>]   ::= '^^'
//[<AT>]         ::= '@'
[<ASSIGN>]        ::= ':='
[<VBAR>]          ::= '|'
[<CARAT>]        ::= '^'
[<FPATH>]         ::= '->'
[<RPATH>]         ::= '<-'
[<QMARK>]         ::= '?'


<#PN_CHARS_BASE>     ::= [A-Z] | [a-z] | [#x00C0-#x00D6] | [#x00D8-#x00F6] | [#x00F8-#x02FF] | [#x0370-#x037D] | [#x037F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF]

<#PN_CHARS_U>      ::= <PN_CHARS_BASE> | '_'

<#VARNAME>      ::=  ( <PN_CHARS_U>  | [0-9] ) ( <PN_CHARS_U> | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040] )*

<#PN_CHARS>      ::=  <PN_CHARS_U> | '-' | [0-9] | #x00B7 | [#x0300-#x036F] | [#x203F-#x2040]

<#PN_PREFIX> ::= <PN_CHARS_BASE> ((<PN_CHARS>|'.')* <PN_CHARS>)?

<#PN_LOCAL>  ::= (<PN_CHARS_U> | ':' | [0-9] | <PLX> ) ((<PN_CHARS> | '.' | ':' | <PLX>)* (<PN_CHARS> | ':' | <PLX>) )?

<#PLX>            ::= <PERCENT> | <PN_LOCAL_ESC>

<PERCENT>         ::= '%' <HEX> <HEX>
<HEX>             ::= [0-9] | [A-F] | [a-f]
<PN_LOCAL_ESC>    ::= '\' ( '_' | '~' | '.' | '-' | '!' | '$' | '&' | "'" | '(' | ')' | '*' | '+' | ',' | ';' | '=' | '/' | '?' | '#' | '@' | '%' )
