diff options
-rw-r--r-- | src/grammar.json | 44 | ||||
-rw-r--r-- | src/node-types.json | 42 | ||||
-rw-r--r-- | src/parser.c | 45 | ||||
-rw-r--r-- | test/corpus/document.txt | 12 |
4 files changed, 78 insertions, 65 deletions
diff --git a/src/grammar.json b/src/grammar.json index 8fbe7dc..5132fed 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -215,17 +215,21 @@ "value": "#" }, { - "type": "ALIAS", + "type": "FIELD", + "name": "name", "content": { - "type": "IMMEDIATE_TOKEN", + "type": "ALIAS", "content": { - "type": "PATTERN", - "value": "\\p{XID_Start}[-\\p{XID_Continue}]*", - "flags": "u" - } - }, - "named": true, - "value": "ident" + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "\\p{XID_Start}[-\\p{XID_Continue}]*", + "flags": "u" + } + }, + "named": true, + "value": "ident" + } } ] }, @@ -237,17 +241,21 @@ "value": "." }, { - "type": "ALIAS", + "type": "FIELD", + "name": "name", "content": { - "type": "IMMEDIATE_TOKEN", + "type": "ALIAS", "content": { - "type": "PATTERN", - "value": "\\p{XID_Start}[-\\p{XID_Continue}]*", - "flags": "u" - } - }, - "named": true, - "value": "ident" + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "\\p{XID_Start}[-\\p{XID_Continue}]*", + "flags": "u" + } + }, + "named": true, + "value": "ident" + } } ] }, diff --git a/src/node-types.json b/src/node-types.json index 806fb1f..d255c74 100644 --- a/src/node-types.json +++ b/src/node-types.json @@ -51,16 +51,17 @@ { "type": "class_attr", "named": true, - "fields": {}, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "ident", - "named": true - } - ] + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "ident", + "named": true + } + ] + } } }, { @@ -121,16 +122,17 @@ { "type": "id_attr", "named": true, - "fields": {}, - "children": { - "multiple": false, - "required": true, - "types": [ - { - "type": "ident", - "named": true - } - ] + "fields": { + "name": { + "multiple": false, + "required": true, + "types": [ + { + "type": "ident", + "named": true + } + ] + } } }, { diff --git a/src/parser.c b/src/parser.c index 36ba66a..b86a440 100644 --- a/src/parser.c +++ b/src/parser.c @@ -13,7 +13,7 @@ #define EXTERNAL_TOKEN_COUNT 0 #define FIELD_COUNT 4 #define MAX_ALIAS_SEQUENCE_LENGTH 4 -#define PRODUCTION_ID_COUNT 8 +#define PRODUCTION_ID_COUNT 9 enum ts_symbol_identifiers { anon_sym_SLASH = 1, @@ -226,11 +226,12 @@ static const char * const ts_field_names[] = { static const TSFieldMapSlice ts_field_map_slices[PRODUCTION_ID_COUNT] = { [1] = {.index = 0, .length = 1}, [2] = {.index = 1, .length = 2}, - [3] = {.index = 3, .length = 2}, - [4] = {.index = 5, .length = 2}, - [5] = {.index = 7, .length = 3}, - [6] = {.index = 10, .length = 2}, - [7] = {.index = 12, .length = 3}, + [3] = {.index = 3, .length = 1}, + [4] = {.index = 4, .length = 2}, + [5] = {.index = 6, .length = 2}, + [6] = {.index = 8, .length = 3}, + [7] = {.index = 11, .length = 2}, + [8] = {.index = 13, .length = 3}, }; static const TSFieldMapEntry ts_field_map_entries[] = { @@ -240,19 +241,21 @@ static const TSFieldMapEntry ts_field_map_entries[] = { {field_body, 1}, {field_name, 0}, [3] = + {field_name, 1}, + [4] = {field_body, 2}, {field_name, 1}, - [5] = + [6] = {field_attrs, 1}, {field_body, 2}, - [7] = + [8] = {field_attrs, 1}, {field_body, 2}, {field_name, 0}, - [10] = + [11] = {field_name, 0}, {field_value, 2}, - [12] = + [13] = {field_attrs, 2}, {field_body, 3}, {field_name, 1}, @@ -1311,31 +1314,31 @@ static const TSParseActionEntry ts_parse_actions[] = { [68] = {.entry = {.count = 1, .reusable = false}}, SHIFT(16), [70] = {.entry = {.count = 1, .reusable = false}}, SHIFT(28), [72] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node_body, 4, 0, 0), - [74] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_id_attr, 2, 0, 0), - [76] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_attr, 2, 0, 0), + [74] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_id_attr, 2, 0, 3), + [76] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_class_attr, 2, 0, 3), [78] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node, 2, 0, 2), - [80] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3, 0, 3), + [80] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3, 0, 4), [82] = {.entry = {.count = 1, .reusable = false}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0), [84] = {.entry = {.count = 2, .reusable = true}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0), SHIFT_REPEAT(24), [87] = {.entry = {.count = 2, .reusable = false}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0), SHIFT_REPEAT(16), - [90] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3, 0, 4), + [90] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 3, 0, 5), [92] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node_body, 2, 0, 0), - [94] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node, 3, 0, 5), + [94] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node, 3, 0, 6), [96] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_node_body, 3, 0, 0), [98] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 2, 0, 1), [100] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_text, 1, 0, 0), [102] = {.entry = {.count = 1, .reusable = true}}, SHIFT(24), - [104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr, 3, 0, 6), - [106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 4, 0, 7), - [108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node, 3, 0, 5), - [110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 4, 0, 7), + [104] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_attr, 3, 0, 7), + [106] = {.entry = {.count = 1, .reusable = true}}, REDUCE(sym_comment, 4, 0, 8), + [108] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node, 3, 0, 6), + [110] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 4, 0, 8), [112] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node_body, 4, 0, 0), [114] = {.entry = {.count = 1, .reusable = true}}, REDUCE(aux_sym_text_repeat1, 2, 0, 0), [116] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 2, 0, 1), [118] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node, 2, 0, 2), [120] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node_body, 2, 0, 0), - [122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 3, 0, 3), - [124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 3, 0, 4), + [122] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 3, 0, 4), + [124] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_comment, 3, 0, 5), [126] = {.entry = {.count = 1, .reusable = false}}, REDUCE(sym_node_body, 3, 0, 0), [128] = {.entry = {.count = 1, .reusable = true}}, ACCEPT_INPUT(), [130] = {.entry = {.count = 1, .reusable = true}}, SHIFT(19), diff --git a/test/corpus/document.txt b/test/corpus/document.txt index 5a8f304..61f7699 100644 --- a/test/corpus/document.txt +++ b/test/corpus/document.txt @@ -105,14 +105,14 @@ html lang="en" { name: (ident) attrs: (attr_list (id_attr - (ident))) + name: (ident))) body: (node_body (text))) (node name: (ident) attrs: (attr_list (class_attr - (ident))) + name: (ident))) body: (node_body (text))) (comment @@ -130,11 +130,11 @@ html lang="en" { name: (ident) attrs: (attr_list (id_attr - (ident)) + name: (ident)) (class_attr - (ident)) + name: (ident)) (class_attr - (ident)) + name: (ident)) (attr name: (ident) value: (string)) @@ -151,6 +151,6 @@ html lang="en" { name: (ident) attrs: (attr_list (id_attr - (ident))) + name: (ident))) body: (node_body (text))))))))))) |