Skip to content

Commit

Permalink
Add a text version of the XPath grammar
Browse files Browse the repository at this point in the history
  • Loading branch information
shepmaster committed Dec 25, 2014
1 parent f213855 commit 4a668db
Showing 1 changed file with 138 additions and 0 deletions.
138 changes: 138 additions & 0 deletions xpath-grammar.txt
@@ -0,0 +1,138 @@
[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 ::= FunctionName '(' ( Argument ( ',' Argument )* )? ')'

[17] Argument ::= Expr

[18] UnionExpr ::= PathExpr
| UnionExpr '|' PathExpr

[19] PathExpr ::= LocationPath
| FilterExpr
| FilterExpr '/' RelativeLocationPath
| FilterExpr '//' RelativeLocationPath

[20] FilterExpr ::= PrimaryExpr
| FilterExpr Predicate

[21] OrExpr ::= AndExpr
| OrExpr 'or' AndExpr

[22] AndExpr ::= EqualityExpr
| AndExpr 'and' EqualityExpr

[23] EqualityExpr ::= RelationalExpr
| EqualityExpr '=' RelationalExpr
| EqualityExpr '!=' RelationalExpr

[24] RelationalExpr ::= AdditiveExpr
| RelationalExpr '<' AdditiveExpr
| RelationalExpr '>' AdditiveExpr
| RelationalExpr '<=' AdditiveExpr
| RelationalExpr '>=' AdditiveExpr

[25] AdditiveExpr ::= MultiplicativeExpr
| AdditiveExpr '+' MultiplicativeExpr
| AdditiveExpr '-' MultiplicativeExpr

[26] MultiplicativeExpr ::= UnaryExpr
| MultiplicativeExpr MultiplyOperator UnaryExpr
| MultiplicativeExpr 'div' UnaryExpr
| MultiplicativeExpr 'mod' UnaryExpr

[27] UnaryExpr ::= UnionExpr
| '-' UnaryExpr

[28] ExprToken ::= '(' | ')' | '[' | ']' | '.' | '..' | '@' | ',' | '::'
| NameTest
| NodeType
| Operator
| FunctionName
| AxisName
| Literal
| Number
| VariableReference

[29] Literal ::= '"' [^"]* '"'
| "'" [^']* "'"

[30] Number ::= Digits ('.' Digits?)?
| '.' Digits

[31] Digits ::= [0-9]+

[32] Operator ::= OperatorName
| MultiplyOperator
| '/' | '//' | '|' | '+' | '-' | '=' | '!=' | '<' | '<=' | '>' | '>='

[33] OperatorName ::= 'and' | 'or' | 'mod' | 'div'

[34] MultiplyOperator ::= '*'

[35] FunctionName ::= QName - NodeType

[36] VariableReference ::= '$' QName

[37] NameTest ::= '*'
| NCName ':' '*'
| QName

[38] NodeType ::= 'comment'
| 'text'
| 'processing-instruction'
| 'node'

[39] ExprWhitespace ::= S

0 comments on commit 4a668db

Please sign in to comment.