-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathxpathparser.y
103 lines (103 loc) · 3.91 KB
/
xpathparser.y
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
// Location Paths
// [1] LocationPath ::= RelativeLocationPath
// | AbsoluteLocationPath
// [2] AbsoluteLocationPath ::= '/' RelativeLocationPath?
// | AbbreviatedAbsoluteLocationPath
// [3] RelativeLocationPath ::= Step
// | RelativeLocationPath '/' Step
// | AbbreviatedRelativeLocationPath
// Location Steps
// [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 ')'
// Predicates
// [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