From fdd841a2d2d4ef76ce35cb29301813590e305fdf Mon Sep 17 00:00:00 2001 From: Jeff Date: Thu, 28 Sep 2023 22:55:47 -0400 Subject: [PATCH] Convert syntax tree to Evaluator --- grammar.js | 3 + src/grammar.json | 17 + src/node-types.json | 13 + src/parser.c | 825 ++++++++++++++++++++++++-------------------- 4 files changed, 490 insertions(+), 368 deletions(-) diff --git a/grammar.js b/grammar.js index 98f75c5..fbb1a4d 100644 --- a/grammar.js +++ b/grammar.js @@ -3,9 +3,12 @@ module.exports = grammar({ rules: { source: $ => repeat(choice( + $.comment, $.statement, )), + comment: $ => seq('#', /.*/), + statement: $ => seq($.expression, $.close), expression: $ => choice( diff --git a/src/grammar.json b/src/grammar.json index 76b19a5..4708899 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -6,6 +6,10 @@ "content": { "type": "CHOICE", "members": [ + { + "type": "SYMBOL", + "name": "comment" + }, { "type": "SYMBOL", "name": "statement" @@ -13,6 +17,19 @@ ] } }, + "comment": { + "type": "SEQ", + "members": [ + { + "type": "STRING", + "value": "#" + }, + { + "type": "PATTERN", + "value": ".*" + } + ] + }, "statement": { "type": "SEQ", "members": [ diff --git a/src/node-types.json b/src/node-types.json index c343dee..d4b7273 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -4,6 +4,11 @@ "named": true, "fields": {} }, + { + "type": "comment", + "named": true, + "fields": {} + }, { "type": "expression", "named": true, @@ -74,6 +79,10 @@ "multiple": true, "required": false, "types": [ + { + "type": "comment", + "named": true + }, { "type": "statement", "named": true @@ -139,6 +148,10 @@ ] } }, + { + "type": "#", + "named": false + }, { "type": "(", "named": false diff --git a/src/parser.c b/src/parser.c index 141d278..c9cbb33 100644 --- a/src/parser.c +++ b/src/parser.c @@ -6,46 +6,51 @@ #endif #define LANGUAGE_VERSION 14 -#define STATE_COUNT 21 -#define LARGE_STATE_COUNT 8 -#define SYMBOL_COUNT 26 +#define STATE_COUNT 23 +#define LARGE_STATE_COUNT 4 +#define SYMBOL_COUNT 29 #define ALIAS_COUNT 0 -#define TOKEN_COUNT 16 +#define TOKEN_COUNT 18 #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 0 #define MAX_ALIAS_SEQUENCE_LENGTH 3 #define PRODUCTION_ID_COUNT 1 enum { - sym_close = 1, - sym_identifier = 2, - sym_float = 3, - sym_integer = 4, - sym_string = 5, - sym_function = 6, - sym_empty = 7, - anon_sym_true = 8, - anon_sym_false = 9, - anon_sym_LPAREN = 10, - anon_sym_COMMA = 11, - anon_sym_RPAREN = 12, - anon_sym_PLUS = 13, - anon_sym_DASH = 14, - anon_sym_EQ = 15, - sym_source = 16, - sym_statement = 17, - sym_expression = 18, - sym_value = 19, - sym_boolean = 20, - sym_list = 21, - sym_operator = 22, - sym_operation = 23, - aux_sym_source_repeat1 = 24, - aux_sym_list_repeat1 = 25, + anon_sym_POUND = 1, + aux_sym_comment_token1 = 2, + sym_close = 3, + sym_identifier = 4, + sym_float = 5, + sym_integer = 6, + sym_string = 7, + sym_function = 8, + sym_empty = 9, + anon_sym_true = 10, + anon_sym_false = 11, + anon_sym_LPAREN = 12, + anon_sym_COMMA = 13, + anon_sym_RPAREN = 14, + anon_sym_PLUS = 15, + anon_sym_DASH = 16, + anon_sym_EQ = 17, + sym_source = 18, + sym_comment = 19, + sym_statement = 20, + sym_expression = 21, + sym_value = 22, + sym_boolean = 23, + sym_list = 24, + sym_operator = 25, + sym_operation = 26, + aux_sym_source_repeat1 = 27, + aux_sym_list_repeat1 = 28, }; static const char * const ts_symbol_names[] = { [ts_builtin_sym_end] = "end", + [anon_sym_POUND] = "#", + [aux_sym_comment_token1] = "comment_token1", [sym_close] = "close", [sym_identifier] = "identifier", [sym_float] = "float", @@ -62,6 +67,7 @@ static const char * const ts_symbol_names[] = { [anon_sym_DASH] = "-", [anon_sym_EQ] = "=", [sym_source] = "source", + [sym_comment] = "comment", [sym_statement] = "statement", [sym_expression] = "expression", [sym_value] = "value", @@ -75,6 +81,8 @@ static const char * const ts_symbol_names[] = { static const TSSymbol ts_symbol_map[] = { [ts_builtin_sym_end] = ts_builtin_sym_end, + [anon_sym_POUND] = anon_sym_POUND, + [aux_sym_comment_token1] = aux_sym_comment_token1, [sym_close] = sym_close, [sym_identifier] = sym_identifier, [sym_float] = sym_float, @@ -91,6 +99,7 @@ static const TSSymbol ts_symbol_map[] = { [anon_sym_DASH] = anon_sym_DASH, [anon_sym_EQ] = anon_sym_EQ, [sym_source] = sym_source, + [sym_comment] = sym_comment, [sym_statement] = sym_statement, [sym_expression] = sym_expression, [sym_value] = sym_value, @@ -107,6 +116,14 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = false, .named = true, }, + [anon_sym_POUND] = { + .visible = true, + .named = false, + }, + [aux_sym_comment_token1] = { + .visible = false, + .named = false, + }, [sym_close] = { .visible = true, .named = true, @@ -171,6 +188,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = { .visible = true, .named = true, }, + [sym_comment] = { + .visible = true, + .named = true, + }, [sym_statement] = { .visible = true, .named = true, @@ -239,6 +260,8 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = { [18] = 18, [19] = 19, [20] = 20, + [21] = 21, + [22] = 22, }; static bool ts_lex(TSLexer *lexer, TSStateId state) { @@ -250,33 +273,34 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '"' || lookahead == '\'' || lookahead == '`') ADVANCE(10); - if (lookahead == '(') ADVANCE(31); - if (lookahead == ')') ADVANCE(33); - if (lookahead == '+') ADVANCE(34); - if (lookahead == ',') ADVANCE(32); - if (lookahead == '-') ADVANCE(35); - if (lookahead == ';') ADVANCE(12); - if (lookahead == '=') ADVANCE(36); - if (lookahead == 'f') ADVANCE(13); - if (lookahead == 't') ADVANCE(17); + if (lookahead == '#') ADVANCE(12); + if (lookahead == '(') ADVANCE(34); + if (lookahead == ')') ADVANCE(36); + if (lookahead == '+') ADVANCE(37); + if (lookahead == ',') ADVANCE(35); + if (lookahead == '-') ADVANCE(38); + if (lookahead == ';') ADVANCE(15); + if (lookahead == '=') ADVANCE(39); + if (lookahead == 'f') ADVANCE(16); + if (lookahead == 't') ADVANCE(20); if (lookahead == '{') ADVANCE(8); if (lookahead == '\t' || lookahead == '\n' || lookahead == '\r' || lookahead == ' ') SKIP(0) - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(23); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(26); if (lookahead == '.' || ('A' <= lookahead && lookahead <= 'Z') || - ('_' <= lookahead && lookahead <= '|')) ADVANCE(21); + ('_' <= lookahead && lookahead <= '|')) ADVANCE(24); END_STATE(); case 1: if (lookahead == 'a') ADVANCE(4); END_STATE(); case 2: - if (lookahead == 'e') ADVANCE(27); + if (lookahead == 'e') ADVANCE(30); END_STATE(); case 3: - if (lookahead == 'e') ADVANCE(29); + if (lookahead == 'e') ADVANCE(32); END_STATE(); case 4: if (lookahead == 'l') ADVANCE(6); @@ -291,7 +315,7 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == 'u') ADVANCE(2); END_STATE(); case 8: - if (lookahead == '}') ADVANCE(25); + if (lookahead == '}') ADVANCE(28); if (lookahead != 0 && lookahead != '\n') ADVANCE(8); END_STATE(); @@ -299,13 +323,13 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { if (lookahead == '"' || lookahead == '\'' || lookahead == '`') ADVANCE(10); - if (lookahead == '(') ADVANCE(31); - if (lookahead == ')') ADVANCE(33); - if (lookahead == '+') ADVANCE(34); - if (lookahead == ',') ADVANCE(32); - if (lookahead == '-') ADVANCE(35); - if (lookahead == ';') ADVANCE(12); - if (lookahead == '=') ADVANCE(36); + if (lookahead == '(') ADVANCE(34); + if (lookahead == ')') ADVANCE(36); + if (lookahead == '+') ADVANCE(37); + if (lookahead == ',') ADVANCE(35); + if (lookahead == '-') ADVANCE(38); + if (lookahead == ';') ADVANCE(15); + if (lookahead == '=') ADVANCE(39); if (lookahead == 'f') ADVANCE(1); if (lookahead == 't') ADVANCE(5); if (lookahead == '{') ADVANCE(8); @@ -313,12 +337,12 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { lookahead == '\n' || lookahead == '\r' || lookahead == ' ') SKIP(9) - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(23); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(26); END_STATE(); case 10: if (lookahead == '"' || lookahead == '\'' || - lookahead == '`') ADVANCE(24); + lookahead == '`') ADVANCE(27); if (lookahead != 0 && lookahead != '\n') ADVANCE(10); END_STATE(); @@ -326,152 +350,168 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) { ACCEPT_TOKEN(ts_builtin_sym_end); END_STATE(); case 12: - ACCEPT_TOKEN(sym_close); + ACCEPT_TOKEN(anon_sym_POUND); END_STATE(); case 13: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == '_') ADVANCE(20); - if (lookahead == 'a') ADVANCE(16); - if (lookahead == '.' || - ('A' <= lookahead && lookahead <= 'Z') || - ('b' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); + ACCEPT_TOKEN(aux_sym_comment_token1); + if (lookahead == '\t' || + lookahead == '\r' || + lookahead == ' ') ADVANCE(13); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(14); END_STATE(); case 14: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == '_') ADVANCE(20); - if (lookahead == 'e') ADVANCE(28); - if (lookahead == '.' || - ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); + ACCEPT_TOKEN(aux_sym_comment_token1); + if (lookahead != 0 && + lookahead != '\n') ADVANCE(14); END_STATE(); case 15: - ACCEPT_TOKEN(sym_identifier); - if (lookahead == '_') ADVANCE(20); - if (lookahead == 'e') ADVANCE(30); - if (lookahead == '.' || - ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); + ACCEPT_TOKEN(sym_close); END_STATE(); case 16: ACCEPT_TOKEN(sym_identifier); - if (lookahead == '_') ADVANCE(20); - if (lookahead == 'l') ADVANCE(18); + if (lookahead == '_') ADVANCE(23); + if (lookahead == 'a') ADVANCE(19); if (lookahead == '.' || ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); + ('b' <= lookahead && lookahead <= 'z') || + lookahead == '|') ADVANCE(24); END_STATE(); case 17: ACCEPT_TOKEN(sym_identifier); - if (lookahead == '_') ADVANCE(20); - if (lookahead == 'r') ADVANCE(19); + if (lookahead == '_') ADVANCE(23); + if (lookahead == 'e') ADVANCE(31); if (lookahead == '.' || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); + lookahead == '|') ADVANCE(24); END_STATE(); case 18: ACCEPT_TOKEN(sym_identifier); - if (lookahead == '_') ADVANCE(20); - if (lookahead == 's') ADVANCE(15); + if (lookahead == '_') ADVANCE(23); + if (lookahead == 'e') ADVANCE(33); if (lookahead == '.' || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); + lookahead == '|') ADVANCE(24); END_STATE(); case 19: ACCEPT_TOKEN(sym_identifier); - if (lookahead == '_') ADVANCE(20); - if (lookahead == 'u') ADVANCE(14); + if (lookahead == '_') ADVANCE(23); + if (lookahead == 'l') ADVANCE(21); if (lookahead == '.' || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); + lookahead == '|') ADVANCE(24); END_STATE(); case 20: ACCEPT_TOKEN(sym_identifier); - if (lookahead == '_') ADVANCE(20); + if (lookahead == '_') ADVANCE(23); + if (lookahead == 'r') ADVANCE(22); if (lookahead == '.' || - lookahead == '|') ADVANCE(21); - if (('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z')) ADVANCE(20); + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z') || + lookahead == '|') ADVANCE(24); END_STATE(); case 21: ACCEPT_TOKEN(sym_identifier); - if (lookahead == '_') ADVANCE(20); + if (lookahead == '_') ADVANCE(23); + if (lookahead == 's') ADVANCE(18); if (lookahead == '.' || ('A' <= lookahead && lookahead <= 'Z') || ('a' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); + lookahead == '|') ADVANCE(24); END_STATE(); case 22: - ACCEPT_TOKEN(sym_float); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(22); + ACCEPT_TOKEN(sym_identifier); + if (lookahead == '_') ADVANCE(23); + if (lookahead == 'u') ADVANCE(17); + if (lookahead == '.' || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z') || + lookahead == '|') ADVANCE(24); END_STATE(); case 23: - ACCEPT_TOKEN(sym_integer); - if (lookahead == '.') ADVANCE(22); - if (('0' <= lookahead && lookahead <= '9')) ADVANCE(23); + ACCEPT_TOKEN(sym_identifier); + if (lookahead == '_') ADVANCE(23); + if (lookahead == '.' || + lookahead == '|') ADVANCE(24); + if (('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(23); END_STATE(); case 24: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == '_') ADVANCE(23); + if (lookahead == '.' || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z') || + lookahead == '|') ADVANCE(24); + END_STATE(); + case 25: + ACCEPT_TOKEN(sym_float); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(25); + END_STATE(); + case 26: + ACCEPT_TOKEN(sym_integer); + if (lookahead == '.') ADVANCE(25); + if (('0' <= lookahead && lookahead <= '9')) ADVANCE(26); + END_STATE(); + case 27: ACCEPT_TOKEN(sym_string); if (lookahead == '"' || lookahead == '\'' || - lookahead == '`') ADVANCE(24); + lookahead == '`') ADVANCE(27); if (lookahead != 0 && lookahead != '\n') ADVANCE(10); END_STATE(); - case 25: + case 28: ACCEPT_TOKEN(sym_function); - if (lookahead == '}') ADVANCE(25); + if (lookahead == '}') ADVANCE(28); if (lookahead != 0 && lookahead != '\n') ADVANCE(8); END_STATE(); - case 26: + case 29: ACCEPT_TOKEN(sym_empty); END_STATE(); - case 27: - ACCEPT_TOKEN(anon_sym_true); - END_STATE(); - case 28: - ACCEPT_TOKEN(anon_sym_true); - if (lookahead == '_') ADVANCE(20); - if (lookahead == '.' || - ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); - END_STATE(); - case 29: - ACCEPT_TOKEN(anon_sym_false); - END_STATE(); case 30: - ACCEPT_TOKEN(anon_sym_false); - if (lookahead == '_') ADVANCE(20); - if (lookahead == '.' || - ('A' <= lookahead && lookahead <= 'Z') || - ('a' <= lookahead && lookahead <= 'z') || - lookahead == '|') ADVANCE(21); + ACCEPT_TOKEN(anon_sym_true); END_STATE(); case 31: - ACCEPT_TOKEN(anon_sym_LPAREN); - if (lookahead == ')') ADVANCE(26); + ACCEPT_TOKEN(anon_sym_true); + if (lookahead == '_') ADVANCE(23); + if (lookahead == '.' || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z') || + lookahead == '|') ADVANCE(24); END_STATE(); case 32: - ACCEPT_TOKEN(anon_sym_COMMA); + ACCEPT_TOKEN(anon_sym_false); END_STATE(); case 33: - ACCEPT_TOKEN(anon_sym_RPAREN); + ACCEPT_TOKEN(anon_sym_false); + if (lookahead == '_') ADVANCE(23); + if (lookahead == '.' || + ('A' <= lookahead && lookahead <= 'Z') || + ('a' <= lookahead && lookahead <= 'z') || + lookahead == '|') ADVANCE(24); END_STATE(); case 34: - ACCEPT_TOKEN(anon_sym_PLUS); + ACCEPT_TOKEN(anon_sym_LPAREN); + if (lookahead == ')') ADVANCE(29); END_STATE(); case 35: - ACCEPT_TOKEN(anon_sym_DASH); + ACCEPT_TOKEN(anon_sym_COMMA); END_STATE(); case 36: + ACCEPT_TOKEN(anon_sym_RPAREN); + END_STATE(); + case 37: + ACCEPT_TOKEN(anon_sym_PLUS); + END_STATE(); + case 38: + ACCEPT_TOKEN(anon_sym_DASH); + END_STATE(); + case 39: ACCEPT_TOKEN(anon_sym_EQ); END_STATE(); default: @@ -484,28 +524,31 @@ static const TSLexMode ts_lex_modes[STATE_COUNT] = { [1] = {.lex_state = 0}, [2] = {.lex_state = 0}, [3] = {.lex_state = 0}, - [4] = {.lex_state = 0}, + [4] = {.lex_state = 9}, [5] = {.lex_state = 9}, [6] = {.lex_state = 9}, - [7] = {.lex_state = 9}, + [7] = {.lex_state = 0}, [8] = {.lex_state = 9}, [9] = {.lex_state = 9}, [10] = {.lex_state = 9}, - [11] = {.lex_state = 9}, + [11] = {.lex_state = 0}, [12] = {.lex_state = 0}, - [13] = {.lex_state = 0}, - [14] = {.lex_state = 9}, - [15] = {.lex_state = 0}, + [13] = {.lex_state = 9}, + [14] = {.lex_state = 0}, + [15] = {.lex_state = 9}, [16] = {.lex_state = 0}, [17] = {.lex_state = 0}, [18] = {.lex_state = 0}, [19] = {.lex_state = 0}, [20] = {.lex_state = 0}, + [21] = {.lex_state = 13}, + [22] = {.lex_state = 0}, }; static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [0] = { [ts_builtin_sym_end] = ACTIONS(1), + [anon_sym_POUND] = ACTIONS(1), [sym_close] = ACTIONS(1), [sym_identifier] = ACTIONS(1), [sym_float] = ACTIONS(1), @@ -523,238 +566,246 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { [anon_sym_EQ] = ACTIONS(1), }, [1] = { - [sym_source] = STATE(20), + [sym_source] = STATE(22), + [sym_comment] = STATE(2), [sym_statement] = STATE(2), - [sym_expression] = STATE(15), - [sym_value] = STATE(17), - [sym_boolean] = STATE(6), - [sym_list] = STATE(6), + [sym_expression] = STATE(16), + [sym_value] = STATE(19), + [sym_boolean] = STATE(5), + [sym_list] = STATE(5), [sym_operation] = STATE(18), [aux_sym_source_repeat1] = STATE(2), [ts_builtin_sym_end] = ACTIONS(3), - [sym_identifier] = ACTIONS(5), - [sym_float] = ACTIONS(7), - [sym_integer] = ACTIONS(9), - [sym_string] = ACTIONS(7), - [sym_function] = ACTIONS(7), - [sym_empty] = ACTIONS(7), - [anon_sym_true] = ACTIONS(11), - [anon_sym_false] = ACTIONS(11), - [anon_sym_LPAREN] = ACTIONS(13), + [anon_sym_POUND] = ACTIONS(5), + [sym_identifier] = ACTIONS(7), + [sym_float] = ACTIONS(9), + [sym_integer] = ACTIONS(11), + [sym_string] = ACTIONS(9), + [sym_function] = ACTIONS(9), + [sym_empty] = ACTIONS(9), + [anon_sym_true] = ACTIONS(13), + [anon_sym_false] = ACTIONS(13), + [anon_sym_LPAREN] = ACTIONS(15), }, [2] = { + [sym_comment] = STATE(3), [sym_statement] = STATE(3), - [sym_expression] = STATE(15), - [sym_value] = STATE(17), - [sym_boolean] = STATE(6), - [sym_list] = STATE(6), - [sym_operation] = STATE(18), - [aux_sym_source_repeat1] = STATE(3), - [ts_builtin_sym_end] = ACTIONS(15), - [sym_identifier] = ACTIONS(5), - [sym_float] = ACTIONS(7), - [sym_integer] = ACTIONS(9), - [sym_string] = ACTIONS(7), - [sym_function] = ACTIONS(7), - [sym_empty] = ACTIONS(7), - [anon_sym_true] = ACTIONS(11), - [anon_sym_false] = ACTIONS(11), - [anon_sym_LPAREN] = ACTIONS(13), - }, - [3] = { - [sym_statement] = STATE(3), - [sym_expression] = STATE(15), - [sym_value] = STATE(17), - [sym_boolean] = STATE(6), - [sym_list] = STATE(6), + [sym_expression] = STATE(16), + [sym_value] = STATE(19), + [sym_boolean] = STATE(5), + [sym_list] = STATE(5), [sym_operation] = STATE(18), [aux_sym_source_repeat1] = STATE(3), [ts_builtin_sym_end] = ACTIONS(17), - [sym_identifier] = ACTIONS(19), - [sym_float] = ACTIONS(22), - [sym_integer] = ACTIONS(25), - [sym_string] = ACTIONS(22), - [sym_function] = ACTIONS(22), - [sym_empty] = ACTIONS(22), - [anon_sym_true] = ACTIONS(28), - [anon_sym_false] = ACTIONS(28), - [anon_sym_LPAREN] = ACTIONS(31), + [anon_sym_POUND] = ACTIONS(5), + [sym_identifier] = ACTIONS(7), + [sym_float] = ACTIONS(9), + [sym_integer] = ACTIONS(11), + [sym_string] = ACTIONS(9), + [sym_function] = ACTIONS(9), + [sym_empty] = ACTIONS(9), + [anon_sym_true] = ACTIONS(13), + [anon_sym_false] = ACTIONS(13), + [anon_sym_LPAREN] = ACTIONS(15), }, - [4] = { + [3] = { + [sym_comment] = STATE(3), + [sym_statement] = STATE(3), [sym_expression] = STATE(16), - [sym_value] = STATE(17), - [sym_boolean] = STATE(6), - [sym_list] = STATE(6), + [sym_value] = STATE(19), + [sym_boolean] = STATE(5), + [sym_list] = STATE(5), [sym_operation] = STATE(18), - [sym_identifier] = ACTIONS(5), - [sym_float] = ACTIONS(7), - [sym_integer] = ACTIONS(9), - [sym_string] = ACTIONS(7), - [sym_function] = ACTIONS(7), - [sym_empty] = ACTIONS(7), - [anon_sym_true] = ACTIONS(11), - [anon_sym_false] = ACTIONS(11), - [anon_sym_LPAREN] = ACTIONS(13), - }, - [5] = { - [sym_close] = ACTIONS(34), - [sym_float] = ACTIONS(34), - [sym_integer] = ACTIONS(36), - [sym_string] = ACTIONS(34), - [sym_function] = ACTIONS(34), - [sym_empty] = ACTIONS(34), - [anon_sym_true] = ACTIONS(34), - [anon_sym_false] = ACTIONS(34), + [aux_sym_source_repeat1] = STATE(3), + [ts_builtin_sym_end] = ACTIONS(19), + [anon_sym_POUND] = ACTIONS(21), + [sym_identifier] = ACTIONS(24), + [sym_float] = ACTIONS(27), + [sym_integer] = ACTIONS(30), + [sym_string] = ACTIONS(27), + [sym_function] = ACTIONS(27), + [sym_empty] = ACTIONS(27), + [anon_sym_true] = ACTIONS(33), + [anon_sym_false] = ACTIONS(33), [anon_sym_LPAREN] = ACTIONS(36), - [anon_sym_COMMA] = ACTIONS(34), - [anon_sym_RPAREN] = ACTIONS(34), - [anon_sym_PLUS] = ACTIONS(34), - [anon_sym_DASH] = ACTIONS(34), - [anon_sym_EQ] = ACTIONS(34), - }, - [6] = { - [sym_close] = ACTIONS(38), - [sym_float] = ACTIONS(38), - [sym_integer] = ACTIONS(40), - [sym_string] = ACTIONS(38), - [sym_function] = ACTIONS(38), - [sym_empty] = ACTIONS(38), - [anon_sym_true] = ACTIONS(38), - [anon_sym_false] = ACTIONS(38), - [anon_sym_LPAREN] = ACTIONS(40), - [anon_sym_COMMA] = ACTIONS(38), - [anon_sym_RPAREN] = ACTIONS(38), - [anon_sym_PLUS] = ACTIONS(38), - [anon_sym_DASH] = ACTIONS(38), - [anon_sym_EQ] = ACTIONS(38), - }, - [7] = { - [sym_close] = ACTIONS(42), - [sym_float] = ACTIONS(42), - [sym_integer] = ACTIONS(44), - [sym_string] = ACTIONS(42), - [sym_function] = ACTIONS(42), - [sym_empty] = ACTIONS(42), - [anon_sym_true] = ACTIONS(42), - [anon_sym_false] = ACTIONS(42), - [anon_sym_LPAREN] = ACTIONS(44), - [anon_sym_COMMA] = ACTIONS(42), - [anon_sym_RPAREN] = ACTIONS(42), - [anon_sym_PLUS] = ACTIONS(42), - [anon_sym_DASH] = ACTIONS(42), - [anon_sym_EQ] = ACTIONS(42), }, }; static const uint16_t ts_small_parse_table[] = { - [0] = 8, - ACTIONS(9), 1, + [0] = 2, + ACTIONS(41), 2, sym_integer, - ACTIONS(13), 1, anon_sym_LPAREN, - ACTIONS(48), 1, - anon_sym_RPAREN, - STATE(9), 1, - aux_sym_list_repeat1, - STATE(11), 1, - sym_value, - ACTIONS(46), 2, - anon_sym_true, - anon_sym_false, - STATE(6), 2, - sym_boolean, - sym_list, - ACTIONS(7), 4, + ACTIONS(39), 12, + sym_close, sym_float, sym_string, sym_function, sym_empty, - [30] = 8, - ACTIONS(53), 1, - sym_integer, - ACTIONS(59), 1, - anon_sym_LPAREN, - ACTIONS(62), 1, - anon_sym_RPAREN, - STATE(9), 1, - aux_sym_list_repeat1, - STATE(11), 1, - sym_value, - ACTIONS(56), 2, anon_sym_true, anon_sym_false, - STATE(6), 2, - sym_boolean, - sym_list, - ACTIONS(50), 4, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_EQ, + [19] = 2, + ACTIONS(45), 2, + sym_integer, + anon_sym_LPAREN, + ACTIONS(43), 12, + sym_close, sym_float, sym_string, sym_function, sym_empty, - [60] = 7, - ACTIONS(9), 1, + anon_sym_true, + anon_sym_false, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_EQ, + [38] = 2, + ACTIONS(49), 2, sym_integer, - ACTIONS(13), 1, anon_sym_LPAREN, + ACTIONS(47), 12, + sym_close, + sym_float, + sym_string, + sym_function, + sym_empty, + anon_sym_true, + anon_sym_false, + anon_sym_COMMA, + anon_sym_RPAREN, + anon_sym_PLUS, + anon_sym_DASH, + anon_sym_EQ, + [57] = 9, + ACTIONS(7), 1, + sym_identifier, + ACTIONS(11), 1, + sym_integer, + ACTIONS(15), 1, + anon_sym_LPAREN, + STATE(17), 1, + sym_expression, + STATE(18), 1, + sym_operation, + STATE(19), 1, + sym_value, + ACTIONS(13), 2, + anon_sym_true, + anon_sym_false, + STATE(5), 2, + sym_boolean, + sym_list, + ACTIONS(9), 4, + sym_float, + sym_string, + sym_function, + sym_empty, + [90] = 8, + ACTIONS(54), 1, + sym_integer, + ACTIONS(60), 1, + anon_sym_LPAREN, + ACTIONS(63), 1, + anon_sym_RPAREN, STATE(8), 1, aux_sym_list_repeat1, - STATE(11), 1, + STATE(13), 1, sym_value, - ACTIONS(46), 2, + ACTIONS(57), 2, anon_sym_true, anon_sym_false, - STATE(6), 2, + STATE(5), 2, sym_boolean, sym_list, - ACTIONS(7), 4, + ACTIONS(51), 4, sym_float, sym_string, sym_function, sym_empty, - [87] = 3, - ACTIONS(68), 1, - anon_sym_COMMA, - ACTIONS(66), 2, + [120] = 8, + ACTIONS(11), 1, sym_integer, + ACTIONS(15), 1, anon_sym_LPAREN, - ACTIONS(64), 7, - sym_float, - sym_string, - sym_function, - sym_empty, + ACTIONS(67), 1, + anon_sym_RPAREN, + STATE(8), 1, + aux_sym_list_repeat1, + STATE(13), 1, + sym_value, + ACTIONS(65), 2, anon_sym_true, anon_sym_false, - anon_sym_RPAREN, - [104] = 2, - ACTIONS(70), 5, + STATE(5), 2, + sym_boolean, + sym_list, + ACTIONS(9), 4, + sym_float, + sym_string, + sym_function, + sym_empty, + [150] = 7, + ACTIONS(11), 1, + sym_integer, + ACTIONS(15), 1, + anon_sym_LPAREN, + STATE(9), 1, + aux_sym_list_repeat1, + STATE(13), 1, + sym_value, + ACTIONS(65), 2, + anon_sym_true, + anon_sym_false, + STATE(5), 2, + sym_boolean, + sym_list, + ACTIONS(9), 4, + sym_float, + sym_string, + sym_function, + sym_empty, + [177] = 2, + ACTIONS(71), 5, + sym_identifier, + sym_integer, + anon_sym_true, + anon_sym_false, + anon_sym_LPAREN, + ACTIONS(69), 6, ts_builtin_sym_end, + anon_sym_POUND, sym_float, sym_string, sym_function, sym_empty, - ACTIONS(72), 5, + [193] = 2, + ACTIONS(75), 5, sym_identifier, sym_integer, anon_sym_true, anon_sym_false, anon_sym_LPAREN, - [119] = 2, - ACTIONS(76), 4, + ACTIONS(73), 6, + ts_builtin_sym_end, + anon_sym_POUND, sym_float, sym_string, sym_function, sym_empty, - ACTIONS(74), 5, - sym_identifier, - sym_integer, - anon_sym_true, - anon_sym_false, - anon_sym_LPAREN, - [133] = 2, - ACTIONS(78), 2, + [209] = 3, + ACTIONS(81), 1, + anon_sym_COMMA, + ACTIONS(79), 2, sym_integer, anon_sym_LPAREN, - ACTIONS(62), 7, + ACTIONS(77), 7, sym_float, sym_string, sym_function, @@ -762,104 +813,142 @@ static const uint16_t ts_small_parse_table[] = { anon_sym_true, anon_sym_false, anon_sym_RPAREN, - [147] = 3, - ACTIONS(80), 1, + [226] = 2, + ACTIONS(85), 4, + sym_float, + sym_string, + sym_function, + sym_empty, + ACTIONS(83), 5, + sym_identifier, + sym_integer, + anon_sym_true, + anon_sym_false, + anon_sym_LPAREN, + [240] = 2, + ACTIONS(87), 2, + sym_integer, + anon_sym_LPAREN, + ACTIONS(63), 7, + sym_float, + sym_string, + sym_function, + sym_empty, + anon_sym_true, + anon_sym_false, + anon_sym_RPAREN, + [254] = 3, + ACTIONS(89), 1, sym_close, - STATE(4), 1, + STATE(7), 1, sym_operator, - ACTIONS(82), 3, + ACTIONS(91), 3, anon_sym_PLUS, anon_sym_DASH, anon_sym_EQ, - [159] = 2, - STATE(4), 1, + [266] = 2, + STATE(7), 1, sym_operator, - ACTIONS(84), 4, + ACTIONS(93), 4, sym_close, anon_sym_PLUS, anon_sym_DASH, anon_sym_EQ, - [169] = 1, - ACTIONS(86), 4, + [276] = 1, + ACTIONS(95), 4, sym_close, anon_sym_PLUS, anon_sym_DASH, anon_sym_EQ, - [176] = 1, - ACTIONS(86), 4, + [283] = 1, + ACTIONS(95), 4, sym_close, anon_sym_PLUS, anon_sym_DASH, anon_sym_EQ, - [183] = 1, - ACTIONS(86), 4, + [290] = 1, + ACTIONS(95), 4, sym_close, anon_sym_PLUS, anon_sym_DASH, anon_sym_EQ, - [190] = 1, - ACTIONS(88), 1, + [297] = 1, + ACTIONS(97), 1, + aux_sym_comment_token1, + [301] = 1, + ACTIONS(99), 1, ts_builtin_sym_end, }; static const uint32_t ts_small_parse_table_map[] = { - [SMALL_STATE(8)] = 0, - [SMALL_STATE(9)] = 30, - [SMALL_STATE(10)] = 60, - [SMALL_STATE(11)] = 87, - [SMALL_STATE(12)] = 104, - [SMALL_STATE(13)] = 119, - [SMALL_STATE(14)] = 133, - [SMALL_STATE(15)] = 147, - [SMALL_STATE(16)] = 159, - [SMALL_STATE(17)] = 169, - [SMALL_STATE(18)] = 176, - [SMALL_STATE(19)] = 183, - [SMALL_STATE(20)] = 190, + [SMALL_STATE(4)] = 0, + [SMALL_STATE(5)] = 19, + [SMALL_STATE(6)] = 38, + [SMALL_STATE(7)] = 57, + [SMALL_STATE(8)] = 90, + [SMALL_STATE(9)] = 120, + [SMALL_STATE(10)] = 150, + [SMALL_STATE(11)] = 177, + [SMALL_STATE(12)] = 193, + [SMALL_STATE(13)] = 209, + [SMALL_STATE(14)] = 226, + [SMALL_STATE(15)] = 240, + [SMALL_STATE(16)] = 254, + [SMALL_STATE(17)] = 266, + [SMALL_STATE(18)] = 276, + [SMALL_STATE(19)] = 283, + [SMALL_STATE(20)] = 290, + [SMALL_STATE(21)] = 297, + [SMALL_STATE(22)] = 301, }; static const TSParseActionEntry ts_parse_actions[] = { [0] = {.entry = {.count = 0, .reusable = false}}, [1] = {.entry = {.count = 1, .reusable = false}}, RECOVER(), [3] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source, 0), - [5] = {.entry = {.count = 1, .reusable = false}}, SHIFT(19), - [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), - [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(6), + [5] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21), + [7] = {.entry = {.count = 1, .reusable = false}}, SHIFT(20), + [9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), [11] = {.entry = {.count = 1, .reusable = false}}, SHIFT(5), - [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), - [15] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source, 1), - [17] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_repeat1, 2), - [19] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(19), - [22] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(6), - [25] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(6), - [28] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(5), - [31] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(10), - [34] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1), - [36] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1), - [38] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_value, 1), - [40] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_value, 1), - [42] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3), - [44] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3), - [46] = {.entry = {.count = 1, .reusable = true}}, SHIFT(5), - [48] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), - [50] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2), SHIFT_REPEAT(6), - [53] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2), SHIFT_REPEAT(6), - [56] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2), SHIFT_REPEAT(5), - [59] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2), SHIFT_REPEAT(10), - [62] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2), - [64] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 1), - [66] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 1), - [68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), - [70] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 2), - [72] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 2), - [74] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operator, 1), - [76] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operator, 1), - [78] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2), - [80] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), - [82] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13), - [84] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation, 3), - [86] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), - [88] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), + [13] = {.entry = {.count = 1, .reusable = false}}, SHIFT(6), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), + [17] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source, 1), + [19] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_repeat1, 2), + [21] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(21), + [24] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(20), + [27] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(5), + [30] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(5), + [33] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(6), + [36] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_repeat1, 2), SHIFT_REPEAT(10), + [39] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_list, 3), + [41] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_list, 3), + [43] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_value, 1), + [45] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_value, 1), + [47] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_boolean, 1), + [49] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_boolean, 1), + [51] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2), SHIFT_REPEAT(5), + [54] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2), SHIFT_REPEAT(5), + [57] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2), SHIFT_REPEAT(6), + [60] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2), SHIFT_REPEAT(10), + [63] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 2), + [65] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [67] = {.entry = {.count = 1, .reusable = true}}, SHIFT(4), + [69] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_statement, 2), + [71] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_statement, 2), + [73] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 2), + [75] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 2), + [77] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_list_repeat1, 1), + [79] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 1), + [81] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15), + [83] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_operator, 1), + [85] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operator, 1), + [87] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_list_repeat1, 2), + [89] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11), + [91] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14), + [93] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_operation, 3), + [95] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_expression, 1), + [97] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12), + [99] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), }; #ifdef __cplusplus