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 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