Improve trees generated by arithmetic grammar

This work should inform how to implement operator
precedence helper functions
This commit is contained in:
Max Brunsfeld 2014-03-29 18:37:51 -07:00
parent 7adb0bf34f
commit 99817a38c1
6 changed files with 1666 additions and 719 deletions

View file

@ -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_]*") },
});
}

File diff suppressed because it is too large Load diff

View file

@ -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 = {

View file

@ -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,
};

View file

@ -10,7 +10,8 @@ recovers from errors inside parenthesized expressions
=====================================================
x + (y * + z) * 5
---
(expression
(expression (sum
(variable)
(plus)
(term (factor (ERROR)) (times) (number)))
(product
(grouping (ERROR))
(number))))

View file

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