XPath

LocationPath RelativeLocationPath | AbsoluteLocationPath
AbsoluteLocationPath '/' RelativeLocationPath?
| AbbreviateAbsoluteLocationPath
RelativeLocationPath Step
| RelativeLocationPath '/' Step
| AbbreviatedRelativeLocationPath
Step AxisSpecifier NodeTest Predicate
| AbbreviatedStep
AxisSpecifier AxisName '::'
| AbbreviatedAxisSpecifier
Axes 'ancestor'
| 'ancestor-or-self'
| 'attribute'
| 'child'
| 'descendant'
| 'descendant-or-self'
| 'following'
| 'following-sibling'
| 'namespace'
| 'parent
| 'preceding'
| 'preceding-sibling'
| 'self'
NodeTest NameTest
| 'NodeType '(' ')'
| 'processing-instruction' '(' Literal ')'
Predicate '[' PredicateExpr ']'
PredicateExpr Expr
AbbreviatedAbsoluteLocationPath '//' RelativeLocationPath
AbbreviatedRelativeLocationPath RelativeLocationPath
AbbreviatedStep '.'
| '..'
AbbreviatedAxisSpecifier '@'?
Expr OrExpr
PrimaryExpr VariableReference
| '(' Expr ')'
| Literal
| Number
| FunctionCall
FunctionCall FunctionName '(' (Argument ( ',' Argument)*)? ')'
Argument Expr
UnionExpr PathExpr
| UnionExpr '|' PathExpr
PathExpr LocationPath
| FilterExpr
| FilterExpr '/' RelativeLocationPath
| FilterExpr '//' RelativeLocationPath
 
FilterExpr PrimaryExpr
| FilterExpr Predicate
OrExpr AndExpr
| OrExpr 'or' AndExpr
AndExpr EqualityExpr
| AndExpr 'and' EqualityExpr
EqualityExpr RelationalExpr
| EqualityExpr '=' RelationalExpr
| EqualityExpr '!=' RelationalExpr
RelationalExpr AdditiveExpr
| RelationalExpr '<' AdditiveExpr
| RelationalExpr '>' AdditiveExpr
| RelationalExpr '<=' AdditiveExpr
| RelationalExpr '>=' AdditiveExpr
AdditiveExpr MultiplicativeExpr
| AdditiveExpr '+' MultiplicativeExpr
| AdditiveExpr '-' MultiplicativeExpr
MultiplicativeExpr UnaryExpr
| MultiplicativeExpr MultiplyOperand UnaryExpr
| MultiplicativeExpr 'div' UnaryExpr
| MultiplicativeExpr 'mod' UnaryExpr
UnaryExpr UnionExpr
| '-' UnaryExpr
ExprToken '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::'
| NameTest
| NodeType
| Operator
| FunctionName
| AxisName
| Literal
| Number
| VariableRefence
Literal '"' [^"]* '"'
| "'" [^']* "'"
Number Digits ('.'Digits?)?
Digits [0-9]+
Operator OperatorName
OperatorName | MultiplyOperator
| '/' | '//' | '|' | +' | '-' | '=' | '<' | '<=' | '>' | '>='
MultiplyOperator 'and' | 'or' | 'mod' | 'div'
FunctionName '*'
VariableReference QName - NodeType
NameTest '$'QName
NodeType 'commen'
| 'text'
- 'processing-instruction'
| 'node'
ExprWhiteSpace S