From 83ce26c20984e65ef7aa20b932657a3ed943ba24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=A0=95=EC=8B=9C=EC=9B=90?= Date: Sun, 16 Aug 2026 18:50:19 +0900 Subject: [PATCH] add minimal Zed syntax highlighting for Ferro (#2) * add minimal Ferro tree-sitter grammar * add temporary tree-sitter generation workflow * generate Ferro tree-sitter parser * drop custom grammar in favor of Rust grammar reuse * remove temporary tree-sitter generation workflow * add Zed extension manifest for Ferro * configure Ferro files for Zed * add Ferro syntax highlighting queries * remove generated custom tree-sitter parser * remove generated custom tree-sitter node types * tighten Ferro Zed highlight queries * add minimal Ferro tree-sitter grammar * point Zed at Ferro grammar * refresh Ferro highlights --------- Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- editors/zed/extension.toml | 11 + editors/zed/languages/ferro/config.toml | 6 + editors/zed/languages/ferro/highlights.scm | 12 + grammar.js | 102 ++ src/node-types.json | 121 ++ src/parser.c | 1744 ++++++++++++++++++++ src/tree_sitter/parser.h | 55 + 7 files changed, 2051 insertions(+) create mode 100644 editors/zed/extension.toml create mode 100644 editors/zed/languages/ferro/config.toml create mode 100644 editors/zed/languages/ferro/highlights.scm create mode 100644 grammar.js create mode 100644 src/node-types.json create mode 100644 src/parser.c create mode 100644 src/tree_sitter/parser.h diff --git a/editors/zed/extension.toml b/editors/zed/extension.toml new file mode 100644 index 0000000..5a28ded --- /dev/null +++ b/editors/zed/extension.toml @@ -0,0 +1,11 @@ +id = "ferro" +name = "Ferro" +version = "0.0.1" +schema_version = 1 +authors = ["sebastianrcnt"] +description = "Ferro syntax highlighting for Zed" +repository = "https://github.com/sebastianrcnt/doslang" + +[grammars.ferro] +repository = "https://github.com/sebastianrcnt/doslang" +rev = "40316bb34f5acbaf34979cdf2dce296ae752d81d" diff --git a/editors/zed/languages/ferro/config.toml b/editors/zed/languages/ferro/config.toml new file mode 100644 index 0000000..be09be8 --- /dev/null +++ b/editors/zed/languages/ferro/config.toml @@ -0,0 +1,6 @@ +name = "Ferro" +grammar = "ferro" +path_suffixes = ["fe"] +line_comments = ["// "] +tab_size = 4 +hard_tabs = false diff --git a/editors/zed/languages/ferro/highlights.scm b/editors/zed/languages/ferro/highlights.scm new file mode 100644 index 0000000..4dcca4b --- /dev/null +++ b/editors/zed/languages/ferro/highlights.scm @@ -0,0 +1,12 @@ +; Ferro syntax highlighting for Zed. + +(line_comment) @comment +(block_comment) @comment +(string_literal) @string +(char_literal) @string +(integer_literal) @number +(builtin) @function.builtin +(builtin_type) @type.builtin +(keyword) @keyword +(operator) @operator +(punctuation) @punctuation.delimiter diff --git a/grammar.js b/grammar.js new file mode 100644 index 0000000..910bb6e --- /dev/null +++ b/grammar.js @@ -0,0 +1,102 @@ +// Minimal Tree-sitter grammar for Ferro syntax highlighting in Zed. +// This intentionally models lexical structure rather than full Ferro semantics. + +module.exports = grammar({ + name: "ferro", + + extras: $ => [ + /[\s\uFEFF\u2060\u200B]/, + ], + + rules: { + source_file: $ => repeat(choice( + $.line_comment, + $.block_comment, + $.string_literal, + $.char_literal, + $.integer_literal, + $.builtin, + $.builtin_type, + $.keyword, + $.identifier, + $.operator, + $.punctuation, + )), + + line_comment: _ => token(seq("//", /[^\n]*/)), + + // Ferro block comments may nest. Keeping this rule recursive makes syntax + // highlighting follow the compiler lexer instead of flattening nested /* */. + block_comment: $ => seq( + "/*", + repeat(choice( + $.block_comment, + /[^*/]+/, + /\*[^/]/, + /\/[^*]/, + )), + "*/", + ), + + string_literal: _ => token(seq( + '"', + repeat(choice( + /[^"\\\n\r]/, + /\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|[nrt\\'"0])/, + )), + '"', + )), + + char_literal: _ => token(seq( + "'", + choice( + /[^'\\\n\r]/, + /\\(x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|[nrt\\'"0])/, + ), + "'", + )), + + integer_literal: _ => token(prec(2, choice( + /0[xX][0-9A-Fa-f_]+/, + /0[bB][01_]+/, + /0[oO][0-7_]+/, + /[0-9][0-9_]*/, + ))), + + builtin: _ => token(prec(3, /@[A-Za-z_][A-Za-z0-9_]*/)), + + builtin_type: _ => token(prec(3, choice( + "i8", "i16", "i32", + "u8", "u16", "u32", + "usize", "isize", + "bool", "char", "void", "str", + ))), + + keyword: _ => token(prec(3, choice( + "unit", "import", "pub", "fn", "struct", "packed", "enum", "error", + "const", "static", "var", "let", "mut", + "if", "else", "while", "for", "in", "match", + "return", "break", "continue", "defer", + "unsafe", "critical", "shared", "atomic", "comptime", "asm", + "try", "catch", "orelse", "as", "extern", + "interrupt", "interrupt_safe", "far", + "true", "false", "null", "undefined", + "self", "Self", "type", + "and", "or", "not", + ))), + + identifier: _ => /[A-Za-z_][A-Za-z0-9_]*/, + + operator: _ => token(choice( + "<<=", ">>=", + "+=", "-=", "*=", "/=", "%=", "&=", "|=", "^=", + "==", "!=", "<=", ">=", "<<", ">>", "->", "=>", "..", + "+%", "-%", "*%", + "+", "-", "*", "/", "%", "=", "<", ">", "&", "|", "^", "~", "!", "?", + )), + + punctuation: _ => token(choice( + "(", ")", "{", "}", "[", "]", ",", ";", ":", ".", + )), + }, +}); diff --git a/src/node-types.json b/src/node-types.json new file mode 100644 index 0000000..ae9616e --- /dev/null +++ b/src/node-types.json @@ -0,0 +1,121 @@ +[ + { + "type": "block_comment", + "named": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "block_comment", + "named": true + } + ] + } + }, + { + "type": "source_file", + "named": true, + "root": true, + "fields": {}, + "children": { + "multiple": true, + "required": false, + "types": [ + { + "type": "block_comment", + "named": true + }, + { + "type": "builtin", + "named": true + }, + { + "type": "builtin_type", + "named": true + }, + { + "type": "char_literal", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "integer_literal", + "named": true + }, + { + "type": "keyword", + "named": true + }, + { + "type": "line_comment", + "named": true + }, + { + "type": "operator", + "named": true + }, + { + "type": "punctuation", + "named": true + }, + { + "type": "string_literal", + "named": true + } + ] + } + }, + { + "type": "*/", + "named": false + }, + { + "type": "/*", + "named": false + }, + { + "type": "builtin", + "named": true + }, + { + "type": "builtin_type", + "named": true + }, + { + "type": "char_literal", + "named": true + }, + { + "type": "identifier", + "named": true + }, + { + "type": "integer_literal", + "named": true + }, + { + "type": "keyword", + "named": true + }, + { + "type": "line_comment", + "named": true + }, + { + "type": "operator", + "named": true + }, + { + "type": "punctuation", + "named": true + }, + { + "type": "string_literal", + "named": true + } +] \ No newline at end of file diff --git a/src/parser.c b/src/parser.c new file mode 100644 index 0000000..9173d00 --- /dev/null +++ b/src/parser.c @@ -0,0 +1,1744 @@ +/* Automatically @generated by tree-sitter */ + +#include "tree_sitter/parser.h" + +#if defined(__GNUC__) || defined(__clang__) +#pragma GCC diagnostic ignored "-Wmissing-field-initializers" +#endif + +#define LANGUAGE_VERSION 14 +#define STATE_COUNT 14 +#define LARGE_STATE_COUNT 6 +#define SYMBOL_COUNT 20 +#define ALIAS_COUNT 0 +#define TOKEN_COUNT 16 +#define EXTERNAL_TOKEN_COUNT 0 +#define FIELD_COUNT 0 +#define MAX_ALIAS_SEQUENCE_LENGTH 3 +#define MAX_RESERVED_WORD_SET_SIZE 0 +#define PRODUCTION_ID_COUNT 1 +#define SUPERTYPE_COUNT 0 + +enum ts_symbol_identifiers { + sym_line_comment = 1, + anon_sym_SLASH_STAR = 2, + aux_sym_block_comment_token1 = 3, + aux_sym_block_comment_token2 = 4, + aux_sym_block_comment_token3 = 5, + anon_sym_STAR_SLASH = 6, + sym_string_literal = 7, + sym_char_literal = 8, + sym_integer_literal = 9, + sym_builtin = 10, + sym_builtin_type = 11, + sym_keyword = 12, + sym_identifier = 13, + sym_operator = 14, + sym_punctuation = 15, + sym_source_file = 16, + sym_block_comment = 17, + aux_sym_source_file_repeat1 = 18, + aux_sym_block_comment_repeat1 = 19, +}; + +static const char * const ts_symbol_names[] = { + [ts_builtin_sym_end] = "end", + [sym_line_comment] = "line_comment", + [anon_sym_SLASH_STAR] = "/*", + [aux_sym_block_comment_token1] = "block_comment_token1", + [aux_sym_block_comment_token2] = "block_comment_token2", + [aux_sym_block_comment_token3] = "block_comment_token3", + [anon_sym_STAR_SLASH] = "*/", + [sym_string_literal] = "string_literal", + [sym_char_literal] = "char_literal", + [sym_integer_literal] = "integer_literal", + [sym_builtin] = "builtin", + [sym_builtin_type] = "builtin_type", + [sym_keyword] = "keyword", + [sym_identifier] = "identifier", + [sym_operator] = "operator", + [sym_punctuation] = "punctuation", + [sym_source_file] = "source_file", + [sym_block_comment] = "block_comment", + [aux_sym_source_file_repeat1] = "source_file_repeat1", + [aux_sym_block_comment_repeat1] = "block_comment_repeat1", +}; + +static const TSSymbol ts_symbol_map[] = { + [ts_builtin_sym_end] = ts_builtin_sym_end, + [sym_line_comment] = sym_line_comment, + [anon_sym_SLASH_STAR] = anon_sym_SLASH_STAR, + [aux_sym_block_comment_token1] = aux_sym_block_comment_token1, + [aux_sym_block_comment_token2] = aux_sym_block_comment_token2, + [aux_sym_block_comment_token3] = aux_sym_block_comment_token3, + [anon_sym_STAR_SLASH] = anon_sym_STAR_SLASH, + [sym_string_literal] = sym_string_literal, + [sym_char_literal] = sym_char_literal, + [sym_integer_literal] = sym_integer_literal, + [sym_builtin] = sym_builtin, + [sym_builtin_type] = sym_builtin_type, + [sym_keyword] = sym_keyword, + [sym_identifier] = sym_identifier, + [sym_operator] = sym_operator, + [sym_punctuation] = sym_punctuation, + [sym_source_file] = sym_source_file, + [sym_block_comment] = sym_block_comment, + [aux_sym_source_file_repeat1] = aux_sym_source_file_repeat1, + [aux_sym_block_comment_repeat1] = aux_sym_block_comment_repeat1, +}; + +static const TSSymbolMetadata ts_symbol_metadata[] = { + [ts_builtin_sym_end] = { + .visible = false, + .named = true, + }, + [sym_line_comment] = { + .visible = true, + .named = true, + }, + [anon_sym_SLASH_STAR] = { + .visible = true, + .named = false, + }, + [aux_sym_block_comment_token1] = { + .visible = false, + .named = false, + }, + [aux_sym_block_comment_token2] = { + .visible = false, + .named = false, + }, + [aux_sym_block_comment_token3] = { + .visible = false, + .named = false, + }, + [anon_sym_STAR_SLASH] = { + .visible = true, + .named = false, + }, + [sym_string_literal] = { + .visible = true, + .named = true, + }, + [sym_char_literal] = { + .visible = true, + .named = true, + }, + [sym_integer_literal] = { + .visible = true, + .named = true, + }, + [sym_builtin] = { + .visible = true, + .named = true, + }, + [sym_builtin_type] = { + .visible = true, + .named = true, + }, + [sym_keyword] = { + .visible = true, + .named = true, + }, + [sym_identifier] = { + .visible = true, + .named = true, + }, + [sym_operator] = { + .visible = true, + .named = true, + }, + [sym_punctuation] = { + .visible = true, + .named = true, + }, + [sym_source_file] = { + .visible = true, + .named = true, + }, + [sym_block_comment] = { + .visible = true, + .named = true, + }, + [aux_sym_source_file_repeat1] = { + .visible = false, + .named = false, + }, + [aux_sym_block_comment_repeat1] = { + .visible = false, + .named = false, + }, +}; + +static const TSSymbol ts_alias_sequences[PRODUCTION_ID_COUNT][MAX_ALIAS_SEQUENCE_LENGTH] = { + [0] = {0}, +}; + +static const uint16_t ts_non_terminal_alias_map[] = { + 0, +}; + +static const TSStateId ts_primary_state_ids[STATE_COUNT] = { + [0] = 0, + [1] = 1, + [2] = 2, + [3] = 3, + [4] = 4, + [5] = 5, + [6] = 6, + [7] = 7, + [8] = 8, + [9] = 6, + [10] = 7, + [11] = 4, + [12] = 5, + [13] = 13, +}; + +static bool ts_lex(TSLexer *lexer, TSStateId state) { + START_LEXER(); + eof = lexer->eof(lexer); + switch (state) { + case 0: + if (eof) ADVANCE(21); + ADVANCE_MAP( + '!', 155, + '"', 1, + '%', 155, + '&', 155, + '\'', 6, + '*', 157, + '+', 157, + '-', 159, + '.', 161, + '/', 153, + '0', 31, + '<', 154, + '=', 158, + '>', 156, + '@', 20, + 'S', 69, + '^', 155, + 'a', 110, + 'b', 115, + 'c', 48, + 'd', 71, + 'e', 98, + 'f', 50, + 'i', 44, + 'l', 76, + 'm', 49, + 'n', 118, + 'o', 126, + 'p', 51, + 'r', 78, + 's', 68, + 't', 127, + 'u', 45, + 'v', 53, + 'w', 86, + '|', 155, + '?', 152, + '~', 152, + '(', 160, + ')', 160, + ',', 160, + ':', 160, + ';', 160, + '[', 160, + ']', 160, + '{', 160, + '}', 160, + ); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ' || + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) SKIP(0); + if (('1' <= lookahead && lookahead <= '9')) ADVANCE(34); + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('g' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 1: + if (lookahead == '"') ADVANCE(29); + if (lookahead == '\\') ADVANCE(7); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '\r' && + lookahead != 0x17f && + lookahead != 0x212a) ADVANCE(1); + END_STATE(); + case 2: + if (lookahead == '\'') ADVANCE(30); + END_STATE(); + case 3: + if (lookahead == '*') ADVANCE(23); + if (lookahead != 0 && + lookahead != 0x17f && + lookahead != 0x212a) ADVANCE(27); + END_STATE(); + case 4: + if (lookahead == '*') ADVANCE(5); + if (lookahead == '/') ADVANCE(3); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ' || + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) ADVANCE(24); + if (lookahead != 0 && + lookahead != 0x17f && + lookahead != 0x212a) ADVANCE(25); + END_STATE(); + case 5: + if (lookahead == '/') ADVANCE(28); + if (lookahead != 0 && + lookahead != 0x17f && + lookahead != 0x212a) ADVANCE(26); + END_STATE(); + case 6: + if (lookahead == '\\') ADVANCE(8); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != '\r' && + lookahead != '\'' && + lookahead != 0x17f && + lookahead != 0x212a) ADVANCE(2); + END_STATE(); + case 7: + ADVANCE_MAP( + 'u', 17, + 'x', 13, + '"', 1, + '\'', 1, + '0', 1, + '\\', 1, + 'n', 1, + 'r', 1, + 't', 1, + ); + END_STATE(); + case 8: + ADVANCE_MAP( + 'u', 18, + 'x', 14, + '"', 2, + '\'', 2, + '0', 2, + '\\', 2, + 'n', 2, + 'r', 2, + 't', 2, + ); + END_STATE(); + case 9: + if (lookahead == '0' || + lookahead == '1' || + lookahead == '_') ADVANCE(32); + END_STATE(); + case 10: + if (('0' <= lookahead && lookahead <= '7') || + lookahead == '_') ADVANCE(33); + END_STATE(); + case 11: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(1); + END_STATE(); + case 12: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(2); + END_STATE(); + case 13: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(11); + END_STATE(); + case 14: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(12); + END_STATE(); + case 15: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(13); + END_STATE(); + case 16: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(14); + END_STATE(); + case 17: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(15); + END_STATE(); + case 18: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(16); + END_STATE(); + case 19: + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(35); + END_STATE(); + case 20: + if (('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(36); + END_STATE(); + case 21: + ACCEPT_TOKEN(ts_builtin_sym_end); + END_STATE(); + case 22: + ACCEPT_TOKEN(sym_line_comment); + if (lookahead != 0 && + lookahead != '\n' && + lookahead != 0x17f && + lookahead != 0x212a) ADVANCE(22); + END_STATE(); + case 23: + ACCEPT_TOKEN(anon_sym_SLASH_STAR); + END_STATE(); + case 24: + ACCEPT_TOKEN(aux_sym_block_comment_token1); + if (('\t' <= lookahead && lookahead <= '\r') || + lookahead == ' ' || + lookahead == 0x200b || + lookahead == 0x2060 || + lookahead == 0xfeff) ADVANCE(24); + if (lookahead != 0 && + lookahead != '*' && + lookahead != '/' && + lookahead != 0x17f && + lookahead != 0x212a) ADVANCE(25); + END_STATE(); + case 25: + ACCEPT_TOKEN(aux_sym_block_comment_token1); + if (lookahead != 0 && + lookahead != '*' && + lookahead != '/' && + lookahead != 0x17f && + lookahead != 0x212a) ADVANCE(25); + END_STATE(); + case 26: + ACCEPT_TOKEN(aux_sym_block_comment_token2); + END_STATE(); + case 27: + ACCEPT_TOKEN(aux_sym_block_comment_token3); + END_STATE(); + case 28: + ACCEPT_TOKEN(anon_sym_STAR_SLASH); + END_STATE(); + case 29: + ACCEPT_TOKEN(sym_string_literal); + END_STATE(); + case 30: + ACCEPT_TOKEN(sym_char_literal); + END_STATE(); + case 31: + ACCEPT_TOKEN(sym_integer_literal); + if (lookahead == 'B' || + lookahead == 'b') ADVANCE(9); + if (lookahead == 'O' || + lookahead == 'o') ADVANCE(10); + if (lookahead == 'X' || + lookahead == 'x') ADVANCE(19); + if (('0' <= lookahead && lookahead <= '9') || + lookahead == '_') ADVANCE(34); + END_STATE(); + case 32: + ACCEPT_TOKEN(sym_integer_literal); + if (lookahead == '0' || + lookahead == '1' || + lookahead == '_') ADVANCE(32); + END_STATE(); + case 33: + ACCEPT_TOKEN(sym_integer_literal); + if (('0' <= lookahead && lookahead <= '7') || + lookahead == '_') ADVANCE(33); + END_STATE(); + case 34: + ACCEPT_TOKEN(sym_integer_literal); + if (('0' <= lookahead && lookahead <= '9') || + lookahead == '_') ADVANCE(34); + END_STATE(); + case 35: + ACCEPT_TOKEN(sym_integer_literal); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'F') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'f')) ADVANCE(35); + END_STATE(); + case 36: + ACCEPT_TOKEN(sym_builtin); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(36); + END_STATE(); + case 37: + ACCEPT_TOKEN(sym_builtin_type); + END_STATE(); + case 38: + ACCEPT_TOKEN(sym_builtin_type); + if (lookahead == 'u') ADVANCE(63); + END_STATE(); + case 39: + ACCEPT_TOKEN(sym_keyword); + END_STATE(); + case 40: + ACCEPT_TOKEN(sym_keyword); + if (lookahead == '_') ADVANCE(135); + END_STATE(); + case 41: + ACCEPT_TOKEN(sym_keyword); + if (lookahead == 'e') ADVANCE(100); + END_STATE(); + case 42: + ACCEPT_TOKEN(sym_keyword); + if (lookahead == 'm') ADVANCE(39); + END_STATE(); + case 43: + ACCEPT_TOKEN(sym_keyword); + if (lookahead == 't') ADVANCE(80); + END_STATE(); + case 44: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == '1') ADVANCE(47); + if (lookahead == '3') ADVANCE(46); + if (lookahead == '8') ADVANCE(37); + if (lookahead == 'f') ADVANCE(39); + if (lookahead == 'm') ADVANCE(120); + if (lookahead == 'n') ADVANCE(43); + if (lookahead == 's') ADVANCE(87); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 45: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == '1') ADVANCE(47); + if (lookahead == '3') ADVANCE(46); + if (lookahead == '8') ADVANCE(37); + if (lookahead == 'n') ADVANCE(67); + if (lookahead == 's') ADVANCE(87); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 46: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == '2') ADVANCE(37); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 47: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == '6') ADVANCE(37); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 48: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(140); + if (lookahead == 'h') ADVANCE(54); + if (lookahead == 'o') ADVANCE(107); + if (lookahead == 'r') ADVANCE(93); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 49: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(140); + if (lookahead == 'u') ADVANCE(137); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 50: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(99); + if (lookahead == 'n') ADVANCE(39); + if (lookahead == 'o') ADVANCE(124); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 51: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(61); + if (lookahead == 'u') ADVANCE(59); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 52: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(96); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 53: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(124); + if (lookahead == 'o') ADVANCE(89); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 54: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(125); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 55: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(101); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 56: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(133); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 57: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(83); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 58: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'a') ADVANCE(141); + if (lookahead == 'r') ADVANCE(38); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('b' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 59: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'b') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 60: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 61: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(97); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 62: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(85); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 63: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(137); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 64: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'c') ADVANCE(55); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 65: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'd') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 66: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'd') ADVANCE(37); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 67: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'd') ADVANCE(77); + if (lookahead == 'i') ADVANCE(137); + if (lookahead == 's') ADVANCE(57); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 68: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(103); + if (lookahead == 'h') ADVANCE(56); + if (lookahead == 't') ADVANCE(58); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 69: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(103); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 70: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(65); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 71: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(82); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 72: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 73: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(37); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 74: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(52); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 75: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(124); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 76: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(137); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 77: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(84); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 78: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(139); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 79: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(128); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 80: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'e') ADVANCE(132); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 81: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'f') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 82: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'f') ADVANCE(75); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 83: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'f') ADVANCE(72); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 84: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'f') ADVANCE(91); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 85: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'h') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 86: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'h') ADVANCE(95); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 87: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'i') ADVANCE(150); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 88: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'i') ADVANCE(112); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 89: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'i') ADVANCE(66); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 90: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'i') ADVANCE(109); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 91: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'i') ADVANCE(113); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 92: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'i') ADVANCE(60); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 93: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'i') ADVANCE(143); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 94: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'i') ADVANCE(64); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 95: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'i') ADVANCE(105); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 96: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'k') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 97: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'k') ADVANCE(70); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 98: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(136); + if (lookahead == 'n') ADVANCE(145); + if (lookahead == 'r') ADVANCE(129); + if (lookahead == 'x') ADVANCE(142); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 99: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(136); + if (lookahead == 'r') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 100: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(136); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 101: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 102: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(37); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 103: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(81); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 104: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(101); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 105: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'l') ADVANCE(72); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 106: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'm') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 107: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'm') ADVANCE(123); + if (lookahead == 'n') ADVANCE(134); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 108: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'm') ADVANCE(92); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 109: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'm') ADVANCE(72); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 110: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'n') ADVANCE(65); + if (lookahead == 's') ADVANCE(42); + if (lookahead == 't') ADVANCE(114); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 111: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'n') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 112: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'n') ADVANCE(147); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 113: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'n') ADVANCE(70); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 114: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'o') ADVANCE(108); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 115: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'o') ADVANCE(117); + if (lookahead == 'r') ADVANCE(74); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 116: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'o') ADVANCE(124); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 117: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'o') ADVANCE(102); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 118: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'o') ADVANCE(137); + if (lookahead == 'u') ADVANCE(104); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 119: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'o') ADVANCE(130); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 120: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(119); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 121: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(72); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 122: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(138); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 123: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'p') ADVANCE(144); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 124: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 125: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(37); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 126: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(41); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 127: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(146); + if (lookahead == 'y') ADVANCE(121); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 128: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(111); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 129: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(116); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 130: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(137); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 131: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(149); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 132: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(131); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 133: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'r') ADVANCE(70); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 134: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 's') ADVANCE(137); + if (lookahead == 't') ADVANCE(88); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 135: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 's') ADVANCE(57); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 136: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 's') ADVANCE(72); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 137: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 138: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(40); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 139: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(148); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 140: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(62); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 141: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(92); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 142: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(79); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 143: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(94); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 144: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 't') ADVANCE(90); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 145: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'u') ADVANCE(106); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 146: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'u') ADVANCE(72); + if (lookahead == 'y') ADVANCE(39); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 147: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'u') ADVANCE(72); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 148: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'u') ADVANCE(128); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 149: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'u') ADVANCE(122); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 150: + ACCEPT_TOKEN(sym_identifier); + if (lookahead == 'z') ADVANCE(73); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'y')) ADVANCE(151); + END_STATE(); + case 151: + ACCEPT_TOKEN(sym_identifier); + if (('0' <= lookahead && lookahead <= '9') || + ('A' <= lookahead && lookahead <= 'Z') || + lookahead == '_' || + ('a' <= lookahead && lookahead <= 'z')) ADVANCE(151); + END_STATE(); + case 152: + ACCEPT_TOKEN(sym_operator); + END_STATE(); + case 153: + ACCEPT_TOKEN(sym_operator); + if (lookahead == '*') ADVANCE(23); + if (lookahead == '/') ADVANCE(22); + if (lookahead == '=') ADVANCE(152); + END_STATE(); + case 154: + ACCEPT_TOKEN(sym_operator); + if (lookahead == '<') ADVANCE(155); + if (lookahead == '=') ADVANCE(152); + END_STATE(); + case 155: + ACCEPT_TOKEN(sym_operator); + if (lookahead == '=') ADVANCE(152); + END_STATE(); + case 156: + ACCEPT_TOKEN(sym_operator); + if (lookahead == '=') ADVANCE(152); + if (lookahead == '>') ADVANCE(155); + END_STATE(); + case 157: + ACCEPT_TOKEN(sym_operator); + if (lookahead == '%' || + lookahead == '=') ADVANCE(152); + END_STATE(); + case 158: + ACCEPT_TOKEN(sym_operator); + if (lookahead == '=' || + lookahead == '>') ADVANCE(152); + END_STATE(); + case 159: + ACCEPT_TOKEN(sym_operator); + if (lookahead == '%' || + lookahead == '=' || + lookahead == '>') ADVANCE(152); + END_STATE(); + case 160: + ACCEPT_TOKEN(sym_punctuation); + END_STATE(); + case 161: + ACCEPT_TOKEN(sym_punctuation); + if (lookahead == '.') ADVANCE(152); + END_STATE(); + default: + return false; + } +} + +static const TSLexMode ts_lex_modes[STATE_COUNT] = { + [0] = {.lex_state = 0}, + [1] = {.lex_state = 0}, + [2] = {.lex_state = 0}, + [3] = {.lex_state = 0}, + [4] = {.lex_state = 0}, + [5] = {.lex_state = 0}, + [6] = {.lex_state = 4}, + [7] = {.lex_state = 4}, + [8] = {.lex_state = 4}, + [9] = {.lex_state = 4}, + [10] = {.lex_state = 4}, + [11] = {.lex_state = 4}, + [12] = {.lex_state = 4}, + [13] = {.lex_state = 0}, +}; + +static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = { + [STATE(0)] = { + [ts_builtin_sym_end] = ACTIONS(1), + [sym_line_comment] = ACTIONS(1), + [anon_sym_SLASH_STAR] = ACTIONS(1), + [sym_string_literal] = ACTIONS(1), + [sym_char_literal] = ACTIONS(1), + [sym_integer_literal] = ACTIONS(1), + [sym_builtin] = ACTIONS(1), + [sym_builtin_type] = ACTIONS(1), + [sym_keyword] = ACTIONS(1), + [sym_identifier] = ACTIONS(1), + [sym_operator] = ACTIONS(1), + [sym_punctuation] = ACTIONS(1), + }, + [STATE(1)] = { + [sym_source_file] = STATE(13), + [sym_block_comment] = STATE(2), + [aux_sym_source_file_repeat1] = STATE(2), + [ts_builtin_sym_end] = ACTIONS(3), + [sym_line_comment] = ACTIONS(5), + [anon_sym_SLASH_STAR] = ACTIONS(7), + [sym_string_literal] = ACTIONS(5), + [sym_char_literal] = ACTIONS(5), + [sym_integer_literal] = ACTIONS(5), + [sym_builtin] = ACTIONS(5), + [sym_builtin_type] = ACTIONS(9), + [sym_keyword] = ACTIONS(5), + [sym_identifier] = ACTIONS(9), + [sym_operator] = ACTIONS(9), + [sym_punctuation] = ACTIONS(9), + }, + [STATE(2)] = { + [sym_block_comment] = STATE(3), + [aux_sym_source_file_repeat1] = STATE(3), + [ts_builtin_sym_end] = ACTIONS(11), + [sym_line_comment] = ACTIONS(13), + [anon_sym_SLASH_STAR] = ACTIONS(7), + [sym_string_literal] = ACTIONS(13), + [sym_char_literal] = ACTIONS(13), + [sym_integer_literal] = ACTIONS(13), + [sym_builtin] = ACTIONS(13), + [sym_builtin_type] = ACTIONS(15), + [sym_keyword] = ACTIONS(13), + [sym_identifier] = ACTIONS(15), + [sym_operator] = ACTIONS(15), + [sym_punctuation] = ACTIONS(15), + }, + [STATE(3)] = { + [sym_block_comment] = STATE(3), + [aux_sym_source_file_repeat1] = STATE(3), + [ts_builtin_sym_end] = ACTIONS(17), + [sym_line_comment] = ACTIONS(19), + [anon_sym_SLASH_STAR] = ACTIONS(22), + [sym_string_literal] = ACTIONS(19), + [sym_char_literal] = ACTIONS(19), + [sym_integer_literal] = ACTIONS(19), + [sym_builtin] = ACTIONS(19), + [sym_builtin_type] = ACTIONS(25), + [sym_keyword] = ACTIONS(19), + [sym_identifier] = ACTIONS(25), + [sym_operator] = ACTIONS(25), + [sym_punctuation] = ACTIONS(25), + }, + [STATE(4)] = { + [ts_builtin_sym_end] = ACTIONS(28), + [sym_line_comment] = ACTIONS(28), + [anon_sym_SLASH_STAR] = ACTIONS(28), + [sym_string_literal] = ACTIONS(28), + [sym_char_literal] = ACTIONS(28), + [sym_integer_literal] = ACTIONS(28), + [sym_builtin] = ACTIONS(28), + [sym_builtin_type] = ACTIONS(30), + [sym_keyword] = ACTIONS(28), + [sym_identifier] = ACTIONS(30), + [sym_operator] = ACTIONS(30), + [sym_punctuation] = ACTIONS(30), + }, + [STATE(5)] = { + [ts_builtin_sym_end] = ACTIONS(32), + [sym_line_comment] = ACTIONS(32), + [anon_sym_SLASH_STAR] = ACTIONS(32), + [sym_string_literal] = ACTIONS(32), + [sym_char_literal] = ACTIONS(32), + [sym_integer_literal] = ACTIONS(32), + [sym_builtin] = ACTIONS(32), + [sym_builtin_type] = ACTIONS(34), + [sym_keyword] = ACTIONS(32), + [sym_identifier] = ACTIONS(34), + [sym_operator] = ACTIONS(34), + [sym_punctuation] = ACTIONS(34), + }, +}; + +static const uint16_t ts_small_parse_table[] = { + [0] = 5, + ACTIONS(36), 1, + anon_sym_SLASH_STAR, + ACTIONS(38), 1, + aux_sym_block_comment_token1, + ACTIONS(42), 1, + anon_sym_STAR_SLASH, + ACTIONS(40), 2, + aux_sym_block_comment_token2, + aux_sym_block_comment_token3, + STATE(7), 2, + sym_block_comment, + aux_sym_block_comment_repeat1, + [18] = 5, + ACTIONS(36), 1, + anon_sym_SLASH_STAR, + ACTIONS(44), 1, + aux_sym_block_comment_token1, + ACTIONS(48), 1, + anon_sym_STAR_SLASH, + ACTIONS(46), 2, + aux_sym_block_comment_token2, + aux_sym_block_comment_token3, + STATE(8), 2, + sym_block_comment, + aux_sym_block_comment_repeat1, + [36] = 5, + ACTIONS(50), 1, + anon_sym_SLASH_STAR, + ACTIONS(53), 1, + aux_sym_block_comment_token1, + ACTIONS(59), 1, + anon_sym_STAR_SLASH, + ACTIONS(56), 2, + aux_sym_block_comment_token2, + aux_sym_block_comment_token3, + STATE(8), 2, + sym_block_comment, + aux_sym_block_comment_repeat1, + [54] = 5, + ACTIONS(36), 1, + anon_sym_SLASH_STAR, + ACTIONS(61), 1, + aux_sym_block_comment_token1, + ACTIONS(65), 1, + anon_sym_STAR_SLASH, + ACTIONS(63), 2, + aux_sym_block_comment_token2, + aux_sym_block_comment_token3, + STATE(10), 2, + sym_block_comment, + aux_sym_block_comment_repeat1, + [72] = 5, + ACTIONS(36), 1, + anon_sym_SLASH_STAR, + ACTIONS(44), 1, + aux_sym_block_comment_token1, + ACTIONS(67), 1, + anon_sym_STAR_SLASH, + ACTIONS(46), 2, + aux_sym_block_comment_token2, + aux_sym_block_comment_token3, + STATE(8), 2, + sym_block_comment, + aux_sym_block_comment_repeat1, + [90] = 2, + ACTIONS(28), 1, + aux_sym_block_comment_token1, + ACTIONS(30), 4, + anon_sym_SLASH_STAR, + aux_sym_block_comment_token2, + aux_sym_block_comment_token3, + anon_sym_STAR_SLASH, + [100] = 2, + ACTIONS(32), 1, + aux_sym_block_comment_token1, + ACTIONS(34), 4, + anon_sym_SLASH_STAR, + aux_sym_block_comment_token2, + aux_sym_block_comment_token3, + anon_sym_STAR_SLASH, + [110] = 1, + ACTIONS(69), 1, + ts_builtin_sym_end, +}; + +static const uint32_t ts_small_parse_table_map[] = { + [SMALL_STATE(6)] = 0, + [SMALL_STATE(7)] = 18, + [SMALL_STATE(8)] = 36, + [SMALL_STATE(9)] = 54, + [SMALL_STATE(10)] = 72, + [SMALL_STATE(11)] = 90, + [SMALL_STATE(12)] = 100, + [SMALL_STATE(13)] = 110, +}; + +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_file, 0, 0, 0), + [5] = {.entry = {.count = 1, .reusable = true}}, SHIFT(2), + [7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(6), + [9] = {.entry = {.count = 1, .reusable = false}}, SHIFT(2), + [11] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0), + [13] = {.entry = {.count = 1, .reusable = true}}, SHIFT(3), + [15] = {.entry = {.count = 1, .reusable = false}}, SHIFT(3), + [17] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), + [19] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [22] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(6), + [25] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_source_file_repeat1, 2, 0, 0), SHIFT_REPEAT(3), + [28] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block_comment, 2, 0, 0), + [30] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block_comment, 2, 0, 0), + [32] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_block_comment, 3, 0, 0), + [34] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_block_comment, 3, 0, 0), + [36] = {.entry = {.count = 1, .reusable = false}}, SHIFT(9), + [38] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7), + [40] = {.entry = {.count = 1, .reusable = false}}, SHIFT(7), + [42] = {.entry = {.count = 1, .reusable = false}}, SHIFT(4), + [44] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8), + [46] = {.entry = {.count = 1, .reusable = false}}, SHIFT(8), + [48] = {.entry = {.count = 1, .reusable = false}}, SHIFT(5), + [50] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_block_comment_repeat1, 2, 0, 0), SHIFT_REPEAT(9), + [53] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_block_comment_repeat1, 2, 0, 0), SHIFT_REPEAT(8), + [56] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_block_comment_repeat1, 2, 0, 0), SHIFT_REPEAT(8), + [59] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_block_comment_repeat1, 2, 0, 0), + [61] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10), + [63] = {.entry = {.count = 1, .reusable = false}}, SHIFT(10), + [65] = {.entry = {.count = 1, .reusable = false}}, SHIFT(11), + [67] = {.entry = {.count = 1, .reusable = false}}, SHIFT(12), + [69] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), +}; + +#ifdef __cplusplus +extern "C" { +#endif +#ifdef TREE_SITTER_HIDE_SYMBOLS +#define TS_PUBLIC +#elif defined(_WIN32) +#define TS_PUBLIC __declspec(dllexport) +#else +#define TS_PUBLIC __attribute__((visibility("default"))) +#endif + +TS_PUBLIC const TSLanguage *tree_sitter_ferro(void) { + static const TSLanguage language = { + .abi_version = LANGUAGE_VERSION, + .symbol_count = SYMBOL_COUNT, + .alias_count = ALIAS_COUNT, + .token_count = TOKEN_COUNT, + .external_token_count = EXTERNAL_TOKEN_COUNT, + .state_count = STATE_COUNT, + .large_state_count = LARGE_STATE_COUNT, + .production_id_count = PRODUCTION_ID_COUNT, + .field_count = FIELD_COUNT, + .max_alias_sequence_length = MAX_ALIAS_SEQUENCE_LENGTH, + .parse_table = &ts_parse_table[0][0], + .small_parse_table = ts_small_parse_table, + .small_parse_table_map = ts_small_parse_table_map, + .parse_actions = ts_parse_actions, + .symbol_names = ts_symbol_names, + .symbol_metadata = ts_symbol_metadata, + .public_symbol_map = ts_symbol_map, + .alias_map = ts_non_terminal_alias_map, + .alias_sequences = &ts_alias_sequences[0][0], + .lex_modes = (const void*)ts_lex_modes, + .lex_fn = ts_lex, + .primary_state_ids = ts_primary_state_ids, + }; + return &language; +} +#ifdef __cplusplus +} +#endif diff --git a/src/tree_sitter/parser.h b/src/tree_sitter/parser.h new file mode 100644 index 0000000..5f37997 --- /dev/null +++ b/src/tree_sitter/parser.h @@ -0,0 +1,55 @@ +#ifndef TREE_SITTER_PARSER_H_ +#define TREE_SITTER_PARSER_H_ +#ifdef __cplusplus +extern "C" { +#endif +#include +#include +#include +#define ts_builtin_sym_error ((TSSymbol)-1) +#define ts_builtin_sym_end 0 +#define TREE_SITTER_SERIALIZATION_BUFFER_SIZE 1024 +#ifndef TREE_SITTER_API_H_ +typedef uint16_t TSStateId; +typedef uint16_t TSSymbol; +typedef uint16_t TSFieldId; +typedef struct TSLanguage TSLanguage; +typedef struct TSLanguageMetadata { uint8_t major_version; uint8_t minor_version; uint8_t patch_version; } TSLanguageMetadata; +#endif +typedef struct { TSFieldId field_id; uint8_t child_index; bool inherited; } TSFieldMapEntry; +typedef struct { uint16_t index; uint16_t length; } TSMapSlice; +typedef struct { bool visible; bool named; bool supertype; } TSSymbolMetadata; +typedef struct TSLexer TSLexer; +struct TSLexer { int32_t lookahead; TSSymbol result_symbol; void (*advance)(TSLexer *, bool); void (*mark_end)(TSLexer *); uint32_t (*get_column)(TSLexer *); bool (*is_at_included_range_start)(const TSLexer *); bool (*eof)(const TSLexer *); void (*log)(const TSLexer *, const char *, ...); }; +typedef enum { TSParseActionTypeShift, TSParseActionTypeReduce, TSParseActionTypeAccept, TSParseActionTypeRecover } TSParseActionType; +typedef union { struct { uint8_t type; TSStateId state; bool extra; bool repetition; } shift; struct { uint8_t type; uint8_t child_count; TSSymbol symbol; int16_t dynamic_precedence; uint16_t production_id; } reduce; uint8_t type; } TSParseAction; +typedef struct { uint16_t lex_state; uint16_t external_lex_state; } TSLexMode; +typedef struct { uint16_t lex_state; uint16_t external_lex_state; uint16_t reserved_word_set_id; } TSLexerMode; +typedef union { TSParseAction action; struct { uint8_t count; bool reusable; } entry; } TSParseActionEntry; +typedef struct { int32_t start; int32_t end; } TSCharacterRange; +struct TSLanguage { uint32_t abi_version; uint32_t symbol_count; uint32_t alias_count; uint32_t token_count; uint32_t external_token_count; uint32_t state_count; uint32_t large_state_count; uint32_t production_id_count; uint32_t field_count; uint16_t max_alias_sequence_length; const uint16_t *parse_table; const uint16_t *small_parse_table; const uint32_t *small_parse_table_map; const TSParseActionEntry *parse_actions; const char * const *symbol_names; const char * const *field_names; const TSMapSlice *field_map_slices; const TSFieldMapEntry *field_map_entries; const TSSymbolMetadata *symbol_metadata; const TSSymbol *public_symbol_map; const uint16_t *alias_map; const TSSymbol *alias_sequences; const TSLexerMode *lex_modes; bool (*lex_fn)(TSLexer *, TSStateId); bool (*keyword_lex_fn)(TSLexer *, TSStateId); TSSymbol keyword_capture_token; struct { const bool *states; const TSSymbol *symbol_map; void *(*create)(void); void (*destroy)(void *); bool (*scan)(void *, TSLexer *, const bool *); unsigned (*serialize)(void *, char *); void (*deserialize)(void *, const char *, unsigned); } external_scanner; const TSStateId *primary_state_ids; const char *name; const TSSymbol *reserved_words; uint16_t max_reserved_word_set_size; uint32_t supertype_count; const TSSymbol *supertype_symbols; const TSMapSlice *supertype_map_slices; const TSSymbol *supertype_map_entries; TSLanguageMetadata metadata; }; +static inline bool set_contains(const TSCharacterRange *ranges, uint32_t len, int32_t lookahead) { uint32_t index=0,size=len; while(size>1){uint32_t half=size/2,mid=index+half; const TSCharacterRange *r=&ranges[mid]; if(lookahead>=r->start&&lookahead<=r->end)return true; else if(lookahead>r->end)index=mid; size-=half;} const TSCharacterRange *r=&ranges[index]; return lookahead>=r->start&&lookahead<=r->end; } +#ifdef _MSC_VER +#define UNUSED __pragma(warning(suppress : 4101)) +#else +#define UNUSED __attribute__((unused)) +#endif +#define START_LEXER() bool result=false; bool skip=false; UNUSED bool eof=false; int32_t lookahead; goto start; next_state: lexer->advance(lexer,skip); start: skip=false; lookahead=lexer->lookahead; +#define ADVANCE(state_value) { state=state_value; goto next_state; } +#define ADVANCE_MAP(...) { static const uint16_t map[]={__VA_ARGS__}; for(uint32_t i=0;iresult_symbol=symbol_value; lexer->mark_end(lexer); +#define END_STATE() return result; +#define SMALL_STATE(id) ((id)-LARGE_STATE_COUNT) +#define STATE(id) id +#define ACTIONS(id) id +#define SHIFT(state_value) {{.shift={.type=TSParseActionTypeShift,.state=(state_value)}}} +#define SHIFT_REPEAT(state_value) {{.shift={.type=TSParseActionTypeShift,.state=(state_value),.repetition=true}}} +#define SHIFT_EXTRA() {{.shift={.type=TSParseActionTypeShift,.extra=true}}} +#define REDUCE(symbol_name,children,precedence,prod_id) {{.reduce={.type=TSParseActionTypeReduce,.symbol=symbol_name,.child_count=children,.dynamic_precedence=precedence,.production_id=prod_id},}} +#define RECOVER() {{.type=TSParseActionTypeRecover}} +#define ACCEPT_INPUT() {{.type=TSParseActionTypeAccept}} +#ifdef __cplusplus +} +#endif +#endif