This commit is contained in:
Michael Sippel 2025-06-14 12:35:03 +02:00
parent 34f5ccafb3
commit 831aefb112
Signed by: senvas
GPG key ID: F96CF119C34B64A6
7 changed files with 282 additions and 231 deletions

View file

@ -14,14 +14,15 @@ module.exports = grammar({
source_file: ($) => $.morphbase,
morphbase: ($) => seq($.include, repeat($.stmnt)),
include: ($) => seq("```", /(.*)/, "```"),
include: ($) => seq("```", /([^\`]*)/, "```"),
stmnt: ($) => choice($.comment, $.def),
comment: (_) => seq("/*", /(.*)/, "*/"),
comment: ($) => prec.right(seq("/*", /([^\*]*)/, "*/")),
def: ($) => choice($.typedef, $.morphdef),
typedef: ($) => seq("type", $.ident, "=", $.type, ";"),
morphdef: ($) => seq("morph", $.ident, ":", $.type, "=", $.impl, ";"),
typedef: ($) => prec.right(seq("type", $.ident, "=", $.type, ";")),
morphdef: ($) => prec.right(seq("morph", $.ident, ":", $.type, "=", $.impl, ";")),
ident: ($) => /([a-zA-Z$][0-9a-zA-Z_\-]*)/,
type: ($) => /([^=]*)/,
impl: ($) => seq("```", /([^\`])/, "```"),
type: ($) => /([^\`\=]*)/,
impl: ($) => seq("```", $.impl_c_code, "```"),
impl_c_code: (_) => /([^\`]*)/,
},
});

View file

@ -1,4 +1,4 @@
(include) @string
(ident) @identifier
(def) @keyword
(impl) @string
(type) @type

3
query/injections.scm Normal file
View file

@ -0,0 +1,3 @@
((impl_c_code @injection.content)
(#set! injection.language "c"))

162
src/grammar.json generated
View file

@ -31,7 +31,7 @@
},
{
"type": "PATTERN",
"value": "(.*)"
"value": "([^\\`]*)"
},
{
"type": "STRING",
@ -53,21 +53,25 @@
]
},
"comment": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "/*"
},
{
"type": "PATTERN",
"value": "(.*)"
},
{
"type": "STRING",
"value": "*/"
}
]
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "/*"
},
{
"type": "PATTERN",
"value": "([^\\*]*)"
},
{
"type": "STRING",
"value": "*/"
}
]
}
},
"def": {
"type": "CHOICE",
@ -83,62 +87,70 @@
]
},
"typedef": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "type"
},
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": ";"
}
]
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "type"
},
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": ";"
}
]
}
},
"morphdef": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "morph"
},
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "impl"
},
{
"type": "STRING",
"value": ";"
}
]
"type": "PREC_RIGHT",
"value": 0,
"content": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "morph"
},
{
"type": "SYMBOL",
"name": "ident"
},
{
"type": "STRING",
"value": ":"
},
{
"type": "SYMBOL",
"name": "type"
},
{
"type": "STRING",
"value": "="
},
{
"type": "SYMBOL",
"name": "impl"
},
{
"type": "STRING",
"value": ";"
}
]
}
},
"ident": {
"type": "PATTERN",
@ -146,7 +158,7 @@
},
"type": {
"type": "PATTERN",
"value": "([^=]*)"
"value": "([^\\`\\=]*)"
},
"impl": {
"type": "SEQ",
@ -156,14 +168,18 @@
"value": "```"
},
{
"type": "PATTERN",
"value": "([^\\`])"
"type": "SYMBOL",
"name": "impl_c_code"
},
{
"type": "STRING",
"value": "```"
}
]
},
"impl_c_code": {
"type": "PATTERN",
"value": "([^\\`]*)"
}
},
"extras": [

15
src/node-types.json generated
View file

@ -26,6 +26,21 @@
{
"type": "impl",
"named": true,
"fields": {},
"children": {
"multiple": false,
"required": true,
"types": [
{
"type": "impl_c_code",
"named": true
}
]
}
},
{
"type": "impl_c_code",
"named": true,
"fields": {}
},
{

309
src/parser.c generated
View file

@ -7,9 +7,9 @@
#endif
#define LANGUAGE_VERSION 15
#define STATE_COUNT 30
#define STATE_COUNT 31
#define LARGE_STATE_COUNT 2
#define SYMBOL_COUNT 23
#define SYMBOL_COUNT 24
#define ALIAS_COUNT 0
#define TOKEN_COUNT 13
#define EXTERNAL_TOKEN_COUNT 0
@ -23,15 +23,15 @@ enum ts_symbol_identifiers {
anon_sym_BQUOTE_BQUOTE_BQUOTE = 1,
aux_sym_include_token1 = 2,
anon_sym_SLASH_STAR = 3,
anon_sym_STAR_SLASH = 4,
anon_sym_type = 5,
anon_sym_EQ = 6,
anon_sym_SEMI = 7,
anon_sym_morph = 8,
anon_sym_COLON = 9,
sym_ident = 10,
sym_type = 11,
aux_sym_impl_token1 = 12,
aux_sym_comment_token1 = 4,
anon_sym_STAR_SLASH = 5,
anon_sym_type = 6,
anon_sym_EQ = 7,
anon_sym_SEMI = 8,
anon_sym_morph = 9,
anon_sym_COLON = 10,
sym_ident = 11,
sym_type = 12,
sym_source_file = 13,
sym_morphbase = 14,
sym_include = 15,
@ -41,7 +41,8 @@ enum ts_symbol_identifiers {
sym_typedef = 19,
sym_morphdef = 20,
sym_impl = 21,
aux_sym_morphbase_repeat1 = 22,
sym_impl_c_code = 22,
aux_sym_morphbase_repeat1 = 23,
};
static const char * const ts_symbol_names[] = {
@ -49,6 +50,7 @@ static const char * const ts_symbol_names[] = {
[anon_sym_BQUOTE_BQUOTE_BQUOTE] = "```",
[aux_sym_include_token1] = "include_token1",
[anon_sym_SLASH_STAR] = "/*",
[aux_sym_comment_token1] = "comment_token1",
[anon_sym_STAR_SLASH] = "*/",
[anon_sym_type] = "type",
[anon_sym_EQ] = "=",
@ -57,7 +59,6 @@ static const char * const ts_symbol_names[] = {
[anon_sym_COLON] = ":",
[sym_ident] = "ident",
[sym_type] = "type",
[aux_sym_impl_token1] = "impl_token1",
[sym_source_file] = "source_file",
[sym_morphbase] = "morphbase",
[sym_include] = "include",
@ -67,6 +68,7 @@ static const char * const ts_symbol_names[] = {
[sym_typedef] = "typedef",
[sym_morphdef] = "morphdef",
[sym_impl] = "impl",
[sym_impl_c_code] = "impl_c_code",
[aux_sym_morphbase_repeat1] = "morphbase_repeat1",
};
@ -75,6 +77,7 @@ static const TSSymbol ts_symbol_map[] = {
[anon_sym_BQUOTE_BQUOTE_BQUOTE] = anon_sym_BQUOTE_BQUOTE_BQUOTE,
[aux_sym_include_token1] = aux_sym_include_token1,
[anon_sym_SLASH_STAR] = anon_sym_SLASH_STAR,
[aux_sym_comment_token1] = aux_sym_comment_token1,
[anon_sym_STAR_SLASH] = anon_sym_STAR_SLASH,
[anon_sym_type] = anon_sym_type,
[anon_sym_EQ] = anon_sym_EQ,
@ -83,7 +86,6 @@ static const TSSymbol ts_symbol_map[] = {
[anon_sym_COLON] = anon_sym_COLON,
[sym_ident] = sym_ident,
[sym_type] = sym_type,
[aux_sym_impl_token1] = aux_sym_impl_token1,
[sym_source_file] = sym_source_file,
[sym_morphbase] = sym_morphbase,
[sym_include] = sym_include,
@ -93,6 +95,7 @@ static const TSSymbol ts_symbol_map[] = {
[sym_typedef] = sym_typedef,
[sym_morphdef] = sym_morphdef,
[sym_impl] = sym_impl,
[sym_impl_c_code] = sym_impl_c_code,
[aux_sym_morphbase_repeat1] = aux_sym_morphbase_repeat1,
};
@ -113,6 +116,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
.visible = true,
.named = false,
},
[aux_sym_comment_token1] = {
.visible = false,
.named = false,
},
[anon_sym_STAR_SLASH] = {
.visible = true,
.named = false,
@ -145,10 +152,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
.visible = true,
.named = true,
},
[aux_sym_impl_token1] = {
.visible = false,
.named = false,
},
[sym_source_file] = {
.visible = true,
.named = true,
@ -185,6 +188,10 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
.visible = true,
.named = true,
},
[sym_impl_c_code] = {
.visible = true,
.named = true,
},
[aux_sym_morphbase_repeat1] = {
.visible = false,
.named = false,
@ -230,6 +237,7 @@ static const TSStateId ts_primary_state_ids[STATE_COUNT] = {
[27] = 27,
[28] = 28,
[29] = 29,
[30] = 30,
};
static bool ts_lex(TSLexer *lexer, TSStateId state) {
@ -237,13 +245,13 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
eof = lexer->eof(lexer);
switch (state) {
case 0:
if (eof) ADVANCE(14);
if (eof) ADVANCE(13);
ADVANCE_MAP(
'*', 2,
'/', 1,
':', 24,
';', 22,
'=', 21,
':', 25,
';', 23,
'=', 22,
'`', 4,
'm', 7,
't', 11,
@ -252,22 +260,22 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
lookahead == ' ') SKIP(0);
END_STATE();
case 1:
if (lookahead == '*') ADVANCE(18);
if (lookahead == '*') ADVANCE(17);
END_STATE();
case 2:
if (lookahead == '/') ADVANCE(19);
if (lookahead == '/') ADVANCE(20);
END_STATE();
case 3:
if (lookahead == '`') ADVANCE(15);
if (lookahead == '`') ADVANCE(14);
END_STATE();
case 4:
if (lookahead == '`') ADVANCE(3);
END_STATE();
case 5:
if (lookahead == 'e') ADVANCE(20);
if (lookahead == 'e') ADVANCE(21);
END_STATE();
case 6:
if (lookahead == 'h') ADVANCE(23);
if (lookahead == 'h') ADVANCE(24);
END_STATE();
case 7:
if (lookahead == 'o') ADVANCE(10);
@ -289,82 +297,79 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
lookahead == ' ') SKIP(12);
if (lookahead == '$' ||
('A' <= lookahead && lookahead <= 'Z') ||
('a' <= lookahead && lookahead <= 'z')) ADVANCE(25);
('a' <= lookahead && lookahead <= 'z')) ADVANCE(26);
END_STATE();
case 13:
if (('\t' <= lookahead && lookahead <= '\r') ||
lookahead == ' ') ADVANCE(29);
if (lookahead != 0 &&
lookahead != '`') ADVANCE(28);
END_STATE();
case 14:
ACCEPT_TOKEN(ts_builtin_sym_end);
END_STATE();
case 15:
case 14:
ACCEPT_TOKEN(anon_sym_BQUOTE_BQUOTE_BQUOTE);
END_STATE();
case 15:
ACCEPT_TOKEN(aux_sym_include_token1);
if (('\t' <= lookahead && lookahead <= '\r') ||
lookahead == ' ') ADVANCE(15);
if (lookahead != 0 &&
lookahead != '`') ADVANCE(16);
END_STATE();
case 16:
ACCEPT_TOKEN(aux_sym_include_token1);
if (lookahead == '\t' ||
(0x0b <= lookahead && lookahead <= '\r') ||
lookahead == ' ') ADVANCE(16);
if (lookahead != 0 &&
(lookahead < '\t' || '\r' < lookahead)) ADVANCE(17);
lookahead != '`') ADVANCE(16);
END_STATE();
case 17:
ACCEPT_TOKEN(aux_sym_include_token1);
if (lookahead != 0 &&
lookahead != '\n') ADVANCE(17);
END_STATE();
case 18:
ACCEPT_TOKEN(anon_sym_SLASH_STAR);
END_STATE();
case 18:
ACCEPT_TOKEN(aux_sym_comment_token1);
if (('\t' <= lookahead && lookahead <= '\r') ||
lookahead == ' ') ADVANCE(18);
if (lookahead != 0 &&
lookahead != '*') ADVANCE(19);
END_STATE();
case 19:
ACCEPT_TOKEN(anon_sym_STAR_SLASH);
ACCEPT_TOKEN(aux_sym_comment_token1);
if (lookahead != 0 &&
lookahead != '*') ADVANCE(19);
END_STATE();
case 20:
ACCEPT_TOKEN(anon_sym_type);
ACCEPT_TOKEN(anon_sym_STAR_SLASH);
END_STATE();
case 21:
ACCEPT_TOKEN(anon_sym_EQ);
ACCEPT_TOKEN(anon_sym_type);
END_STATE();
case 22:
ACCEPT_TOKEN(anon_sym_SEMI);
ACCEPT_TOKEN(anon_sym_EQ);
END_STATE();
case 23:
ACCEPT_TOKEN(anon_sym_morph);
ACCEPT_TOKEN(anon_sym_SEMI);
END_STATE();
case 24:
ACCEPT_TOKEN(anon_sym_COLON);
ACCEPT_TOKEN(anon_sym_morph);
END_STATE();
case 25:
ACCEPT_TOKEN(anon_sym_COLON);
END_STATE();
case 26:
ACCEPT_TOKEN(sym_ident);
if (lookahead == '-' ||
('0' <= lookahead && lookahead <= '9') ||
('A' <= lookahead && lookahead <= 'Z') ||
lookahead == '_' ||
('a' <= lookahead && lookahead <= 'z')) ADVANCE(25);
END_STATE();
case 26:
ACCEPT_TOKEN(sym_type);
if (('\t' <= lookahead && lookahead <= '\r') ||
lookahead == ' ') ADVANCE(26);
if (lookahead != 0 &&
lookahead != '=') ADVANCE(27);
('a' <= lookahead && lookahead <= 'z')) ADVANCE(26);
END_STATE();
case 27:
ACCEPT_TOKEN(sym_type);
if (('\t' <= lookahead && lookahead <= '\r') ||
lookahead == ' ') ADVANCE(27);
if (lookahead != 0 &&
lookahead != '=') ADVANCE(27);
lookahead != '=' &&
lookahead != '`') ADVANCE(28);
END_STATE();
case 28:
ACCEPT_TOKEN(aux_sym_impl_token1);
END_STATE();
case 29:
ACCEPT_TOKEN(aux_sym_impl_token1);
if (('\t' <= lookahead && lookahead <= '\r') ||
lookahead == ' ') ADVANCE(29);
ACCEPT_TOKEN(sym_type);
if (lookahead != 0 &&
lookahead != '=' &&
lookahead != '`') ADVANCE(28);
END_STATE();
default:
@ -384,25 +389,26 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = {
[8] = {.lex_state = 0},
[9] = {.lex_state = 0},
[10] = {.lex_state = 0},
[11] = {.lex_state = 0},
[11] = {.lex_state = 15},
[12] = {.lex_state = 0},
[13] = {.lex_state = 16},
[14] = {.lex_state = 0},
[15] = {.lex_state = 12},
[13] = {.lex_state = 0},
[14] = {.lex_state = 15},
[15] = {.lex_state = 0},
[16] = {.lex_state = 12},
[17] = {.lex_state = 16},
[18] = {.lex_state = 0},
[17] = {.lex_state = 12},
[18] = {.lex_state = 18},
[19] = {.lex_state = 0},
[20] = {.lex_state = 0},
[21] = {.lex_state = 26},
[22] = {.lex_state = 0},
[23] = {.lex_state = 26},
[21] = {.lex_state = 0},
[22] = {.lex_state = 27},
[23] = {.lex_state = 27},
[24] = {.lex_state = 0},
[25] = {.lex_state = 0},
[26] = {.lex_state = 13},
[26] = {.lex_state = 0},
[27] = {.lex_state = 0},
[28] = {.lex_state = 0},
[29] = {.lex_state = 0},
[30] = {.lex_state = 0},
};
static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
@ -418,8 +424,8 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
[anon_sym_COLON] = ACTIONS(1),
},
[STATE(1)] = {
[sym_source_file] = STATE(14),
[sym_morphbase] = STATE(18),
[sym_source_file] = STATE(15),
[sym_morphbase] = STATE(19),
[sym_include] = STATE(2),
[anon_sym_BQUOTE_BQUOTE_BQUOTE] = ACTIONS(3),
},
@ -518,62 +524,67 @@ static const uint16_t ts_small_parse_table[] = {
anon_sym_morph,
[117] = 2,
ACTIONS(38), 1,
aux_sym_include_token1,
STATE(29), 1,
sym_impl_c_code,
[124] = 2,
ACTIONS(40), 1,
anon_sym_BQUOTE_BQUOTE_BQUOTE,
STATE(27), 1,
sym_impl,
[124] = 1,
ACTIONS(40), 1,
anon_sym_BQUOTE_BQUOTE_BQUOTE,
[128] = 1,
[131] = 1,
ACTIONS(42), 1,
aux_sym_include_token1,
[132] = 1,
anon_sym_BQUOTE_BQUOTE_BQUOTE,
[135] = 1,
ACTIONS(44), 1,
ts_builtin_sym_end,
[136] = 1,
aux_sym_include_token1,
[139] = 1,
ACTIONS(46), 1,
sym_ident,
[140] = 1,
ts_builtin_sym_end,
[143] = 1,
ACTIONS(48), 1,
sym_ident,
[144] = 1,
[147] = 1,
ACTIONS(50), 1,
aux_sym_include_token1,
[148] = 1,
sym_ident,
[151] = 1,
ACTIONS(52), 1,
ts_builtin_sym_end,
[152] = 1,
aux_sym_comment_token1,
[155] = 1,
ACTIONS(54), 1,
anon_sym_STAR_SLASH,
[156] = 1,
ts_builtin_sym_end,
[159] = 1,
ACTIONS(56), 1,
anon_sym_EQ,
[160] = 1,
anon_sym_STAR_SLASH,
[163] = 1,
ACTIONS(58), 1,
sym_type,
[164] = 1,
anon_sym_EQ,
[167] = 1,
ACTIONS(60), 1,
anon_sym_COLON,
[168] = 1,
sym_type,
[171] = 1,
ACTIONS(62), 1,
sym_type,
[172] = 1,
[175] = 1,
ACTIONS(64), 1,
anon_sym_SEMI,
[176] = 1,
[179] = 1,
ACTIONS(66), 1,
anon_sym_EQ,
[180] = 1,
[183] = 1,
ACTIONS(68), 1,
aux_sym_impl_token1,
[184] = 1,
anon_sym_COLON,
[187] = 1,
ACTIONS(70), 1,
anon_sym_SEMI,
[188] = 1,
[191] = 1,
ACTIONS(72), 1,
anon_sym_BQUOTE_BQUOTE_BQUOTE,
[192] = 1,
[195] = 1,
ACTIONS(74), 1,
anon_sym_BQUOTE_BQUOTE_BQUOTE,
[199] = 1,
ACTIONS(76), 1,
anon_sym_SEMI,
};
@ -589,63 +600,65 @@ static const uint32_t ts_small_parse_table_map[] = {
[SMALL_STATE(10)] = 110,
[SMALL_STATE(11)] = 117,
[SMALL_STATE(12)] = 124,
[SMALL_STATE(13)] = 128,
[SMALL_STATE(14)] = 132,
[SMALL_STATE(15)] = 136,
[SMALL_STATE(16)] = 140,
[SMALL_STATE(17)] = 144,
[SMALL_STATE(18)] = 148,
[SMALL_STATE(19)] = 152,
[SMALL_STATE(20)] = 156,
[SMALL_STATE(21)] = 160,
[SMALL_STATE(22)] = 164,
[SMALL_STATE(23)] = 168,
[SMALL_STATE(24)] = 172,
[SMALL_STATE(25)] = 176,
[SMALL_STATE(26)] = 180,
[SMALL_STATE(27)] = 184,
[SMALL_STATE(28)] = 188,
[SMALL_STATE(29)] = 192,
[SMALL_STATE(13)] = 131,
[SMALL_STATE(14)] = 135,
[SMALL_STATE(15)] = 139,
[SMALL_STATE(16)] = 143,
[SMALL_STATE(17)] = 147,
[SMALL_STATE(18)] = 151,
[SMALL_STATE(19)] = 155,
[SMALL_STATE(20)] = 159,
[SMALL_STATE(21)] = 163,
[SMALL_STATE(22)] = 167,
[SMALL_STATE(23)] = 171,
[SMALL_STATE(24)] = 175,
[SMALL_STATE(25)] = 179,
[SMALL_STATE(26)] = 183,
[SMALL_STATE(27)] = 187,
[SMALL_STATE(28)] = 191,
[SMALL_STATE(29)] = 195,
[SMALL_STATE(30)] = 199,
};
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}}, SHIFT(13),
[3] = {.entry = {.count = 1, .reusable = true}}, SHIFT(14),
[5] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_morphbase, 1, 0, 0),
[7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17),
[9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16),
[11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(15),
[7] = {.entry = {.count = 1, .reusable = true}}, SHIFT(18),
[9] = {.entry = {.count = 1, .reusable = true}}, SHIFT(17),
[11] = {.entry = {.count = 1, .reusable = true}}, SHIFT(16),
[13] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_morphbase, 2, 0, 0),
[15] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_morphbase_repeat1, 2, 0, 0),
[17] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_morphbase_repeat1, 2, 0, 0), SHIFT_REPEAT(17),
[20] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_morphbase_repeat1, 2, 0, 0), SHIFT_REPEAT(16),
[23] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_morphbase_repeat1, 2, 0, 0), SHIFT_REPEAT(15),
[17] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_morphbase_repeat1, 2, 0, 0), SHIFT_REPEAT(18),
[20] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_morphbase_repeat1, 2, 0, 0), SHIFT_REPEAT(17),
[23] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_morphbase_repeat1, 2, 0, 0), SHIFT_REPEAT(16),
[26] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_def, 1, 0, 0),
[28] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_stmnt, 1, 0, 0),
[30] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_include, 3, 0, 0),
[32] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3, 0, 0),
[34] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_typedef, 5, 0, 0),
[36] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_morphdef, 7, 0, 0),
[38] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26),
[40] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7),
[42] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12),
[44] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(),
[46] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22),
[48] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20),
[50] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19),
[52] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0),
[54] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8),
[56] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23),
[58] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25),
[60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21),
[62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24),
[38] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28),
[40] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11),
[42] = {.entry = {.count = 1, .reusable = true}}, SHIFT(7),
[44] = {.entry = {.count = 1, .reusable = true}}, SHIFT(13),
[46] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(),
[48] = {.entry = {.count = 1, .reusable = true}}, SHIFT(26),
[50] = {.entry = {.count = 1, .reusable = true}}, SHIFT(21),
[52] = {.entry = {.count = 1, .reusable = true}}, SHIFT(20),
[54] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_source_file, 1, 0, 0),
[56] = {.entry = {.count = 1, .reusable = true}}, SHIFT(8),
[58] = {.entry = {.count = 1, .reusable = true}}, SHIFT(22),
[60] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24),
[62] = {.entry = {.count = 1, .reusable = true}}, SHIFT(25),
[64] = {.entry = {.count = 1, .reusable = true}}, SHIFT(9),
[66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(11),
[68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(28),
[66] = {.entry = {.count = 1, .reusable = true}}, SHIFT(12),
[68] = {.entry = {.count = 1, .reusable = true}}, SHIFT(23),
[70] = {.entry = {.count = 1, .reusable = true}}, SHIFT(10),
[72] = {.entry = {.count = 1, .reusable = true}}, SHIFT(29),
[74] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_impl, 3, 0, 0),
[72] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_impl_c_code, 1, 0, 0),
[74] = {.entry = {.count = 1, .reusable = true}}, SHIFT(30),
[76] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_impl, 3, 0, 0),
};
#ifdef __cplusplus

View file

@ -2,9 +2,12 @@
#include <stdio.h>
```
/* das ist ein test
type PosInt (Radix:) = <PosInt Radix BigEndian> ~ [ <Digit Radix> ] ;
*/
/* das ist ein test */
/* type PosInt (Radix:) = <PosInt Radix BigEndian> ~ [ <Digit Radix> ]; */
/* das ist ein test */
morph name : ty = ```
morph name : ladder~type~here =
```
// hello
```;