1#include <tree_sitter/parser.h>
2
3#if defined(__GNUC__) || defined(__clang__)
4#pragma GCC diagnostic push
5#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
6#endif
7
8#define LANGUAGE_VERSION 13
9#define STATE_COUNT 18
10#define LARGE_STATE_COUNT 6
11#define SYMBOL_COUNT 17
12#define ALIAS_COUNT 0
13#define TOKEN_COUNT 9
14#define EXTERNAL_TOKEN_COUNT 0
15#define FIELD_COUNT 3
16#define MAX_ALIAS_SEQUENCE_LENGTH 3
17#define PRODUCTION_ID_COUNT 3
18
19enum {
20 sym_identifier = 1,
21 anon_sym_BANG = 2,
22 anon_sym_AMP_AMP = 3,
23 anon_sym_PIPE_PIPE = 4,
24 anon_sym_EQ_EQ = 5,
25 anon_sym_BANG_EQ = 6,
26 anon_sym_LPAREN = 7,
27 anon_sym_RPAREN = 8,
28 sym_source = 9,
29 sym__expression = 10,
30 sym_not = 11,
31 sym_and = 12,
32 sym_or = 13,
33 sym_equal = 14,
34 sym_not_equal = 15,
35 sym_parenthesized = 16,
36};
37
38static const char * const ts_symbol_names[] = {
39 [ts_builtin_sym_end] = "end",
40 [sym_identifier] = "identifier",
41 [anon_sym_BANG] = "!",
42 [anon_sym_AMP_AMP] = "&&",
43 [anon_sym_PIPE_PIPE] = "||",
44 [anon_sym_EQ_EQ] = "==",
45 [anon_sym_BANG_EQ] = "!=",
46 [anon_sym_LPAREN] = "(",
47 [anon_sym_RPAREN] = ")",
48 [sym_source] = "source",
49 [sym__expression] = "_expression",
50 [sym_not] = "not",
51 [sym_and] = "and",
52 [sym_or] = "or",
53 [sym_equal] = "equal",
54 [sym_not_equal] = "not_equal",
55 [sym_parenthesized] = "parenthesized",
56};
57
58static const TSSymbol ts_symbol_map[] = {
59 [ts_builtin_sym_end] = ts_builtin_sym_end,
60 [sym_identifier] = sym_identifier,
61 [anon_sym_BANG] = anon_sym_BANG,
62 [anon_sym_AMP_AMP] = anon_sym_AMP_AMP,
63 [anon_sym_PIPE_PIPE] = anon_sym_PIPE_PIPE,
64 [anon_sym_EQ_EQ] = anon_sym_EQ_EQ,
65 [anon_sym_BANG_EQ] = anon_sym_BANG_EQ,
66 [anon_sym_LPAREN] = anon_sym_LPAREN,
67 [anon_sym_RPAREN] = anon_sym_RPAREN,
68 [sym_source] = sym_source,
69 [sym__expression] = sym__expression,
70 [sym_not] = sym_not,
71 [sym_and] = sym_and,
72 [sym_or] = sym_or,
73 [sym_equal] = sym_equal,
74 [sym_not_equal] = sym_not_equal,
75 [sym_parenthesized] = sym_parenthesized,
76};
77
78static const TSSymbolMetadata ts_symbol_metadata[] = {
79 [ts_builtin_sym_end] = {
80 .visible = false,
81 .named = true,
82 },
83 [sym_identifier] = {
84 .visible = true,
85 .named = true,
86 },
87 [anon_sym_BANG] = {
88 .visible = true,
89 .named = false,
90 },
91 [anon_sym_AMP_AMP] = {
92 .visible = true,
93 .named = false,
94 },
95 [anon_sym_PIPE_PIPE] = {
96 .visible = true,
97 .named = false,
98 },
99 [anon_sym_EQ_EQ] = {
100 .visible = true,
101 .named = false,
102 },
103 [anon_sym_BANG_EQ] = {
104 .visible = true,
105 .named = false,
106 },
107 [anon_sym_LPAREN] = {
108 .visible = true,
109 .named = false,
110 },
111 [anon_sym_RPAREN] = {
112 .visible = true,
113 .named = false,
114 },
115 [sym_source] = {
116 .visible = true,
117 .named = true,
118 },
119 [sym__expression] = {
120 .visible = false,
121 .named = true,
122 },
123 [sym_not] = {
124 .visible = true,
125 .named = true,
126 },
127 [sym_and] = {
128 .visible = true,
129 .named = true,
130 },
131 [sym_or] = {
132 .visible = true,
133 .named = true,
134 },
135 [sym_equal] = {
136 .visible = true,
137 .named = true,
138 },
139 [sym_not_equal] = {
140 .visible = true,
141 .named = true,
142 },
143 [sym_parenthesized] = {
144 .visible = true,
145 .named = true,
146 },
147};
148
149enum {
150 field_expression = 1,
151 field_left = 2,
152 field_right = 3,
153};
154
155static const char * const ts_field_names[] = {
156 [0] = NULL,
157 [field_expression] = "expression",
158 [field_left] = "left",
159 [field_right] = "right",
160};
161
162static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = {
163 [1] = {.index = 0, .length = 1},
164 [2] = {.index = 1, .length = 2},
165};
166
167static const TSFieldMapEntry ts_field_map_entries[] = {
168 [0] =
169 {field_expression, 1},
170 [1] =
171 {field_left, 0},
172 {field_right, 2},
173};
174
175static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = {
176 [0] = {0},
177};
178
179static const uint16_t ts_non_terminal_alias_map[] = {
180 0,
181};
182
183static bool ts_lex(TSLexer *lexer, TSStateId state) {
184 START_LEXER();
185 eof = lexer->eof(lexer);
186 switch (state) {
187 case 0:
188 if (eof) ADVANCE(7);
189 if (lookahead == '!') ADVANCE(10);
190 if (lookahead == '&') ADVANCE(2);
191 if (lookahead == '(') ADVANCE(15);
192 if (lookahead == ')') ADVANCE(16);
193 if (lookahead == '=') ADVANCE(4);
194 if (lookahead == '|') ADVANCE(5);
195 if (lookahead == '\t' ||
196 lookahead == '\n' ||
197 lookahead == '\r' ||
198 lookahead == ' ') SKIP(0)
199 if (lookahead == '-' ||
200 ('0' <= lookahead && lookahead <= '9') ||
201 ('A' <= lookahead && lookahead <= 'Z') ||
202 lookahead == '_' ||
203 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(8);
204 END_STATE();
205 case 1:
206 if (lookahead == '!') ADVANCE(9);
207 if (lookahead == '(') ADVANCE(15);
208 if (lookahead == '\t' ||
209 lookahead == '\n' ||
210 lookahead == '\r' ||
211 lookahead == ' ') SKIP(1)
212 if (lookahead == '-' ||
213 ('0' <= lookahead && lookahead <= '9') ||
214 ('A' <= lookahead && lookahead <= 'Z') ||
215 lookahead == '_' ||
216 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(8);
217 END_STATE();
218 case 2:
219 if (lookahead == '&') ADVANCE(11);
220 END_STATE();
221 case 3:
222 if (lookahead == '=') ADVANCE(14);
223 END_STATE();
224 case 4:
225 if (lookahead == '=') ADVANCE(13);
226 END_STATE();
227 case 5:
228 if (lookahead == '|') ADVANCE(12);
229 END_STATE();
230 case 6:
231 if (eof) ADVANCE(7);
232 if (lookahead == '!') ADVANCE(3);
233 if (lookahead == '&') ADVANCE(2);
234 if (lookahead == ')') ADVANCE(16);
235 if (lookahead == '=') ADVANCE(4);
236 if (lookahead == '|') ADVANCE(5);
237 if (lookahead == '\t' ||
238 lookahead == '\n' ||
239 lookahead == '\r' ||
240 lookahead == ' ') SKIP(6)
241 END_STATE();
242 case 7:
243 ACCEPT_TOKEN(ts_builtin_sym_end);
244 END_STATE();
245 case 8:
246 ACCEPT_TOKEN(sym_identifier);
247 if (lookahead == '-' ||
248 ('0' <= lookahead && lookahead <= '9') ||
249 ('A' <= lookahead && lookahead <= 'Z') ||
250 lookahead == '_' ||
251 ('a' <= lookahead && lookahead <= 'z')) ADVANCE(8);
252 END_STATE();
253 case 9:
254 ACCEPT_TOKEN(anon_sym_BANG);
255 END_STATE();
256 case 10:
257 ACCEPT_TOKEN(anon_sym_BANG);
258 if (lookahead == '=') ADVANCE(14);
259 END_STATE();
260 case 11:
261 ACCEPT_TOKEN(anon_sym_AMP_AMP);
262 END_STATE();
263 case 12:
264 ACCEPT_TOKEN(anon_sym_PIPE_PIPE);
265 END_STATE();
266 case 13:
267 ACCEPT_TOKEN(anon_sym_EQ_EQ);
268 END_STATE();
269 case 14:
270 ACCEPT_TOKEN(anon_sym_BANG_EQ);
271 END_STATE();
272 case 15:
273 ACCEPT_TOKEN(anon_sym_LPAREN);
274 END_STATE();
275 case 16:
276 ACCEPT_TOKEN(anon_sym_RPAREN);
277 END_STATE();
278 default:
279 return false;
280 }
281}
282
283static const TSLexMode ts_lex_modes[STATE_COUNT] = {
284 [0] = {.lex_state = 0},
285 [1] = {.lex_state = 1},
286 [2] = {.lex_state = 1},
287 [3] = {.lex_state = 1},
288 [4] = {.lex_state = 1},
289 [5] = {.lex_state = 1},
290 [6] = {.lex_state = 6},
291 [7] = {.lex_state = 0},
292 [8] = {.lex_state = 0},
293 [9] = {.lex_state = 0},
294 [10] = {.lex_state = 0},
295 [11] = {.lex_state = 0},
296 [12] = {.lex_state = 0},
297 [13] = {.lex_state = 0},
298 [14] = {.lex_state = 0},
299 [15] = {.lex_state = 0},
300 [16] = {.lex_state = 0},
301 [17] = {.lex_state = 0},
302};
303
304static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
305 [0] = {
306 [ts_builtin_sym_end] = ACTIONS(1),
307 [sym_identifier] = ACTIONS(1),
308 [anon_sym_BANG] = ACTIONS(1),
309 [anon_sym_AMP_AMP] = ACTIONS(1),
310 [anon_sym_PIPE_PIPE] = ACTIONS(1),
311 [anon_sym_EQ_EQ] = ACTIONS(1),
312 [anon_sym_BANG_EQ] = ACTIONS(1),
313 [anon_sym_LPAREN] = ACTIONS(1),
314 [anon_sym_RPAREN] = ACTIONS(1),
315 },
316 [1] = {
317 [sym_source] = STATE(15),
318 [sym__expression] = STATE(13),
319 [sym_not] = STATE(13),
320 [sym_and] = STATE(13),
321 [sym_or] = STATE(13),
322 [sym_equal] = STATE(13),
323 [sym_not_equal] = STATE(13),
324 [sym_parenthesized] = STATE(13),
325 [sym_identifier] = ACTIONS(3),
326 [anon_sym_BANG] = ACTIONS(5),
327 [anon_sym_LPAREN] = ACTIONS(7),
328 },
329 [2] = {
330 [sym__expression] = STATE(7),
331 [sym_not] = STATE(7),
332 [sym_and] = STATE(7),
333 [sym_or] = STATE(7),
334 [sym_equal] = STATE(7),
335 [sym_not_equal] = STATE(7),
336 [sym_parenthesized] = STATE(7),
337 [sym_identifier] = ACTIONS(3),
338 [anon_sym_BANG] = ACTIONS(5),
339 [anon_sym_LPAREN] = ACTIONS(7),
340 },
341 [3] = {
342 [sym__expression] = STATE(14),
343 [sym_not] = STATE(14),
344 [sym_and] = STATE(14),
345 [sym_or] = STATE(14),
346 [sym_equal] = STATE(14),
347 [sym_not_equal] = STATE(14),
348 [sym_parenthesized] = STATE(14),
349 [sym_identifier] = ACTIONS(3),
350 [anon_sym_BANG] = ACTIONS(5),
351 [anon_sym_LPAREN] = ACTIONS(7),
352 },
353 [4] = {
354 [sym__expression] = STATE(11),
355 [sym_not] = STATE(11),
356 [sym_and] = STATE(11),
357 [sym_or] = STATE(11),
358 [sym_equal] = STATE(11),
359 [sym_not_equal] = STATE(11),
360 [sym_parenthesized] = STATE(11),
361 [sym_identifier] = ACTIONS(3),
362 [anon_sym_BANG] = ACTIONS(5),
363 [anon_sym_LPAREN] = ACTIONS(7),
364 },
365 [5] = {
366 [sym__expression] = STATE(12),
367 [sym_not] = STATE(12),
368 [sym_and] = STATE(12),
369 [sym_or] = STATE(12),
370 [sym_equal] = STATE(12),
371 [sym_not_equal] = STATE(12),
372 [sym_parenthesized] = STATE(12),
373 [sym_identifier] = ACTIONS(3),
374 [anon_sym_BANG] = ACTIONS(5),
375 [anon_sym_LPAREN] = ACTIONS(7),
376 },
377};
378
379static const uint16_t ts_small_parse_table[] = {
380 [0] = 3,
381 ACTIONS(11), 1,
382 anon_sym_EQ_EQ,
383 ACTIONS(13), 1,
384 anon_sym_BANG_EQ,
385 ACTIONS(9), 4,
386 ts_builtin_sym_end,
387 anon_sym_AMP_AMP,
388 anon_sym_PIPE_PIPE,
389 anon_sym_RPAREN,
390 [13] = 1,
391 ACTIONS(15), 4,
392 ts_builtin_sym_end,
393 anon_sym_AMP_AMP,
394 anon_sym_PIPE_PIPE,
395 anon_sym_RPAREN,
396 [20] = 1,
397 ACTIONS(17), 4,
398 ts_builtin_sym_end,
399 anon_sym_AMP_AMP,
400 anon_sym_PIPE_PIPE,
401 anon_sym_RPAREN,
402 [27] = 1,
403 ACTIONS(19), 4,
404 ts_builtin_sym_end,
405 anon_sym_AMP_AMP,
406 anon_sym_PIPE_PIPE,
407 anon_sym_RPAREN,
408 [34] = 1,
409 ACTIONS(21), 4,
410 ts_builtin_sym_end,
411 anon_sym_AMP_AMP,
412 anon_sym_PIPE_PIPE,
413 anon_sym_RPAREN,
414 [41] = 1,
415 ACTIONS(23), 4,
416 ts_builtin_sym_end,
417 anon_sym_AMP_AMP,
418 anon_sym_PIPE_PIPE,
419 anon_sym_RPAREN,
420 [48] = 2,
421 ACTIONS(27), 1,
422 anon_sym_AMP_AMP,
423 ACTIONS(25), 3,
424 ts_builtin_sym_end,
425 anon_sym_PIPE_PIPE,
426 anon_sym_RPAREN,
427 [57] = 3,
428 ACTIONS(27), 1,
429 anon_sym_AMP_AMP,
430 ACTIONS(29), 1,
431 ts_builtin_sym_end,
432 ACTIONS(31), 1,
433 anon_sym_PIPE_PIPE,
434 [67] = 3,
435 ACTIONS(27), 1,
436 anon_sym_AMP_AMP,
437 ACTIONS(31), 1,
438 anon_sym_PIPE_PIPE,
439 ACTIONS(33), 1,
440 anon_sym_RPAREN,
441 [77] = 1,
442 ACTIONS(35), 1,
443 ts_builtin_sym_end,
444 [81] = 1,
445 ACTIONS(37), 1,
446 sym_identifier,
447 [85] = 1,
448 ACTIONS(39), 1,
449 sym_identifier,
450};
451
452static const uint32_t ts_small_parse_table_map[] = {
453 [SMALL_STATE(6)] = 0,
454 [SMALL_STATE(7)] = 13,
455 [SMALL_STATE(8)] = 20,
456 [SMALL_STATE(9)] = 27,
457 [SMALL_STATE(10)] = 34,
458 [SMALL_STATE(11)] = 41,
459 [SMALL_STATE(12)] = 48,
460 [SMALL_STATE(13)] = 57,
461 [SMALL_STATE(14)] = 67,
462 [SMALL_STATE(15)] = 77,
463 [SMALL_STATE(16)] = 81,
464 [SMALL_STATE(17)] = 85,
465};
466
467static const TSParseActionEntry ts_parse_actions[] = {
468 [0] = {.entry = {.count = 0, .reusable = false}},
469 [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(),
470 [3] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6),
471 [5] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2),
472 [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3),
473 [9] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym__expression, 1),
474 [11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16),
475 [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17),
476 [15] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_not, 2, .production_id = 1),
477 [17] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_equal, 3, .production_id = 2),
478 [19] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_not_equal, 3, .production_id = 2),
479 [21] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_parenthesized, 3, .production_id = 1),
480 [23] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_and, 3, .production_id = 2),
481 [25] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_or, 3, .production_id = 2),
482 [27] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4),
483 [29] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source, 1),
484 [31] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5),
485 [33] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10),
486 [35] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(),
487 [37] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8),
488 [39] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9),
489};
490
491#ifdef __cplusplus
492extern "C" {
493#endif
494#ifdef _WIN32
495#define extern __declspec(dllexport)
496#endif
497
498extern const TSLanguage *tree_sitter_context_predicate(void) {
499 static const TSLanguage language = {
500 .version = LANGUAGE_VERSION,
501 .symbol_count = SYMBOL_COUNT,
502 .alias_count = ALIAS_COUNT,
503 .token_count = TOKEN_COUNT,
504 .external_token_count = EXTERNAL_TOKEN_COUNT,
505 .state_count = STATE_COUNT,
506 .large_state_count = LARGE_STATE_COUNT,
507 .production_id_count = PRODUCTION_ID_COUNT,
508 .field_count = FIELD_COUNT,
509 .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH,
510 .parse_table = &ts_parse_table[0][0],
511 .small_parse_table = ts_small_parse_table,
512 .small_parse_table_map = ts_small_parse_table_map,
513 .parse_actions = ts_parse_actions,
514 .symbol_names = ts_symbol_names,
515 .field_names = ts_field_names,
516 .field_map_slices = ts_field_map_slices,
517 .field_map_entries = ts_field_map_entries,
518 .symbol_metadata = ts_symbol_metadata,
519 .public_symbol_map = ts_symbol_map,
520 .alias_map = ts_non_terminal_alias_map,
521 .alias_sequences = &ts_alias_sequences[0][0],
522 .lex_modes = ts_lex_modes,
523 .lex_fn = ts_lex,
524 };
525 return &language;
526}
527#ifdef __cplusplus
528}
529#endif