triple backquotes & type charset
This commit is contained in:
parent
21646a9209
commit
34f5ccafb3
6 changed files with 114 additions and 150 deletions
|
@ -14,14 +14,14 @@ module.exports = grammar({
|
|||
source_file: ($) => $.morphbase,
|
||||
|
||||
morphbase: ($) => seq($.include, repeat($.stmnt)),
|
||||
include: ($) => seq("(", $.ident, ")"),
|
||||
include: ($) => seq("```", /(.*)/, "```"),
|
||||
stmnt: ($) => choice($.comment, $.def),
|
||||
comment: (_) => seq("/*", /(.*)/, "*/"),
|
||||
def: ($) => choice($.typedef, $.morphdef),
|
||||
typedef: ($) => seq("type", $.ident, "=", $.type, ";"),
|
||||
morphdef: ($) => seq("morph", $.ident, ":", $.type, "=", $.impl, ";"),
|
||||
ident: ($) => /([a-zA-Z$][0-9a-zA-Z_\-]*)/,
|
||||
type: ($) => /([a-zA-Z$][0-9a-zA-Z_\-\.]*)/,
|
||||
impl: ($) => seq("'", /(.)/, "'"),
|
||||
type: ($) => /([^=]*)/,
|
||||
impl: ($) => seq("```", /([^\`])/, "```"),
|
||||
},
|
||||
});
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
"type" @keyword
|
||||
"morph" @keyword
|
||||
(type) @type
|
||||
(include) @string
|
||||
(ident) @identifier
|
||||
(def) @keyword
|
||||
(impl) @string
|
||||
|
|
16
src/grammar.json
generated
16
src/grammar.json
generated
|
@ -27,15 +27,15 @@
|
|||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "("
|
||||
"value": "```"
|
||||
},
|
||||
{
|
||||
"type": "SYMBOL",
|
||||
"name": "ident"
|
||||
"type": "PATTERN",
|
||||
"value": "(.*)"
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": ")"
|
||||
"value": "```"
|
||||
}
|
||||
]
|
||||
},
|
||||
|
@ -146,22 +146,22 @@
|
|||
},
|
||||
"type": {
|
||||
"type": "PATTERN",
|
||||
"value": "([a-zA-Z$][0-9a-zA-Z_\\-\\.]*)"
|
||||
"value": "([^=]*)"
|
||||
},
|
||||
"impl": {
|
||||
"type": "SEQ",
|
||||
"members": [
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "'"
|
||||
"value": "```"
|
||||
},
|
||||
{
|
||||
"type": "PATTERN",
|
||||
"value": "(.)"
|
||||
"value": "([^\\`])"
|
||||
},
|
||||
{
|
||||
"type": "STRING",
|
||||
"value": "'"
|
||||
"value": "```"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
28
src/node-types.json
generated
28
src/node-types.json
generated
|
@ -31,17 +31,7 @@
|
|||
{
|
||||
"type": "include",
|
||||
"named": true,
|
||||
"fields": {},
|
||||
"children": {
|
||||
"multiple": false,
|
||||
"required": true,
|
||||
"types": [
|
||||
{
|
||||
"type": "ident",
|
||||
"named": true
|
||||
}
|
||||
]
|
||||
}
|
||||
"fields": {}
|
||||
},
|
||||
{
|
||||
"type": "morphbase",
|
||||
|
@ -139,18 +129,6 @@
|
|||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"type": "'",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "(",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": ")",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "*/",
|
||||
"named": false
|
||||
|
@ -171,6 +149,10 @@
|
|||
"type": "=",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "```",
|
||||
"named": false
|
||||
},
|
||||
{
|
||||
"type": "ident",
|
||||
"named": true
|
||||
|
|
195
src/parser.c
generated
195
src/parser.c
generated
|
@ -9,9 +9,9 @@
|
|||
#define LANGUAGE_VERSION 15
|
||||
#define STATE_COUNT 30
|
||||
#define LARGE_STATE_COUNT 2
|
||||
#define SYMBOL_COUNT 25
|
||||
#define SYMBOL_COUNT 23
|
||||
#define ALIAS_COUNT 0
|
||||
#define TOKEN_COUNT 15
|
||||
#define TOKEN_COUNT 13
|
||||
#define EXTERNAL_TOKEN_COUNT 0
|
||||
#define FIELD_COUNT 0
|
||||
#define MAX_ALIAS_SEQUENCE_LENGTH 7
|
||||
|
@ -20,38 +20,35 @@
|
|||
#define SUPERTYPE_COUNT 0
|
||||
|
||||
enum ts_symbol_identifiers {
|
||||
anon_sym_LPAREN = 1,
|
||||
anon_sym_RPAREN = 2,
|
||||
anon_sym_BQUOTE_BQUOTE_BQUOTE = 1,
|
||||
aux_sym_include_token1 = 2,
|
||||
anon_sym_SLASH_STAR = 3,
|
||||
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,
|
||||
anon_sym_SQUOTE = 13,
|
||||
aux_sym_impl_token1 = 14,
|
||||
sym_source_file = 15,
|
||||
sym_morphbase = 16,
|
||||
sym_include = 17,
|
||||
sym_stmnt = 18,
|
||||
sym_comment = 19,
|
||||
sym_def = 20,
|
||||
sym_typedef = 21,
|
||||
sym_morphdef = 22,
|
||||
sym_impl = 23,
|
||||
aux_sym_morphbase_repeat1 = 24,
|
||||
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,
|
||||
sym_source_file = 13,
|
||||
sym_morphbase = 14,
|
||||
sym_include = 15,
|
||||
sym_stmnt = 16,
|
||||
sym_comment = 17,
|
||||
sym_def = 18,
|
||||
sym_typedef = 19,
|
||||
sym_morphdef = 20,
|
||||
sym_impl = 21,
|
||||
aux_sym_morphbase_repeat1 = 22,
|
||||
};
|
||||
|
||||
static const char * const ts_symbol_names[] = {
|
||||
[ts_builtin_sym_end] = "end",
|
||||
[anon_sym_LPAREN] = "(",
|
||||
[anon_sym_RPAREN] = ")",
|
||||
[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] = "=",
|
||||
|
@ -60,7 +57,6 @@ static const char * const ts_symbol_names[] = {
|
|||
[anon_sym_COLON] = ":",
|
||||
[sym_ident] = "ident",
|
||||
[sym_type] = "type",
|
||||
[anon_sym_SQUOTE] = "'",
|
||||
[aux_sym_impl_token1] = "impl_token1",
|
||||
[sym_source_file] = "source_file",
|
||||
[sym_morphbase] = "morphbase",
|
||||
|
@ -76,10 +72,9 @@ static const char * const ts_symbol_names[] = {
|
|||
|
||||
static const TSSymbol ts_symbol_map[] = {
|
||||
[ts_builtin_sym_end] = ts_builtin_sym_end,
|
||||
[anon_sym_LPAREN] = anon_sym_LPAREN,
|
||||
[anon_sym_RPAREN] = anon_sym_RPAREN,
|
||||
[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,
|
||||
|
@ -88,7 +83,6 @@ static const TSSymbol ts_symbol_map[] = {
|
|||
[anon_sym_COLON] = anon_sym_COLON,
|
||||
[sym_ident] = sym_ident,
|
||||
[sym_type] = sym_type,
|
||||
[anon_sym_SQUOTE] = anon_sym_SQUOTE,
|
||||
[aux_sym_impl_token1] = aux_sym_impl_token1,
|
||||
[sym_source_file] = sym_source_file,
|
||||
[sym_morphbase] = sym_morphbase,
|
||||
|
@ -107,22 +101,18 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
|
|||
.visible = false,
|
||||
.named = true,
|
||||
},
|
||||
[anon_sym_LPAREN] = {
|
||||
[anon_sym_BQUOTE_BQUOTE_BQUOTE] = {
|
||||
.visible = true,
|
||||
.named = false,
|
||||
},
|
||||
[anon_sym_RPAREN] = {
|
||||
.visible = true,
|
||||
[aux_sym_include_token1] = {
|
||||
.visible = false,
|
||||
.named = false,
|
||||
},
|
||||
[anon_sym_SLASH_STAR] = {
|
||||
.visible = true,
|
||||
.named = false,
|
||||
},
|
||||
[aux_sym_comment_token1] = {
|
||||
.visible = false,
|
||||
.named = false,
|
||||
},
|
||||
[anon_sym_STAR_SLASH] = {
|
||||
.visible = true,
|
||||
.named = false,
|
||||
|
@ -155,10 +145,6 @@ static const TSSymbolMetadata ts_symbol_metadata[] = {
|
|||
.visible = true,
|
||||
.named = true,
|
||||
},
|
||||
[anon_sym_SQUOTE] = {
|
||||
.visible = true,
|
||||
.named = false,
|
||||
},
|
||||
[aux_sym_impl_token1] = {
|
||||
.visible = false,
|
||||
.named = false,
|
||||
|
@ -251,93 +237,87 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
|
|||
eof = lexer->eof(lexer);
|
||||
switch (state) {
|
||||
case 0:
|
||||
if (eof) ADVANCE(13);
|
||||
if (eof) ADVANCE(14);
|
||||
ADVANCE_MAP(
|
||||
'\'', 27,
|
||||
'(', 14,
|
||||
')', 15,
|
||||
'*', 3,
|
||||
'/', 2,
|
||||
'*', 2,
|
||||
'/', 1,
|
||||
':', 24,
|
||||
';', 22,
|
||||
'=', 21,
|
||||
'm', 6,
|
||||
't', 10,
|
||||
'`', 4,
|
||||
'm', 7,
|
||||
't', 11,
|
||||
);
|
||||
if (('\t' <= lookahead && lookahead <= '\r') ||
|
||||
lookahead == ' ') SKIP(0);
|
||||
END_STATE();
|
||||
case 1:
|
||||
if (lookahead == '\n') SKIP(1);
|
||||
if (('\t' <= lookahead && lookahead <= '\r') ||
|
||||
lookahead == ' ') ADVANCE(29);
|
||||
if (lookahead != 0) ADVANCE(28);
|
||||
if (lookahead == '*') ADVANCE(18);
|
||||
END_STATE();
|
||||
case 2:
|
||||
if (lookahead == '*') ADVANCE(16);
|
||||
END_STATE();
|
||||
case 3:
|
||||
if (lookahead == '/') ADVANCE(19);
|
||||
END_STATE();
|
||||
case 3:
|
||||
if (lookahead == '`') ADVANCE(15);
|
||||
END_STATE();
|
||||
case 4:
|
||||
if (lookahead == 'e') ADVANCE(20);
|
||||
if (lookahead == '`') ADVANCE(3);
|
||||
END_STATE();
|
||||
case 5:
|
||||
if (lookahead == 'h') ADVANCE(23);
|
||||
if (lookahead == 'e') ADVANCE(20);
|
||||
END_STATE();
|
||||
case 6:
|
||||
if (lookahead == 'o') ADVANCE(9);
|
||||
if (lookahead == 'h') ADVANCE(23);
|
||||
END_STATE();
|
||||
case 7:
|
||||
if (lookahead == 'p') ADVANCE(4);
|
||||
if (lookahead == 'o') ADVANCE(10);
|
||||
END_STATE();
|
||||
case 8:
|
||||
if (lookahead == 'p') ADVANCE(5);
|
||||
END_STATE();
|
||||
case 9:
|
||||
if (lookahead == 'r') ADVANCE(8);
|
||||
if (lookahead == 'p') ADVANCE(6);
|
||||
END_STATE();
|
||||
case 10:
|
||||
if (lookahead == 'y') ADVANCE(7);
|
||||
if (lookahead == 'r') ADVANCE(9);
|
||||
END_STATE();
|
||||
case 11:
|
||||
if (('\t' <= lookahead && lookahead <= '\r') ||
|
||||
lookahead == ' ') SKIP(11);
|
||||
if (lookahead == '$' ||
|
||||
('A' <= lookahead && lookahead <= 'Z') ||
|
||||
('a' <= lookahead && lookahead <= 'z')) ADVANCE(25);
|
||||
if (lookahead == 'y') ADVANCE(8);
|
||||
END_STATE();
|
||||
case 12:
|
||||
if (('\t' <= lookahead && lookahead <= '\r') ||
|
||||
lookahead == ' ') SKIP(12);
|
||||
if (lookahead == '$' ||
|
||||
('A' <= lookahead && lookahead <= 'Z') ||
|
||||
('a' <= lookahead && lookahead <= 'z')) ADVANCE(26);
|
||||
('a' <= lookahead && lookahead <= 'z')) ADVANCE(25);
|
||||
END_STATE();
|
||||
case 13:
|
||||
ACCEPT_TOKEN(ts_builtin_sym_end);
|
||||
if (('\t' <= lookahead && lookahead <= '\r') ||
|
||||
lookahead == ' ') ADVANCE(29);
|
||||
if (lookahead != 0 &&
|
||||
lookahead != '`') ADVANCE(28);
|
||||
END_STATE();
|
||||
case 14:
|
||||
ACCEPT_TOKEN(anon_sym_LPAREN);
|
||||
ACCEPT_TOKEN(ts_builtin_sym_end);
|
||||
END_STATE();
|
||||
case 15:
|
||||
ACCEPT_TOKEN(anon_sym_RPAREN);
|
||||
ACCEPT_TOKEN(anon_sym_BQUOTE_BQUOTE_BQUOTE);
|
||||
END_STATE();
|
||||
case 16:
|
||||
ACCEPT_TOKEN(anon_sym_SLASH_STAR);
|
||||
END_STATE();
|
||||
case 17:
|
||||
ACCEPT_TOKEN(aux_sym_comment_token1);
|
||||
ACCEPT_TOKEN(aux_sym_include_token1);
|
||||
if (lookahead == '\t' ||
|
||||
(0x0b <= lookahead && lookahead <= '\r') ||
|
||||
lookahead == ' ') ADVANCE(17);
|
||||
lookahead == ' ') ADVANCE(16);
|
||||
if (lookahead != 0 &&
|
||||
(lookahead < '\t' || '\r' < lookahead)) ADVANCE(18);
|
||||
(lookahead < '\t' || '\r' < lookahead)) ADVANCE(17);
|
||||
END_STATE();
|
||||
case 17:
|
||||
ACCEPT_TOKEN(aux_sym_include_token1);
|
||||
if (lookahead != 0 &&
|
||||
lookahead != '\n') ADVANCE(17);
|
||||
END_STATE();
|
||||
case 18:
|
||||
ACCEPT_TOKEN(aux_sym_comment_token1);
|
||||
if (lookahead != 0 &&
|
||||
lookahead != '\n') ADVANCE(18);
|
||||
ACCEPT_TOKEN(anon_sym_SLASH_STAR);
|
||||
END_STATE();
|
||||
case 19:
|
||||
ACCEPT_TOKEN(anon_sym_STAR_SLASH);
|
||||
|
@ -367,26 +347,25 @@ static bool ts_lex(TSLexer *lexer, TSStateId state) {
|
|||
END_STATE();
|
||||
case 26:
|
||||
ACCEPT_TOKEN(sym_type);
|
||||
if (lookahead == '-' ||
|
||||
lookahead == '.' ||
|
||||
('0' <= lookahead && lookahead <= '9') ||
|
||||
('A' <= lookahead && lookahead <= 'Z') ||
|
||||
lookahead == '_' ||
|
||||
('a' <= lookahead && lookahead <= 'z')) ADVANCE(26);
|
||||
if (('\t' <= lookahead && lookahead <= '\r') ||
|
||||
lookahead == ' ') ADVANCE(26);
|
||||
if (lookahead != 0 &&
|
||||
lookahead != '=') ADVANCE(27);
|
||||
END_STATE();
|
||||
case 27:
|
||||
ACCEPT_TOKEN(anon_sym_SQUOTE);
|
||||
ACCEPT_TOKEN(sym_type);
|
||||
if (lookahead != 0 &&
|
||||
lookahead != '=') ADVANCE(27);
|
||||
END_STATE();
|
||||
case 28:
|
||||
ACCEPT_TOKEN(aux_sym_impl_token1);
|
||||
END_STATE();
|
||||
case 29:
|
||||
ACCEPT_TOKEN(aux_sym_impl_token1);
|
||||
if (lookahead == '\t' ||
|
||||
(0x0b <= lookahead && lookahead <= '\r') ||
|
||||
if (('\t' <= lookahead && lookahead <= '\r') ||
|
||||
lookahead == ' ') ADVANCE(29);
|
||||
if (lookahead != 0 &&
|
||||
(lookahead < '\t' || '\r' < lookahead)) ADVANCE(28);
|
||||
lookahead != '`') ADVANCE(28);
|
||||
END_STATE();
|
||||
default:
|
||||
return false;
|
||||
|
@ -407,20 +386,20 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = {
|
|||
[10] = {.lex_state = 0},
|
||||
[11] = {.lex_state = 0},
|
||||
[12] = {.lex_state = 0},
|
||||
[13] = {.lex_state = 11},
|
||||
[13] = {.lex_state = 16},
|
||||
[14] = {.lex_state = 0},
|
||||
[15] = {.lex_state = 11},
|
||||
[16] = {.lex_state = 11},
|
||||
[17] = {.lex_state = 17},
|
||||
[15] = {.lex_state = 12},
|
||||
[16] = {.lex_state = 12},
|
||||
[17] = {.lex_state = 16},
|
||||
[18] = {.lex_state = 0},
|
||||
[19] = {.lex_state = 0},
|
||||
[20] = {.lex_state = 0},
|
||||
[21] = {.lex_state = 12},
|
||||
[21] = {.lex_state = 26},
|
||||
[22] = {.lex_state = 0},
|
||||
[23] = {.lex_state = 12},
|
||||
[23] = {.lex_state = 26},
|
||||
[24] = {.lex_state = 0},
|
||||
[25] = {.lex_state = 0},
|
||||
[26] = {.lex_state = 1},
|
||||
[26] = {.lex_state = 13},
|
||||
[27] = {.lex_state = 0},
|
||||
[28] = {.lex_state = 0},
|
||||
[29] = {.lex_state = 0},
|
||||
|
@ -429,8 +408,7 @@ static const TSLexerMode ts_lex_modes[STATE_COUNT] = {
|
|||
static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
|
||||
[STATE(0)] = {
|
||||
[ts_builtin_sym_end] = ACTIONS(1),
|
||||
[anon_sym_LPAREN] = ACTIONS(1),
|
||||
[anon_sym_RPAREN] = ACTIONS(1),
|
||||
[anon_sym_BQUOTE_BQUOTE_BQUOTE] = ACTIONS(1),
|
||||
[anon_sym_SLASH_STAR] = ACTIONS(1),
|
||||
[anon_sym_STAR_SLASH] = ACTIONS(1),
|
||||
[anon_sym_type] = ACTIONS(1),
|
||||
|
@ -438,13 +416,12 @@ static const uint16_t ts_parse_table[LARGE_STATE_COUNT][SYMBOL_COUNT] = {
|
|||
[anon_sym_SEMI] = ACTIONS(1),
|
||||
[anon_sym_morph] = ACTIONS(1),
|
||||
[anon_sym_COLON] = ACTIONS(1),
|
||||
[anon_sym_SQUOTE] = ACTIONS(1),
|
||||
},
|
||||
[STATE(1)] = {
|
||||
[sym_source_file] = STATE(14),
|
||||
[sym_morphbase] = STATE(18),
|
||||
[sym_include] = STATE(2),
|
||||
[anon_sym_LPAREN] = ACTIONS(3),
|
||||
[anon_sym_BQUOTE_BQUOTE_BQUOTE] = ACTIONS(3),
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -541,15 +518,15 @@ static const uint16_t ts_small_parse_table[] = {
|
|||
anon_sym_morph,
|
||||
[117] = 2,
|
||||
ACTIONS(38), 1,
|
||||
anon_sym_SQUOTE,
|
||||
anon_sym_BQUOTE_BQUOTE_BQUOTE,
|
||||
STATE(27), 1,
|
||||
sym_impl,
|
||||
[124] = 1,
|
||||
ACTIONS(40), 1,
|
||||
anon_sym_RPAREN,
|
||||
anon_sym_BQUOTE_BQUOTE_BQUOTE,
|
||||
[128] = 1,
|
||||
ACTIONS(42), 1,
|
||||
sym_ident,
|
||||
aux_sym_include_token1,
|
||||
[132] = 1,
|
||||
ACTIONS(44), 1,
|
||||
ts_builtin_sym_end,
|
||||
|
@ -561,7 +538,7 @@ static const uint16_t ts_small_parse_table[] = {
|
|||
sym_ident,
|
||||
[144] = 1,
|
||||
ACTIONS(50), 1,
|
||||
aux_sym_comment_token1,
|
||||
aux_sym_include_token1,
|
||||
[148] = 1,
|
||||
ACTIONS(52), 1,
|
||||
ts_builtin_sym_end,
|
||||
|
@ -594,7 +571,7 @@ static const uint16_t ts_small_parse_table[] = {
|
|||
anon_sym_SEMI,
|
||||
[188] = 1,
|
||||
ACTIONS(72), 1,
|
||||
anon_sym_SQUOTE,
|
||||
anon_sym_BQUOTE_BQUOTE_BQUOTE,
|
||||
[192] = 1,
|
||||
ACTIONS(74), 1,
|
||||
anon_sym_SEMI,
|
||||
|
|
|
@ -1,5 +1,10 @@
|
|||
(stdio)
|
||||
|
||||
type PosInt : ∀(Radix:ℤ).∀(Endianness:Type);
|
||||
morph name : ty = 'l';
|
||||
```
|
||||
#include <stdio.h>
|
||||
```
|
||||
|
||||
/* das ist ein test */
|
||||
/* type PosInt (Radix:ℤ) = <PosInt Radix BigEndian> ~ [ <Digit Radix> ]; */
|
||||
/* das ist ein test */
|
||||
morph name : ty = ```
|
||||
// hello
|
||||
```;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue