From 99817a38c1769b0594ec8f7b671dc0150f547707 Mon Sep 17 00:00:00 2001 From: Max Brunsfeld Date: Sat, 29 Mar 2014 18:37:51 -0700 Subject: [PATCH] Improve trees generated by arithmetic grammar This work should inform how to implement operator precedence helper functions --- examples/grammars/arithmetic.cc | 52 +- examples/parsers/arithmetic.c | 1471 ++++++++++++++---- examples/parsers/golang.c | 352 ++--- examples/parsers/javascript.c | 468 +++--- spec/runtime/languages/arithmetic/errors.txt | 7 +- spec/runtime/languages/arithmetic/main.txt | 35 +- 6 files changed, 1666 insertions(+), 719 deletions(-) diff --git a/examples/grammars/arithmetic.cc b/examples/grammars/arithmetic.cc index 12eb8a98..944722c4 100644 --- a/examples/grammars/arithmetic.cc +++ b/examples/grammars/arithmetic.cc @@ -3,30 +3,42 @@ namespace tree_sitter_examples { using tree_sitter::Grammar; using namespace tree_sitter::rules; + using std::string; + + static rule_ptr infix_op(string op, string rule_name) { + return choice({ + seq({ + sym(rule_name), + str(op), + sym(rule_name) }), + sym(rule_name) }); + } extern const Grammar arithmetic({ { "expression", choice({ - seq({ - sym("term"), - sym("plus"), - sym("term") }), - sym("term") }) }, - { "term", choice({ - seq({ - sym("factor"), - sym("times"), - sym("factor") }), - sym("factor") }) }, - { "factor", choice({ - sym("variable"), + sym("sum"), + sym("difference") }) }, + { "_operand1", choice({ + sym("product"), + sym("quotient") }) }, + { "_operand2", choice({ + sym("exponent") }) }, + { "_operand3", choice({ sym("number"), - seq({ - str("("), - err(sym("expression")), - str(")") }) }) }, - { "plus", str("+") }, - { "times", str("*") }, + sym("variable"), + sym("grouping") }) }, + { "grouping", seq({ + str("("), + err(sym("expression")), + str(")") }) }, + + { "sum", infix_op("+", "_operand1") }, + { "difference", infix_op("-", "_operand1") }, + { "product", infix_op("*", "_operand2") }, + { "quotient", infix_op("/", "_operand2") }, + { "exponent", infix_op("^", "_operand3") }, + { "number", pattern("\\d+") }, - { "variable", pattern("[a-zA-Z]+") }, + { "variable", pattern("\\a[\\w_]*") }, }); } diff --git a/examples/parsers/arithmetic.c b/examples/parsers/arithmetic.c index 7cee8b5b..38aab1c5 100644 --- a/examples/parsers/arithmetic.c +++ b/examples/parsers/arithmetic.c @@ -1,37 +1,65 @@ #include "tree_sitter/parser.h" -STATE_COUNT = 52; -SYMBOL_COUNT = 11; +STATE_COUNT = 134; +SYMBOL_COUNT = 21; enum { - ts_sym_expression = 2, - ts_sym_factor = 3, - ts_sym_number = 4, - ts_sym_plus = 5, - ts_sym_term = 6, - ts_sym_times = 7, - ts_sym_variable = 8, - ts_aux_sym_token1 = 9, - ts_aux_sym_token2 = 10, + ts_sym__operand1 = 2, + ts_sym__operand2 = 3, + ts_sym__operand3 = 4, + ts_sym_difference = 5, + ts_sym_exponent = 6, + ts_sym_expression = 7, + ts_sym_grouping = 8, + ts_sym_number = 9, + ts_sym_product = 10, + ts_sym_quotient = 11, + ts_sym_sum = 12, + ts_sym_variable = 13, + ts_aux_sym_token1 = 14, + ts_aux_sym_token2 = 15, + ts_aux_sym_token3 = 16, + ts_aux_sym_token4 = 17, + ts_aux_sym_token5 = 18, + ts_aux_sym_token6 = 19, + ts_aux_sym_token7 = 20, }; SYMBOL_NAMES = { + [ts_sym__operand1] = "_operand1", + [ts_sym__operand2] = "_operand2", + [ts_sym__operand3] = "_operand3", + [ts_sym_difference] = "difference", + [ts_sym_exponent] = "exponent", [ts_sym_expression] = "expression", - [ts_sym_factor] = "factor", + [ts_sym_grouping] = "grouping", [ts_sym_number] = "number", - [ts_sym_plus] = "plus", - [ts_sym_term] = "term", - [ts_sym_times] = "times", + [ts_sym_product] = "product", + [ts_sym_quotient] = "quotient", + [ts_sym_sum] = "sum", [ts_sym_variable] = "variable", [ts_aux_sym_token1] = "'('", [ts_aux_sym_token2] = "')'", + [ts_aux_sym_token3] = "'+'", + [ts_aux_sym_token4] = "'-'", + [ts_aux_sym_token5] = "'*'", + [ts_aux_sym_token6] = "'/'", + [ts_aux_sym_token7] = "'^'", [ts_builtin_sym_end] = "end", [ts_builtin_sym_error] = "error", }; HIDDEN_SYMBOLS = { + [ts_sym__operand1] = 1, + [ts_sym__operand2] = 1, + [ts_sym__operand3] = 1, [ts_aux_sym_token1] = 1, - [ts_aux_sym_token2] = 1, + [ts_aux_sym_token2] = 1, + [ts_aux_sym_token3] = 1, + [ts_aux_sym_token4] = 1, + [ts_aux_sym_token5] = 1, + [ts_aux_sym_token6] = 1, + [ts_aux_sym_token7] = 1, }; LEX_FN() { @@ -40,92 +68,196 @@ LEX_FN() { case 0: LEX_ERROR(); case 1: - if (lookahead == '+') + if (lookahead == ')') ADVANCE(2); LEX_ERROR(); case 2: - ACCEPT_TOKEN(ts_sym_plus); + ACCEPT_TOKEN(ts_aux_sym_token2); case 3: if (lookahead == ')') + ADVANCE(2); + if (lookahead == '+') ADVANCE(4); + if (lookahead == '-') + ADVANCE(5); LEX_ERROR(); case 4: - ACCEPT_TOKEN(ts_aux_sym_token2); + ACCEPT_TOKEN(ts_aux_sym_token3); case 5: - if (lookahead == ')') - ADVANCE(4); - if (lookahead == '+') - ADVANCE(2); - LEX_ERROR(); + ACCEPT_TOKEN(ts_aux_sym_token4); case 6: if (lookahead == ')') - ADVANCE(4); + ADVANCE(2); if (lookahead == '*') ADVANCE(7); if (lookahead == '+') - ADVANCE(2); + ADVANCE(4); + if (lookahead == '-') + ADVANCE(5); + if (lookahead == '/') + ADVANCE(8); LEX_ERROR(); case 7: - ACCEPT_TOKEN(ts_sym_times); + ACCEPT_TOKEN(ts_aux_sym_token5); case 8: - if (lookahead == '(') - ADVANCE(9); - if ('0' <= lookahead && lookahead <= '9') - ADVANCE(10); - if (('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) - ADVANCE(12); - LEX_ERROR(); + ACCEPT_TOKEN(ts_aux_sym_token6); case 9: - ACCEPT_TOKEN(ts_aux_sym_token1); - case 10: - if ('0' <= lookahead && lookahead <= '9') - ADVANCE(11); - ACCEPT_TOKEN(ts_sym_number); - case 11: - if ('0' <= lookahead && lookahead <= '9') - ADVANCE(11); - ACCEPT_TOKEN(ts_sym_number); - case 12: - if (('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) - ADVANCE(13); - ACCEPT_TOKEN(ts_sym_variable); - case 13: - if (('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) - ADVANCE(13); - ACCEPT_TOKEN(ts_sym_variable); - case 14: if (lookahead == ')') - ADVANCE(4); - if (lookahead == '*') - ADVANCE(7); - LEX_ERROR(); - case 15: + ADVANCE(2); if (lookahead == '*') ADVANCE(7); if (lookahead == '+') - ADVANCE(2); + ADVANCE(4); + if (lookahead == '-') + ADVANCE(5); + if (lookahead == '/') + ADVANCE(8); + if (lookahead == '^') + ADVANCE(10); LEX_ERROR(); + case 10: + ACCEPT_TOKEN(ts_aux_sym_token7); + case 11: + if (lookahead == '(') + ADVANCE(12); + if ('0' <= lookahead && lookahead <= '9') + ADVANCE(13); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) + ADVANCE(15); + LEX_ERROR(); + case 12: + ACCEPT_TOKEN(ts_aux_sym_token1); + case 13: + if ('0' <= lookahead && lookahead <= '9') + ADVANCE(14); + ACCEPT_TOKEN(ts_sym_number); + case 14: + if ('0' <= lookahead && lookahead <= '9') + ADVANCE(14); + ACCEPT_TOKEN(ts_sym_number); + case 15: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + (lookahead == '_') || + ('a' <= lookahead && lookahead <= 'z')) + ADVANCE(16); + ACCEPT_TOKEN(ts_sym_variable); case 16: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + (lookahead == '_') || + ('a' <= lookahead && lookahead <= 'z')) + ADVANCE(16); + ACCEPT_TOKEN(ts_sym_variable); + case 17: + if (lookahead == ')') + ADVANCE(2); + if (lookahead == '+') + ADVANCE(4); + if (lookahead == '-') + ADVANCE(5); + if (lookahead == '^') + ADVANCE(10); + LEX_ERROR(); + case 18: + if (lookahead == ')') + ADVANCE(2); + if (lookahead == '^') + ADVANCE(10); + LEX_ERROR(); + case 19: + if (lookahead == ')') + ADVANCE(2); if (lookahead == '*') ADVANCE(7); + if (lookahead == '/') + ADVANCE(8); + LEX_ERROR(); + case 20: + if (lookahead == ')') + ADVANCE(2); + if (lookahead == '*') + ADVANCE(7); + if (lookahead == '/') + ADVANCE(8); + if (lookahead == '^') + ADVANCE(10); + LEX_ERROR(); + case 21: + if (lookahead == '^') + ADVANCE(10); + LEX_ERROR(); + case 22: + if (lookahead == '*') + ADVANCE(7); + if (lookahead == '/') + ADVANCE(8); + LEX_ERROR(); + case 23: + if (lookahead == '*') + ADVANCE(7); + if (lookahead == '/') + ADVANCE(8); + if (lookahead == '^') + ADVANCE(10); + LEX_ERROR(); + case 24: + if (lookahead == '+') + ADVANCE(4); + if (lookahead == '-') + ADVANCE(5); + LEX_ERROR(); + case 25: + if (lookahead == '+') + ADVANCE(4); + if (lookahead == '-') + ADVANCE(5); + if (lookahead == '^') + ADVANCE(10); + LEX_ERROR(); + case 26: + if (lookahead == '*') + ADVANCE(7); + if (lookahead == '+') + ADVANCE(4); + if (lookahead == '-') + ADVANCE(5); + if (lookahead == '/') + ADVANCE(8); + LEX_ERROR(); + case 27: + if (lookahead == '*') + ADVANCE(7); + if (lookahead == '+') + ADVANCE(4); + if (lookahead == '-') + ADVANCE(5); + if (lookahead == '/') + ADVANCE(8); + if (lookahead == '^') + ADVANCE(10); LEX_ERROR(); case ts_lex_state_error: if (lookahead == '(') - ADVANCE(9); + ADVANCE(12); if (lookahead == ')') - ADVANCE(4); + ADVANCE(2); if (lookahead == '*') ADVANCE(7); if (lookahead == '+') - ADVANCE(2); + ADVANCE(4); + if (lookahead == '-') + ADVANCE(5); + if (lookahead == '/') + ADVANCE(8); if ('0' <= lookahead && lookahead <= '9') - ADVANCE(10); + ADVANCE(13); if (('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z')) - ADVANCE(12); + ADVANCE(15); + if (lookahead == '^') + ADVANCE(10); LEX_ERROR(); default: LEX_PANIC(); @@ -133,355 +265,545 @@ LEX_FN() { } LEX_STATES = { - [0] = 8, - [1] = 0, - [2] = 15, - [3] = 8, - [4] = 1, - [5] = 1, - [6] = 8, - [7] = 3, - [8] = 1, - [9] = 6, - [10] = 8, - [11] = 5, - [12] = 5, - [13] = 8, - [14] = 3, - [15] = 5, - [16] = 6, - [17] = 5, - [18] = 8, - [19] = 14, - [20] = 8, - [21] = 3, - [22] = 3, - [23] = 8, - [24] = 3, + [0] = 11, + [1] = 24, + [2] = 11, + [3] = 0, + [4] = 22, + [5] = 11, + [6] = 0, + [7] = 21, + [8] = 11, + [9] = 0, + [10] = 0, + [11] = 11, + [12] = 3, + [13] = 11, + [14] = 1, + [15] = 19, + [16] = 11, + [17] = 1, + [18] = 18, + [19] = 11, + [20] = 1, + [21] = 1, + [22] = 11, + [23] = 6, + [24] = 11, [25] = 3, - [26] = 8, - [27] = 3, - [28] = 6, - [29] = 14, - [30] = 3, - [31] = 8, - [32] = 3, - [33] = 14, - [34] = 15, - [35] = 1, - [36] = 8, - [37] = 16, - [38] = 8, - [39] = 0, - [40] = 0, - [41] = 8, - [42] = 3, - [43] = 0, - [44] = 16, - [45] = 0, - [46] = 8, + [26] = 17, + [27] = 11, + [28] = 3, + [29] = 3, + [30] = 11, + [31] = 9, + [32] = 11, + [33] = 6, + [34] = 6, + [35] = 11, + [36] = 1, + [37] = 6, + [38] = 1, + [39] = 6, + [40] = 9, + [41] = 3, + [42] = 11, + [43] = 1, + [44] = 9, + [45] = 1, + [46] = 3, [47] = 3, - [48] = 16, - [49] = 8, - [50] = 3, - [51] = 15, + [48] = 17, + [49] = 11, + [50] = 1, + [51] = 17, + [52] = 11, + [53] = 3, + [54] = 1, + [55] = 1, + [56] = 1, + [57] = 18, + [58] = 11, + [59] = 1, + [60] = 18, + [61] = 11, + [62] = 1, + [63] = 20, + [64] = 11, + [65] = 19, + [66] = 19, + [67] = 11, + [68] = 1, + [69] = 19, + [70] = 19, + [71] = 20, + [72] = 1, + [73] = 11, + [74] = 1, + [75] = 20, + [76] = 11, + [77] = 1, + [78] = 1, + [79] = 0, + [80] = 0, + [81] = 21, + [82] = 11, + [83] = 1, + [84] = 21, + [85] = 11, + [86] = 0, + [87] = 23, + [88] = 11, + [89] = 22, + [90] = 22, + [91] = 11, + [92] = 1, + [93] = 22, + [94] = 22, + [95] = 23, + [96] = 0, + [97] = 11, + [98] = 1, + [99] = 23, + [100] = 11, + [101] = 0, + [102] = 26, + [103] = 11, + [104] = 24, + [105] = 25, + [106] = 11, + [107] = 24, + [108] = 24, + [109] = 11, + [110] = 1, + [111] = 24, + [112] = 24, + [113] = 25, + [114] = 11, + [115] = 1, + [116] = 25, + [117] = 11, + [118] = 24, + [119] = 27, + [120] = 11, + [121] = 26, + [122] = 26, + [123] = 11, + [124] = 1, + [125] = 26, + [126] = 0, + [127] = 26, + [128] = 0, + [129] = 27, + [130] = 24, + [131] = 11, + [132] = 1, + [133] = 27, }; PARSE_TABLE = { [0] = { - [ts_sym_expression] = SHIFT(1), - [ts_sym_factor] = SHIFT(2), - [ts_sym_number] = SHIFT(34), - [ts_sym_term] = SHIFT(35), - [ts_sym_variable] = SHIFT(34), - [ts_aux_sym_token1] = SHIFT(49), + [ts_sym__operand1] = SHIFT(1), + [ts_sym__operand2] = SHIFT(102), + [ts_sym__operand3] = SHIFT(119), + [ts_sym_difference] = SHIFT(126), + [ts_sym_exponent] = SHIFT(127), + [ts_sym_expression] = SHIFT(128), + [ts_sym_grouping] = SHIFT(129), + [ts_sym_number] = SHIFT(129), + [ts_sym_product] = SHIFT(130), + [ts_sym_quotient] = SHIFT(130), + [ts_sym_sum] = SHIFT(126), + [ts_sym_variable] = SHIFT(129), + [ts_aux_sym_token1] = SHIFT(131), }, [1] = { - [ts_builtin_sym_end] = ACCEPT_INPUT(), + [ts_aux_sym_token3] = SHIFT(2), + [ts_aux_sym_token4] = SHIFT(100), + [ts_builtin_sym_end] = REDUCE(ts_sym_difference, 1), }, [2] = { - [ts_sym_plus] = REDUCE(ts_sym_term, 1), - [ts_sym_times] = SHIFT(3), - [ts_builtin_sym_end] = REDUCE(ts_sym_term, 1), + [ts_sym__operand1] = SHIFT(3), + [ts_sym__operand2] = SHIFT(4), + [ts_sym__operand3] = SHIFT(87), + [ts_sym_exponent] = SHIFT(94), + [ts_sym_grouping] = SHIFT(95), + [ts_sym_number] = SHIFT(95), + [ts_sym_product] = SHIFT(96), + [ts_sym_quotient] = SHIFT(96), + [ts_sym_variable] = SHIFT(95), + [ts_aux_sym_token1] = SHIFT(97), }, [3] = { - [ts_sym_factor] = SHIFT(4), - [ts_sym_number] = SHIFT(5), - [ts_sym_variable] = SHIFT(5), - [ts_aux_sym_token1] = SHIFT(6), + [ts_builtin_sym_end] = REDUCE(ts_sym_sum, 3), }, [4] = { - [ts_sym_plus] = REDUCE(ts_sym_term, 3), - [ts_builtin_sym_end] = REDUCE(ts_sym_term, 3), + [ts_aux_sym_token5] = SHIFT(5), + [ts_aux_sym_token6] = SHIFT(85), + [ts_builtin_sym_end] = REDUCE(ts_sym_quotient, 1), }, [5] = { - [ts_sym_plus] = REDUCE(ts_sym_factor, 1), - [ts_builtin_sym_end] = REDUCE(ts_sym_factor, 1), + [ts_sym__operand2] = SHIFT(6), + [ts_sym__operand3] = SHIFT(7), + [ts_sym_exponent] = SHIFT(80), + [ts_sym_grouping] = SHIFT(81), + [ts_sym_number] = SHIFT(81), + [ts_sym_variable] = SHIFT(81), + [ts_aux_sym_token1] = SHIFT(82), }, [6] = { - [ts_sym_expression] = SHIFT(7), - [ts_sym_factor] = SHIFT(9), - [ts_sym_number] = SHIFT(16), - [ts_sym_term] = SHIFT(17), - [ts_sym_variable] = SHIFT(16), - [ts_aux_sym_token1] = SHIFT(26), - [ts_builtin_sym_error] = SHIFT(7), + [ts_builtin_sym_end] = REDUCE(ts_sym_product, 3), }, [7] = { - [ts_aux_sym_token2] = SHIFT(8), + [ts_aux_sym_token7] = SHIFT(8), + [ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 1), }, [8] = { - [ts_sym_plus] = REDUCE(ts_sym_factor, 3), - [ts_builtin_sym_end] = REDUCE(ts_sym_factor, 3), + [ts_sym__operand3] = SHIFT(9), + [ts_sym_grouping] = SHIFT(10), + [ts_sym_number] = SHIFT(10), + [ts_sym_variable] = SHIFT(10), + [ts_aux_sym_token1] = SHIFT(11), }, [9] = { - [ts_sym_plus] = REDUCE(ts_sym_term, 1), - [ts_sym_times] = SHIFT(10), - [ts_aux_sym_token2] = REDUCE(ts_sym_term, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 3), }, [10] = { - [ts_sym_factor] = SHIFT(11), - [ts_sym_number] = SHIFT(12), - [ts_sym_variable] = SHIFT(12), - [ts_aux_sym_token1] = SHIFT(13), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand3, 1), }, [11] = { - [ts_sym_plus] = REDUCE(ts_sym_term, 3), - [ts_aux_sym_token2] = REDUCE(ts_sym_term, 3), + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(78), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(78), }, [12] = { - [ts_sym_plus] = REDUCE(ts_sym_factor, 1), - [ts_aux_sym_token2] = REDUCE(ts_sym_factor, 1), + [ts_aux_sym_token2] = REDUCE(ts_sym_difference, 1), + [ts_aux_sym_token3] = SHIFT(13), + [ts_aux_sym_token4] = SHIFT(76), }, [13] = { - [ts_sym_expression] = SHIFT(14), - [ts_sym_factor] = SHIFT(9), - [ts_sym_number] = SHIFT(16), - [ts_sym_term] = SHIFT(17), - [ts_sym_variable] = SHIFT(16), - [ts_aux_sym_token1] = SHIFT(26), - [ts_builtin_sym_error] = SHIFT(14), + [ts_sym__operand1] = SHIFT(14), + [ts_sym__operand2] = SHIFT(15), + [ts_sym__operand3] = SHIFT(63), + [ts_sym_exponent] = SHIFT(70), + [ts_sym_grouping] = SHIFT(71), + [ts_sym_number] = SHIFT(71), + [ts_sym_product] = SHIFT(72), + [ts_sym_quotient] = SHIFT(72), + [ts_sym_variable] = SHIFT(71), + [ts_aux_sym_token1] = SHIFT(73), }, [14] = { - [ts_aux_sym_token2] = SHIFT(15), + [ts_aux_sym_token2] = REDUCE(ts_sym_sum, 3), }, [15] = { - [ts_sym_plus] = REDUCE(ts_sym_factor, 3), - [ts_aux_sym_token2] = REDUCE(ts_sym_factor, 3), + [ts_aux_sym_token2] = REDUCE(ts_sym_product, 1), + [ts_aux_sym_token5] = SHIFT(16), + [ts_aux_sym_token6] = SHIFT(61), }, [16] = { - [ts_sym_plus] = REDUCE(ts_sym_factor, 1), - [ts_sym_times] = REDUCE(ts_sym_factor, 1), - [ts_aux_sym_token2] = REDUCE(ts_sym_factor, 1), + [ts_sym__operand2] = SHIFT(17), + [ts_sym__operand3] = SHIFT(18), + [ts_sym_exponent] = SHIFT(56), + [ts_sym_grouping] = SHIFT(57), + [ts_sym_number] = SHIFT(57), + [ts_sym_variable] = SHIFT(57), + [ts_aux_sym_token1] = SHIFT(58), }, [17] = { - [ts_sym_plus] = SHIFT(18), - [ts_aux_sym_token2] = REDUCE(ts_sym_expression, 1), + [ts_aux_sym_token2] = REDUCE(ts_sym_product, 3), }, [18] = { - [ts_sym_factor] = SHIFT(19), - [ts_sym_number] = SHIFT(29), - [ts_sym_term] = SHIFT(30), - [ts_sym_variable] = SHIFT(29), - [ts_aux_sym_token1] = SHIFT(31), + [ts_aux_sym_token2] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token7] = SHIFT(19), }, [19] = { - [ts_sym_times] = SHIFT(20), - [ts_aux_sym_token2] = REDUCE(ts_sym_term, 1), + [ts_sym__operand3] = SHIFT(20), + [ts_sym_grouping] = SHIFT(21), + [ts_sym_number] = SHIFT(21), + [ts_sym_variable] = SHIFT(21), + [ts_aux_sym_token1] = SHIFT(22), }, [20] = { - [ts_sym_factor] = SHIFT(21), - [ts_sym_number] = SHIFT(22), - [ts_sym_variable] = SHIFT(22), - [ts_aux_sym_token1] = SHIFT(23), + [ts_aux_sym_token2] = REDUCE(ts_sym_exponent, 3), }, [21] = { - [ts_aux_sym_token2] = REDUCE(ts_sym_term, 3), + [ts_aux_sym_token2] = REDUCE(ts_sym__operand3, 1), }, [22] = { - [ts_aux_sym_token2] = REDUCE(ts_sym_factor, 1), + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(54), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(54), }, [23] = { - [ts_sym_expression] = SHIFT(24), - [ts_sym_factor] = SHIFT(9), - [ts_sym_number] = SHIFT(16), - [ts_sym_term] = SHIFT(17), - [ts_sym_variable] = SHIFT(16), - [ts_aux_sym_token1] = SHIFT(26), - [ts_builtin_sym_error] = SHIFT(24), + [ts_aux_sym_token2] = REDUCE(ts_sym_quotient, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym_product, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym_quotient, 1), + [ts_aux_sym_token5] = SHIFT(24), + [ts_aux_sym_token6] = SHIFT(52), }, [24] = { - [ts_aux_sym_token2] = SHIFT(25), + [ts_sym__operand2] = SHIFT(25), + [ts_sym__operand3] = SHIFT(26), + [ts_sym_exponent] = SHIFT(47), + [ts_sym_grouping] = SHIFT(48), + [ts_sym_number] = SHIFT(48), + [ts_sym_variable] = SHIFT(48), + [ts_aux_sym_token1] = SHIFT(49), }, [25] = { - [ts_aux_sym_token2] = REDUCE(ts_sym_factor, 3), + [ts_aux_sym_token2] = REDUCE(ts_sym_product, 3), + [ts_aux_sym_token3] = REDUCE(ts_sym_product, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_product, 3), }, [26] = { - [ts_sym_expression] = SHIFT(27), - [ts_sym_factor] = SHIFT(9), - [ts_sym_number] = SHIFT(16), - [ts_sym_term] = SHIFT(17), - [ts_sym_variable] = SHIFT(16), - [ts_aux_sym_token1] = SHIFT(26), - [ts_builtin_sym_error] = SHIFT(27), + [ts_aux_sym_token2] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token7] = SHIFT(27), }, [27] = { - [ts_aux_sym_token2] = SHIFT(28), + [ts_sym__operand3] = SHIFT(28), + [ts_sym_grouping] = SHIFT(29), + [ts_sym_number] = SHIFT(29), + [ts_sym_variable] = SHIFT(29), + [ts_aux_sym_token1] = SHIFT(30), }, [28] = { - [ts_sym_plus] = REDUCE(ts_sym_factor, 3), - [ts_sym_times] = REDUCE(ts_sym_factor, 3), - [ts_aux_sym_token2] = REDUCE(ts_sym_factor, 3), + [ts_aux_sym_token2] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token3] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_exponent, 3), }, [29] = { - [ts_sym_times] = REDUCE(ts_sym_factor, 1), - [ts_aux_sym_token2] = REDUCE(ts_sym_factor, 1), + [ts_aux_sym_token2] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand3, 1), }, [30] = { - [ts_aux_sym_token2] = REDUCE(ts_sym_expression, 3), + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(45), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(45), }, [31] = { - [ts_sym_expression] = SHIFT(32), - [ts_sym_factor] = SHIFT(9), - [ts_sym_number] = SHIFT(16), - [ts_sym_term] = SHIFT(17), - [ts_sym_variable] = SHIFT(16), - [ts_aux_sym_token1] = SHIFT(26), - [ts_builtin_sym_error] = SHIFT(32), + [ts_aux_sym_token2] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token7] = SHIFT(32), }, [32] = { - [ts_aux_sym_token2] = SHIFT(33), + [ts_sym__operand3] = SHIFT(33), + [ts_sym_grouping] = SHIFT(34), + [ts_sym_number] = SHIFT(34), + [ts_sym_variable] = SHIFT(34), + [ts_aux_sym_token1] = SHIFT(35), }, [33] = { - [ts_sym_times] = REDUCE(ts_sym_factor, 3), - [ts_aux_sym_token2] = REDUCE(ts_sym_factor, 3), + [ts_aux_sym_token2] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token3] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token5] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_exponent, 3), }, [34] = { - [ts_sym_plus] = REDUCE(ts_sym_factor, 1), - [ts_sym_times] = REDUCE(ts_sym_factor, 1), - [ts_builtin_sym_end] = REDUCE(ts_sym_factor, 1), + [ts_aux_sym_token2] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand3, 1), }, [35] = { - [ts_sym_plus] = SHIFT(36), - [ts_builtin_sym_end] = REDUCE(ts_sym_expression, 1), + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(38), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(38), }, [36] = { - [ts_sym_factor] = SHIFT(37), - [ts_sym_number] = SHIFT(44), - [ts_sym_term] = SHIFT(45), - [ts_sym_variable] = SHIFT(44), - [ts_aux_sym_token1] = SHIFT(46), + [ts_aux_sym_token2] = REDUCE(ts_sym_expression, 1), }, [37] = { - [ts_sym_times] = SHIFT(38), - [ts_builtin_sym_end] = REDUCE(ts_sym_term, 1), + [ts_aux_sym_token2] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand2, 1), }, [38] = { - [ts_sym_factor] = SHIFT(39), - [ts_sym_number] = SHIFT(40), - [ts_sym_variable] = SHIFT(40), - [ts_aux_sym_token1] = SHIFT(41), + [ts_aux_sym_token2] = SHIFT(39), }, [39] = { - [ts_builtin_sym_end] = REDUCE(ts_sym_term, 3), + [ts_aux_sym_token2] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token3] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token5] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_grouping, 3), }, [40] = { - [ts_builtin_sym_end] = REDUCE(ts_sym_factor, 1), + [ts_aux_sym_token2] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token7] = REDUCE(ts_sym__operand3, 1), }, [41] = { - [ts_sym_expression] = SHIFT(42), - [ts_sym_factor] = SHIFT(9), - [ts_sym_number] = SHIFT(16), - [ts_sym_term] = SHIFT(17), - [ts_sym_variable] = SHIFT(16), - [ts_aux_sym_token1] = SHIFT(26), - [ts_builtin_sym_error] = SHIFT(42), + [ts_aux_sym_token2] = REDUCE(ts_sym__operand1, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym__operand1, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand1, 1), }, [42] = { - [ts_aux_sym_token2] = SHIFT(43), + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(43), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(43), }, [43] = { - [ts_builtin_sym_end] = REDUCE(ts_sym_factor, 3), + [ts_aux_sym_token2] = SHIFT(44), }, [44] = { - [ts_sym_times] = REDUCE(ts_sym_factor, 1), - [ts_builtin_sym_end] = REDUCE(ts_sym_factor, 1), + [ts_aux_sym_token2] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token3] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token5] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token7] = REDUCE(ts_sym_grouping, 3), }, [45] = { - [ts_builtin_sym_end] = REDUCE(ts_sym_expression, 3), + [ts_aux_sym_token2] = SHIFT(46), }, [46] = { - [ts_sym_expression] = SHIFT(47), - [ts_sym_factor] = SHIFT(9), - [ts_sym_number] = SHIFT(16), - [ts_sym_term] = SHIFT(17), - [ts_sym_variable] = SHIFT(16), - [ts_aux_sym_token1] = SHIFT(26), - [ts_builtin_sym_error] = SHIFT(47), + [ts_aux_sym_token2] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token3] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_grouping, 3), }, [47] = { - [ts_aux_sym_token2] = SHIFT(48), + [ts_aux_sym_token2] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand2, 1), }, [48] = { - [ts_sym_times] = REDUCE(ts_sym_factor, 3), - [ts_builtin_sym_end] = REDUCE(ts_sym_factor, 3), + [ts_aux_sym_token2] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token3] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token7] = REDUCE(ts_sym__operand3, 1), }, [49] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), [ts_sym_expression] = SHIFT(50), - [ts_sym_factor] = SHIFT(9), - [ts_sym_number] = SHIFT(16), - [ts_sym_term] = SHIFT(17), - [ts_sym_variable] = SHIFT(16), - [ts_aux_sym_token1] = SHIFT(26), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), [ts_builtin_sym_error] = SHIFT(50), }, @@ -490,9 +812,630 @@ PARSE_TABLE = { }, [51] = { - [ts_sym_plus] = REDUCE(ts_sym_factor, 3), - [ts_sym_times] = REDUCE(ts_sym_factor, 3), - [ts_builtin_sym_end] = REDUCE(ts_sym_factor, 3), + [ts_aux_sym_token2] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token3] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token7] = REDUCE(ts_sym_grouping, 3), + }, + + [52] = { + [ts_sym__operand2] = SHIFT(53), + [ts_sym__operand3] = SHIFT(26), + [ts_sym_exponent] = SHIFT(47), + [ts_sym_grouping] = SHIFT(48), + [ts_sym_number] = SHIFT(48), + [ts_sym_variable] = SHIFT(48), + [ts_aux_sym_token1] = SHIFT(49), + }, + + [53] = { + [ts_aux_sym_token2] = REDUCE(ts_sym_quotient, 3), + [ts_aux_sym_token3] = REDUCE(ts_sym_quotient, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_quotient, 3), + }, + + [54] = { + [ts_aux_sym_token2] = SHIFT(55), + }, + + [55] = { + [ts_aux_sym_token2] = REDUCE(ts_sym_grouping, 3), + }, + + [56] = { + [ts_aux_sym_token2] = REDUCE(ts_sym__operand2, 1), + }, + + [57] = { + [ts_aux_sym_token2] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token7] = REDUCE(ts_sym__operand3, 1), + }, + + [58] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(59), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(59), + }, + + [59] = { + [ts_aux_sym_token2] = SHIFT(60), + }, + + [60] = { + [ts_aux_sym_token2] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token7] = REDUCE(ts_sym_grouping, 3), + }, + + [61] = { + [ts_sym__operand2] = SHIFT(62), + [ts_sym__operand3] = SHIFT(18), + [ts_sym_exponent] = SHIFT(56), + [ts_sym_grouping] = SHIFT(57), + [ts_sym_number] = SHIFT(57), + [ts_sym_variable] = SHIFT(57), + [ts_aux_sym_token1] = SHIFT(58), + }, + + [62] = { + [ts_aux_sym_token2] = REDUCE(ts_sym_quotient, 3), + }, + + [63] = { + [ts_aux_sym_token2] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token7] = SHIFT(64), + }, + + [64] = { + [ts_sym__operand3] = SHIFT(65), + [ts_sym_grouping] = SHIFT(66), + [ts_sym_number] = SHIFT(66), + [ts_sym_variable] = SHIFT(66), + [ts_aux_sym_token1] = SHIFT(67), + }, + + [65] = { + [ts_aux_sym_token2] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token5] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_exponent, 3), + }, + + [66] = { + [ts_aux_sym_token2] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand3, 1), + }, + + [67] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(68), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(68), + }, + + [68] = { + [ts_aux_sym_token2] = SHIFT(69), + }, + + [69] = { + [ts_aux_sym_token2] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token5] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_grouping, 3), + }, + + [70] = { + [ts_aux_sym_token2] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand2, 1), + }, + + [71] = { + [ts_aux_sym_token2] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token7] = REDUCE(ts_sym__operand3, 1), + }, + + [72] = { + [ts_aux_sym_token2] = REDUCE(ts_sym__operand1, 1), + }, + + [73] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(74), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(74), + }, + + [74] = { + [ts_aux_sym_token2] = SHIFT(75), + }, + + [75] = { + [ts_aux_sym_token2] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token5] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token7] = REDUCE(ts_sym_grouping, 3), + }, + + [76] = { + [ts_sym__operand1] = SHIFT(77), + [ts_sym__operand2] = SHIFT(15), + [ts_sym__operand3] = SHIFT(63), + [ts_sym_exponent] = SHIFT(70), + [ts_sym_grouping] = SHIFT(71), + [ts_sym_number] = SHIFT(71), + [ts_sym_product] = SHIFT(72), + [ts_sym_quotient] = SHIFT(72), + [ts_sym_variable] = SHIFT(71), + [ts_aux_sym_token1] = SHIFT(73), + }, + + [77] = { + [ts_aux_sym_token2] = REDUCE(ts_sym_difference, 3), + }, + + [78] = { + [ts_aux_sym_token2] = SHIFT(79), + }, + + [79] = { + [ts_builtin_sym_end] = REDUCE(ts_sym_grouping, 3), + }, + + [80] = { + [ts_builtin_sym_end] = REDUCE(ts_sym__operand2, 1), + }, + + [81] = { + [ts_aux_sym_token7] = REDUCE(ts_sym__operand3, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand3, 1), + }, + + [82] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(83), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(83), + }, + + [83] = { + [ts_aux_sym_token2] = SHIFT(84), + }, + + [84] = { + [ts_aux_sym_token7] = REDUCE(ts_sym_grouping, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_grouping, 3), + }, + + [85] = { + [ts_sym__operand2] = SHIFT(86), + [ts_sym__operand3] = SHIFT(7), + [ts_sym_exponent] = SHIFT(80), + [ts_sym_grouping] = SHIFT(81), + [ts_sym_number] = SHIFT(81), + [ts_sym_variable] = SHIFT(81), + [ts_aux_sym_token1] = SHIFT(82), + }, + + [86] = { + [ts_builtin_sym_end] = REDUCE(ts_sym_quotient, 3), + }, + + [87] = { + [ts_aux_sym_token5] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token7] = SHIFT(88), + [ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 1), + }, + + [88] = { + [ts_sym__operand3] = SHIFT(89), + [ts_sym_grouping] = SHIFT(90), + [ts_sym_number] = SHIFT(90), + [ts_sym_variable] = SHIFT(90), + [ts_aux_sym_token1] = SHIFT(91), + }, + + [89] = { + [ts_aux_sym_token5] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_exponent, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 3), + }, + + [90] = { + [ts_aux_sym_token5] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand3, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand3, 1), + }, + + [91] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(92), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(92), + }, + + [92] = { + [ts_aux_sym_token2] = SHIFT(93), + }, + + [93] = { + [ts_aux_sym_token5] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_grouping, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_grouping, 3), + }, + + [94] = { + [ts_aux_sym_token5] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand2, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand2, 1), + }, + + [95] = { + [ts_aux_sym_token5] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token7] = REDUCE(ts_sym__operand3, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand3, 1), + }, + + [96] = { + [ts_builtin_sym_end] = REDUCE(ts_sym__operand1, 1), + }, + + [97] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(98), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(98), + }, + + [98] = { + [ts_aux_sym_token2] = SHIFT(99), + }, + + [99] = { + [ts_aux_sym_token5] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token7] = REDUCE(ts_sym_grouping, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_grouping, 3), + }, + + [100] = { + [ts_sym__operand1] = SHIFT(101), + [ts_sym__operand2] = SHIFT(4), + [ts_sym__operand3] = SHIFT(87), + [ts_sym_exponent] = SHIFT(94), + [ts_sym_grouping] = SHIFT(95), + [ts_sym_number] = SHIFT(95), + [ts_sym_product] = SHIFT(96), + [ts_sym_quotient] = SHIFT(96), + [ts_sym_variable] = SHIFT(95), + [ts_aux_sym_token1] = SHIFT(97), + }, + + [101] = { + [ts_builtin_sym_end] = REDUCE(ts_sym_difference, 3), + }, + + [102] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_product, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym_quotient, 1), + [ts_aux_sym_token5] = SHIFT(103), + [ts_aux_sym_token6] = SHIFT(117), + [ts_builtin_sym_end] = REDUCE(ts_sym_product, 1), + }, + + [103] = { + [ts_sym__operand2] = SHIFT(104), + [ts_sym__operand3] = SHIFT(105), + [ts_sym_exponent] = SHIFT(112), + [ts_sym_grouping] = SHIFT(113), + [ts_sym_number] = SHIFT(113), + [ts_sym_variable] = SHIFT(113), + [ts_aux_sym_token1] = SHIFT(114), + }, + + [104] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_product, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_product, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_product, 3), + }, + + [105] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token7] = SHIFT(106), + [ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 1), + }, + + [106] = { + [ts_sym__operand3] = SHIFT(107), + [ts_sym_grouping] = SHIFT(108), + [ts_sym_number] = SHIFT(108), + [ts_sym_variable] = SHIFT(108), + [ts_aux_sym_token1] = SHIFT(109), + }, + + [107] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_exponent, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 3), + }, + + [108] = { + [ts_aux_sym_token3] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand3, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand3, 1), + }, + + [109] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(110), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(110), + }, + + [110] = { + [ts_aux_sym_token2] = SHIFT(111), + }, + + [111] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_grouping, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_grouping, 3), + }, + + [112] = { + [ts_aux_sym_token3] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand2, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand2, 1), + }, + + [113] = { + [ts_aux_sym_token3] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token7] = REDUCE(ts_sym__operand3, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand3, 1), + }, + + [114] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(115), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(115), + }, + + [115] = { + [ts_aux_sym_token2] = SHIFT(116), + }, + + [116] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token7] = REDUCE(ts_sym_grouping, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_grouping, 3), + }, + + [117] = { + [ts_sym__operand2] = SHIFT(118), + [ts_sym__operand3] = SHIFT(105), + [ts_sym_exponent] = SHIFT(112), + [ts_sym_grouping] = SHIFT(113), + [ts_sym_number] = SHIFT(113), + [ts_sym_variable] = SHIFT(113), + [ts_aux_sym_token1] = SHIFT(114), + }, + + [118] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_quotient, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_quotient, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_quotient, 3), + }, + + [119] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym_exponent, 1), + [ts_aux_sym_token7] = SHIFT(120), + [ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 1), + }, + + [120] = { + [ts_sym__operand3] = SHIFT(121), + [ts_sym_grouping] = SHIFT(122), + [ts_sym_number] = SHIFT(122), + [ts_sym_variable] = SHIFT(122), + [ts_aux_sym_token1] = SHIFT(123), + }, + + [121] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token5] = REDUCE(ts_sym_exponent, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_exponent, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_exponent, 3), + }, + + [122] = { + [ts_aux_sym_token3] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand3, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand3, 1), + }, + + [123] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(124), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(124), + }, + + [124] = { + [ts_aux_sym_token2] = SHIFT(125), + }, + + [125] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token5] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_grouping, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_grouping, 3), + }, + + [126] = { + [ts_builtin_sym_end] = REDUCE(ts_sym_expression, 1), + }, + + [127] = { + [ts_aux_sym_token3] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym__operand2, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand2, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand2, 1), + }, + + [128] = { + [ts_builtin_sym_end] = ACCEPT_INPUT(), + }, + + [129] = { + [ts_aux_sym_token3] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token5] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token6] = REDUCE(ts_sym__operand3, 1), + [ts_aux_sym_token7] = REDUCE(ts_sym__operand3, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand3, 1), + }, + + [130] = { + [ts_aux_sym_token3] = REDUCE(ts_sym__operand1, 1), + [ts_aux_sym_token4] = REDUCE(ts_sym__operand1, 1), + [ts_builtin_sym_end] = REDUCE(ts_sym__operand1, 1), + }, + + [131] = { + [ts_sym__operand1] = SHIFT(12), + [ts_sym__operand2] = SHIFT(23), + [ts_sym__operand3] = SHIFT(31), + [ts_sym_difference] = SHIFT(36), + [ts_sym_exponent] = SHIFT(37), + [ts_sym_expression] = SHIFT(132), + [ts_sym_grouping] = SHIFT(40), + [ts_sym_number] = SHIFT(40), + [ts_sym_product] = SHIFT(41), + [ts_sym_quotient] = SHIFT(41), + [ts_sym_sum] = SHIFT(36), + [ts_sym_variable] = SHIFT(40), + [ts_aux_sym_token1] = SHIFT(42), + [ts_builtin_sym_error] = SHIFT(132), + }, + + [132] = { + [ts_aux_sym_token2] = SHIFT(133), + }, + + [133] = { + [ts_aux_sym_token3] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token4] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token5] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token6] = REDUCE(ts_sym_grouping, 3), + [ts_aux_sym_token7] = REDUCE(ts_sym_grouping, 3), + [ts_builtin_sym_end] = REDUCE(ts_sym_grouping, 3), }, }; diff --git a/examples/parsers/golang.c b/examples/parsers/golang.c index 5e2ff1ab..5d6304dd 100644 --- a/examples/parsers/golang.c +++ b/examples/parsers/golang.c @@ -649,52 +649,38 @@ LEX_FN() { ADVANCE(54); if (lookahead == 'i') ADVANCE(55); - if ('j' <= lookahead && lookahead <= 'i') - ADVANCE(43); if (lookahead == 'm') ADVANCE(64); - if ('n' <= lookahead && lookahead <= 'm') - ADVANCE(84); if (lookahead == 's') ADVANCE(69); - if ('t' <= lookahead && lookahead <= 's') - ADVANCE(85); LEX_ERROR(); case 84: - if (lookahead == 'a') - ADVANCE(65); - LEX_ERROR(); - case 85: - if (lookahead == 't') - ADVANCE(70); - LEX_ERROR(); - case 86: if (lookahead == '[') ADVANCE(54); LEX_ERROR(); + case 85: + if (lookahead == ')') + ADVANCE(32); + if (lookahead == ',') + ADVANCE(53); + LEX_ERROR(); + case 86: + if (lookahead == ')') + ADVANCE(32); + if (lookahead == ',') + ADVANCE(53); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) + ADVANCE(19); + LEX_ERROR(); case 87: if (lookahead == ')') ADVANCE(32); - if (lookahead == ',') - ADVANCE(53); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) + ADVANCE(19); LEX_ERROR(); case 88: - if (lookahead == ')') - ADVANCE(32); - if (lookahead == ',') - ADVANCE(53); - if (('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) - ADVANCE(19); - LEX_ERROR(); - case 89: - if (lookahead == ')') - ADVANCE(32); - if (('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) - ADVANCE(19); - LEX_ERROR(); - case 90: if (lookahead == '(') ADVANCE(35); if (('A' <= lookahead && lookahead <= 'Z') || @@ -703,7 +689,7 @@ LEX_FN() { if (lookahead == '}') ADVANCE(39); LEX_ERROR(); - case 91: + case 89: if (lookahead == '*') ADVANCE(52); if (lookahead == ',') @@ -718,18 +704,12 @@ LEX_FN() { ADVANCE(54); if (lookahead == 'i') ADVANCE(55); - if ('j' <= lookahead && lookahead <= 'i') - ADVANCE(43); if (lookahead == 'm') ADVANCE(64); - if ('n' <= lookahead && lookahead <= 'm') - ADVANCE(84); if (lookahead == 's') ADVANCE(69); - if ('t' <= lookahead && lookahead <= 's') - ADVANCE(85); LEX_ERROR(); - case 92: + case 90: if (lookahead == ')') ADVANCE(32); if (lookahead == '*') @@ -749,7 +729,7 @@ LEX_FN() { if (lookahead == 's') ADVANCE(69); LEX_ERROR(); - case 93: + case 91: if (lookahead == '(') ADVANCE(35); if (('A' <= lookahead && lookahead <= 'Z') || @@ -758,73 +738,73 @@ LEX_FN() { if (lookahead == '{') ADVANCE(41); LEX_ERROR(); - case 94: + case 92: if (lookahead == '=') + ADVANCE(93); + LEX_ERROR(); + case 93: + ACCEPT_TOKEN(ts_aux_sym_token3); + case 94: + if ('0' <= lookahead && lookahead <= '9') ADVANCE(95); LEX_ERROR(); case 95: - ACCEPT_TOKEN(ts_aux_sym_token3); + if (lookahead == '.') + ADVANCE(96); + if ('0' <= lookahead && lookahead <= '9') + ADVANCE(99); + ACCEPT_TOKEN(ts_sym_number); case 96: if ('0' <= lookahead && lookahead <= '9') ADVANCE(97); LEX_ERROR(); case 97: - if (lookahead == '.') - ADVANCE(98); if ('0' <= lookahead && lookahead <= '9') - ADVANCE(101); + ADVANCE(98); ACCEPT_TOKEN(ts_sym_number); case 98: if ('0' <= lookahead && lookahead <= '9') - ADVANCE(99); - LEX_ERROR(); + ADVANCE(98); + ACCEPT_TOKEN(ts_sym_number); case 99: + if (lookahead == '.') + ADVANCE(96); if ('0' <= lookahead && lookahead <= '9') - ADVANCE(100); + ADVANCE(99); ACCEPT_TOKEN(ts_sym_number); case 100: - if ('0' <= lookahead && lookahead <= '9') - ADVANCE(100); - ACCEPT_TOKEN(ts_sym_number); + LEX_ERROR(); case 101: - if (lookahead == '.') - ADVANCE(98); - if ('0' <= lookahead && lookahead <= '9') - ADVANCE(101); - ACCEPT_TOKEN(ts_sym_number); + if (lookahead == 'p') + ADVANCE(102); + LEX_ERROR(); case 102: + if (lookahead == 'a') + ADVANCE(103); LEX_ERROR(); case 103: - if (lookahead == 'p') + if (lookahead == 'c') ADVANCE(104); LEX_ERROR(); case 104: - if (lookahead == 'a') + if (lookahead == 'k') ADVANCE(105); LEX_ERROR(); case 105: - if (lookahead == 'c') + if (lookahead == 'a') ADVANCE(106); LEX_ERROR(); case 106: - if (lookahead == 'k') + if (lookahead == 'g') ADVANCE(107); LEX_ERROR(); case 107: - if (lookahead == 'a') + if (lookahead == 'e') ADVANCE(108); LEX_ERROR(); case 108: - if (lookahead == 'g') - ADVANCE(109); - LEX_ERROR(); - case 109: - if (lookahead == 'e') - ADVANCE(110); - LEX_ERROR(); - case 110: ACCEPT_TOKEN(ts_sym__package); - case 111: + case 109: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -832,11 +812,9 @@ LEX_FN() { ('v' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'u') - ADVANCE(112); - if ('v' <= lookahead && lookahead <= 'u') - ADVANCE(2); + ADVANCE(110); ACCEPT_TOKEN(ts_sym__identifier); - case 112: + case 110: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -844,11 +822,9 @@ LEX_FN() { ('o' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'n') - ADVANCE(113); - if ('o' <= lookahead && lookahead <= 'n') - ADVANCE(3); + ADVANCE(111); ACCEPT_TOKEN(ts_sym__identifier); - case 113: + case 111: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -856,18 +832,16 @@ LEX_FN() { ('d' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'c') - ADVANCE(114); - if ('d' <= lookahead && lookahead <= 'c') - ADVANCE(4); + ADVANCE(112); ACCEPT_TOKEN(ts_sym__identifier); - case 114: + case 112: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(20); ACCEPT_TOKEN(ts_sym__func); - case 115: + case 113: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -875,7 +849,7 @@ LEX_FN() { ('o' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'm') - ADVANCE(116); + ADVANCE(114); if ('n' <= lookahead && lookahead <= 'm') ADVANCE(6); if (lookahead == 'n') @@ -883,7 +857,7 @@ LEX_FN() { if ('o' <= lookahead && lookahead <= 'n') ADVANCE(44); ACCEPT_TOKEN(ts_sym__identifier); - case 116: + case 114: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -891,11 +865,9 @@ LEX_FN() { ('q' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'p') - ADVANCE(117); - if ('q' <= lookahead && lookahead <= 'p') - ADVANCE(7); + ADVANCE(115); ACCEPT_TOKEN(ts_sym__identifier); - case 117: + case 115: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -903,11 +875,9 @@ LEX_FN() { ('p' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'o') - ADVANCE(118); - if ('p' <= lookahead && lookahead <= 'o') - ADVANCE(8); + ADVANCE(116); ACCEPT_TOKEN(ts_sym__identifier); - case 118: + case 116: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -915,11 +885,9 @@ LEX_FN() { ('s' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'r') - ADVANCE(119); - if ('s' <= lookahead && lookahead <= 'r') - ADVANCE(9); + ADVANCE(117); ACCEPT_TOKEN(ts_sym__identifier); - case 119: + case 117: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -927,29 +895,29 @@ LEX_FN() { ('u' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 't') - ADVANCE(120); - if ('u' <= lookahead && lookahead <= 't') - ADVANCE(10); + ADVANCE(118); ACCEPT_TOKEN(ts_sym__identifier); - case 120: + case 118: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(20); ACCEPT_TOKEN(ts_sym__import); - case 121: + case 119: + if (lookahead == 'a') + ADVANCE(65); + LEX_ERROR(); + case 120: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || ('b' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'a') - ADVANCE(122); - if ('b' <= lookahead && lookahead <= 'a') - ADVANCE(105); + ADVANCE(121); ACCEPT_TOKEN(ts_sym__identifier); - case 122: + case 121: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -957,11 +925,9 @@ LEX_FN() { ('d' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'c') - ADVANCE(123); - if ('d' <= lookahead && lookahead <= 'c') - ADVANCE(106); + ADVANCE(122); ACCEPT_TOKEN(ts_sym__identifier); - case 123: + case 122: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -969,22 +935,18 @@ LEX_FN() { ('l' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'k') - ADVANCE(124); - if ('l' <= lookahead && lookahead <= 'k') - ADVANCE(107); + ADVANCE(123); ACCEPT_TOKEN(ts_sym__identifier); - case 124: + case 123: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || ('b' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'a') - ADVANCE(125); - if ('b' <= lookahead && lookahead <= 'a') - ADVANCE(108); + ADVANCE(124); ACCEPT_TOKEN(ts_sym__identifier); - case 125: + case 124: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -992,11 +954,9 @@ LEX_FN() { ('h' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'g') - ADVANCE(126); - if ('h' <= lookahead && lookahead <= 'g') - ADVANCE(109); + ADVANCE(125); ACCEPT_TOKEN(ts_sym__identifier); - case 126: + case 125: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || @@ -1004,17 +964,19 @@ LEX_FN() { ('f' <= lookahead && lookahead <= 'z')) ADVANCE(20); if (lookahead == 'e') - ADVANCE(127); - if ('f' <= lookahead && lookahead <= 'e') - ADVANCE(110); + ADVANCE(126); ACCEPT_TOKEN(ts_sym__identifier); - case 127: + case 126: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || (lookahead == '_') || ('a' <= lookahead && lookahead <= 'z')) ADVANCE(20); ACCEPT_TOKEN(ts_sym__package); + case 127: + if (lookahead == 't') + ADVANCE(70); + LEX_ERROR(); case 128: if (('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1096,9 +1058,9 @@ LEX_FN() { if (lookahead == ',') ADVANCE(53); if ('0' <= lookahead && lookahead <= '9') - ADVANCE(97); - if (lookahead == '=') ADVANCE(95); + if (lookahead == '=') + ADVANCE(93); if (('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'e') || ('g' <= lookahead && lookahead <= 'h') || @@ -1113,25 +1075,25 @@ LEX_FN() { if (lookahead == ']') ADVANCE(82); if (lookahead == 'f') - ADVANCE(111); + ADVANCE(109); if ('g' <= lookahead && lookahead <= 'f') ADVANCE(1); if (lookahead == 'i') - ADVANCE(115); + ADVANCE(113); if ('j' <= lookahead && lookahead <= 'i') - ADVANCE(43); + ADVANCE(5); if (lookahead == 'm') ADVANCE(64); if ('n' <= lookahead && lookahead <= 'm') - ADVANCE(84); + ADVANCE(119); if (lookahead == 'p') - ADVANCE(121); + ADVANCE(120); if ('q' <= lookahead && lookahead <= 'p') - ADVANCE(104); + ADVANCE(102); if (lookahead == 's') ADVANCE(69); if ('t' <= lookahead && lookahead <= 's') - ADVANCE(85); + ADVANCE(127); if (lookahead == 't') ADVANCE(128); if ('u' <= lookahead && lookahead <= 't') @@ -1151,7 +1113,7 @@ LEX_FN() { } LEX_STATES = { - [0] = 103, + [0] = 101, [1] = 18, [2] = 0, [3] = 0, @@ -1175,22 +1137,22 @@ LEX_STATES = { [21] = 36, [22] = 38, [23] = 36, - [24] = 92, + [24] = 90, [25] = 42, [26] = 40, [27] = 80, [28] = 37, [29] = 80, [30] = 38, - [31] = 92, - [32] = 86, + [31] = 90, + [32] = 84, [33] = 83, [34] = 81, [35] = 40, [36] = 80, [37] = 38, [38] = 81, - [39] = 86, + [39] = 84, [40] = 83, [41] = 40, [42] = 80, @@ -1201,7 +1163,7 @@ LEX_STATES = { [47] = 80, [48] = 38, [49] = 80, - [50] = 86, + [50] = 84, [51] = 83, [52] = 81, [53] = 81, @@ -1231,114 +1193,114 @@ LEX_STATES = { [77] = 81, [78] = 81, [79] = 83, - [80] = 87, + [80] = 85, [81] = 40, [82] = 80, [83] = 38, - [84] = 87, - [85] = 87, - [86] = 87, + [84] = 85, + [85] = 85, + [86] = 85, [87] = 83, - [88] = 87, + [88] = 85, [89] = 81, [90] = 83, - [91] = 87, - [92] = 87, + [91] = 85, + [92] = 85, [93] = 33, - [94] = 90, + [94] = 88, [95] = 80, - [96] = 89, - [97] = 88, - [98] = 87, + [96] = 87, + [97] = 86, + [98] = 85, [99] = 33, [100] = 80, [101] = 18, - [102] = 87, + [102] = 85, [103] = 33, [104] = 18, - [105] = 87, + [105] = 85, [106] = 33, [107] = 80, [108] = 18, [109] = 18, [110] = 18, - [111] = 87, + [111] = 85, [112] = 33, [113] = 80, [114] = 83, - [115] = 87, + [115] = 85, [116] = 33, - [117] = 91, + [117] = 89, [118] = 83, - [119] = 87, + [119] = 85, [120] = 33, [121] = 18, - [122] = 91, - [123] = 91, + [122] = 89, + [123] = 89, [124] = 83, - [125] = 91, + [125] = 89, [126] = 83, - [127] = 87, + [127] = 85, [128] = 33, - [129] = 90, + [129] = 88, [130] = 80, - [131] = 89, - [132] = 87, + [131] = 87, + [132] = 85, [133] = 33, [134] = 80, [135] = 18, - [136] = 87, + [136] = 85, [137] = 33, [138] = 80, [139] = 18, - [140] = 91, + [140] = 89, [141] = 83, - [142] = 90, + [142] = 88, [143] = 80, - [144] = 89, - [145] = 87, + [144] = 87, + [145] = 85, [146] = 33, [147] = 18, - [148] = 87, + [148] = 85, [149] = 33, [150] = 80, [151] = 38, - [152] = 87, - [153] = 87, + [152] = 85, + [153] = 85, [154] = 33, - [155] = 93, + [155] = 91, [156] = 40, [157] = 40, - [158] = 89, - [159] = 87, + [158] = 87, + [159] = 85, [160] = 33, [161] = 40, [162] = 18, - [163] = 87, + [163] = 85, [164] = 33, [165] = 40, [166] = 40, - [167] = 91, + [167] = 89, [168] = 83, - [169] = 87, + [169] = 85, [170] = 33, - [171] = 93, + [171] = 91, [172] = 40, - [173] = 89, - [174] = 87, + [173] = 87, + [174] = 85, [175] = 33, [176] = 40, [177] = 18, - [178] = 87, + [178] = 85, [179] = 33, [180] = 40, - [181] = 93, + [181] = 91, [182] = 40, - [183] = 89, - [184] = 87, + [183] = 87, + [184] = 85, [185] = 33, [186] = 18, - [187] = 87, + [187] = 85, [188] = 33, [189] = 40, [190] = 18, @@ -1349,7 +1311,7 @@ LEX_STATES = { [195] = 80, [196] = 38, [197] = 36, - [198] = 86, + [198] = 84, [199] = 83, [200] = 81, [201] = 83, @@ -1366,16 +1328,16 @@ LEX_STATES = { [212] = 36, [213] = 36, [214] = 18, - [215] = 94, - [216] = 94, - [217] = 96, + [215] = 92, + [216] = 92, + [217] = 94, [218] = 36, [219] = 36, [220] = 36, [221] = 36, - [222] = 102, - [223] = 102, - [224] = 102, + [222] = 100, + [223] = 100, + [224] = 100, }; PARSE_TABLE = { diff --git a/examples/parsers/javascript.c b/examples/parsers/javascript.c index 36e8bd44..31b2621b 100644 --- a/examples/parsers/javascript.c +++ b/examples/parsers/javascript.c @@ -334,6 +334,8 @@ LEX_FN() { ADVANCE(27); if (lookahead == 'a') ADVANCE(30); + if ('b' <= lookahead && lookahead <= 'a') + ADVANCE(7); if (lookahead == 'u') ADVANCE(34); if ('v' <= lookahead && lookahead <= 'u') @@ -395,11 +397,31 @@ LEX_FN() { ('o' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'n') - ADVANCE(35); - if ('o' <= lookahead && lookahead <= 'n') - ADVANCE(46); + ADVANCE(41); ACCEPT_TOKEN(ts_sym_identifier); case 35: + if (lookahead == 'c') + ADVANCE(36); + LEX_ERROR(); + case 36: + if (lookahead == 't') + ADVANCE(37); + LEX_ERROR(); + case 37: + if (lookahead == 'i') + ADVANCE(38); + LEX_ERROR(); + case 38: + if (lookahead == 'o') + ADVANCE(39); + LEX_ERROR(); + case 39: + if (lookahead == 'n') + ADVANCE(40); + LEX_ERROR(); + case 40: + ACCEPT_TOKEN(ts_sym__function); + case 41: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -408,11 +430,9 @@ LEX_FN() { ('d' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'c') - ADVANCE(36); - if ('d' <= lookahead && lookahead <= 'c') - ADVANCE(45); + ADVANCE(42); ACCEPT_TOKEN(ts_sym_identifier); - case 36: + case 42: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -421,11 +441,9 @@ LEX_FN() { ('u' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 't') - ADVANCE(37); - if ('u' <= lookahead && lookahead <= 't') - ADVANCE(44); + ADVANCE(43); ACCEPT_TOKEN(ts_sym_identifier); - case 37: + case 43: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -434,11 +452,9 @@ LEX_FN() { ('j' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'i') - ADVANCE(38); - if ('j' <= lookahead && lookahead <= 'i') - ADVANCE(43); + ADVANCE(44); ACCEPT_TOKEN(ts_sym_identifier); - case 38: + case 44: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -447,11 +463,9 @@ LEX_FN() { ('p' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'o') - ADVANCE(39); - if ('p' <= lookahead && lookahead <= 'o') - ADVANCE(42); + ADVANCE(45); ACCEPT_TOKEN(ts_sym_identifier); - case 39: + case 45: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -460,11 +474,9 @@ LEX_FN() { ('o' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'n') - ADVANCE(40); - if ('o' <= lookahead && lookahead <= 'n') - ADVANCE(41); + ADVANCE(46); ACCEPT_TOKEN(ts_sym_identifier); - case 40: + case 46: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -472,31 +484,9 @@ LEX_FN() { ('a' <= lookahead && lookahead <= 'z')) ADVANCE(27); ACCEPT_TOKEN(ts_sym__function); - case 41: - ACCEPT_TOKEN(ts_sym__function); - case 42: - if (lookahead == 'n') - ADVANCE(41); - LEX_ERROR(); - case 43: - if (lookahead == 'o') - ADVANCE(42); - LEX_ERROR(); - case 44: - if (lookahead == 'i') - ADVANCE(43); - LEX_ERROR(); - case 45: - if (lookahead == 't') - ADVANCE(44); - LEX_ERROR(); - case 46: - if (lookahead == 'c') - ADVANCE(45); - LEX_ERROR(); case 47: if (lookahead == 'n') - ADVANCE(46); + ADVANCE(35); LEX_ERROR(); case 48: if ((lookahead == '$') || @@ -507,8 +497,6 @@ LEX_FN() { ADVANCE(27); if (lookahead == 'a') ADVANCE(30); - if ('b' <= lookahead && lookahead <= 'a') - ADVANCE(7); ACCEPT_TOKEN(ts_sym_identifier); case 49: if ((lookahead == '$') || @@ -519,41 +507,37 @@ LEX_FN() { ('v' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'u') - ADVANCE(53); - ACCEPT_TOKEN(ts_sym_identifier); - case 50: - if (lookahead == 'l') - ADVANCE(51); - LEX_ERROR(); - case 51: - if (lookahead == 'l') - ADVANCE(52); - LEX_ERROR(); - case 52: - ACCEPT_TOKEN(ts_sym_null); - case 53: - if ((lookahead == '$') || - ('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - (lookahead == '_') || - ('a' <= lookahead && lookahead <= 'k') || - ('m' <= lookahead && lookahead <= 'z')) - ADVANCE(27); - if (lookahead == 'l') - ADVANCE(54); - ACCEPT_TOKEN(ts_sym_identifier); - case 54: - if ((lookahead == '$') || - ('0' <= lookahead && lookahead <= '9') || - ('A' <= lookahead && lookahead <= 'Z') || - (lookahead == '_') || - ('a' <= lookahead && lookahead <= 'k') || - ('m' <= lookahead && lookahead <= 'z')) - ADVANCE(27); - if (lookahead == 'l') + ADVANCE(50); + if ('v' <= lookahead && lookahead <= 'u') ADVANCE(55); ACCEPT_TOKEN(ts_sym_identifier); - case 55: + case 50: + if ((lookahead == '$') || + ('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + (lookahead == '_') || + ('a' <= lookahead && lookahead <= 'k') || + ('m' <= lookahead && lookahead <= 'z')) + ADVANCE(27); + if (lookahead == 'l') + ADVANCE(51); + if ('m' <= lookahead && lookahead <= 'l') + ADVANCE(54); + ACCEPT_TOKEN(ts_sym_identifier); + case 51: + if ((lookahead == '$') || + ('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + (lookahead == '_') || + ('a' <= lookahead && lookahead <= 'k') || + ('m' <= lookahead && lookahead <= 'z')) + ADVANCE(27); + if (lookahead == 'l') + ADVANCE(52); + if ('m' <= lookahead && lookahead <= 'l') + ADVANCE(53); + ACCEPT_TOKEN(ts_sym_identifier); + case 52: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -561,6 +545,16 @@ LEX_FN() { ('a' <= lookahead && lookahead <= 'z')) ADVANCE(27); ACCEPT_TOKEN(ts_sym_null); + case 53: + ACCEPT_TOKEN(ts_sym_null); + case 54: + if (lookahead == 'l') + ADVANCE(53); + LEX_ERROR(); + case 55: + if (lookahead == 'l') + ADVANCE(54); + LEX_ERROR(); case 56: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || @@ -570,19 +564,11 @@ LEX_FN() { ('s' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'r') - ADVANCE(60); + ADVANCE(57); + if ('s' <= lookahead && lookahead <= 'r') + ADVANCE(62); ACCEPT_TOKEN(ts_sym_identifier); case 57: - if (lookahead == 'u') - ADVANCE(58); - LEX_ERROR(); - case 58: - if (lookahead == 'e') - ADVANCE(59); - LEX_ERROR(); - case 59: - ACCEPT_TOKEN(ts_sym_true); - case 60: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -591,9 +577,11 @@ LEX_FN() { ('v' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'u') + ADVANCE(58); + if ('v' <= lookahead && lookahead <= 'u') ADVANCE(61); ACCEPT_TOKEN(ts_sym_identifier); - case 61: + case 58: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -602,9 +590,11 @@ LEX_FN() { ('f' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'e') - ADVANCE(62); + ADVANCE(59); + if ('f' <= lookahead && lookahead <= 'e') + ADVANCE(60); ACCEPT_TOKEN(ts_sym_identifier); - case 62: + case 59: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -612,6 +602,16 @@ LEX_FN() { ('a' <= lookahead && lookahead <= 'z')) ADVANCE(27); ACCEPT_TOKEN(ts_sym_true); + case 60: + ACCEPT_TOKEN(ts_sym_true); + case 61: + if (lookahead == 'e') + ADVANCE(60); + LEX_ERROR(); + case 62: + if (lookahead == 'u') + ADVANCE(61); + LEX_ERROR(); case 63: ACCEPT_TOKEN(ts_aux_sym_token1); case 64: @@ -658,11 +658,13 @@ LEX_FN() { if (lookahead == '[') ADVANCE(28); if (lookahead == 'f') - ADVANCE(73); + ADVANCE(70); if ('g' <= lookahead && lookahead <= 'f') ADVANCE(48); if (lookahead == 'i') - ADVANCE(76); + ADVANCE(75); + if ('j' <= lookahead && lookahead <= 'i') + ADVANCE(78); if (lookahead == 'n') ADVANCE(49); if (lookahead == 't') @@ -675,20 +677,6 @@ LEX_FN() { ADVANCE(84); LEX_ERROR(); case 70: - if (lookahead == 'a') - ADVANCE(7); - if (lookahead == 'o') - ADVANCE(71); - if (lookahead == 'u') - ADVANCE(47); - LEX_ERROR(); - case 71: - if (lookahead == 'r') - ADVANCE(72); - LEX_ERROR(); - case 72: - ACCEPT_TOKEN(ts_sym__for); - case 73: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -699,12 +687,16 @@ LEX_FN() { ADVANCE(27); if (lookahead == 'a') ADVANCE(30); + if ('b' <= lookahead && lookahead <= 'a') + ADVANCE(7); if (lookahead == 'o') + ADVANCE(71); + if ('p' <= lookahead && lookahead <= 'o') ADVANCE(74); if (lookahead == 'u') ADVANCE(34); ACCEPT_TOKEN(ts_sym_identifier); - case 74: + case 71: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -713,9 +705,11 @@ LEX_FN() { ('s' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'r') - ADVANCE(75); + ADVANCE(72); + if ('s' <= lookahead && lookahead <= 'r') + ADVANCE(73); ACCEPT_TOKEN(ts_sym_identifier); - case 75: + case 72: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -723,7 +717,13 @@ LEX_FN() { ('a' <= lookahead && lookahead <= 'z')) ADVANCE(27); ACCEPT_TOKEN(ts_sym__for); - case 76: + case 73: + ACCEPT_TOKEN(ts_sym__for); + case 74: + if (lookahead == 'r') + ADVANCE(73); + LEX_ERROR(); + case 75: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -732,11 +732,11 @@ LEX_FN() { ('g' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'f') - ADVANCE(78); + ADVANCE(76); + if ('g' <= lookahead && lookahead <= 'f') + ADVANCE(77); ACCEPT_TOKEN(ts_sym_identifier); - case 77: - ACCEPT_TOKEN(ts_sym__if); - case 78: + case 76: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -744,6 +744,12 @@ LEX_FN() { ('a' <= lookahead && lookahead <= 'z')) ADVANCE(27); ACCEPT_TOKEN(ts_sym__if); + case 77: + ACCEPT_TOKEN(ts_sym__if); + case 78: + if (lookahead == 'f') + ADVANCE(77); + LEX_ERROR(); case 79: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || @@ -752,15 +758,11 @@ LEX_FN() { ('b' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'a') - ADVANCE(82); + ADVANCE(80); + if ('b' <= lookahead && lookahead <= 'a') + ADVANCE(83); ACCEPT_TOKEN(ts_sym_identifier); case 80: - if (lookahead == 'r') - ADVANCE(81); - LEX_ERROR(); - case 81: - ACCEPT_TOKEN(ts_sym__var); - case 82: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -769,9 +771,11 @@ LEX_FN() { ('s' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'r') - ADVANCE(83); + ADVANCE(81); + if ('s' <= lookahead && lookahead <= 'r') + ADVANCE(82); ACCEPT_TOKEN(ts_sym_identifier); - case 83: + case 81: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -779,6 +783,12 @@ LEX_FN() { ('a' <= lookahead && lookahead <= 'z')) ADVANCE(27); ACCEPT_TOKEN(ts_sym__var); + case 82: + ACCEPT_TOKEN(ts_sym__var); + case 83: + if (lookahead == 'r') + ADVANCE(82); + LEX_ERROR(); case 84: ACCEPT_TOKEN(ts_aux_sym_token2); case 85: @@ -1052,27 +1062,47 @@ LEX_FN() { if (lookahead == '[') ADVANCE(28); if (lookahead == 'e') - ADVANCE(116); - if ('f' <= lookahead && lookahead <= 'e') - ADVANCE(123); + ADVANCE(120); if (lookahead == 'f') - ADVANCE(73); + ADVANCE(70); if ('g' <= lookahead && lookahead <= 'f') - ADVANCE(48); + ADVANCE(6); if (lookahead == 'i') - ADVANCE(76); + ADVANCE(75); + if ('j' <= lookahead && lookahead <= 'i') + ADVANCE(78); if (lookahead == 'n') ADVANCE(49); + if ('o' <= lookahead && lookahead <= 'n') + ADVANCE(124); if (lookahead == 't') ADVANCE(56); + if ('u' <= lookahead && lookahead <= 't') + ADVANCE(125); if (lookahead == 'v') ADVANCE(79); + if ('w' <= lookahead && lookahead <= 'v') + ADVANCE(126); if (lookahead == '{') ADVANCE(63); if (lookahead == '}') ADVANCE(84); LEX_ERROR(); case 116: + if (lookahead == 'l') + ADVANCE(117); + LEX_ERROR(); + case 117: + if (lookahead == 's') + ADVANCE(118); + LEX_ERROR(); + case 118: + if (lookahead == 'e') + ADVANCE(119); + LEX_ERROR(); + case 119: + ACCEPT_TOKEN(ts_sym__else); + case 120: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1081,11 +1111,9 @@ LEX_FN() { ('m' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'l') - ADVANCE(117); - if ('m' <= lookahead && lookahead <= 'l') - ADVANCE(122); + ADVANCE(121); ACCEPT_TOKEN(ts_sym_identifier); - case 117: + case 121: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1094,11 +1122,9 @@ LEX_FN() { ('t' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 's') - ADVANCE(118); - if ('t' <= lookahead && lookahead <= 's') - ADVANCE(121); + ADVANCE(122); ACCEPT_TOKEN(ts_sym_identifier); - case 118: + case 122: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1107,11 +1133,9 @@ LEX_FN() { ('f' <= lookahead && lookahead <= 'z')) ADVANCE(27); if (lookahead == 'e') - ADVANCE(119); - if ('f' <= lookahead && lookahead <= 'e') - ADVANCE(120); + ADVANCE(123); ACCEPT_TOKEN(ts_sym_identifier); - case 119: + case 123: if ((lookahead == '$') || ('0' <= lookahead && lookahead <= '9') || ('A' <= lookahead && lookahead <= 'Z') || @@ -1119,21 +1143,19 @@ LEX_FN() { ('a' <= lookahead && lookahead <= 'z')) ADVANCE(27); ACCEPT_TOKEN(ts_sym__else); - case 120: - ACCEPT_TOKEN(ts_sym__else); - case 121: - if (lookahead == 'e') - ADVANCE(120); - LEX_ERROR(); - case 122: - if (lookahead == 's') - ADVANCE(121); - LEX_ERROR(); - case 123: - if (lookahead == 'l') - ADVANCE(122); - LEX_ERROR(); case 124: + if (lookahead == 'u') + ADVANCE(55); + LEX_ERROR(); + case 125: + if (lookahead == 'r') + ADVANCE(62); + LEX_ERROR(); + case 126: + if (lookahead == 'a') + ADVANCE(83); + LEX_ERROR(); + case 127: if (lookahead == '\"') ADVANCE(11); if ('0' <= lookahead && lookahead <= '9') @@ -1149,11 +1171,13 @@ LEX_FN() { if (lookahead == '[') ADVANCE(28); if (lookahead == 'f') - ADVANCE(73); + ADVANCE(70); if ('g' <= lookahead && lookahead <= 'f') ADVANCE(48); if (lookahead == 'i') - ADVANCE(76); + ADVANCE(75); + if ('j' <= lookahead && lookahead <= 'i') + ADVANCE(78); if (lookahead == 'n') ADVANCE(49); if (lookahead == 't') @@ -1163,7 +1187,7 @@ LEX_FN() { if (lookahead == '{') ADVANCE(63); LEX_ERROR(); - case 125: + case 128: if (lookahead == '(') ADVANCE(2); if (lookahead == ')') @@ -1173,7 +1197,7 @@ LEX_FN() { if (lookahead == '=') ADVANCE(86); LEX_ERROR(); - case 126: + case 129: if (lookahead == '\"') ADVANCE(11); if ('0' <= lookahead && lookahead <= '9') @@ -1190,34 +1214,18 @@ LEX_FN() { if (lookahead == 'f') ADVANCE(29); if ('g' <= lookahead && lookahead <= 'f') - ADVANCE(6); + ADVANCE(48); if (lookahead == 'n') ADVANCE(49); - if ('o' <= lookahead && lookahead <= 'n') - ADVANCE(127); if (lookahead == 't') ADVANCE(56); - if ('u' <= lookahead && lookahead <= 't') - ADVANCE(128); if (lookahead == 'v') ADVANCE(79); if ('w' <= lookahead && lookahead <= 'v') - ADVANCE(129); + ADVANCE(126); if (lookahead == '{') ADVANCE(63); LEX_ERROR(); - case 127: - if (lookahead == 'u') - ADVANCE(50); - LEX_ERROR(); - case 128: - if (lookahead == 'r') - ADVANCE(57); - LEX_ERROR(); - case 129: - if (lookahead == 'a') - ADVANCE(80); - LEX_ERROR(); case 130: if (lookahead == '\"') ADVANCE(11); @@ -1234,26 +1242,40 @@ LEX_FN() { if (lookahead == '[') ADVANCE(28); if (lookahead == 'e') - ADVANCE(116); - if ('f' <= lookahead && lookahead <= 'e') - ADVANCE(123); + ADVANCE(120); if (lookahead == 'f') - ADVANCE(73); + ADVANCE(70); if ('g' <= lookahead && lookahead <= 'f') - ADVANCE(48); + ADVANCE(6); if (lookahead == 'i') - ADVANCE(76); + ADVANCE(75); + if ('j' <= lookahead && lookahead <= 'i') + ADVANCE(78); if (lookahead == 'n') ADVANCE(49); + if ('o' <= lookahead && lookahead <= 'n') + ADVANCE(124); if (lookahead == 't') ADVANCE(56); + if ('u' <= lookahead && lookahead <= 't') + ADVANCE(125); if (lookahead == 'v') ADVANCE(79); + if ('w' <= lookahead && lookahead <= 'v') + ADVANCE(126); if (lookahead == '{') ADVANCE(63); LEX_ERROR(); case 131: LEX_ERROR(); + case 132: + if (lookahead == 'l') + ADVANCE(117); + if (lookahead == 'o') + ADVANCE(74); + if (lookahead == 'u') + ADVANCE(47); + LEX_ERROR(); case ts_lex_state_error: if (lookahead == '\n') ADVANCE(1); @@ -1288,21 +1310,29 @@ LEX_FN() { if (lookahead == ']') ADVANCE(94); if (lookahead == 'e') - ADVANCE(116); + ADVANCE(120); + if ('f' <= lookahead && lookahead <= 'e') + ADVANCE(132); if (lookahead == 'f') - ADVANCE(73); + ADVANCE(70); if ('g' <= lookahead && lookahead <= 'f') - ADVANCE(48); + ADVANCE(6); if (lookahead == 'i') - ADVANCE(76); + ADVANCE(75); + if ('j' <= lookahead && lookahead <= 'i') + ADVANCE(78); if (lookahead == 'n') ADVANCE(49); + if ('o' <= lookahead && lookahead <= 'n') + ADVANCE(124); if (lookahead == 't') ADVANCE(56); + if ('u' <= lookahead && lookahead <= 't') + ADVANCE(125); if (lookahead == 'v') ADVANCE(79); if ('w' <= lookahead && lookahead <= 'v') - ADVANCE(129); + ADVANCE(126); if (lookahead == '{') ADVANCE(63); if (lookahead == '}') @@ -1314,15 +1344,15 @@ LEX_FN() { } LEX_STATES = { - [0] = 124, + [0] = 127, [1] = 100, - [2] = 126, + [2] = 129, [3] = 101, [4] = 96, [5] = 0, [6] = 69, [7] = 100, - [8] = 126, + [8] = 129, [9] = 87, [10] = 64, [11] = 5, @@ -1521,19 +1551,19 @@ LEX_STATES = { [204] = 97, [205] = 68, [206] = 68, - [207] = 124, + [207] = 127, [208] = 100, - [209] = 126, + [209] = 129, [210] = 0, [211] = 5, [212] = 5, [213] = 5, [214] = 68, - [215] = 124, + [215] = 127, [216] = 100, [217] = 5, [218] = 68, - [219] = 124, + [219] = 127, [220] = 87, [221] = 64, [222] = 115, @@ -1543,7 +1573,7 @@ LEX_STATES = { [226] = 115, [227] = 115, [228] = 115, - [229] = 124, + [229] = 127, [230] = 115, [231] = 69, [232] = 89, @@ -1552,7 +1582,7 @@ LEX_STATES = { [235] = 64, [236] = 87, [237] = 68, - [238] = 125, + [238] = 128, [239] = 5, [240] = 68, [241] = 107, @@ -1576,7 +1606,7 @@ LEX_STATES = { [259] = 97, [260] = 64, [261] = 115, - [262] = 124, + [262] = 127, [263] = 69, [264] = 97, [265] = 89, @@ -1592,7 +1622,7 @@ LEX_STATES = { [275] = 5, [276] = 5, [277] = 68, - [278] = 124, + [278] = 127, [279] = 69, [280] = 97, [281] = 89, @@ -1604,21 +1634,21 @@ LEX_STATES = { [287] = 5, [288] = 5, [289] = 68, - [290] = 124, + [290] = 127, [291] = 100, [292] = 5, [293] = 68, - [294] = 124, + [294] = 127, [295] = 100, - [296] = 126, + [296] = 129, [297] = 5, [298] = 5, [299] = 68, - [300] = 124, + [300] = 127, [301] = 100, [302] = 5, [303] = 68, - [304] = 124, + [304] = 127, [305] = 87, [306] = 64, [307] = 130, @@ -1628,7 +1658,7 @@ LEX_STATES = { [311] = 130, [312] = 130, [313] = 130, - [314] = 124, + [314] = 127, [315] = 130, [316] = 69, [317] = 89, @@ -1639,26 +1669,26 @@ LEX_STATES = { [322] = 130, [323] = 97, [324] = 130, - [325] = 124, + [325] = 127, [326] = 87, [327] = 64, - [328] = 124, - [329] = 124, + [328] = 127, + [329] = 127, [330] = 85, [331] = 0, - [332] = 124, - [333] = 124, - [334] = 124, + [332] = 127, + [333] = 127, + [334] = 127, [335] = 69, [336] = 89, - [337] = 124, + [337] = 127, [338] = 113, [339] = 64, [340] = 97, - [341] = 124, + [341] = 127, [342] = 97, [343] = 131, - [344] = 124, + [344] = 127, [345] = 131, [346] = 131, }; diff --git a/spec/runtime/languages/arithmetic/errors.txt b/spec/runtime/languages/arithmetic/errors.txt index e1c5c73e..adbd9cd1 100644 --- a/spec/runtime/languages/arithmetic/errors.txt +++ b/spec/runtime/languages/arithmetic/errors.txt @@ -10,7 +10,8 @@ recovers from errors inside parenthesized expressions ===================================================== x + (y * + z) * 5 --- -(expression +(expression (sum (variable) - (plus) - (term (factor (ERROR)) (times) (number))) \ No newline at end of file + (product + (grouping (ERROR)) + (number)))) \ No newline at end of file diff --git a/spec/runtime/languages/arithmetic/main.txt b/spec/runtime/languages/arithmetic/main.txt index e092a06e..8f307048 100644 --- a/spec/runtime/languages/arithmetic/main.txt +++ b/spec/runtime/languages/arithmetic/main.txt @@ -17,9 +17,8 @@ parses products =================== x * x --- -(expression (term +(expression (product (variable) - (times) (variable))) =================== @@ -27,28 +26,28 @@ parses sums =================== x + x --- -(expression +(expression (sum (variable) - (plus) - (variable)) + (variable))) ==================== parses complex trees ==================== -x * y + z * a +x * y + z / a --- -(expression - (term (variable) (times) (variable)) - (plus) - (term (variable) (times) (variable))) +(expression (sum + (product (variable) (variable)) + (quotient (variable) (variable)))) -================================= -handles parenthesized expressions -================================= -x * (y + z) +============================ +parses exponents +============================ +x + y * z^(a + b) --- -(expression (term +(expression (sum (variable) - (times) - (factor (expression (variable) (plus) (variable))))) - + (product + (variable) + (exponent + (variable) + (grouping (sum (variable) (variable)))))))