Fix number lexer to avoid conflict with object indexing (#2254)

This commit is contained in:
itchyny authored and GitHub committed 2023-06-27 07:24:49 +09:00
1 parent fac5553b22
commit 73966c80ec
3 files changed
+126 -119

No files matched your search

+118 -118
View File
@@ -582,7 +582,7 @@ struct yy_trans_info
flex_int32_t yy_verify;
flex_int32_t yy_nxt;
};
static const flex_int16_t yy_accept[157] =
static const flex_int16_t yy_accept[158] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 51, 49, 48, 48, 49, 40, 1, 35,
@@ -590,17 +590,17 @@ static const flex_int16_t yy_accept[157] =
35, 35, 35, 49, 46, 46, 46, 46, 46, 46,
46, 46, 46, 46, 46, 46, 46, 46, 35, 44,
44, 42, 45, 48, 2, 1, 29, 27, 25, 26,
33, 39, 47, 47, 18, 28, 0, 31, 3, 32,
0, 38, 46, 0, 46, 46, 4, 46, 46, 46,
46, 46, 46, 9, 46, 46, 46, 46, 14, 46,
46, 46, 24, 44, 43, 41, 43, 47, 0, 39,
33, 39, 47, 18, 28, 39, 39, 0, 31, 3,
32, 0, 38, 46, 0, 46, 46, 4, 46, 46,
46, 46, 46, 46, 9, 46, 46, 46, 46, 14,
46, 46, 46, 24, 44, 43, 41, 43, 47, 30,
30, 39, 34, 0, 46, 13, 46, 46, 8, 46,
46, 15, 46, 46, 46, 46, 46, 46, 46, 19,
0, 43, 46, 46, 46, 46, 12, 11, 46, 46,
46, 46, 46, 46, 10, 43, 46, 22, 20, 46,
46, 46, 21, 46, 46, 43, 46, 46, 5, 46,
7, 16, 23, 17, 6, 0
39, 0, 39, 34, 0, 46, 13, 46, 46, 8,
46, 46, 15, 46, 46, 46, 46, 46, 46, 46,
19, 0, 43, 46, 46, 46, 46, 12, 11, 46,
46, 46, 46, 46, 46, 10, 43, 46, 22, 20,
46, 46, 46, 21, 46, 46, 43, 46, 46, 5,
46, 7, 16, 23, 17, 6, 0
} ;
static const YY_CHAR yy_ec[256] =
@@ -645,138 +645,138 @@ static const YY_CHAR yy_meta[54] =
1, 1, 1
} ;
static const flex_int16_t yy_base[170] =
static const flex_int16_t yy_base[171] =
{ 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
51, 52, 320, 321, 57, 59, 297, 321, 0, 321,
296, 321, 321, 295, 294, 293, 47, 47, 50, 292,
291, 290, 294, 0, 291, 48, 51, 53, 52, 37,
59, 57, 66, 56, 63, 68, 70, 72, 287, 0,
0, 321, 80, 90, 321, 0, 321, 321, 321, 321,
95, 99, 0, 106, 286, 321, 110, 321, 321, 321,
290, 0, 285, 281, 86, 77, 277, 97, 101, 111,
113, 115, 117, 274, 119, 120, 118, 121, 270, 122,
123, 124, 321, 0, 257, 321, 255, 0, 254, 249,
51, 52, 319, 320, 57, 59, 296, 320, 0, 320,
295, 320, 320, 294, 293, 292, 47, 47, 50, 291,
290, 289, 293, 0, 290, 48, 51, 37, 52, 53,
54, 55, 59, 56, 63, 57, 68, 71, 286, 0,
0, 320, 75, 89, 320, 0, 320, 320, 320, 320,
320, 87, 0, 285, 320, 92, 95, 103, 320, 320,
320, 289, 0, 286, 285, 74, 101, 284, 89, 81,
93, 87, 108, 113, 283, 116, 114, 118, 119, 282,
120, 121, 122, 320, 0, 271, 320, 270, 0, 320,
321, 245, 321, 0, 125, 239, 126, 127, 237, 128,
134, 234, 136, 143, 147, 148, 149, 152, 154, 232,
165, 212, 210, 157, 159, 158, 209, 208, 160, 161,
162, 163, 164, 166, 207, 196, 171, 205, 204, 174,
167, 175, 201, 170, 176, 190, 190, 184, 199, 194,
198, 197, 85, 78, 76, 321, 230, 239, 245, 250,
255, 264, 273, 278, 283, 285, 290, 294, 298
126, 280, 279, 320, 0, 123, 277, 126, 130, 274,
128, 127, 270, 133, 131, 137, 141, 147, 149, 151,
266, 161, 253, 259, 154, 155, 161, 256, 254, 157,
160, 162, 163, 164, 166, 242, 227, 171, 233, 228,
167, 165, 168, 226, 172, 173, 213, 188, 174, 221,
178, 211, 199, 198, 197, 196, 320, 219, 228, 234,
239, 244, 253, 262, 267, 272, 274, 279, 283, 287
} ;
static const flex_int16_t yy_def[170] =
static const flex_int16_t yy_def[171] =
{ 0,
156, 1, 1, 1, 1, 1, 1, 1, 1, 1,
157, 157, 156, 156, 156, 156, 156, 156, 158, 156,
156, 156, 156, 156, 156, 156, 159, 156, 156, 156,
156, 156, 156, 160, 161, 161, 161, 161, 161, 161,
161, 161, 161, 161, 161, 161, 161, 161, 156, 162,
162, 156, 163, 156, 156, 158, 156, 156, 156, 156,
156, 156, 164, 164, 156, 156, 156, 156, 156, 156,
156, 160, 161, 156, 161, 161, 161, 161, 161, 161,
161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
161, 161, 156, 162, 156, 156, 165, 164, 156, 164,
157, 1, 1, 1, 1, 1, 1, 1, 1, 1,
158, 158, 157, 157, 157, 157, 157, 157, 159, 157,
157, 157, 157, 157, 157, 157, 160, 157, 157, 157,
157, 157, 157, 161, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162, 157, 163,
163, 157, 164, 157, 157, 159, 157, 157, 157, 157,
157, 157, 165, 157, 157, 157, 157, 157, 157, 157,
157, 157, 161, 162, 157, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 157, 163, 157, 157, 166, 165, 157,
156, 156, 156, 166, 161, 161, 161, 161, 161, 161,
161, 161, 161, 161, 161, 161, 161, 161, 161, 161,
163, 167, 161, 161, 161, 161, 161, 161, 161, 161,
161, 161, 161, 161, 161, 168, 161, 161, 161, 161,
161, 161, 161, 161, 161, 169, 161, 161, 161, 161,
161, 161, 161, 161, 161, 0, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156
157, 157, 157, 157, 167, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 162, 162, 162, 162,
162, 164, 168, 162, 162, 162, 162, 162, 162, 162,
162, 162, 162, 162, 162, 162, 169, 162, 162, 162,
162, 162, 162, 162, 162, 162, 170, 162, 162, 162,
162, 162, 162, 162, 162, 162, 0, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157
} ;
static const flex_int16_t yy_nxt[375] =
static const flex_int16_t yy_nxt[374] =
{ 0,
14, 15, 16, 14, 17, 18, 19, 20, 21, 22,
23, 24, 25, 20, 26, 27, 28, 29, 20, 20,
30, 31, 32, 33, 34, 35, 35, 22, 14, 23,
36, 37, 38, 39, 40, 41, 42, 35, 43, 35,
44, 45, 35, 46, 35, 47, 35, 48, 35, 35,
22, 49, 23, 51, 51, 74, 52, 52, 54, 54,
54, 54, 61, 65, 62, 62, 74, 62, 66, 74,
74, 74, 80, 64, 74, 74, 67, 74, 75, 53,
53, 74, 64, 79, 74, 67, 74, 87, 74, 96,
74, 54, 54, 76, 74, 74, 74, 77, 78, 81,
22, 49, 23, 51, 51, 75, 52, 52, 54, 54,
54, 54, 61, 64, 62, 66, 75, 67, 65, 75,
75, 75, 75, 75, 75, 75, 68, 75, 76, 53,
53, 75, 79, 80, 97, 68, 75, 88, 81, 75,
54, 54, 75, 77, 82, 85, 83, 78, 84, 75,
83, 82, 84, 74, 74, 90, 88, 85, 86, 91,
62, 106, 62, 89, 62, 74, 62, 92, 99, 74,
99, 67, 99, 100, 99, 67, 105, 102, 97, 74,
67, 74, 107, 74, 67, 74, 74, 74, 74, 74,
74, 74, 74, 74, 74, 74, 74, 109, 108, 112,
116, 110, 74, 115, 74, 117, 118, 125, 119, 111,
126, 74, 113, 114, 127, 74, 74, 74, 124, 128,
74, 129, 74, 120, 156, 74, 74, 74, 74, 74,
74, 74, 74, 132, 74, 74, 130, 131, 74, 74,
137, 140, 74, 74, 74, 139, 135, 133, 138, 145,
86, 87, 90, 91, 62, 75, 89, 75, 92, 101,
66, 75, 67, 68, 106, 102, 93, 102, 68, 75,
103, 68, 68, 98, 108, 111, 75, 68, 109, 110,
68, 75, 75, 112, 75, 107, 75, 75, 75, 75,
75, 75, 113, 101, 75, 75, 75, 116, 75, 75,
117, 75, 68, 118, 119, 75, 120, 126, 114, 75,
115, 68, 129, 127, 128, 75, 125, 75, 130, 75,
157, 121, 75, 75, 131, 75, 133, 132, 75, 75,
75, 75, 75, 75, 75, 75, 75, 138, 141, 75,
75, 75, 75, 136, 139, 134, 75, 135, 140, 146,
134, 147, 74, 143, 144, 151, 141, 148, 74, 150,
142, 152, 74, 97, 149, 74, 74, 74, 121, 74,
153, 154, 74, 74, 121, 74, 74, 74, 74, 155,
50, 50, 50, 50, 50, 50, 50, 50, 50, 56,
121, 56, 56, 56, 56, 56, 56, 56, 63, 63,
74, 63, 74, 63, 72, 74, 72, 74, 72, 73,
73, 73, 102, 73, 94, 94, 100, 94, 94, 94,
94, 102, 94, 95, 95, 95, 95, 95, 95, 95,
95, 95, 98, 121, 98, 121, 98, 122, 74, 122,
122, 123, 74, 123, 136, 74, 136, 136, 146, 104,
149, 148, 151, 144, 145, 142, 75, 152, 153, 98,
143, 155, 150, 156, 75, 75, 75, 75, 154, 50,
50, 50, 50, 50, 50, 50, 50, 50, 56, 75,
56, 56, 56, 56, 56, 56, 56, 63, 63, 75,
63, 122, 63, 73, 75, 73, 75, 73, 74, 74,
74, 75, 74, 95, 95, 122, 95, 95, 95, 95,
75, 95, 96, 96, 96, 96, 96, 96, 96, 96,
96, 99, 75, 99, 75, 99, 123, 75, 123, 123,
124, 122, 124, 137, 75, 137, 137, 147, 75, 147,
147, 96, 75, 96, 96, 75, 103, 103, 122, 122,
146, 146, 95, 74, 95, 95, 103, 101, 93, 74,
71, 70, 69, 68, 60, 59, 58, 57, 55, 156,
13, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156
75, 75, 75, 105, 75, 104, 100, 94, 75, 72,
71, 70, 69, 60, 59, 58, 57, 55, 157, 13,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157
} ;
static const flex_int16_t yy_chk[375] =
static const flex_int16_t yy_chk[374] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 11, 12, 40, 11, 12, 15, 15,
1, 1, 1, 11, 12, 38, 11, 12, 15, 15,
16, 16, 27, 28, 27, 29, 36, 29, 28, 37,
39, 38, 40, 27, 44, 42, 29, 41, 36, 11,
12, 45, 27, 39, 43, 29, 46, 44, 47, 53,
48, 54, 54, 37, 155, 76, 154, 37, 38, 41,
39, 40, 41, 42, 44, 46, 29, 43, 36, 11,
12, 45, 38, 39, 53, 29, 47, 44, 40, 48,
54, 54, 76, 37, 41, 43, 41, 37, 42, 80,
42, 41, 43, 153, 75, 47, 45, 43, 43, 48,
61, 76, 61, 46, 62, 78, 62, 48, 64, 79,
64, 61, 67, 64, 67, 62, 75, 67, 53, 80,
61, 81, 78, 82, 62, 83, 87, 85, 86, 88,
90, 91, 92, 105, 107, 108, 110, 80, 79, 82,
87, 81, 111, 86, 113, 88, 90, 107, 91, 81,
108, 114, 83, 85, 110, 115, 116, 117, 105, 111,
118, 113, 119, 92, 121, 124, 126, 125, 129, 130,
131, 132, 133, 116, 134, 141, 114, 115, 144, 137,
124, 129, 140, 142, 145, 126, 119, 117, 125, 134,
43, 43, 46, 47, 62, 82, 45, 79, 48, 66,
67, 81, 67, 62, 76, 68, 48, 68, 66, 77,
68, 67, 62, 53, 79, 82, 83, 66, 80, 81,
67, 84, 87, 82, 86, 77, 88, 89, 91, 92,
93, 106, 83, 101, 108, 112, 111, 87, 109, 115,
88, 114, 101, 89, 91, 116, 92, 108, 84, 117,
86, 101, 112, 109, 111, 118, 106, 119, 114, 120,
122, 93, 125, 126, 115, 130, 117, 116, 131, 127,
132, 133, 134, 142, 135, 141, 143, 125, 130, 138,
145, 146, 149, 120, 126, 118, 151, 119, 127, 135,
118, 137, 148, 132, 133, 144, 130, 140, 147, 142,
131, 145, 150, 121, 141, 152, 151, 149, 146, 143,
147, 148, 139, 138, 136, 135, 128, 127, 123, 150,
157, 157, 157, 157, 157, 157, 157, 157, 157, 158,
122, 158, 158, 158, 158, 158, 158, 158, 159, 159,
120, 159, 112, 159, 160, 109, 160, 106, 160, 161,
161, 161, 102, 161, 162, 162, 100, 162, 162, 162,
162, 99, 162, 163, 163, 163, 163, 163, 163, 163,
163, 163, 164, 97, 164, 95, 164, 165, 89, 165,
165, 166, 84, 166, 167, 77, 167, 167, 168, 74,
141, 138, 143, 133, 134, 131, 148, 145, 146, 122,
132, 149, 142, 151, 156, 155, 154, 153, 148, 158,
158, 158, 158, 158, 158, 158, 158, 158, 159, 152,
159, 159, 159, 159, 159, 159, 159, 160, 160, 150,
160, 147, 160, 161, 144, 161, 140, 161, 162, 162,
162, 139, 162, 163, 163, 137, 163, 163, 163, 163,
136, 163, 164, 164, 164, 164, 164, 164, 164, 164,
164, 165, 129, 165, 128, 165, 166, 124, 166, 166,
167, 123, 167, 168, 121, 168, 168, 169, 113, 169,
169, 170, 110, 170, 170, 107, 103, 102, 98, 96,
168, 168, 169, 73, 169, 169, 71, 65, 49, 35,
33, 32, 31, 30, 26, 25, 24, 21, 17, 13,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
156, 156, 156, 156
90, 85, 78, 75, 74, 72, 64, 49, 35, 33,
32, 31, 30, 26, 25, 24, 21, 17, 13, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157, 157, 157, 157, 157, 157, 157, 157,
157, 157, 157
} ;
/* The intent behind this definition is that it'll catch
@@ -1131,13 +1131,13 @@ yy_match:
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 157 )
if ( yy_current_state >= 158 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
++yy_cp;
}
while ( yy_base[yy_current_state] != 321 );
while ( yy_base[yy_current_state] != 320 );
yy_find_action:
yy_act = yy_accept[yy_current_state];
@@ -1747,7 +1747,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 157 )
if ( yy_current_state >= 158 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
@@ -1776,11 +1776,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
yy_current_state = (int) yy_def[yy_current_state];
if ( yy_current_state >= 157 )
if ( yy_current_state >= 158 )
yy_c = yy_meta[yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c];
yy_is_jam = (yy_current_state == 156);
yy_is_jam = (yy_current_state == 157);
(void)yyg;
return yy_is_jam ? 0 : yy_current_state;
+1 -1
View File
@@ -86,7 +86,7 @@ struct lexer_param;
yylval->literal = jv_string_sized(yytext + 1, yyleng - 1); return FORMAT;
}
[0-9.]+([eE][+-]?[0-9]+)? {
([0-9]+(\.[0-9]*)?|\.[0-9]+)([eE][+-]?[0-9]+)? {
yylval->literal = jv_parse_sized(yytext, yyleng); return LITERAL;
}
+7
View File
@@ -146,6 +146,13 @@ jq: error: Cannot use number (0) as object key at <top-level>, line 1:
{"foo": {"bar": 20}}
20
.e0, .E1, .E-1, .E+1
{"e0": 1, "E1": 2, "E": 3}
1
2
2
4
[.[]|.foo?]
[1,[2],{"foo":3,"bar":4},{},{"foo":5}]
[3,null,5]