BNF for sparql.jj
NON-TERMINALS
CompilationUnit
::=
Query
<EOF>
CommaOpt
::=
( <COMMA> )?
Query
::=
(
BaseDecl
)? (
PrefixDecl
)* (
SelectClause
|
ConstructClause
|
DescribeClause
|
AskClause
) (
PrefixDecl
)* (
FromClause
)* (
GraphClause
)* (
WhereClause
)? (
LimitClause
)?
SelectClause
::=
( <SELECT> ( <DISTINCT> )?
VarAsNode
(
CommaOpt
VarAsNode
)* | <SELECT> ( <DISTINCT> )? <STAR> )
DescribeClause
::=
( <DESCRIBE>
VarOrURI
(
CommaOpt
VarOrURI
)* | <DESCRIBE> <STAR> )
ConstructClause
::=
( <CONSTRUCT>
ConstructPattern
| <CONSTRUCT> <STAR> )
AskClause
::=
<ASK>
FromClause
::=
<FROM> (
SourceSelector
)+
GraphClause
::=
<GRAPH> (
SourceSelector
)+
SourceSelector
::=
URI
WhereClause
::=
<WHERE>
GraphPattern
LimitClause
::=
<LIMIT> <INTEGER_LITERAL>
GraphPattern
::=
PatternGroup
PatternGroup
::=
GraphOrPattern
GraphOrPattern
::=
GraphAndPattern
( <UNION>
GraphAndPattern
)*
GraphAndPattern
::=
PatternElement
(
PatternElement
)*
PatternElement
PatternElement
::=
(
TriplePatternAsElement
|
GroupGraphPattern
|
SourceGraphPattern
|
OptionalGraphPattern
|
UnsaidGraphPattern
| ( <AND> )?
ConstraintPattern
)
PatternElementAsGroup
::=
PatternElement
GroupGraphPattern
::=
<LBRACE>
PatternGroup
<RBRACE>
SourceGraphPattern
::=
( <SOURCE> <STAR>
PatternElementAsGroup
| <SOURCE>
VarOrURI
PatternElementAsGroup
)
UnsaidGraphPattern
::=
<UNSAID>
PatternElementAsGroup
OptionalGraphPattern
::=
( <OPTIONAL>
PatternElementAsGroup
| <LBRACKET>
PatternGroup
<RBRACKET> )
ConstraintPattern
::=
Expression
TriplePatternAsElement
::=
TriplePattern
TriplePattern
::=
<LPAREN>
VarOrURI
CommaOpt
VarOrURI
CommaOpt
VarOrLiteral
<RPAREN>
ConstructPattern
::=
(
ConstructElement
)+
ConstructGroup
::=
<LBRACE> (
ConstructElement
)+ <RBRACE>
ConstructElement
::=
(
TriplePatternAsElement
|
ConstructGroup
)
VarOrURI
::=
(
VarAsNode
|
URI
)
VarOrLiteral
::=
(
VarAsNode
|
Literal
)
VarAsNode
::=
<VAR>
VarAsExpr
::=
<VAR>
BaseDecl
::=
<BASE>
QuotedURI
PrefixDecl
::=
( <PREFIX> <NCNAME> <COLON>
QuotedURI
| <PREFIX> <COLON>
QuotedURI
)
Expression
::=
ConditionalOrExpression
ConditionalOrExpression
::=
ConditionalXorExpression
( <SC_OR>
ConditionalXorExpression
)*
ConditionalXorExpression
::=
ConditionalAndExpression
ConditionalAndExpression
::=
ValueLogical
( <SC_AND>
ValueLogical
)*
ValueLogical
::=
StringEqualityExpression
StringEqualityExpression
::=
NumericalLogical
( <STR_EQ>
NumericalLogical
| <STR_NE>
NumericalLogical
| <STR_MATCH>
PatternLiteral
| <STR_NMATCH>
PatternLiteral
)*
NumericalLogical
::=
EqualityExpression
EqualityExpression
::=
RelationalExpression
( <EQ>
RelationalExpression
| <NEQ>
RelationalExpression
)?
RelationalExpression
::=
NumericExpression
( <LT>
NumericExpression
| <GT>
NumericExpression
| <LE>
NumericExpression
| <GE>
NumericExpression
)?
NumericExpression
::=
ShiftExpression
ShiftExpression
::=
AdditiveExpression
AdditiveExpression
::=
MultiplicativeExpression
( <PLUS>
MultiplicativeExpression
| <MINUS>
MultiplicativeExpression
)*
MultiplicativeExpression
::=
UnaryExpression
( <STAR>
UnaryExpression
| <SLASH>
UnaryExpression
| <REM>
UnaryExpression
)*
UnaryExpression
::=
UnaryExpressionNotPlusMinus
UnaryExpressionNotPlusMinus
::=
( <TILDE> | <BANG> )
UnaryExpression
|
PrimaryExpression
PrimaryExpression
::=
(
VarAsExpr
|
Literal
|
FunctionCall
| <LPAREN>
Expression
<RPAREN> )
FunctionCall
::=
<AMP> <QNAME> <LPAREN>
ArgList
<RPAREN>
ArgList
::=
(
VarOrLiteral
( <COMMA>
VarOrLiteral
)* )?
Literal
::=
URI
|
NumericLiteral
|
TextLiteral
NumericLiteral
::=
<INTEGER_LITERAL>
|
<FLOATING_POINT_LITERAL>
TextLiteral
::=
( <STRING_LITERAL1> | <STRING_LITERAL2> ) ( <LANG> )? ( <DATATYPE>
URI
)?
PatternLiteral
::=
URI
::=
QuotedURI
|
QName
QName
::=
<QNAME>
QuotedURI
::=
<URI>