
Grammar extracted by Vadim Zaytsev, see the Grammar Zoo entry for details: xmlware/xpath/xpath-1/w3c/w3c-19991116/extracted
Source used for this grammar: W3C, XML Path Language (XPath), Version 1.0, xmlspec-v20.dtd, 16 November 1999 [Source]
LocationPath, AbsoluteLocationPath, RelativeLocationPath, Step, AxisSpecifier, AxisName, NodeTest, Predicate, PredicateExpr, AbbreviatedAbsoluteLocationPath, AbbreviatedRelativeLocationPath, AbbreviatedStep, AbbreviatedAxisSpecifier, Expr, PrimaryExpr, FunctionCall, Argument, UnionExpr, PathExpr, FilterExpr, OrExpr, AndExpr, EqualityExpr, RelationalExpr, AdditiveExpr, MultiplicativeExpr, UnaryExpr, ExprToken, Number, Operator, OperatorName, MultiplyOperator, VariableReference, NameTest, NodeType, ExprWhitespace, Digits), 0 root (—), 2 top (ExprToken, ExprWhitespace), 5 bottom (QName 2, Literal 3, S, FunctionName 2, NCName).[NT-LocationPath], [NT-AbsoluteLocationPath], [NT-RelativeLocationPath], [NT-Step], [NT-AxisSpecifier], [NT-AxisName], [NT-NodeTest], [NT-Predicate], [NT-PredicateExpr], [NT-AbbreviatedAbsoluteLocationPath], [NT-AbbreviatedRelativeLocationPath], [NT-AbbreviatedStep], [NT-AbbreviatedAxisSpecifier], [NT-Expr], [NT-PrimaryExpr], [NT-FunctionCall], [NT-Argument], [NT-UnionExpr], [NT-PathExpr], [NT-FilterExpr], [NT-OrExpr], [NT-AndExpr], [NT-EqualityExpr], [NT-RelationalExpr], [NT-AdditiveExpr], [NT-MultiplicativeExpr], [NT-UnaryExpr], [NT-ExprToken], [NT-Number], [NT-Operator], [NT-OperatorName], [NT-MultiplyOperator], [NT-VariableReference], [NT-NameTest], [NT-NodeType], [NT-ExprWhitespace], [NT-Digits].LocationPath ::= [NT-LocationPath]::RelativeLocationPathAbsoluteLocationPath
AbsoluteLocationPath ::= [NT-AbsoluteLocationPath]::"/" RelativeLocationPathAbbreviatedAbsoluteLocationPath
RelativeLocationPath ::= [NT-RelativeLocationPath]::StepRelativeLocationPath "/" StepAbbreviatedRelativeLocationPath
Step ::= [NT-Step]::AxisSpecifier NodeTest PredicateAbbreviatedStep
AxisSpecifier ::= [NT-AxisSpecifier]::AxisName "::"AbbreviatedAxisSpecifier
AxisName ::= [NT-AxisName]::"ancestor""ancestor-or-self""attribute""child""descendant""descendant-or-self""following""following-sibling""namespace""parent""preceding""preceding-sibling""self"
NodeTest ::= [NT-NodeTest]::NameTestNodeType "(" ")""processing-instruction" "(" Literal ")"
Predicate ::= [NT-Predicate]::"[" PredicateExpr "]"
PredicateExpr ::= [NT-PredicateExpr]::Expr
AbbreviatedAbsoluteLocationPath ::= [NT-AbbreviatedAbsoluteLocationPath]::"//" RelativeLocationPath
AbbreviatedRelativeLocationPath ::= [NT-AbbreviatedRelativeLocationPath]::RelativeLocationPath "//" Step
AbbreviatedStep ::= [NT-AbbreviatedStep]::"."".."
AbbreviatedAxisSpecifier ::= [NT-AbbreviatedAxisSpecifier]::"@"
Expr ::= [NT-Expr]::OrExpr
PrimaryExpr ::= [NT-PrimaryExpr]::VariableReference"(" Expr ")"LiteralNumberFunctionCall
FunctionCall ::= [NT-FunctionCall]::FunctionName "(" Argument "," Argument ")"
Argument ::= [NT-Argument]::Expr
UnionExpr ::= [NT-UnionExpr]::PathExprUnionExpr "|" PathExpr
PathExpr ::= [NT-PathExpr]::LocationPathFilterExprFilterExpr "/" RelativeLocationPathFilterExpr "//" RelativeLocationPath
FilterExpr ::= [NT-FilterExpr]::PrimaryExprFilterExpr Predicate
OrExpr ::= [NT-OrExpr]::AndExprOrExpr "or" AndExpr
AndExpr ::= [NT-AndExpr]::EqualityExprAndExpr "and" EqualityExpr
EqualityExpr ::= [NT-EqualityExpr]::RelationalExprEqualityExpr "=" RelationalExprEqualityExpr "!=" RelationalExpr
RelationalExpr ::= [NT-RelationalExpr]::AdditiveExprRelationalExpr "<" AdditiveExprRelationalExpr ">" AdditiveExprRelationalExpr "<=" AdditiveExprRelationalExpr ">=" AdditiveExpr
AdditiveExpr ::= [NT-AdditiveExpr]::MultiplicativeExprAdditiveExpr "+" MultiplicativeExprAdditiveExpr "-" MultiplicativeExpr
MultiplicativeExpr ::= [NT-MultiplicativeExpr]::UnaryExprMultiplicativeExpr MultiplyOperator UnaryExprMultiplicativeExpr "div" UnaryExprMultiplicativeExpr "mod" UnaryExpr
UnaryExpr ::= [NT-UnaryExpr]::UnionExpr"-" UnaryExpr
ExprToken ::= [NT-ExprToken]::"("")""[""]"".""..""@"",""::"NameTestNodeTypeOperatorFunctionNameAxisNameLiteralNumberVariableReference
Number ::= [NT-Number]::Digits "." Digits"." Digits
Operator ::= [NT-Operator]::OperatorNameMultiplyOperator"/""//""|""+""-""=""!=""<""<="">"">="
OperatorName ::= [NT-OperatorName]::"and""or""mod""div"
MultiplyOperator ::=
[NT-MultiplyOperator]::"*"VariableReference ::= [NT-VariableReference]::"$" QName
NameTest ::= [NT-NameTest]::"*"NCName ":" "*"QName
NodeType ::= [NT-NodeType]::"comment""text""processing-instruction""node"
ExprWhitespace ::= [NT-ExprWhitespace]::S
Digits ::= [NT-Digits]::"0""1""2""3""4""5""6""7""8""9"