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