[1] LocationPath ::= [86]RelativeLocationPath | [87]AbsoluteLocationPath [2] AbsoluteLocationPath ::= '/' [88]RelativeLocationPath? | [89]AbbreviatedAbsoluteLocationPath [3] RelativeLocationPath ::= [90]Step | [91]RelativeLocationPath '/' [92]Step | [93]AbbreviatedRelativeLocationPath [4] Step ::= [99]AxisSpecifier [100]NodeTest [101]Predicate* | [102]AbbreviatedStep [5] AxisSpecifier ::= [103]AxisName '::' | [104]AbbreviatedAxisSpecifier [6] AxisName ::= 'ancestor' | 'ancestor-or-self' | 'attribute' | 'child' | 'descendant' | 'descendant-or-self' | 'following' | 'following-sibling' | 'namespace' | 'parent' | 'preceding' | 'preceding-sibling' | 'self' [7] NodeTest ::= [121]NameTest | [122]NodeType '(' ')' | 'processing-instruction' '(' [123]Literal ')' [8] Predicate ::= '[' [132]PredicateExpr ']' [9] PredicateExpr ::= [133]Expr [10] AbbreviatedAbsoluteLocationPath ::= '//' [135]RelativeLocationPath [11] AbbreviatedRelativeLocationPath ::= [136]RelativeLocationPath '//' [137]Step [12] AbbreviatedStep ::= '.' | '..' [13] AbbreviatedAxisSpecifier ::= '@'? [14] Expr ::= [139]OrExpr [15] PrimaryExpr ::= [140]VariableReference | '(' [141]Expr ')' | [142]Literal | [143]Number | [144]FunctionCall [16] FunctionCall ::= [152]FunctionName '(' ( [153]Argument ( ',' [154]Argument )* )? ')' [17] Argument ::= [155]Expr [18] UnionExpr ::= [159]PathExpr | [160]UnionExpr '|' [161]PathExpr [19] PathExpr ::= [162]LocationPath | [163]FilterExpr | [164]FilterExpr '/' [165]RelativeLocationPath | [166]FilterExpr '//' [167]RelativeLocationPath [20] FilterExpr ::= [168]PrimaryExpr | [169]FilterExpr [170]Predicate [21] OrExpr ::= [186]AndExpr | [187]OrExpr 'or' [188]AndExpr [22] AndExpr ::= [189]EqualityExpr | [190]AndExpr 'and' [191]EqualityExpr [23] EqualityExpr ::= [192]RelationalExpr | [193]EqualityExpr '=' [194]RelationalExpr | [195]EqualityExpr '!=' [196]RelationalExpr [24] RelationalExpr ::= [197]AdditiveExpr | [198]RelationalExpr '<' [199]AdditiveExpr | [200]RelationalExpr '>' [201]AdditiveExpr | [202]RelationalExpr '<=' [203]AdditiveExpr | [204]RelationalExpr '>=' [205]AdditiveExpr [25] AdditiveExpr ::= [212]MultiplicativeExpr | [213]AdditiveExpr '+' [214]MultiplicativeExpr | [215]AdditiveExpr '-' [216]MultiplicativeExpr [26] MultiplicativeExpr ::= [217]UnaryExpr | [218]MultiplicativeExpr [219]MultiplyOperator [220]UnaryExpr | [221]MultiplicativeExpr 'div' [222]UnaryExpr | [223]MultiplicativeExpr 'mod' [224]UnaryExpr [27] UnaryExpr ::= [225]UnionExpr | '-' [226]UnaryExpr [28] ExprToken ::= '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::' | [249]NameTest | [250]NodeType | [251]Operator | [252]FunctionName | [253]AxisName | [254]Literal | [255]Number | [256]VariableReference [29] Literal ::= '"' [^"]* '"' | "'" [^']* "'" [30] Number ::= [257]Digits ('.' [258]Digits?)? | '.' [259]Digits [31] Digits ::= [0-9]+ [32] Operator ::= [260]OperatorName | [261]MultiplyOperator | '/' | '//' | '|' | '+' | '-' | '=' | '!=' | '<' | '<=' | '>' | '>=' [33] OperatorName ::= 'and' | 'or' | 'mod' | 'div' [34] MultiplyOperator ::= '*' [35] FunctionName ::= [262]QName - [263]NodeType [36] VariableReference ::= '$' [264]QName [37] NameTest ::= '*' | [265]NCName ':' '*' | [266]QName [38] NodeType ::= 'comment' | 'text' | 'processing-instruction' | 'node' [39] ExprWhitespace ::= [267]S