BNF for arq.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> )
ConstructPattern
::=
<LBRACE>
TriplePatternList
( <DOT> )? <RBRACE>
AskClause
::=
<ASK>
FromClause
::=
<FROM> (
SourceSelector
)+
GraphClause
::=
<GRAPH> (
SourceSelector
)+
SourceSelector
::=
URI
WhereClause
::=
( <WHERE> )?
GraphPattern
LimitClause
::=
<LIMIT> <INTEGER_LITERAL>
GraphPattern
::=
GraphOrPattern
GraphOrPattern
::=
GraphAndPattern
( <UNION>
GraphAndPattern
)*
GraphAndPattern
::=
GroupGraphPattern
GroupGraphPattern
::=
<LBRACE>
PatternGroup
<RBRACE>
PatternGroup
::=
PatternElement
( <DOT>
PatternElement
)* ( <DOT> )?
PatternElement
::=
(
TriplePatternList
|
SourceGraphPattern
|
OptionalGraphPattern
|
GraphPattern
|
UnsaidGraphPattern
|
ConstraintPattern
)
SourceGraphPattern
::=
( <SOURCE> <STAR>
GroupGraphPattern
| <SOURCE>
VarOrURI
GroupGraphPattern
)
OptionalGraphPattern
::=
( <OPTIONAL>
GroupGraphPattern
| <LBRACKET>
PatternGroup
<RBRACKET> )
UnsaidGraphPattern
::=
<UNSAID>
GroupGraphPattern
ConstraintPattern
::=
Expression
TriplePatternList
::=
TriplePattern
( <DOT>
TriplePattern
)*
TriplePattern
::=
VarOrURI
VarOrURI
VarOrLiteral
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
::=
( <PLUS>
UnaryExpressionNotPlusMinus
| <MINUS>
UnaryExpressionNotPlusMinus
|
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>