BNF for xpath-grammar.jj

NON-TERMINALS

START ::= ExprSingle <EOF>
ExprSingle ::= OrExpr
OperatorExpr ::= OrExpr
OrExpr ::= AndExpr ( "or" AndExpr )*
AndExpr ::= EqualityExpr ( "and" EqualityExpr )*
EqualityExpr ::= RelationalExpr ( ( "=" | "!=" ) RelationalExpr )*
RelationalExpr ::= AdditiveExpr ( ( <LeftAngleBracket> | ">" | "<=" | ">=" ) AdditiveExpr )*
AdditiveExpr ::= MultiplicativeExpr ( ( <Plus> | <Minus> ) MultiplicativeExpr )*
MultiplicativeExpr ::= UnaryExpr ( ( "*" | "div" | "mod" ) UnaryExpr )*
UnaryExpr ::= ( <Minus> )* UnionExpr1
UnionExpr1 ::= ValueExpr ( "|" ValueExpr )*
ValueExpr ::= ( ( FilterExpr ( ( <Slash> | <SlashSlash> ) RelativePathExpr )? ) | PathExpr )
PathExpr ::= ( ( <Slash> ( RelativePathExpr )? ) | ( <SlashSlash> RelativePathExpr ) | RelativePathExpr )
RelativePathExpr ::= StepExpr ( ( <Slash> | <SlashSlash> ) StepExpr )*
StepExpr ::= ( AxisStep | ContextItemExpr | AbbrevReverseStep )
AxisStep ::= ( ReverseStep | ForwardStep ) PredicateList
ForwardStep ::= ( ( ForwardAxis NodeTest ) | AbbrevForwardStep )
ForwardAxis ::= ( ( "child" "::" ) | ( "descendant" "::" ) | ( "attribute" "::" ) | ( "self" "::" ) | ( "descendant-or-self" "::" ) | ( "following-sibling" "::" ) | ( "following" "::" ) | ( "namespace" "::" ) )
AbbrevForwardStep ::= ( "@" )? NodeTest
ReverseStep ::= ( ReverseAxis NodeTest )
ReverseAxis ::= ( ( "parent" "::" ) | ( "ancestor" "::" ) | ( "preceding-sibling" "::" ) | ( "preceding" "::" ) | ( "ancestor-or-self" "::" ) )
AbbrevReverseStep ::= ".."
NodeTest ::= ( KindTest | NameTest )
NameTest ::= ( QName | Wildcard )
Wildcard ::= ( "*" | <NCNameColonStar> )
FilterExpr ::= PrimaryExpr PredicateList
PredicateList ::= ( Predicate )*
Predicate ::= "[" ExprSingle "]"
PrimaryExpr ::= ( Literal | VarRef | ParenthesizedExpr | FunctionCall )
Literal ::= ( NumericLiteral | <StringLiteral> )
NumericLiteral ::= ( <IntegerLiteral> | <DecimalLiteral> )
VarRef ::= "$" VarName
VarName ::= QName
ParenthesizedExpr ::= "(" ExprSingle ")"
ContextItemExpr ::= "."
FunctionCall ::= FunctionQName ( "(" ( ExprSingle ( "," ExprSingle )* )? ")" )
KindTest ::= ( PITest | CommentTest | TextTest | AnyKindTest )
AnyKindTest ::= "node" "(" ")"
TextTest ::= "text" "(" ")"
CommentTest ::= "comment" "(" ")"
PITest ::= "processing-instruction" "(" ( <StringLiteral> )? ")"
NCName ::= QName
QName ::= ( FunctionQName | "comment" | "node" | "processing-instruction" | "text" )
FunctionQName ::= ( <QNameToken> | "ancestor" | "ancestor-or-self" | "and" | "attribute" | "child" | "descendant" | "descendant-or-self" | "div" | "following" | "following-sibling" | "mod" | "namespace" | "or" | "parent" | "preceding" | "preceding-sibling" | "self" )