parser.c

  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