[1] LocationPath ::= RelativeLocationPath | AbsoluteLocationPath [2] AbsoluteLocationPath ::= '/' RelativeLocationPath? | AbbreviatedAbsoluteLocationPath [3] RelativeLocationPath ::= Step | RelativeLocationPath '/' Step | AbbreviatedRelativeLocationPath [4] Step ::= AxisSpecifier NodeTest Predicate* | AbbreviatedStep [5] AxisSpecifier ::= AxisName '::' | AbbreviatedAxisSpecifier [6] AxisName ::= 'ancestor' | 'ancestor-or-self' | 'attribute' | 'child' | 'descendant' | 'descendant-or-self' | 'following' | 'following-sibling' | 'namespace' | 'parent' | 'preceding' | 'preceding-sibling' | 'self' [7] NodeTest ::= NameTest | NodeType '(' ')' | 'processing-instruction' '(' Literal ')' [8] Predicate ::= '[' PredicateExpr ']' [9] PredicateExpr ::= Expr [10] AbbreviatedAbsoluteLocationPath ::= '//' RelativeLocationPath [11] AbbreviatedRelativeLocationPath ::= RelativeLocationPath '//' Step [12] AbbreviatedStep ::= '.' | '..' [13] AbbreviatedAxisSpecifier ::= '@'? [14] Expr ::= OrExpr [15] PrimaryExpr ::= VariableReference | '(' Expr ')' | Literal | Number | 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