Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
summaryrefslogtreecommitdiff
blob: 0732bbba93f437327c39f90362a547ee6d498b55 (plain)
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178

%token QNAME
%token NAME_COLON_STAR
%token DOT
%token DOT_DOT
%token AT
%token AXIS_NAME
%token FUNCTION_NAME
%token COMMENT
%token PI
%token TEXT
%token NODE
%token STAR
%token LPAR
%token RPAR
%token LSQB
%token RSQB
%token LITERAL
%token NUMBER
%token COLON_COLON
%token DOLLAR_QNAME
%token SLASH
%token SLASH_SLASH
%token VBAR
%token COMMA
%token PLUS
%token MINUS
%token EQUALS
%token GT
%token LT
%token GTE
%token LTE
%token MULTIPLY
%token AND
%token OR
%token MOD
%token DIV
%token QUO

%%

expr :
  or_expr
  ;

or_expr :
  and_expr
  | or_expr OR and_expr
  ;

and_expr :
  equality_expr
  | and_expr AND equality_expr
  ;

equality_expr :
  relational_expr
  | equality_expr EQUALS relational_expr
  ;

relational_expr :
  additive_expr
  | relational_expr LT additive_expr
  | relational_expr GT additive_expr
  | relational_expr LTE additive_expr
  | relational_expr GTE additive_expr
  ;

additive_expr :
  multiplicative_expr
  | additive_expr PLUS multiplicative_expr
  | additive_expr MINUS multiplicative_expr
  ;

multiplicative_expr :
  unary_expr
  | multiplicative_expr MULTIPLY unary_expr
  | multiplicative_expr DIV unary_expr
  | multiplicative_expr MOD unary_expr
  ;

unary_expr :
  union_expr
  | '-' unary_expr
  ;

union_expr :
  path_expr
  | union_expr VBAR path_expr
  ;

path_expr :
  location_path
  | primary_expr predicates segment
  ;

segment :
  /* empty */
  | SLASH relative_location_path
  | SLASH_SLASH relative_location_path
  ;

location_path :
  relative_location_path
  | absolute_location_path
  ;

absolute_location_path :
  SLASH
  | SLASH relative_location_path
  | SLASH_SLASH relative_location_path
  ;

relative_location_path :
  step
  | relative_location_path SLASH step
  | relative_location_path SLASH_SLASH step
  ;

step :
  axis node_test predicates
  | DOT
  | DOT_DOT
  ;

axis:
  /* empty */
  | AXIS_NAME COLON_COLON
  | AT
  ;

predicates :
  /* empty */
  | predicates LSQB expr RSQB
  ;

primary_expr :
  DOLLAR_QNAME
  | LPAR expr RPAR
  | LITERAL
  | NUMBER
  | function_call
  ;

function_call :
  FUNCTION_NAME LPAR opt_args RPAR
  ;

opt_args :
  /* empty */
  | args
  ;

args :
  expr
  | args COMMA expr
  ;
  
node_test :
  QNAME
  | STAR
  | NAME_COLON_STAR
  | PI LPAR opt_literal RPAR
  | COMMENT LPAR RPAR
  | TEXT LPAR RPAR
  | NODE LPAR RPAR
  ;

opt_literal :
  /* empty */
  | LITERAL
  ;