@@ -213,7 +213,7 @@ makeAny(int first, int last)
213
213
%token <str> LESS_P LESSEQUAL_P EQUAL_P NOTEQUAL_P GREATEREQUAL_P GREATER_P
214
214
%token <str> ANY_P
215
215
216
- %type <value> result jsonpath scalar_value path_primary expr
216
+ %type <value> result jsonpath scalar_value path_primary expr pexpr
217
217
array_accessor any_path accessor_op key unary_expr
218
218
predicate delimited_predicate
219
219
@@ -268,7 +268,7 @@ delimited_predicate:
268
268
269
269
predicate :
270
270
delimited_predicate { $$ = $1 ; }
271
- | expr comp_op expr { $$ = makeItemBinary($2 , $1 , $3 ); }
271
+ | pexpr comp_op pexpr { $$ = makeItemBinary($2 , $1 , $3 ); }
272
272
// | expr LIKE_REGEX pattern { $$ = ...; }
273
273
// | expr STARTS WITH STRING_P { $$ = ...; }
274
274
// | expr STARTS WITH ' $' STRING_P { $$ = ...; }
@@ -298,13 +298,18 @@ unary_expr:
298
298
| ' -' unary_expr { $$ = makeItemUnary(jpiMinus, $2 ); }
299
299
;
300
300
301
+ pexpr :
302
+ expr { $$ = $1 ; }
303
+ | ' (' expr ' )' { $$ = $2 ; }
304
+ ;
305
+
301
306
expr :
302
307
unary_expr { $$ = $1 ; }
303
- | expr ' +' expr { $$ = makeItemBinary(jpiAdd, $1 , $3 ); }
304
- | expr ' -' expr { $$ = makeItemBinary(jpiSub, $1 , $3 ); }
305
- | expr ' *' expr { $$ = makeItemBinary(jpiMul, $1 , $3 ); }
306
- | expr ' /' expr { $$ = makeItemBinary(jpiDiv, $1 , $3 ); }
307
- | expr ' %' expr { $$ = makeItemBinary(jpiMod, $1 , $3 ); }
308
+ | pexpr ' +' pexpr { $$ = makeItemBinary(jpiAdd, $1 , $3 ); }
309
+ | pexpr ' -' pexpr { $$ = makeItemBinary(jpiSub, $1 , $3 ); }
310
+ | pexpr ' *' pexpr { $$ = makeItemBinary(jpiMul, $1 , $3 ); }
311
+ | pexpr ' /' pexpr { $$ = makeItemBinary(jpiDiv, $1 , $3 ); }
312
+ | pexpr ' %' pexpr { $$ = makeItemBinary(jpiMod, $1 , $3 ); }
308
313
;
309
314
310
315
index_elem :
0 commit comments