diff --git a/docs/exampleusage.md b/docs/exampleusage.md index 9c45ecd..c897fc4 100644 --- a/docs/exampleusage.md +++ b/docs/exampleusage.md @@ -49,6 +49,11 @@ matching. | ``and``, ``or``, | Boolean operator, where operands are JSONPath | | ``not`` | filter expressions | +-------------------+-----------------------------------------------+ +| ``~=`` | Matches a Python regular expression. For | +| | example, [?(@.description =~ "^cat.*")] | +| | matches items whose description starts with | +| | cat (case-sensitive). | ++-------------------+-----------------------------------------------+ | ``contains`` | Checks if a string contains the specified | | | substring (case-sensitive), or an array | | | contains the specified element. | diff --git a/jsonpath2/expressions/operator.py b/jsonpath2/expressions/operator.py index 4b1a6b2..9192c4c 100644 --- a/jsonpath2/expressions/operator.py +++ b/jsonpath2/expressions/operator.py @@ -5,6 +5,7 @@ from typing import Callable, Generator, List, Union from jsonpath2.expression import Expression from jsonpath2.node import Node +import re class OperatorExpression(Expression): @@ -208,6 +209,21 @@ def __evaluate__(x_obj, y_obj): return y_obj in x_obj +class RegexBinaryOperatorExpression(BinaryOperatorExpression): + """Expression to handle regex operator.""" + + def __init__(self, *args, **kwargs): + """Construct the binary operator with appropriate method.""" + super(RegexBinaryOperatorExpression, self).__init__( + "~=", RegexBinaryOperatorExpression.__evaluate__, *args, **kwargs + ) + + @staticmethod + def __evaluate__(x_obj, y_obj): + """Perform a regex match.""" + return True if re.match(y_obj.replace("\\\\", "\\"), x_obj) else False + + class UnaryOperatorExpression(OperatorExpression): """Unary operator expression base class.""" diff --git a/jsonpath2/parser/JSONPath.g4 b/jsonpath2/parser/JSONPath.g4 index d56adc6..5c42f45 100644 --- a/jsonpath2/parser/JSONPath.g4 +++ b/jsonpath2/parser/JSONPath.g4 @@ -13,6 +13,7 @@ GT : '>' ; LE : '<=' ; LT : '<' ; NE : '!=' ; +RE : '~=' ; NOT : 'not' ; OR : 'or' ; CN : 'contains' ; @@ -93,7 +94,7 @@ orExpression notExpression : NOT notExpression | PAREN_LEFT expression PAREN_RIGHT - | jsonpath__ ( ( EQ | NE | LT | LE | GT | GE | CN ) jsonpath__ )? + | jsonpath__ ( ( EQ | NE | LT | LE | GT | GE | CN | RE ) jsonpath__ )? ; diff --git a/jsonpath2/parser/JSONPath.interp b/jsonpath2/parser/JSONPath.interp index ead8832..e2a38e5 100644 --- a/jsonpath2/parser/JSONPath.interp +++ b/jsonpath2/parser/JSONPath.interp @@ -12,6 +12,7 @@ null '<=' '<' '!=' +'~=' 'not' 'or' 'contains' @@ -46,6 +47,7 @@ GT LE LT NE +RE NOT OR CN @@ -88,4 +90,4 @@ value atn: -[4, 1, 31, 201, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 1, 0, 1, 0, 3, 0, 39, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 45, 8, 1, 1, 2, 1, 2, 3, 2, 49, 8, 2, 1, 3, 1, 3, 1, 3, 3, 3, 54, 8, 3, 1, 3, 3, 3, 57, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 62, 8, 3, 1, 3, 1, 3, 3, 3, 66, 8, 3, 3, 3, 68, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 74, 8, 4, 10, 4, 12, 4, 77, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 85, 8, 5, 10, 5, 12, 5, 88, 9, 5, 3, 5, 90, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 3, 6, 96, 8, 6, 1, 6, 3, 6, 99, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 105, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 117, 8, 7, 1, 8, 1, 8, 1, 8, 3, 8, 122, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 127, 8, 8, 3, 8, 129, 8, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 3, 10, 136, 8, 10, 1, 11, 1, 11, 1, 11, 3, 11, 141, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 152, 8, 12, 3, 12, 154, 8, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 162, 8, 14, 10, 14, 12, 14, 165, 9, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 171, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 181, 8, 16, 10, 16, 12, 16, 184, 9, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 190, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 199, 8, 17, 1, 17, 0, 0, 18, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 0, 2, 2, 0, 1, 1, 3, 3, 2, 0, 7, 12, 15, 15, 221, 0, 36, 1, 0, 0, 0, 2, 42, 1, 0, 0, 0, 4, 48, 1, 0, 0, 0, 6, 67, 1, 0, 0, 0, 8, 69, 1, 0, 0, 0, 10, 80, 1, 0, 0, 0, 12, 98, 1, 0, 0, 0, 14, 116, 1, 0, 0, 0, 16, 118, 1, 0, 0, 0, 18, 130, 1, 0, 0, 0, 20, 132, 1, 0, 0, 0, 22, 137, 1, 0, 0, 0, 24, 153, 1, 0, 0, 0, 26, 155, 1, 0, 0, 0, 28, 170, 1, 0, 0, 0, 30, 172, 1, 0, 0, 0, 32, 189, 1, 0, 0, 0, 34, 198, 1, 0, 0, 0, 36, 38, 5, 3, 0, 0, 37, 39, 3, 6, 3, 0, 38, 37, 1, 0, 0, 0, 38, 39, 1, 0, 0, 0, 39, 40, 1, 0, 0, 0, 40, 41, 5, 0, 0, 1, 41, 1, 1, 0, 0, 0, 42, 44, 7, 0, 0, 0, 43, 45, 3, 6, 3, 0, 44, 43, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 3, 1, 0, 0, 0, 46, 49, 3, 2, 1, 0, 47, 49, 3, 34, 17, 0, 48, 46, 1, 0, 0, 0, 48, 47, 1, 0, 0, 0, 49, 5, 1, 0, 0, 0, 50, 53, 5, 2, 0, 0, 51, 54, 3, 12, 6, 0, 52, 54, 3, 8, 4, 0, 53, 51, 1, 0, 0, 0, 53, 52, 1, 0, 0, 0, 54, 56, 1, 0, 0, 0, 55, 57, 3, 6, 3, 0, 56, 55, 1, 0, 0, 0, 56, 57, 1, 0, 0, 0, 57, 68, 1, 0, 0, 0, 58, 59, 5, 4, 0, 0, 59, 61, 3, 12, 6, 0, 60, 62, 3, 6, 3, 0, 61, 60, 1, 0, 0, 0, 61, 62, 1, 0, 0, 0, 62, 68, 1, 0, 0, 0, 63, 65, 3, 8, 4, 0, 64, 66, 3, 6, 3, 0, 65, 64, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 68, 1, 0, 0, 0, 67, 50, 1, 0, 0, 0, 67, 58, 1, 0, 0, 0, 67, 63, 1, 0, 0, 0, 68, 7, 1, 0, 0, 0, 69, 70, 5, 21, 0, 0, 70, 75, 3, 14, 7, 0, 71, 72, 5, 24, 0, 0, 72, 74, 3, 14, 7, 0, 73, 71, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 78, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 79, 5, 22, 0, 0, 79, 9, 1, 0, 0, 0, 80, 89, 5, 25, 0, 0, 81, 86, 3, 4, 2, 0, 82, 83, 5, 24, 0, 0, 83, 85, 3, 4, 2, 0, 84, 82, 1, 0, 0, 0, 85, 88, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 90, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 89, 81, 1, 0, 0, 0, 89, 90, 1, 0, 0, 0, 90, 91, 1, 0, 0, 0, 91, 92, 5, 26, 0, 0, 92, 11, 1, 0, 0, 0, 93, 95, 5, 28, 0, 0, 94, 96, 3, 10, 5, 0, 95, 94, 1, 0, 0, 0, 95, 96, 1, 0, 0, 0, 96, 99, 1, 0, 0, 0, 97, 99, 5, 5, 0, 0, 98, 93, 1, 0, 0, 0, 98, 97, 1, 0, 0, 0, 99, 13, 1, 0, 0, 0, 100, 117, 5, 29, 0, 0, 101, 102, 5, 30, 0, 0, 102, 104, 4, 7, 0, 0, 103, 105, 3, 16, 8, 0, 104, 103, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 117, 1, 0, 0, 0, 106, 117, 3, 16, 8, 0, 107, 117, 5, 5, 0, 0, 108, 109, 5, 27, 0, 0, 109, 110, 5, 25, 0, 0, 110, 111, 3, 18, 9, 0, 111, 112, 5, 26, 0, 0, 112, 117, 1, 0, 0, 0, 113, 117, 3, 2, 1, 0, 114, 115, 5, 28, 0, 0, 115, 117, 3, 10, 5, 0, 116, 100, 1, 0, 0, 0, 116, 101, 1, 0, 0, 0, 116, 106, 1, 0, 0, 0, 116, 107, 1, 0, 0, 0, 116, 108, 1, 0, 0, 0, 116, 113, 1, 0, 0, 0, 116, 114, 1, 0, 0, 0, 117, 15, 1, 0, 0, 0, 118, 121, 5, 23, 0, 0, 119, 120, 5, 30, 0, 0, 120, 122, 4, 8, 1, 0, 121, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 128, 1, 0, 0, 0, 123, 126, 5, 23, 0, 0, 124, 125, 5, 30, 0, 0, 125, 127, 4, 8, 2, 0, 126, 124, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 129, 1, 0, 0, 0, 128, 123, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 17, 1, 0, 0, 0, 130, 131, 3, 20, 10, 0, 131, 19, 1, 0, 0, 0, 132, 135, 3, 22, 11, 0, 133, 134, 5, 6, 0, 0, 134, 136, 3, 20, 10, 0, 135, 133, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 21, 1, 0, 0, 0, 137, 140, 3, 24, 12, 0, 138, 139, 5, 14, 0, 0, 139, 141, 3, 22, 11, 0, 140, 138, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 23, 1, 0, 0, 0, 142, 143, 5, 13, 0, 0, 143, 154, 3, 24, 12, 0, 144, 145, 5, 25, 0, 0, 145, 146, 3, 18, 9, 0, 146, 147, 5, 26, 0, 0, 147, 154, 1, 0, 0, 0, 148, 151, 3, 4, 2, 0, 149, 150, 7, 1, 0, 0, 150, 152, 3, 4, 2, 0, 151, 149, 1, 0, 0, 0, 151, 152, 1, 0, 0, 0, 152, 154, 1, 0, 0, 0, 153, 142, 1, 0, 0, 0, 153, 144, 1, 0, 0, 0, 153, 148, 1, 0, 0, 0, 154, 25, 1, 0, 0, 0, 155, 156, 3, 34, 17, 0, 156, 27, 1, 0, 0, 0, 157, 158, 5, 19, 0, 0, 158, 163, 3, 30, 15, 0, 159, 160, 5, 24, 0, 0, 160, 162, 3, 30, 15, 0, 161, 159, 1, 0, 0, 0, 162, 165, 1, 0, 0, 0, 163, 161, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 166, 1, 0, 0, 0, 165, 163, 1, 0, 0, 0, 166, 167, 5, 20, 0, 0, 167, 171, 1, 0, 0, 0, 168, 169, 5, 19, 0, 0, 169, 171, 5, 20, 0, 0, 170, 157, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 171, 29, 1, 0, 0, 0, 172, 173, 5, 29, 0, 0, 173, 174, 5, 23, 0, 0, 174, 175, 3, 34, 17, 0, 175, 31, 1, 0, 0, 0, 176, 177, 5, 21, 0, 0, 177, 182, 3, 34, 17, 0, 178, 179, 5, 24, 0, 0, 179, 181, 3, 34, 17, 0, 180, 178, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 185, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 185, 186, 5, 22, 0, 0, 186, 190, 1, 0, 0, 0, 187, 188, 5, 21, 0, 0, 188, 190, 5, 22, 0, 0, 189, 176, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 33, 1, 0, 0, 0, 191, 199, 5, 29, 0, 0, 192, 199, 5, 30, 0, 0, 193, 199, 3, 28, 14, 0, 194, 199, 3, 32, 16, 0, 195, 199, 5, 16, 0, 0, 196, 199, 5, 17, 0, 0, 197, 199, 5, 18, 0, 0, 198, 191, 1, 0, 0, 0, 198, 192, 1, 0, 0, 0, 198, 193, 1, 0, 0, 0, 198, 194, 1, 0, 0, 0, 198, 195, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 198, 197, 1, 0, 0, 0, 199, 35, 1, 0, 0, 0, 27, 38, 44, 48, 53, 56, 61, 65, 67, 75, 86, 89, 95, 98, 104, 116, 121, 126, 128, 135, 140, 151, 153, 163, 170, 182, 189, 198] \ No newline at end of file +[4, 1, 32, 201, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 1, 0, 1, 0, 3, 0, 39, 8, 0, 1, 0, 1, 0, 1, 1, 1, 1, 3, 1, 45, 8, 1, 1, 2, 1, 2, 3, 2, 49, 8, 2, 1, 3, 1, 3, 1, 3, 3, 3, 54, 8, 3, 1, 3, 3, 3, 57, 8, 3, 1, 3, 1, 3, 1, 3, 3, 3, 62, 8, 3, 1, 3, 1, 3, 3, 3, 66, 8, 3, 3, 3, 68, 8, 3, 1, 4, 1, 4, 1, 4, 1, 4, 5, 4, 74, 8, 4, 10, 4, 12, 4, 77, 9, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 5, 5, 85, 8, 5, 10, 5, 12, 5, 88, 9, 5, 3, 5, 90, 8, 5, 1, 5, 1, 5, 1, 6, 1, 6, 3, 6, 96, 8, 6, 1, 6, 3, 6, 99, 8, 6, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 105, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 3, 7, 117, 8, 7, 1, 8, 1, 8, 1, 8, 3, 8, 122, 8, 8, 1, 8, 1, 8, 1, 8, 3, 8, 127, 8, 8, 3, 8, 129, 8, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 3, 10, 136, 8, 10, 1, 11, 1, 11, 1, 11, 3, 11, 141, 8, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 152, 8, 12, 3, 12, 154, 8, 12, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 5, 14, 162, 8, 14, 10, 14, 12, 14, 165, 9, 14, 1, 14, 1, 14, 1, 14, 1, 14, 3, 14, 171, 8, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 5, 16, 181, 8, 16, 10, 16, 12, 16, 184, 9, 16, 1, 16, 1, 16, 1, 16, 1, 16, 3, 16, 190, 8, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 3, 17, 199, 8, 17, 1, 17, 0, 0, 18, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 0, 2, 2, 0, 1, 1, 3, 3, 2, 0, 7, 13, 16, 16, 221, 0, 36, 1, 0, 0, 0, 2, 42, 1, 0, 0, 0, 4, 48, 1, 0, 0, 0, 6, 67, 1, 0, 0, 0, 8, 69, 1, 0, 0, 0, 10, 80, 1, 0, 0, 0, 12, 98, 1, 0, 0, 0, 14, 116, 1, 0, 0, 0, 16, 118, 1, 0, 0, 0, 18, 130, 1, 0, 0, 0, 20, 132, 1, 0, 0, 0, 22, 137, 1, 0, 0, 0, 24, 153, 1, 0, 0, 0, 26, 155, 1, 0, 0, 0, 28, 170, 1, 0, 0, 0, 30, 172, 1, 0, 0, 0, 32, 189, 1, 0, 0, 0, 34, 198, 1, 0, 0, 0, 36, 38, 5, 3, 0, 0, 37, 39, 3, 6, 3, 0, 38, 37, 1, 0, 0, 0, 38, 39, 1, 0, 0, 0, 39, 40, 1, 0, 0, 0, 40, 41, 5, 0, 0, 1, 41, 1, 1, 0, 0, 0, 42, 44, 7, 0, 0, 0, 43, 45, 3, 6, 3, 0, 44, 43, 1, 0, 0, 0, 44, 45, 1, 0, 0, 0, 45, 3, 1, 0, 0, 0, 46, 49, 3, 2, 1, 0, 47, 49, 3, 34, 17, 0, 48, 46, 1, 0, 0, 0, 48, 47, 1, 0, 0, 0, 49, 5, 1, 0, 0, 0, 50, 53, 5, 2, 0, 0, 51, 54, 3, 12, 6, 0, 52, 54, 3, 8, 4, 0, 53, 51, 1, 0, 0, 0, 53, 52, 1, 0, 0, 0, 54, 56, 1, 0, 0, 0, 55, 57, 3, 6, 3, 0, 56, 55, 1, 0, 0, 0, 56, 57, 1, 0, 0, 0, 57, 68, 1, 0, 0, 0, 58, 59, 5, 4, 0, 0, 59, 61, 3, 12, 6, 0, 60, 62, 3, 6, 3, 0, 61, 60, 1, 0, 0, 0, 61, 62, 1, 0, 0, 0, 62, 68, 1, 0, 0, 0, 63, 65, 3, 8, 4, 0, 64, 66, 3, 6, 3, 0, 65, 64, 1, 0, 0, 0, 65, 66, 1, 0, 0, 0, 66, 68, 1, 0, 0, 0, 67, 50, 1, 0, 0, 0, 67, 58, 1, 0, 0, 0, 67, 63, 1, 0, 0, 0, 68, 7, 1, 0, 0, 0, 69, 70, 5, 22, 0, 0, 70, 75, 3, 14, 7, 0, 71, 72, 5, 25, 0, 0, 72, 74, 3, 14, 7, 0, 73, 71, 1, 0, 0, 0, 74, 77, 1, 0, 0, 0, 75, 73, 1, 0, 0, 0, 75, 76, 1, 0, 0, 0, 76, 78, 1, 0, 0, 0, 77, 75, 1, 0, 0, 0, 78, 79, 5, 23, 0, 0, 79, 9, 1, 0, 0, 0, 80, 89, 5, 26, 0, 0, 81, 86, 3, 4, 2, 0, 82, 83, 5, 25, 0, 0, 83, 85, 3, 4, 2, 0, 84, 82, 1, 0, 0, 0, 85, 88, 1, 0, 0, 0, 86, 84, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 90, 1, 0, 0, 0, 88, 86, 1, 0, 0, 0, 89, 81, 1, 0, 0, 0, 89, 90, 1, 0, 0, 0, 90, 91, 1, 0, 0, 0, 91, 92, 5, 27, 0, 0, 92, 11, 1, 0, 0, 0, 93, 95, 5, 29, 0, 0, 94, 96, 3, 10, 5, 0, 95, 94, 1, 0, 0, 0, 95, 96, 1, 0, 0, 0, 96, 99, 1, 0, 0, 0, 97, 99, 5, 5, 0, 0, 98, 93, 1, 0, 0, 0, 98, 97, 1, 0, 0, 0, 99, 13, 1, 0, 0, 0, 100, 117, 5, 30, 0, 0, 101, 102, 5, 31, 0, 0, 102, 104, 4, 7, 0, 0, 103, 105, 3, 16, 8, 0, 104, 103, 1, 0, 0, 0, 104, 105, 1, 0, 0, 0, 105, 117, 1, 0, 0, 0, 106, 117, 3, 16, 8, 0, 107, 117, 5, 5, 0, 0, 108, 109, 5, 28, 0, 0, 109, 110, 5, 26, 0, 0, 110, 111, 3, 18, 9, 0, 111, 112, 5, 27, 0, 0, 112, 117, 1, 0, 0, 0, 113, 117, 3, 2, 1, 0, 114, 115, 5, 29, 0, 0, 115, 117, 3, 10, 5, 0, 116, 100, 1, 0, 0, 0, 116, 101, 1, 0, 0, 0, 116, 106, 1, 0, 0, 0, 116, 107, 1, 0, 0, 0, 116, 108, 1, 0, 0, 0, 116, 113, 1, 0, 0, 0, 116, 114, 1, 0, 0, 0, 117, 15, 1, 0, 0, 0, 118, 121, 5, 24, 0, 0, 119, 120, 5, 31, 0, 0, 120, 122, 4, 8, 1, 0, 121, 119, 1, 0, 0, 0, 121, 122, 1, 0, 0, 0, 122, 128, 1, 0, 0, 0, 123, 126, 5, 24, 0, 0, 124, 125, 5, 31, 0, 0, 125, 127, 4, 8, 2, 0, 126, 124, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 129, 1, 0, 0, 0, 128, 123, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 17, 1, 0, 0, 0, 130, 131, 3, 20, 10, 0, 131, 19, 1, 0, 0, 0, 132, 135, 3, 22, 11, 0, 133, 134, 5, 6, 0, 0, 134, 136, 3, 20, 10, 0, 135, 133, 1, 0, 0, 0, 135, 136, 1, 0, 0, 0, 136, 21, 1, 0, 0, 0, 137, 140, 3, 24, 12, 0, 138, 139, 5, 15, 0, 0, 139, 141, 3, 22, 11, 0, 140, 138, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 23, 1, 0, 0, 0, 142, 143, 5, 14, 0, 0, 143, 154, 3, 24, 12, 0, 144, 145, 5, 26, 0, 0, 145, 146, 3, 18, 9, 0, 146, 147, 5, 27, 0, 0, 147, 154, 1, 0, 0, 0, 148, 151, 3, 4, 2, 0, 149, 150, 7, 1, 0, 0, 150, 152, 3, 4, 2, 0, 151, 149, 1, 0, 0, 0, 151, 152, 1, 0, 0, 0, 152, 154, 1, 0, 0, 0, 153, 142, 1, 0, 0, 0, 153, 144, 1, 0, 0, 0, 153, 148, 1, 0, 0, 0, 154, 25, 1, 0, 0, 0, 155, 156, 3, 34, 17, 0, 156, 27, 1, 0, 0, 0, 157, 158, 5, 20, 0, 0, 158, 163, 3, 30, 15, 0, 159, 160, 5, 25, 0, 0, 160, 162, 3, 30, 15, 0, 161, 159, 1, 0, 0, 0, 162, 165, 1, 0, 0, 0, 163, 161, 1, 0, 0, 0, 163, 164, 1, 0, 0, 0, 164, 166, 1, 0, 0, 0, 165, 163, 1, 0, 0, 0, 166, 167, 5, 21, 0, 0, 167, 171, 1, 0, 0, 0, 168, 169, 5, 20, 0, 0, 169, 171, 5, 21, 0, 0, 170, 157, 1, 0, 0, 0, 170, 168, 1, 0, 0, 0, 171, 29, 1, 0, 0, 0, 172, 173, 5, 30, 0, 0, 173, 174, 5, 24, 0, 0, 174, 175, 3, 34, 17, 0, 175, 31, 1, 0, 0, 0, 176, 177, 5, 22, 0, 0, 177, 182, 3, 34, 17, 0, 178, 179, 5, 25, 0, 0, 179, 181, 3, 34, 17, 0, 180, 178, 1, 0, 0, 0, 181, 184, 1, 0, 0, 0, 182, 180, 1, 0, 0, 0, 182, 183, 1, 0, 0, 0, 183, 185, 1, 0, 0, 0, 184, 182, 1, 0, 0, 0, 185, 186, 5, 23, 0, 0, 186, 190, 1, 0, 0, 0, 187, 188, 5, 22, 0, 0, 188, 190, 5, 23, 0, 0, 189, 176, 1, 0, 0, 0, 189, 187, 1, 0, 0, 0, 190, 33, 1, 0, 0, 0, 191, 199, 5, 30, 0, 0, 192, 199, 5, 31, 0, 0, 193, 199, 3, 28, 14, 0, 194, 199, 3, 32, 16, 0, 195, 199, 5, 17, 0, 0, 196, 199, 5, 18, 0, 0, 197, 199, 5, 19, 0, 0, 198, 191, 1, 0, 0, 0, 198, 192, 1, 0, 0, 0, 198, 193, 1, 0, 0, 0, 198, 194, 1, 0, 0, 0, 198, 195, 1, 0, 0, 0, 198, 196, 1, 0, 0, 0, 198, 197, 1, 0, 0, 0, 199, 35, 1, 0, 0, 0, 27, 38, 44, 48, 53, 56, 61, 65, 67, 75, 86, 89, 95, 98, 104, 116, 121, 126, 128, 135, 140, 151, 153, 163, 170, 182, 189, 198] \ No newline at end of file diff --git a/jsonpath2/parser/JSONPath.tokens b/jsonpath2/parser/JSONPath.tokens index dacad5f..2d3070e 100644 --- a/jsonpath2/parser/JSONPath.tokens +++ b/jsonpath2/parser/JSONPath.tokens @@ -10,25 +10,26 @@ GT=9 LE=10 LT=11 NE=12 -NOT=13 -OR=14 -CN=15 -TRUE=16 -FALSE=17 -NULL=18 -BRACE_LEFT=19 -BRACE_RIGHT=20 -BRACKET_LEFT=21 -BRACKET_RIGHT=22 -COLON=23 -COMMA=24 -PAREN_LEFT=25 -PAREN_RIGHT=26 -QUESTION=27 -ID=28 -STRING=29 -NUMBER=30 -WS=31 +RE=13 +NOT=14 +OR=15 +CN=16 +TRUE=17 +FALSE=18 +NULL=19 +BRACE_LEFT=20 +BRACE_RIGHT=21 +BRACKET_LEFT=22 +BRACKET_RIGHT=23 +COLON=24 +COMMA=25 +PAREN_LEFT=26 +PAREN_RIGHT=27 +QUESTION=28 +ID=29 +STRING=30 +NUMBER=31 +WS=32 '@'=1 '..'=2 '$'=3 @@ -41,18 +42,19 @@ WS=31 '<='=10 '<'=11 '!='=12 -'not'=13 -'or'=14 -'contains'=15 -'true'=16 -'false'=17 -'null'=18 -'{'=19 -'}'=20 -'['=21 -']'=22 -':'=23 -','=24 -'('=25 -')'=26 -'?'=27 +'~='=13 +'not'=14 +'or'=15 +'contains'=16 +'true'=17 +'false'=18 +'null'=19 +'{'=20 +'}'=21 +'['=22 +']'=23 +':'=24 +','=25 +'('=26 +')'=27 +'?'=28 diff --git a/jsonpath2/parser/JSONPathLexer.interp b/jsonpath2/parser/JSONPathLexer.interp index 229037f..4fb0d49 100644 --- a/jsonpath2/parser/JSONPathLexer.interp +++ b/jsonpath2/parser/JSONPathLexer.interp @@ -12,6 +12,7 @@ null '<=' '<' '!=' +'~=' 'not' 'or' 'contains' @@ -46,6 +47,7 @@ GT LE LT NE +RE NOT OR CN @@ -79,6 +81,7 @@ GT LE LT NE +RE NOT OR CN @@ -113,4 +116,4 @@ mode names: DEFAULT_MODE atn: -[4, 0, 31, 225, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 5, 27, 158, 8, 27, 10, 27, 12, 27, 161, 9, 27, 1, 28, 1, 28, 1, 28, 5, 28, 166, 8, 28, 10, 28, 12, 28, 169, 9, 28, 1, 28, 1, 28, 1, 29, 1, 29, 1, 29, 3, 29, 176, 8, 29, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 30, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 3, 33, 189, 8, 33, 1, 33, 1, 33, 1, 33, 4, 33, 194, 8, 33, 11, 33, 12, 33, 195, 3, 33, 198, 8, 33, 1, 33, 3, 33, 201, 8, 33, 1, 34, 1, 34, 1, 34, 5, 34, 206, 8, 34, 10, 34, 12, 34, 209, 9, 34, 3, 34, 211, 8, 34, 1, 35, 1, 35, 3, 35, 215, 8, 35, 1, 35, 1, 35, 1, 36, 4, 36, 220, 8, 36, 11, 36, 12, 36, 221, 1, 36, 1, 36, 0, 0, 37, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 0, 61, 0, 63, 0, 65, 0, 67, 30, 69, 0, 71, 0, 73, 31, 1, 0, 10, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 8, 0, 34, 34, 47, 47, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 0, 31, 34, 34, 92, 92, 1, 0, 48, 57, 1, 0, 49, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 9, 10, 13, 13, 32, 32, 230, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 67, 1, 0, 0, 0, 0, 73, 1, 0, 0, 0, 1, 75, 1, 0, 0, 0, 3, 77, 1, 0, 0, 0, 5, 80, 1, 0, 0, 0, 7, 82, 1, 0, 0, 0, 9, 84, 1, 0, 0, 0, 11, 86, 1, 0, 0, 0, 13, 90, 1, 0, 0, 0, 15, 92, 1, 0, 0, 0, 17, 95, 1, 0, 0, 0, 19, 97, 1, 0, 0, 0, 21, 100, 1, 0, 0, 0, 23, 102, 1, 0, 0, 0, 25, 105, 1, 0, 0, 0, 27, 109, 1, 0, 0, 0, 29, 112, 1, 0, 0, 0, 31, 121, 1, 0, 0, 0, 33, 126, 1, 0, 0, 0, 35, 132, 1, 0, 0, 0, 37, 137, 1, 0, 0, 0, 39, 139, 1, 0, 0, 0, 41, 141, 1, 0, 0, 0, 43, 143, 1, 0, 0, 0, 45, 145, 1, 0, 0, 0, 47, 147, 1, 0, 0, 0, 49, 149, 1, 0, 0, 0, 51, 151, 1, 0, 0, 0, 53, 153, 1, 0, 0, 0, 55, 155, 1, 0, 0, 0, 57, 162, 1, 0, 0, 0, 59, 172, 1, 0, 0, 0, 61, 177, 1, 0, 0, 0, 63, 183, 1, 0, 0, 0, 65, 185, 1, 0, 0, 0, 67, 188, 1, 0, 0, 0, 69, 210, 1, 0, 0, 0, 71, 212, 1, 0, 0, 0, 73, 219, 1, 0, 0, 0, 75, 76, 5, 64, 0, 0, 76, 2, 1, 0, 0, 0, 77, 78, 5, 46, 0, 0, 78, 79, 5, 46, 0, 0, 79, 4, 1, 0, 0, 0, 80, 81, 5, 36, 0, 0, 81, 6, 1, 0, 0, 0, 82, 83, 5, 46, 0, 0, 83, 8, 1, 0, 0, 0, 84, 85, 5, 42, 0, 0, 85, 10, 1, 0, 0, 0, 86, 87, 5, 97, 0, 0, 87, 88, 5, 110, 0, 0, 88, 89, 5, 100, 0, 0, 89, 12, 1, 0, 0, 0, 90, 91, 5, 61, 0, 0, 91, 14, 1, 0, 0, 0, 92, 93, 5, 62, 0, 0, 93, 94, 5, 61, 0, 0, 94, 16, 1, 0, 0, 0, 95, 96, 5, 62, 0, 0, 96, 18, 1, 0, 0, 0, 97, 98, 5, 60, 0, 0, 98, 99, 5, 61, 0, 0, 99, 20, 1, 0, 0, 0, 100, 101, 5, 60, 0, 0, 101, 22, 1, 0, 0, 0, 102, 103, 5, 33, 0, 0, 103, 104, 5, 61, 0, 0, 104, 24, 1, 0, 0, 0, 105, 106, 5, 110, 0, 0, 106, 107, 5, 111, 0, 0, 107, 108, 5, 116, 0, 0, 108, 26, 1, 0, 0, 0, 109, 110, 5, 111, 0, 0, 110, 111, 5, 114, 0, 0, 111, 28, 1, 0, 0, 0, 112, 113, 5, 99, 0, 0, 113, 114, 5, 111, 0, 0, 114, 115, 5, 110, 0, 0, 115, 116, 5, 116, 0, 0, 116, 117, 5, 97, 0, 0, 117, 118, 5, 105, 0, 0, 118, 119, 5, 110, 0, 0, 119, 120, 5, 115, 0, 0, 120, 30, 1, 0, 0, 0, 121, 122, 5, 116, 0, 0, 122, 123, 5, 114, 0, 0, 123, 124, 5, 117, 0, 0, 124, 125, 5, 101, 0, 0, 125, 32, 1, 0, 0, 0, 126, 127, 5, 102, 0, 0, 127, 128, 5, 97, 0, 0, 128, 129, 5, 108, 0, 0, 129, 130, 5, 115, 0, 0, 130, 131, 5, 101, 0, 0, 131, 34, 1, 0, 0, 0, 132, 133, 5, 110, 0, 0, 133, 134, 5, 117, 0, 0, 134, 135, 5, 108, 0, 0, 135, 136, 5, 108, 0, 0, 136, 36, 1, 0, 0, 0, 137, 138, 5, 123, 0, 0, 138, 38, 1, 0, 0, 0, 139, 140, 5, 125, 0, 0, 140, 40, 1, 0, 0, 0, 141, 142, 5, 91, 0, 0, 142, 42, 1, 0, 0, 0, 143, 144, 5, 93, 0, 0, 144, 44, 1, 0, 0, 0, 145, 146, 5, 58, 0, 0, 146, 46, 1, 0, 0, 0, 147, 148, 5, 44, 0, 0, 148, 48, 1, 0, 0, 0, 149, 150, 5, 40, 0, 0, 150, 50, 1, 0, 0, 0, 151, 152, 5, 41, 0, 0, 152, 52, 1, 0, 0, 0, 153, 154, 5, 63, 0, 0, 154, 54, 1, 0, 0, 0, 155, 159, 7, 0, 0, 0, 156, 158, 7, 1, 0, 0, 157, 156, 1, 0, 0, 0, 158, 161, 1, 0, 0, 0, 159, 157, 1, 0, 0, 0, 159, 160, 1, 0, 0, 0, 160, 56, 1, 0, 0, 0, 161, 159, 1, 0, 0, 0, 162, 167, 5, 34, 0, 0, 163, 166, 3, 59, 29, 0, 164, 166, 3, 65, 32, 0, 165, 163, 1, 0, 0, 0, 165, 164, 1, 0, 0, 0, 166, 169, 1, 0, 0, 0, 167, 165, 1, 0, 0, 0, 167, 168, 1, 0, 0, 0, 168, 170, 1, 0, 0, 0, 169, 167, 1, 0, 0, 0, 170, 171, 5, 34, 0, 0, 171, 58, 1, 0, 0, 0, 172, 175, 5, 92, 0, 0, 173, 176, 7, 2, 0, 0, 174, 176, 3, 61, 30, 0, 175, 173, 1, 0, 0, 0, 175, 174, 1, 0, 0, 0, 176, 60, 1, 0, 0, 0, 177, 178, 5, 117, 0, 0, 178, 179, 3, 63, 31, 0, 179, 180, 3, 63, 31, 0, 180, 181, 3, 63, 31, 0, 181, 182, 3, 63, 31, 0, 182, 62, 1, 0, 0, 0, 183, 184, 7, 3, 0, 0, 184, 64, 1, 0, 0, 0, 185, 186, 8, 4, 0, 0, 186, 66, 1, 0, 0, 0, 187, 189, 5, 45, 0, 0, 188, 187, 1, 0, 0, 0, 188, 189, 1, 0, 0, 0, 189, 190, 1, 0, 0, 0, 190, 197, 3, 69, 34, 0, 191, 193, 5, 46, 0, 0, 192, 194, 7, 5, 0, 0, 193, 192, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 193, 1, 0, 0, 0, 195, 196, 1, 0, 0, 0, 196, 198, 1, 0, 0, 0, 197, 191, 1, 0, 0, 0, 197, 198, 1, 0, 0, 0, 198, 200, 1, 0, 0, 0, 199, 201, 3, 71, 35, 0, 200, 199, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 68, 1, 0, 0, 0, 202, 211, 5, 48, 0, 0, 203, 207, 7, 6, 0, 0, 204, 206, 7, 5, 0, 0, 205, 204, 1, 0, 0, 0, 206, 209, 1, 0, 0, 0, 207, 205, 1, 0, 0, 0, 207, 208, 1, 0, 0, 0, 208, 211, 1, 0, 0, 0, 209, 207, 1, 0, 0, 0, 210, 202, 1, 0, 0, 0, 210, 203, 1, 0, 0, 0, 211, 70, 1, 0, 0, 0, 212, 214, 7, 7, 0, 0, 213, 215, 7, 8, 0, 0, 214, 213, 1, 0, 0, 0, 214, 215, 1, 0, 0, 0, 215, 216, 1, 0, 0, 0, 216, 217, 3, 69, 34, 0, 217, 72, 1, 0, 0, 0, 218, 220, 7, 9, 0, 0, 219, 218, 1, 0, 0, 0, 220, 221, 1, 0, 0, 0, 221, 219, 1, 0, 0, 0, 221, 222, 1, 0, 0, 0, 222, 223, 1, 0, 0, 0, 223, 224, 6, 36, 0, 0, 224, 74, 1, 0, 0, 0, 13, 0, 159, 165, 167, 175, 188, 195, 197, 200, 207, 210, 214, 221, 1, 6, 0, 0] \ No newline at end of file +[4, 0, 32, 230, 6, -1, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 2, 15, 7, 15, 2, 16, 7, 16, 2, 17, 7, 17, 2, 18, 7, 18, 2, 19, 7, 19, 2, 20, 7, 20, 2, 21, 7, 21, 2, 22, 7, 22, 2, 23, 7, 23, 2, 24, 7, 24, 2, 25, 7, 25, 2, 26, 7, 26, 2, 27, 7, 27, 2, 28, 7, 28, 2, 29, 7, 29, 2, 30, 7, 30, 2, 31, 7, 31, 2, 32, 7, 32, 2, 33, 7, 33, 2, 34, 7, 34, 2, 35, 7, 35, 2, 36, 7, 36, 2, 37, 7, 37, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 2, 1, 2, 1, 3, 1, 3, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 1, 12, 1, 12, 1, 12, 1, 13, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 1, 14, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 15, 1, 16, 1, 16, 1, 16, 1, 16, 1, 16, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 17, 1, 18, 1, 18, 1, 18, 1, 18, 1, 18, 1, 19, 1, 19, 1, 20, 1, 20, 1, 21, 1, 21, 1, 22, 1, 22, 1, 23, 1, 23, 1, 24, 1, 24, 1, 25, 1, 25, 1, 26, 1, 26, 1, 27, 1, 27, 1, 28, 1, 28, 5, 28, 163, 8, 28, 10, 28, 12, 28, 166, 9, 28, 1, 29, 1, 29, 1, 29, 5, 29, 171, 8, 29, 10, 29, 12, 29, 174, 9, 29, 1, 29, 1, 29, 1, 30, 1, 30, 1, 30, 3, 30, 181, 8, 30, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 31, 1, 32, 1, 32, 1, 33, 1, 33, 1, 34, 3, 34, 194, 8, 34, 1, 34, 1, 34, 1, 34, 4, 34, 199, 8, 34, 11, 34, 12, 34, 200, 3, 34, 203, 8, 34, 1, 34, 3, 34, 206, 8, 34, 1, 35, 1, 35, 1, 35, 5, 35, 211, 8, 35, 10, 35, 12, 35, 214, 9, 35, 3, 35, 216, 8, 35, 1, 36, 1, 36, 3, 36, 220, 8, 36, 1, 36, 1, 36, 1, 37, 4, 37, 225, 8, 37, 11, 37, 12, 37, 226, 1, 37, 1, 37, 0, 0, 38, 1, 1, 3, 2, 5, 3, 7, 4, 9, 5, 11, 6, 13, 7, 15, 8, 17, 9, 19, 10, 21, 11, 23, 12, 25, 13, 27, 14, 29, 15, 31, 16, 33, 17, 35, 18, 37, 19, 39, 20, 41, 21, 43, 22, 45, 23, 47, 24, 49, 25, 51, 26, 53, 27, 55, 28, 57, 29, 59, 30, 61, 0, 63, 0, 65, 0, 67, 0, 69, 31, 71, 0, 73, 0, 75, 32, 1, 0, 10, 3, 0, 65, 90, 95, 95, 97, 122, 4, 0, 48, 57, 65, 90, 95, 95, 97, 122, 8, 0, 34, 34, 47, 47, 92, 92, 98, 98, 102, 102, 110, 110, 114, 114, 116, 116, 3, 0, 48, 57, 65, 70, 97, 102, 3, 0, 0, 31, 34, 34, 92, 92, 1, 0, 48, 57, 1, 0, 49, 57, 2, 0, 69, 69, 101, 101, 2, 0, 43, 43, 45, 45, 3, 0, 9, 10, 13, 13, 32, 32, 235, 0, 1, 1, 0, 0, 0, 0, 3, 1, 0, 0, 0, 0, 5, 1, 0, 0, 0, 0, 7, 1, 0, 0, 0, 0, 9, 1, 0, 0, 0, 0, 11, 1, 0, 0, 0, 0, 13, 1, 0, 0, 0, 0, 15, 1, 0, 0, 0, 0, 17, 1, 0, 0, 0, 0, 19, 1, 0, 0, 0, 0, 21, 1, 0, 0, 0, 0, 23, 1, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 27, 1, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 31, 1, 0, 0, 0, 0, 33, 1, 0, 0, 0, 0, 35, 1, 0, 0, 0, 0, 37, 1, 0, 0, 0, 0, 39, 1, 0, 0, 0, 0, 41, 1, 0, 0, 0, 0, 43, 1, 0, 0, 0, 0, 45, 1, 0, 0, 0, 0, 47, 1, 0, 0, 0, 0, 49, 1, 0, 0, 0, 0, 51, 1, 0, 0, 0, 0, 53, 1, 0, 0, 0, 0, 55, 1, 0, 0, 0, 0, 57, 1, 0, 0, 0, 0, 59, 1, 0, 0, 0, 0, 69, 1, 0, 0, 0, 0, 75, 1, 0, 0, 0, 1, 77, 1, 0, 0, 0, 3, 79, 1, 0, 0, 0, 5, 82, 1, 0, 0, 0, 7, 84, 1, 0, 0, 0, 9, 86, 1, 0, 0, 0, 11, 88, 1, 0, 0, 0, 13, 92, 1, 0, 0, 0, 15, 94, 1, 0, 0, 0, 17, 97, 1, 0, 0, 0, 19, 99, 1, 0, 0, 0, 21, 102, 1, 0, 0, 0, 23, 104, 1, 0, 0, 0, 25, 107, 1, 0, 0, 0, 27, 110, 1, 0, 0, 0, 29, 114, 1, 0, 0, 0, 31, 117, 1, 0, 0, 0, 33, 126, 1, 0, 0, 0, 35, 131, 1, 0, 0, 0, 37, 137, 1, 0, 0, 0, 39, 142, 1, 0, 0, 0, 41, 144, 1, 0, 0, 0, 43, 146, 1, 0, 0, 0, 45, 148, 1, 0, 0, 0, 47, 150, 1, 0, 0, 0, 49, 152, 1, 0, 0, 0, 51, 154, 1, 0, 0, 0, 53, 156, 1, 0, 0, 0, 55, 158, 1, 0, 0, 0, 57, 160, 1, 0, 0, 0, 59, 167, 1, 0, 0, 0, 61, 177, 1, 0, 0, 0, 63, 182, 1, 0, 0, 0, 65, 188, 1, 0, 0, 0, 67, 190, 1, 0, 0, 0, 69, 193, 1, 0, 0, 0, 71, 215, 1, 0, 0, 0, 73, 217, 1, 0, 0, 0, 75, 224, 1, 0, 0, 0, 77, 78, 5, 64, 0, 0, 78, 2, 1, 0, 0, 0, 79, 80, 5, 46, 0, 0, 80, 81, 5, 46, 0, 0, 81, 4, 1, 0, 0, 0, 82, 83, 5, 36, 0, 0, 83, 6, 1, 0, 0, 0, 84, 85, 5, 46, 0, 0, 85, 8, 1, 0, 0, 0, 86, 87, 5, 42, 0, 0, 87, 10, 1, 0, 0, 0, 88, 89, 5, 97, 0, 0, 89, 90, 5, 110, 0, 0, 90, 91, 5, 100, 0, 0, 91, 12, 1, 0, 0, 0, 92, 93, 5, 61, 0, 0, 93, 14, 1, 0, 0, 0, 94, 95, 5, 62, 0, 0, 95, 96, 5, 61, 0, 0, 96, 16, 1, 0, 0, 0, 97, 98, 5, 62, 0, 0, 98, 18, 1, 0, 0, 0, 99, 100, 5, 60, 0, 0, 100, 101, 5, 61, 0, 0, 101, 20, 1, 0, 0, 0, 102, 103, 5, 60, 0, 0, 103, 22, 1, 0, 0, 0, 104, 105, 5, 33, 0, 0, 105, 106, 5, 61, 0, 0, 106, 24, 1, 0, 0, 0, 107, 108, 5, 126, 0, 0, 108, 109, 5, 61, 0, 0, 109, 26, 1, 0, 0, 0, 110, 111, 5, 110, 0, 0, 111, 112, 5, 111, 0, 0, 112, 113, 5, 116, 0, 0, 113, 28, 1, 0, 0, 0, 114, 115, 5, 111, 0, 0, 115, 116, 5, 114, 0, 0, 116, 30, 1, 0, 0, 0, 117, 118, 5, 99, 0, 0, 118, 119, 5, 111, 0, 0, 119, 120, 5, 110, 0, 0, 120, 121, 5, 116, 0, 0, 121, 122, 5, 97, 0, 0, 122, 123, 5, 105, 0, 0, 123, 124, 5, 110, 0, 0, 124, 125, 5, 115, 0, 0, 125, 32, 1, 0, 0, 0, 126, 127, 5, 116, 0, 0, 127, 128, 5, 114, 0, 0, 128, 129, 5, 117, 0, 0, 129, 130, 5, 101, 0, 0, 130, 34, 1, 0, 0, 0, 131, 132, 5, 102, 0, 0, 132, 133, 5, 97, 0, 0, 133, 134, 5, 108, 0, 0, 134, 135, 5, 115, 0, 0, 135, 136, 5, 101, 0, 0, 136, 36, 1, 0, 0, 0, 137, 138, 5, 110, 0, 0, 138, 139, 5, 117, 0, 0, 139, 140, 5, 108, 0, 0, 140, 141, 5, 108, 0, 0, 141, 38, 1, 0, 0, 0, 142, 143, 5, 123, 0, 0, 143, 40, 1, 0, 0, 0, 144, 145, 5, 125, 0, 0, 145, 42, 1, 0, 0, 0, 146, 147, 5, 91, 0, 0, 147, 44, 1, 0, 0, 0, 148, 149, 5, 93, 0, 0, 149, 46, 1, 0, 0, 0, 150, 151, 5, 58, 0, 0, 151, 48, 1, 0, 0, 0, 152, 153, 5, 44, 0, 0, 153, 50, 1, 0, 0, 0, 154, 155, 5, 40, 0, 0, 155, 52, 1, 0, 0, 0, 156, 157, 5, 41, 0, 0, 157, 54, 1, 0, 0, 0, 158, 159, 5, 63, 0, 0, 159, 56, 1, 0, 0, 0, 160, 164, 7, 0, 0, 0, 161, 163, 7, 1, 0, 0, 162, 161, 1, 0, 0, 0, 163, 166, 1, 0, 0, 0, 164, 162, 1, 0, 0, 0, 164, 165, 1, 0, 0, 0, 165, 58, 1, 0, 0, 0, 166, 164, 1, 0, 0, 0, 167, 172, 5, 34, 0, 0, 168, 171, 3, 61, 30, 0, 169, 171, 3, 67, 33, 0, 170, 168, 1, 0, 0, 0, 170, 169, 1, 0, 0, 0, 171, 174, 1, 0, 0, 0, 172, 170, 1, 0, 0, 0, 172, 173, 1, 0, 0, 0, 173, 175, 1, 0, 0, 0, 174, 172, 1, 0, 0, 0, 175, 176, 5, 34, 0, 0, 176, 60, 1, 0, 0, 0, 177, 180, 5, 92, 0, 0, 178, 181, 7, 2, 0, 0, 179, 181, 3, 63, 31, 0, 180, 178, 1, 0, 0, 0, 180, 179, 1, 0, 0, 0, 181, 62, 1, 0, 0, 0, 182, 183, 5, 117, 0, 0, 183, 184, 3, 65, 32, 0, 184, 185, 3, 65, 32, 0, 185, 186, 3, 65, 32, 0, 186, 187, 3, 65, 32, 0, 187, 64, 1, 0, 0, 0, 188, 189, 7, 3, 0, 0, 189, 66, 1, 0, 0, 0, 190, 191, 8, 4, 0, 0, 191, 68, 1, 0, 0, 0, 192, 194, 5, 45, 0, 0, 193, 192, 1, 0, 0, 0, 193, 194, 1, 0, 0, 0, 194, 195, 1, 0, 0, 0, 195, 202, 3, 71, 35, 0, 196, 198, 5, 46, 0, 0, 197, 199, 7, 5, 0, 0, 198, 197, 1, 0, 0, 0, 199, 200, 1, 0, 0, 0, 200, 198, 1, 0, 0, 0, 200, 201, 1, 0, 0, 0, 201, 203, 1, 0, 0, 0, 202, 196, 1, 0, 0, 0, 202, 203, 1, 0, 0, 0, 203, 205, 1, 0, 0, 0, 204, 206, 3, 73, 36, 0, 205, 204, 1, 0, 0, 0, 205, 206, 1, 0, 0, 0, 206, 70, 1, 0, 0, 0, 207, 216, 5, 48, 0, 0, 208, 212, 7, 6, 0, 0, 209, 211, 7, 5, 0, 0, 210, 209, 1, 0, 0, 0, 211, 214, 1, 0, 0, 0, 212, 210, 1, 0, 0, 0, 212, 213, 1, 0, 0, 0, 213, 216, 1, 0, 0, 0, 214, 212, 1, 0, 0, 0, 215, 207, 1, 0, 0, 0, 215, 208, 1, 0, 0, 0, 216, 72, 1, 0, 0, 0, 217, 219, 7, 7, 0, 0, 218, 220, 7, 8, 0, 0, 219, 218, 1, 0, 0, 0, 219, 220, 1, 0, 0, 0, 220, 221, 1, 0, 0, 0, 221, 222, 3, 71, 35, 0, 222, 74, 1, 0, 0, 0, 223, 225, 7, 9, 0, 0, 224, 223, 1, 0, 0, 0, 225, 226, 1, 0, 0, 0, 226, 224, 1, 0, 0, 0, 226, 227, 1, 0, 0, 0, 227, 228, 1, 0, 0, 0, 228, 229, 6, 37, 0, 0, 229, 76, 1, 0, 0, 0, 13, 0, 164, 170, 172, 180, 193, 200, 202, 205, 212, 215, 219, 226, 1, 6, 0, 0] \ No newline at end of file diff --git a/jsonpath2/parser/JSONPathLexer.py b/jsonpath2/parser/JSONPathLexer.py index 0e51c85..3d323e4 100644 --- a/jsonpath2/parser/JSONPathLexer.py +++ b/jsonpath2/parser/JSONPathLexer.py @@ -10,87 +10,89 @@ def serializedATN(): return [ - 4,0,31,225,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, + 4,0,32,230,6,-1,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5, 2,6,7,6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2, 13,7,13,2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,2,18,7,18,2,19,7, 19,2,20,7,20,2,21,7,21,2,22,7,22,2,23,7,23,2,24,7,24,2,25,7,25,2, 26,7,26,2,27,7,27,2,28,7,28,2,29,7,29,2,30,7,30,2,31,7,31,2,32,7, - 32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,1,0,1,0,1,1,1,1,1,1,1, - 2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,5,1,5,1,6,1,6,1,7,1,7,1,7,1,8,1, - 8,1,9,1,9,1,9,1,10,1,10,1,11,1,11,1,11,1,12,1,12,1,12,1,12,1,13, - 1,13,1,13,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,14,1,15,1,15, - 1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17, - 1,17,1,18,1,18,1,19,1,19,1,20,1,20,1,21,1,21,1,22,1,22,1,23,1,23, - 1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,5,27,158,8,27,10,27,12,27, - 161,9,27,1,28,1,28,1,28,5,28,166,8,28,10,28,12,28,169,9,28,1,28, - 1,28,1,29,1,29,1,29,3,29,176,8,29,1,30,1,30,1,30,1,30,1,30,1,30, - 1,31,1,31,1,32,1,32,1,33,3,33,189,8,33,1,33,1,33,1,33,4,33,194,8, - 33,11,33,12,33,195,3,33,198,8,33,1,33,3,33,201,8,33,1,34,1,34,1, - 34,5,34,206,8,34,10,34,12,34,209,9,34,3,34,211,8,34,1,35,1,35,3, - 35,215,8,35,1,35,1,35,1,36,4,36,220,8,36,11,36,12,36,221,1,36,1, - 36,0,0,37,1,1,3,2,5,3,7,4,9,5,11,6,13,7,15,8,17,9,19,10,21,11,23, - 12,25,13,27,14,29,15,31,16,33,17,35,18,37,19,39,20,41,21,43,22,45, - 23,47,24,49,25,51,26,53,27,55,28,57,29,59,0,61,0,63,0,65,0,67,30, - 69,0,71,0,73,31,1,0,10,3,0,65,90,95,95,97,122,4,0,48,57,65,90,95, - 95,97,122,8,0,34,34,47,47,92,92,98,98,102,102,110,110,114,114,116, - 116,3,0,48,57,65,70,97,102,3,0,0,31,34,34,92,92,1,0,48,57,1,0,49, - 57,2,0,69,69,101,101,2,0,43,43,45,45,3,0,9,10,13,13,32,32,230,0, - 1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0,0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1, - 0,0,0,0,13,1,0,0,0,0,15,1,0,0,0,0,17,1,0,0,0,0,19,1,0,0,0,0,21,1, - 0,0,0,0,23,1,0,0,0,0,25,1,0,0,0,0,27,1,0,0,0,0,29,1,0,0,0,0,31,1, - 0,0,0,0,33,1,0,0,0,0,35,1,0,0,0,0,37,1,0,0,0,0,39,1,0,0,0,0,41,1, - 0,0,0,0,43,1,0,0,0,0,45,1,0,0,0,0,47,1,0,0,0,0,49,1,0,0,0,0,51,1, - 0,0,0,0,53,1,0,0,0,0,55,1,0,0,0,0,57,1,0,0,0,0,67,1,0,0,0,0,73,1, - 0,0,0,1,75,1,0,0,0,3,77,1,0,0,0,5,80,1,0,0,0,7,82,1,0,0,0,9,84,1, - 0,0,0,11,86,1,0,0,0,13,90,1,0,0,0,15,92,1,0,0,0,17,95,1,0,0,0,19, - 97,1,0,0,0,21,100,1,0,0,0,23,102,1,0,0,0,25,105,1,0,0,0,27,109,1, - 0,0,0,29,112,1,0,0,0,31,121,1,0,0,0,33,126,1,0,0,0,35,132,1,0,0, - 0,37,137,1,0,0,0,39,139,1,0,0,0,41,141,1,0,0,0,43,143,1,0,0,0,45, - 145,1,0,0,0,47,147,1,0,0,0,49,149,1,0,0,0,51,151,1,0,0,0,53,153, - 1,0,0,0,55,155,1,0,0,0,57,162,1,0,0,0,59,172,1,0,0,0,61,177,1,0, - 0,0,63,183,1,0,0,0,65,185,1,0,0,0,67,188,1,0,0,0,69,210,1,0,0,0, - 71,212,1,0,0,0,73,219,1,0,0,0,75,76,5,64,0,0,76,2,1,0,0,0,77,78, - 5,46,0,0,78,79,5,46,0,0,79,4,1,0,0,0,80,81,5,36,0,0,81,6,1,0,0,0, - 82,83,5,46,0,0,83,8,1,0,0,0,84,85,5,42,0,0,85,10,1,0,0,0,86,87,5, - 97,0,0,87,88,5,110,0,0,88,89,5,100,0,0,89,12,1,0,0,0,90,91,5,61, - 0,0,91,14,1,0,0,0,92,93,5,62,0,0,93,94,5,61,0,0,94,16,1,0,0,0,95, - 96,5,62,0,0,96,18,1,0,0,0,97,98,5,60,0,0,98,99,5,61,0,0,99,20,1, - 0,0,0,100,101,5,60,0,0,101,22,1,0,0,0,102,103,5,33,0,0,103,104,5, - 61,0,0,104,24,1,0,0,0,105,106,5,110,0,0,106,107,5,111,0,0,107,108, - 5,116,0,0,108,26,1,0,0,0,109,110,5,111,0,0,110,111,5,114,0,0,111, - 28,1,0,0,0,112,113,5,99,0,0,113,114,5,111,0,0,114,115,5,110,0,0, - 115,116,5,116,0,0,116,117,5,97,0,0,117,118,5,105,0,0,118,119,5,110, - 0,0,119,120,5,115,0,0,120,30,1,0,0,0,121,122,5,116,0,0,122,123,5, - 114,0,0,123,124,5,117,0,0,124,125,5,101,0,0,125,32,1,0,0,0,126,127, - 5,102,0,0,127,128,5,97,0,0,128,129,5,108,0,0,129,130,5,115,0,0,130, - 131,5,101,0,0,131,34,1,0,0,0,132,133,5,110,0,0,133,134,5,117,0,0, - 134,135,5,108,0,0,135,136,5,108,0,0,136,36,1,0,0,0,137,138,5,123, - 0,0,138,38,1,0,0,0,139,140,5,125,0,0,140,40,1,0,0,0,141,142,5,91, - 0,0,142,42,1,0,0,0,143,144,5,93,0,0,144,44,1,0,0,0,145,146,5,58, - 0,0,146,46,1,0,0,0,147,148,5,44,0,0,148,48,1,0,0,0,149,150,5,40, - 0,0,150,50,1,0,0,0,151,152,5,41,0,0,152,52,1,0,0,0,153,154,5,63, - 0,0,154,54,1,0,0,0,155,159,7,0,0,0,156,158,7,1,0,0,157,156,1,0,0, - 0,158,161,1,0,0,0,159,157,1,0,0,0,159,160,1,0,0,0,160,56,1,0,0,0, - 161,159,1,0,0,0,162,167,5,34,0,0,163,166,3,59,29,0,164,166,3,65, - 32,0,165,163,1,0,0,0,165,164,1,0,0,0,166,169,1,0,0,0,167,165,1,0, - 0,0,167,168,1,0,0,0,168,170,1,0,0,0,169,167,1,0,0,0,170,171,5,34, - 0,0,171,58,1,0,0,0,172,175,5,92,0,0,173,176,7,2,0,0,174,176,3,61, - 30,0,175,173,1,0,0,0,175,174,1,0,0,0,176,60,1,0,0,0,177,178,5,117, - 0,0,178,179,3,63,31,0,179,180,3,63,31,0,180,181,3,63,31,0,181,182, - 3,63,31,0,182,62,1,0,0,0,183,184,7,3,0,0,184,64,1,0,0,0,185,186, - 8,4,0,0,186,66,1,0,0,0,187,189,5,45,0,0,188,187,1,0,0,0,188,189, - 1,0,0,0,189,190,1,0,0,0,190,197,3,69,34,0,191,193,5,46,0,0,192,194, - 7,5,0,0,193,192,1,0,0,0,194,195,1,0,0,0,195,193,1,0,0,0,195,196, - 1,0,0,0,196,198,1,0,0,0,197,191,1,0,0,0,197,198,1,0,0,0,198,200, - 1,0,0,0,199,201,3,71,35,0,200,199,1,0,0,0,200,201,1,0,0,0,201,68, - 1,0,0,0,202,211,5,48,0,0,203,207,7,6,0,0,204,206,7,5,0,0,205,204, - 1,0,0,0,206,209,1,0,0,0,207,205,1,0,0,0,207,208,1,0,0,0,208,211, - 1,0,0,0,209,207,1,0,0,0,210,202,1,0,0,0,210,203,1,0,0,0,211,70,1, - 0,0,0,212,214,7,7,0,0,213,215,7,8,0,0,214,213,1,0,0,0,214,215,1, - 0,0,0,215,216,1,0,0,0,216,217,3,69,34,0,217,72,1,0,0,0,218,220,7, - 9,0,0,219,218,1,0,0,0,220,221,1,0,0,0,221,219,1,0,0,0,221,222,1, - 0,0,0,222,223,1,0,0,0,223,224,6,36,0,0,224,74,1,0,0,0,13,0,159,165, - 167,175,188,195,197,200,207,210,214,221,1,6,0,0 + 32,2,33,7,33,2,34,7,34,2,35,7,35,2,36,7,36,2,37,7,37,1,0,1,0,1,1, + 1,1,1,1,1,2,1,2,1,3,1,3,1,4,1,4,1,5,1,5,1,5,1,5,1,6,1,6,1,7,1,7, + 1,7,1,8,1,8,1,9,1,9,1,9,1,10,1,10,1,11,1,11,1,11,1,12,1,12,1,12, + 1,13,1,13,1,13,1,13,1,14,1,14,1,14,1,15,1,15,1,15,1,15,1,15,1,15, + 1,15,1,15,1,15,1,16,1,16,1,16,1,16,1,16,1,17,1,17,1,17,1,17,1,17, + 1,17,1,18,1,18,1,18,1,18,1,18,1,19,1,19,1,20,1,20,1,21,1,21,1,22, + 1,22,1,23,1,23,1,24,1,24,1,25,1,25,1,26,1,26,1,27,1,27,1,28,1,28, + 5,28,163,8,28,10,28,12,28,166,9,28,1,29,1,29,1,29,5,29,171,8,29, + 10,29,12,29,174,9,29,1,29,1,29,1,30,1,30,1,30,3,30,181,8,30,1,31, + 1,31,1,31,1,31,1,31,1,31,1,32,1,32,1,33,1,33,1,34,3,34,194,8,34, + 1,34,1,34,1,34,4,34,199,8,34,11,34,12,34,200,3,34,203,8,34,1,34, + 3,34,206,8,34,1,35,1,35,1,35,5,35,211,8,35,10,35,12,35,214,9,35, + 3,35,216,8,35,1,36,1,36,3,36,220,8,36,1,36,1,36,1,37,4,37,225,8, + 37,11,37,12,37,226,1,37,1,37,0,0,38,1,1,3,2,5,3,7,4,9,5,11,6,13, + 7,15,8,17,9,19,10,21,11,23,12,25,13,27,14,29,15,31,16,33,17,35,18, + 37,19,39,20,41,21,43,22,45,23,47,24,49,25,51,26,53,27,55,28,57,29, + 59,30,61,0,63,0,65,0,67,0,69,31,71,0,73,0,75,32,1,0,10,3,0,65,90, + 95,95,97,122,4,0,48,57,65,90,95,95,97,122,8,0,34,34,47,47,92,92, + 98,98,102,102,110,110,114,114,116,116,3,0,48,57,65,70,97,102,3,0, + 0,31,34,34,92,92,1,0,48,57,1,0,49,57,2,0,69,69,101,101,2,0,43,43, + 45,45,3,0,9,10,13,13,32,32,235,0,1,1,0,0,0,0,3,1,0,0,0,0,5,1,0,0, + 0,0,7,1,0,0,0,0,9,1,0,0,0,0,11,1,0,0,0,0,13,1,0,0,0,0,15,1,0,0,0, + 0,17,1,0,0,0,0,19,1,0,0,0,0,21,1,0,0,0,0,23,1,0,0,0,0,25,1,0,0,0, + 0,27,1,0,0,0,0,29,1,0,0,0,0,31,1,0,0,0,0,33,1,0,0,0,0,35,1,0,0,0, + 0,37,1,0,0,0,0,39,1,0,0,0,0,41,1,0,0,0,0,43,1,0,0,0,0,45,1,0,0,0, + 0,47,1,0,0,0,0,49,1,0,0,0,0,51,1,0,0,0,0,53,1,0,0,0,0,55,1,0,0,0, + 0,57,1,0,0,0,0,59,1,0,0,0,0,69,1,0,0,0,0,75,1,0,0,0,1,77,1,0,0,0, + 3,79,1,0,0,0,5,82,1,0,0,0,7,84,1,0,0,0,9,86,1,0,0,0,11,88,1,0,0, + 0,13,92,1,0,0,0,15,94,1,0,0,0,17,97,1,0,0,0,19,99,1,0,0,0,21,102, + 1,0,0,0,23,104,1,0,0,0,25,107,1,0,0,0,27,110,1,0,0,0,29,114,1,0, + 0,0,31,117,1,0,0,0,33,126,1,0,0,0,35,131,1,0,0,0,37,137,1,0,0,0, + 39,142,1,0,0,0,41,144,1,0,0,0,43,146,1,0,0,0,45,148,1,0,0,0,47,150, + 1,0,0,0,49,152,1,0,0,0,51,154,1,0,0,0,53,156,1,0,0,0,55,158,1,0, + 0,0,57,160,1,0,0,0,59,167,1,0,0,0,61,177,1,0,0,0,63,182,1,0,0,0, + 65,188,1,0,0,0,67,190,1,0,0,0,69,193,1,0,0,0,71,215,1,0,0,0,73,217, + 1,0,0,0,75,224,1,0,0,0,77,78,5,64,0,0,78,2,1,0,0,0,79,80,5,46,0, + 0,80,81,5,46,0,0,81,4,1,0,0,0,82,83,5,36,0,0,83,6,1,0,0,0,84,85, + 5,46,0,0,85,8,1,0,0,0,86,87,5,42,0,0,87,10,1,0,0,0,88,89,5,97,0, + 0,89,90,5,110,0,0,90,91,5,100,0,0,91,12,1,0,0,0,92,93,5,61,0,0,93, + 14,1,0,0,0,94,95,5,62,0,0,95,96,5,61,0,0,96,16,1,0,0,0,97,98,5,62, + 0,0,98,18,1,0,0,0,99,100,5,60,0,0,100,101,5,61,0,0,101,20,1,0,0, + 0,102,103,5,60,0,0,103,22,1,0,0,0,104,105,5,33,0,0,105,106,5,61, + 0,0,106,24,1,0,0,0,107,108,5,126,0,0,108,109,5,61,0,0,109,26,1,0, + 0,0,110,111,5,110,0,0,111,112,5,111,0,0,112,113,5,116,0,0,113,28, + 1,0,0,0,114,115,5,111,0,0,115,116,5,114,0,0,116,30,1,0,0,0,117,118, + 5,99,0,0,118,119,5,111,0,0,119,120,5,110,0,0,120,121,5,116,0,0,121, + 122,5,97,0,0,122,123,5,105,0,0,123,124,5,110,0,0,124,125,5,115,0, + 0,125,32,1,0,0,0,126,127,5,116,0,0,127,128,5,114,0,0,128,129,5,117, + 0,0,129,130,5,101,0,0,130,34,1,0,0,0,131,132,5,102,0,0,132,133,5, + 97,0,0,133,134,5,108,0,0,134,135,5,115,0,0,135,136,5,101,0,0,136, + 36,1,0,0,0,137,138,5,110,0,0,138,139,5,117,0,0,139,140,5,108,0,0, + 140,141,5,108,0,0,141,38,1,0,0,0,142,143,5,123,0,0,143,40,1,0,0, + 0,144,145,5,125,0,0,145,42,1,0,0,0,146,147,5,91,0,0,147,44,1,0,0, + 0,148,149,5,93,0,0,149,46,1,0,0,0,150,151,5,58,0,0,151,48,1,0,0, + 0,152,153,5,44,0,0,153,50,1,0,0,0,154,155,5,40,0,0,155,52,1,0,0, + 0,156,157,5,41,0,0,157,54,1,0,0,0,158,159,5,63,0,0,159,56,1,0,0, + 0,160,164,7,0,0,0,161,163,7,1,0,0,162,161,1,0,0,0,163,166,1,0,0, + 0,164,162,1,0,0,0,164,165,1,0,0,0,165,58,1,0,0,0,166,164,1,0,0,0, + 167,172,5,34,0,0,168,171,3,61,30,0,169,171,3,67,33,0,170,168,1,0, + 0,0,170,169,1,0,0,0,171,174,1,0,0,0,172,170,1,0,0,0,172,173,1,0, + 0,0,173,175,1,0,0,0,174,172,1,0,0,0,175,176,5,34,0,0,176,60,1,0, + 0,0,177,180,5,92,0,0,178,181,7,2,0,0,179,181,3,63,31,0,180,178,1, + 0,0,0,180,179,1,0,0,0,181,62,1,0,0,0,182,183,5,117,0,0,183,184,3, + 65,32,0,184,185,3,65,32,0,185,186,3,65,32,0,186,187,3,65,32,0,187, + 64,1,0,0,0,188,189,7,3,0,0,189,66,1,0,0,0,190,191,8,4,0,0,191,68, + 1,0,0,0,192,194,5,45,0,0,193,192,1,0,0,0,193,194,1,0,0,0,194,195, + 1,0,0,0,195,202,3,71,35,0,196,198,5,46,0,0,197,199,7,5,0,0,198,197, + 1,0,0,0,199,200,1,0,0,0,200,198,1,0,0,0,200,201,1,0,0,0,201,203, + 1,0,0,0,202,196,1,0,0,0,202,203,1,0,0,0,203,205,1,0,0,0,204,206, + 3,73,36,0,205,204,1,0,0,0,205,206,1,0,0,0,206,70,1,0,0,0,207,216, + 5,48,0,0,208,212,7,6,0,0,209,211,7,5,0,0,210,209,1,0,0,0,211,214, + 1,0,0,0,212,210,1,0,0,0,212,213,1,0,0,0,213,216,1,0,0,0,214,212, + 1,0,0,0,215,207,1,0,0,0,215,208,1,0,0,0,216,72,1,0,0,0,217,219,7, + 7,0,0,218,220,7,8,0,0,219,218,1,0,0,0,219,220,1,0,0,0,220,221,1, + 0,0,0,221,222,3,71,35,0,222,74,1,0,0,0,223,225,7,9,0,0,224,223,1, + 0,0,0,225,226,1,0,0,0,226,224,1,0,0,0,226,227,1,0,0,0,227,228,1, + 0,0,0,228,229,6,37,0,0,229,76,1,0,0,0,13,0,164,170,172,180,193,200, + 202,205,212,215,219,226,1,6,0,0 ] class JSONPathLexer(Lexer): @@ -111,25 +113,26 @@ class JSONPathLexer(Lexer): LE = 10 LT = 11 NE = 12 - NOT = 13 - OR = 14 - CN = 15 - TRUE = 16 - FALSE = 17 - NULL = 18 - BRACE_LEFT = 19 - BRACE_RIGHT = 20 - BRACKET_LEFT = 21 - BRACKET_RIGHT = 22 - COLON = 23 - COMMA = 24 - PAREN_LEFT = 25 - PAREN_RIGHT = 26 - QUESTION = 27 - ID = 28 - STRING = 29 - NUMBER = 30 - WS = 31 + RE = 13 + NOT = 14 + OR = 15 + CN = 16 + TRUE = 17 + FALSE = 18 + NULL = 19 + BRACE_LEFT = 20 + BRACE_RIGHT = 21 + BRACKET_LEFT = 22 + BRACKET_RIGHT = 23 + COLON = 24 + COMMA = 25 + PAREN_LEFT = 26 + PAREN_RIGHT = 27 + QUESTION = 28 + ID = 29 + STRING = 30 + NUMBER = 31 + WS = 32 channelNames = [ u"DEFAULT_TOKEN_CHANNEL", u"HIDDEN" ] @@ -137,24 +140,25 @@ class JSONPathLexer(Lexer): literalNames = [ "", "'@'", "'..'", "'$'", "'.'", "'*'", "'and'", "'='", "'>='", - "'>'", "'<='", "'<'", "'!='", "'not'", "'or'", "'contains'", + "'>'", "'<='", "'<'", "'!='", "'~='", "'not'", "'or'", "'contains'", "'true'", "'false'", "'null'", "'{'", "'}'", "'['", "']'", "':'", "','", "'('", "')'", "'?'" ] symbolicNames = [ "", "CURRENT_VALUE", "RECURSIVE_DESCENT", "ROOT_VALUE", "SUBSCRIPT", "WILDCARD_SUBSCRIPT", "AND", "EQ", "GE", "GT", "LE", "LT", "NE", - "NOT", "OR", "CN", "TRUE", "FALSE", "NULL", "BRACE_LEFT", "BRACE_RIGHT", - "BRACKET_LEFT", "BRACKET_RIGHT", "COLON", "COMMA", "PAREN_LEFT", - "PAREN_RIGHT", "QUESTION", "ID", "STRING", "NUMBER", "WS" ] + "RE", "NOT", "OR", "CN", "TRUE", "FALSE", "NULL", "BRACE_LEFT", + "BRACE_RIGHT", "BRACKET_LEFT", "BRACKET_RIGHT", "COLON", "COMMA", + "PAREN_LEFT", "PAREN_RIGHT", "QUESTION", "ID", "STRING", "NUMBER", + "WS" ] ruleNames = [ "CURRENT_VALUE", "RECURSIVE_DESCENT", "ROOT_VALUE", "SUBSCRIPT", "WILDCARD_SUBSCRIPT", "AND", "EQ", "GE", "GT", "LE", "LT", - "NE", "NOT", "OR", "CN", "TRUE", "FALSE", "NULL", "BRACE_LEFT", - "BRACE_RIGHT", "BRACKET_LEFT", "BRACKET_RIGHT", "COLON", - "COMMA", "PAREN_LEFT", "PAREN_RIGHT", "QUESTION", "ID", - "STRING", "ESC", "UNICODE", "HEX", "SAFECODEPOINT", "NUMBER", - "INT", "EXP", "WS" ] + "NE", "RE", "NOT", "OR", "CN", "TRUE", "FALSE", "NULL", + "BRACE_LEFT", "BRACE_RIGHT", "BRACKET_LEFT", "BRACKET_RIGHT", + "COLON", "COMMA", "PAREN_LEFT", "PAREN_RIGHT", "QUESTION", + "ID", "STRING", "ESC", "UNICODE", "HEX", "SAFECODEPOINT", + "NUMBER", "INT", "EXP", "WS" ] grammarFileName = "JSONPath.g4" diff --git a/jsonpath2/parser/JSONPathLexer.tokens b/jsonpath2/parser/JSONPathLexer.tokens index dacad5f..2d3070e 100644 --- a/jsonpath2/parser/JSONPathLexer.tokens +++ b/jsonpath2/parser/JSONPathLexer.tokens @@ -10,25 +10,26 @@ GT=9 LE=10 LT=11 NE=12 -NOT=13 -OR=14 -CN=15 -TRUE=16 -FALSE=17 -NULL=18 -BRACE_LEFT=19 -BRACE_RIGHT=20 -BRACKET_LEFT=21 -BRACKET_RIGHT=22 -COLON=23 -COMMA=24 -PAREN_LEFT=25 -PAREN_RIGHT=26 -QUESTION=27 -ID=28 -STRING=29 -NUMBER=30 -WS=31 +RE=13 +NOT=14 +OR=15 +CN=16 +TRUE=17 +FALSE=18 +NULL=19 +BRACE_LEFT=20 +BRACE_RIGHT=21 +BRACKET_LEFT=22 +BRACKET_RIGHT=23 +COLON=24 +COMMA=25 +PAREN_LEFT=26 +PAREN_RIGHT=27 +QUESTION=28 +ID=29 +STRING=30 +NUMBER=31 +WS=32 '@'=1 '..'=2 '$'=3 @@ -41,18 +42,19 @@ WS=31 '<='=10 '<'=11 '!='=12 -'not'=13 -'or'=14 -'contains'=15 -'true'=16 -'false'=17 -'null'=18 -'{'=19 -'}'=20 -'['=21 -']'=22 -':'=23 -','=24 -'('=25 -')'=26 -'?'=27 +'~='=13 +'not'=14 +'or'=15 +'contains'=16 +'true'=17 +'false'=18 +'null'=19 +'{'=20 +'}'=21 +'['=22 +']'=23 +':'=24 +','=25 +'('=26 +')'=27 +'?'=28 diff --git a/jsonpath2/parser/JSONPathParser.py b/jsonpath2/parser/JSONPathParser.py index 2b06af1..a87031b 100644 --- a/jsonpath2/parser/JSONPathParser.py +++ b/jsonpath2/parser/JSONPathParser.py @@ -10,7 +10,7 @@ def serializedATN(): return [ - 4,1,31,201,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, + 4,1,32,201,2,0,7,0,2,1,7,1,2,2,7,2,2,3,7,3,2,4,7,4,2,5,7,5,2,6,7, 6,2,7,7,7,2,8,7,8,2,9,7,9,2,10,7,10,2,11,7,11,2,12,7,12,2,13,7,13, 2,14,7,14,2,15,7,15,2,16,7,16,2,17,7,17,1,0,1,0,3,0,39,8,0,1,0,1, 0,1,1,1,1,3,1,45,8,1,1,2,1,2,3,2,49,8,2,1,3,1,3,1,3,3,3,54,8,3,1, @@ -26,8 +26,8 @@ def serializedATN(): 14,171,8,14,1,15,1,15,1,15,1,15,1,16,1,16,1,16,1,16,5,16,181,8,16, 10,16,12,16,184,9,16,1,16,1,16,1,16,1,16,3,16,190,8,16,1,17,1,17, 1,17,1,17,1,17,1,17,1,17,3,17,199,8,17,1,17,0,0,18,0,2,4,6,8,10, - 12,14,16,18,20,22,24,26,28,30,32,34,0,2,2,0,1,1,3,3,2,0,7,12,15, - 15,221,0,36,1,0,0,0,2,42,1,0,0,0,4,48,1,0,0,0,6,67,1,0,0,0,8,69, + 12,14,16,18,20,22,24,26,28,30,32,34,0,2,2,0,1,1,3,3,2,0,7,13,16, + 16,221,0,36,1,0,0,0,2,42,1,0,0,0,4,48,1,0,0,0,6,67,1,0,0,0,8,69, 1,0,0,0,10,80,1,0,0,0,12,98,1,0,0,0,14,116,1,0,0,0,16,118,1,0,0, 0,18,130,1,0,0,0,20,132,1,0,0,0,22,137,1,0,0,0,24,153,1,0,0,0,26, 155,1,0,0,0,28,170,1,0,0,0,30,172,1,0,0,0,32,189,1,0,0,0,34,198, @@ -40,44 +40,44 @@ def serializedATN(): 59,5,4,0,0,59,61,3,12,6,0,60,62,3,6,3,0,61,60,1,0,0,0,61,62,1,0, 0,0,62,68,1,0,0,0,63,65,3,8,4,0,64,66,3,6,3,0,65,64,1,0,0,0,65,66, 1,0,0,0,66,68,1,0,0,0,67,50,1,0,0,0,67,58,1,0,0,0,67,63,1,0,0,0, - 68,7,1,0,0,0,69,70,5,21,0,0,70,75,3,14,7,0,71,72,5,24,0,0,72,74, + 68,7,1,0,0,0,69,70,5,22,0,0,70,75,3,14,7,0,71,72,5,25,0,0,72,74, 3,14,7,0,73,71,1,0,0,0,74,77,1,0,0,0,75,73,1,0,0,0,75,76,1,0,0,0, - 76,78,1,0,0,0,77,75,1,0,0,0,78,79,5,22,0,0,79,9,1,0,0,0,80,89,5, - 25,0,0,81,86,3,4,2,0,82,83,5,24,0,0,83,85,3,4,2,0,84,82,1,0,0,0, + 76,78,1,0,0,0,77,75,1,0,0,0,78,79,5,23,0,0,79,9,1,0,0,0,80,89,5, + 26,0,0,81,86,3,4,2,0,82,83,5,25,0,0,83,85,3,4,2,0,84,82,1,0,0,0, 85,88,1,0,0,0,86,84,1,0,0,0,86,87,1,0,0,0,87,90,1,0,0,0,88,86,1, - 0,0,0,89,81,1,0,0,0,89,90,1,0,0,0,90,91,1,0,0,0,91,92,5,26,0,0,92, - 11,1,0,0,0,93,95,5,28,0,0,94,96,3,10,5,0,95,94,1,0,0,0,95,96,1,0, + 0,0,0,89,81,1,0,0,0,89,90,1,0,0,0,90,91,1,0,0,0,91,92,5,27,0,0,92, + 11,1,0,0,0,93,95,5,29,0,0,94,96,3,10,5,0,95,94,1,0,0,0,95,96,1,0, 0,0,96,99,1,0,0,0,97,99,5,5,0,0,98,93,1,0,0,0,98,97,1,0,0,0,99,13, - 1,0,0,0,100,117,5,29,0,0,101,102,5,30,0,0,102,104,4,7,0,0,103,105, + 1,0,0,0,100,117,5,30,0,0,101,102,5,31,0,0,102,104,4,7,0,0,103,105, 3,16,8,0,104,103,1,0,0,0,104,105,1,0,0,0,105,117,1,0,0,0,106,117, - 3,16,8,0,107,117,5,5,0,0,108,109,5,27,0,0,109,110,5,25,0,0,110,111, - 3,18,9,0,111,112,5,26,0,0,112,117,1,0,0,0,113,117,3,2,1,0,114,115, - 5,28,0,0,115,117,3,10,5,0,116,100,1,0,0,0,116,101,1,0,0,0,116,106, + 3,16,8,0,107,117,5,5,0,0,108,109,5,28,0,0,109,110,5,26,0,0,110,111, + 3,18,9,0,111,112,5,27,0,0,112,117,1,0,0,0,113,117,3,2,1,0,114,115, + 5,29,0,0,115,117,3,10,5,0,116,100,1,0,0,0,116,101,1,0,0,0,116,106, 1,0,0,0,116,107,1,0,0,0,116,108,1,0,0,0,116,113,1,0,0,0,116,114, - 1,0,0,0,117,15,1,0,0,0,118,121,5,23,0,0,119,120,5,30,0,0,120,122, + 1,0,0,0,117,15,1,0,0,0,118,121,5,24,0,0,119,120,5,31,0,0,120,122, 4,8,1,0,121,119,1,0,0,0,121,122,1,0,0,0,122,128,1,0,0,0,123,126, - 5,23,0,0,124,125,5,30,0,0,125,127,4,8,2,0,126,124,1,0,0,0,126,127, + 5,24,0,0,124,125,5,31,0,0,125,127,4,8,2,0,126,124,1,0,0,0,126,127, 1,0,0,0,127,129,1,0,0,0,128,123,1,0,0,0,128,129,1,0,0,0,129,17,1, 0,0,0,130,131,3,20,10,0,131,19,1,0,0,0,132,135,3,22,11,0,133,134, 5,6,0,0,134,136,3,20,10,0,135,133,1,0,0,0,135,136,1,0,0,0,136,21, - 1,0,0,0,137,140,3,24,12,0,138,139,5,14,0,0,139,141,3,22,11,0,140, - 138,1,0,0,0,140,141,1,0,0,0,141,23,1,0,0,0,142,143,5,13,0,0,143, - 154,3,24,12,0,144,145,5,25,0,0,145,146,3,18,9,0,146,147,5,26,0,0, + 1,0,0,0,137,140,3,24,12,0,138,139,5,15,0,0,139,141,3,22,11,0,140, + 138,1,0,0,0,140,141,1,0,0,0,141,23,1,0,0,0,142,143,5,14,0,0,143, + 154,3,24,12,0,144,145,5,26,0,0,145,146,3,18,9,0,146,147,5,27,0,0, 147,154,1,0,0,0,148,151,3,4,2,0,149,150,7,1,0,0,150,152,3,4,2,0, 151,149,1,0,0,0,151,152,1,0,0,0,152,154,1,0,0,0,153,142,1,0,0,0, 153,144,1,0,0,0,153,148,1,0,0,0,154,25,1,0,0,0,155,156,3,34,17,0, - 156,27,1,0,0,0,157,158,5,19,0,0,158,163,3,30,15,0,159,160,5,24,0, + 156,27,1,0,0,0,157,158,5,20,0,0,158,163,3,30,15,0,159,160,5,25,0, 0,160,162,3,30,15,0,161,159,1,0,0,0,162,165,1,0,0,0,163,161,1,0, - 0,0,163,164,1,0,0,0,164,166,1,0,0,0,165,163,1,0,0,0,166,167,5,20, - 0,0,167,171,1,0,0,0,168,169,5,19,0,0,169,171,5,20,0,0,170,157,1, - 0,0,0,170,168,1,0,0,0,171,29,1,0,0,0,172,173,5,29,0,0,173,174,5, - 23,0,0,174,175,3,34,17,0,175,31,1,0,0,0,176,177,5,21,0,0,177,182, - 3,34,17,0,178,179,5,24,0,0,179,181,3,34,17,0,180,178,1,0,0,0,181, + 0,0,163,164,1,0,0,0,164,166,1,0,0,0,165,163,1,0,0,0,166,167,5,21, + 0,0,167,171,1,0,0,0,168,169,5,20,0,0,169,171,5,21,0,0,170,157,1, + 0,0,0,170,168,1,0,0,0,171,29,1,0,0,0,172,173,5,30,0,0,173,174,5, + 24,0,0,174,175,3,34,17,0,175,31,1,0,0,0,176,177,5,22,0,0,177,182, + 3,34,17,0,178,179,5,25,0,0,179,181,3,34,17,0,180,178,1,0,0,0,181, 184,1,0,0,0,182,180,1,0,0,0,182,183,1,0,0,0,183,185,1,0,0,0,184, - 182,1,0,0,0,185,186,5,22,0,0,186,190,1,0,0,0,187,188,5,21,0,0,188, - 190,5,22,0,0,189,176,1,0,0,0,189,187,1,0,0,0,190,33,1,0,0,0,191, - 199,5,29,0,0,192,199,5,30,0,0,193,199,3,28,14,0,194,199,3,32,16, - 0,195,199,5,16,0,0,196,199,5,17,0,0,197,199,5,18,0,0,198,191,1,0, + 182,1,0,0,0,185,186,5,23,0,0,186,190,1,0,0,0,187,188,5,22,0,0,188, + 190,5,23,0,0,189,176,1,0,0,0,189,187,1,0,0,0,190,33,1,0,0,0,191, + 199,5,30,0,0,192,199,5,31,0,0,193,199,3,28,14,0,194,199,3,32,16, + 0,195,199,5,17,0,0,196,199,5,18,0,0,197,199,5,19,0,0,198,191,1,0, 0,0,198,192,1,0,0,0,198,193,1,0,0,0,198,194,1,0,0,0,198,195,1,0, 0,0,198,196,1,0,0,0,198,197,1,0,0,0,199,35,1,0,0,0,27,38,44,48,53, 56,61,65,67,75,86,89,95,98,104,116,121,126,128,135,140,151,153,163, @@ -95,15 +95,15 @@ class JSONPathParser ( Parser ): sharedContextCache = PredictionContextCache() literalNames = [ "", "'@'", "'..'", "'$'", "'.'", "'*'", "'and'", - "'='", "'>='", "'>'", "'<='", "'<'", "'!='", "'not'", - "'or'", "'contains'", "'true'", "'false'", "'null'", - "'{'", "'}'", "'['", "']'", "':'", "','", "'('", "')'", - "'?'" ] + "'='", "'>='", "'>'", "'<='", "'<'", "'!='", "'~='", + "'not'", "'or'", "'contains'", "'true'", "'false'", + "'null'", "'{'", "'}'", "'['", "']'", "':'", "','", + "'('", "')'", "'?'" ] symbolicNames = [ "", "CURRENT_VALUE", "RECURSIVE_DESCENT", "ROOT_VALUE", "SUBSCRIPT", "WILDCARD_SUBSCRIPT", "AND", - "EQ", "GE", "GT", "LE", "LT", "NE", "NOT", "OR", "CN", - "TRUE", "FALSE", "NULL", "BRACE_LEFT", "BRACE_RIGHT", + "EQ", "GE", "GT", "LE", "LT", "NE", "RE", "NOT", "OR", + "CN", "TRUE", "FALSE", "NULL", "BRACE_LEFT", "BRACE_RIGHT", "BRACKET_LEFT", "BRACKET_RIGHT", "COLON", "COMMA", "PAREN_LEFT", "PAREN_RIGHT", "QUESTION", "ID", "STRING", "NUMBER", "WS" ] @@ -145,25 +145,26 @@ class JSONPathParser ( Parser ): LE=10 LT=11 NE=12 - NOT=13 - OR=14 - CN=15 - TRUE=16 - FALSE=17 - NULL=18 - BRACE_LEFT=19 - BRACE_RIGHT=20 - BRACKET_LEFT=21 - BRACKET_RIGHT=22 - COLON=23 - COMMA=24 - PAREN_LEFT=25 - PAREN_RIGHT=26 - QUESTION=27 - ID=28 - STRING=29 - NUMBER=30 - WS=31 + RE=13 + NOT=14 + OR=15 + CN=16 + TRUE=17 + FALSE=18 + NULL=19 + BRACE_LEFT=20 + BRACE_RIGHT=21 + BRACKET_LEFT=22 + BRACKET_RIGHT=23 + COLON=24 + COMMA=25 + PAREN_LEFT=26 + PAREN_RIGHT=27 + QUESTION=28 + ID=29 + STRING=30 + NUMBER=31 + WS=32 def __init__(self, input:TokenStream, output:TextIO = sys.stdout): super().__init__(input, output) @@ -1124,6 +1125,9 @@ def GE(self): def CN(self): return self.getToken(JSONPathParser.CN, 0) + def RE(self): + return self.getToken(JSONPathParser.RE, 0) + def getRuleIndex(self): return JSONPathParser.RULE_notExpression @@ -1170,10 +1174,10 @@ def notExpression(self): self.state = 151 self._errHandler.sync(self) _la = self._input.LA(1) - if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << JSONPathParser.EQ) | (1 << JSONPathParser.GE) | (1 << JSONPathParser.GT) | (1 << JSONPathParser.LE) | (1 << JSONPathParser.LT) | (1 << JSONPathParser.NE) | (1 << JSONPathParser.CN))) != 0): + if (((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << JSONPathParser.EQ) | (1 << JSONPathParser.GE) | (1 << JSONPathParser.GT) | (1 << JSONPathParser.LE) | (1 << JSONPathParser.LT) | (1 << JSONPathParser.NE) | (1 << JSONPathParser.RE) | (1 << JSONPathParser.CN))) != 0): self.state = 149 _la = self._input.LA(1) - if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << JSONPathParser.EQ) | (1 << JSONPathParser.GE) | (1 << JSONPathParser.GT) | (1 << JSONPathParser.LE) | (1 << JSONPathParser.LT) | (1 << JSONPathParser.NE) | (1 << JSONPathParser.CN))) != 0)): + if not((((_la) & ~0x3f) == 0 and ((1 << _la) & ((1 << JSONPathParser.EQ) | (1 << JSONPathParser.GE) | (1 << JSONPathParser.GT) | (1 << JSONPathParser.LE) | (1 << JSONPathParser.LT) | (1 << JSONPathParser.NE) | (1 << JSONPathParser.RE) | (1 << JSONPathParser.CN))) != 0)): self._errHandler.recoverInline(self) else: self._errHandler.reportMatch(self) diff --git a/jsonpath2/parser/__init__.py b/jsonpath2/parser/__init__.py index cb0c406..9166f95 100644 --- a/jsonpath2/parser/__init__.py +++ b/jsonpath2/parser/__init__.py @@ -13,6 +13,7 @@ NotEqualBinaryOperatorExpression, NotUnaryOperatorExpression, OrVariadicOperatorExpression, + RegexBinaryOperatorExpression, ) from jsonpath2.expressions.some import SomeExpression from jsonpath2.nodes.current import CurrentNode @@ -395,6 +396,12 @@ def exitNotExpression(self, ctx: JSONPathParser.NotExpressionContext): left_node_or_value, right_node_or_value ) ) + elif ctx.getToken(JSONPathParser.RE, 0) is not None: + self._stack.append( + RegexBinaryOperatorExpression( + left_node_or_value, right_node_or_value + ) + ) else: # NOTE Unreachable when listener is used as tree walker. raise ValueError() # pragma: no cover diff --git a/tests/bookstore_test.py b/tests/bookstore_test.py index 8564477..510054b 100644 --- a/tests/bookstore_test.py +++ b/tests/bookstore_test.py @@ -300,7 +300,29 @@ def test_bookstore_examples_13(self): .. code-block:: python - >>> expr = Path.parse_str('$..book[*][?(@.title contains "the")]') + >>> expr = Path.parse_str('$..book[*][?(@.title ~= "^S.*")]') + >>> expr.match(self.root_value) + """ + # TODO: Fix requiring double escaping and support regex flags + expr = Path.parse_str( + '$..book[*][?(@.title ~= "^Sayings\\\\s.*\\\\sCentury$")]' + ) + # TODO: This comes back with extra \\ and fails + # self.assertEqual(Path.parse_str(str(expr)), expr) + matches = [x.current_value for x in expr.match(self.root_value)] + self.assertEqual(len(matches), 1) + self.assertEqual(matches[0]["category"], "reference") + self.assertEqual(matches[0]["author"], "Nigel Rees") + self.assertEqual(matches[0]["title"], "Sayings of the Century") + self.assertEqual(matches[0]["price"], 8.95) + + def test_bookstore_examples_14(self): + """ + Test the bookstore example 14. + + .. code-block:: python + + >>> expr = Path.parse_str('$..book[*][?(@.title ~= "the")]') >>> expr.match(self.root_value) """ expr = Path.parse_str('$..book[*][?(@.title contains "the")]')