diff options
author | Thomas Voss <mail@thomasvoss.com> | 2024-09-14 21:52:11 +0200 |
---|---|---|
committer | Thomas Voss <mail@thomasvoss.com> | 2024-09-14 21:52:11 +0200 |
commit | 642d5264e0d7b3d3870d13c2cc4a04987ee65ab6 (patch) | |
tree | 53268bb7f35994d911e7c95e6f46cb5d7788b6fd /src/grammar.json | |
parent | 291cb06fc2d578ac19c01ebda9b71f94733af0e8 (diff) |
Completely overhaul the grammar
Diffstat (limited to 'src/grammar.json')
-rw-r--r-- | src/grammar.json | 339 |
1 files changed, 133 insertions, 206 deletions
diff --git a/src/grammar.json b/src/grammar.json index ad8dfcb..060f61c 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -1,22 +1,26 @@ { "name": "gsp", "rules": { - "source_file": { + "document": { "type": "REPEAT", "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "comment" - }, - { - "type": "SYMBOL", - "name": "node" - } - ] + "type": "SYMBOL", + "name": "_toplevel" } }, + "_toplevel": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "comment" + }, + { + "type": "SYMBOL", + "name": "node" + } + ] + }, "comment": { "type": "SEQ", "members": [ @@ -25,23 +29,24 @@ "value": "/" }, { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "node_name" - }, - { - "type": "BLANK" - } - ] + "type": "SYMBOL", + "name": "node" + } + ] + }, + "node": { + "type": "SEQ", + "members": [ + { + "type": "SYMBOL", + "name": "node_name" }, { "type": "CHOICE", "members": [ { "type": "SYMBOL", - "name": "attribute_list" + "name": "attrs" }, { "type": "BLANK" @@ -49,6 +54,20 @@ ] }, { + "type": "SYMBOL", + "name": "node_body" + } + ] + }, + "node_name": { + "type": "PATTERN", + "value": "\\p{XID_Start}[-\\p{XID_Continue}]*", + "flags": "u" + }, + "node_body": { + "type": "SEQ", + "members": [ + { "type": "STRING", "value": "{" }, @@ -56,11 +75,41 @@ "type": "CHOICE", "members": [ { - "type": "SYMBOL", - "name": "node_body" + "type": "REPEAT", + "content": { + "type": "SYMBOL", + "name": "_toplevel" + } }, { - "type": "BLANK" + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "STRING", + "value": "-" + }, + { + "type": "STRING", + "value": "=" + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "text" + }, + { + "type": "BLANK" + } + ] + } + ] } ] }, @@ -70,123 +119,86 @@ } ] }, - "node": { + "attrs": { + "type": "REPEAT1", + "content": { + "type": "CHOICE", + "members": [ + { + "type": "SYMBOL", + "name": "attr" + }, + { + "type": "SYMBOL", + "name": "id_attr" + }, + { + "type": "SYMBOL", + "name": "class_attr" + } + ] + } + }, + "attr": { "type": "SEQ", "members": [ { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": ">" - }, - { - "type": "BLANK" - } - ] + "type": "PATTERN", + "value": "\\p{XID_Start}[-\\p{XID_Continue}]*", + "flags": "u" }, { - "type": "SYMBOL", - "name": "node_name" + "type": "STRING", + "value": "=" }, { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "attribute_list" - }, - { - "type": "BLANK" - } - ] - }, + "type": "PATTERN", + "value": "\"(\\\\[\"\\\\]|[^\"\\\\])+\"" + } + ] + }, + "id_attr": { + "type": "SEQ", + "members": [ { "type": "STRING", - "value": "{" + "value": "#" }, { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "node_body" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "STRING", - "value": "}" + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "\\p{XID_Start}[-\\p{XID_Continue}]*", + "flags": "u" + } } ] }, - "node_body": { - "type": "CHOICE", + "class_attr": { + "type": "SEQ", "members": [ { - "type": "REPEAT1", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "comment" - }, - { - "type": "SYMBOL", - "name": "node" - } - ] - } + "type": "STRING", + "value": "." }, { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "STRING", - "value": "-" - }, - { - "type": "STRING", - "value": "=" - } - ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "text" - }, - { - "type": "BLANK" - } - ] - } - ] + "type": "IMMEDIATE_TOKEN", + "content": { + "type": "PATTERN", + "value": "\\p{XID_Start}[-\\p{XID_Continue}]*", + "flags": "u" + } } ] }, - "node_name": { - "type": "PATTERN", - "value": "[a-zA-Z:_\\u{000C0}-\\u{000D6}\\u{000D8}-\\u{000F6}\\u{000F8}-\\u{002FF}\\u{00370}-\\u{0037D}\\u{0037F}-\\u{01FFF}\\u{0200C}-\\u{0200D}\\u{02070}-\\u{0218F}\\u{02C00}-\\u{02FEF}\\u{03001}-\\u{0D7FF}\\u{0F900}-\\u{0FDCF}\\u{0FDF0}-\\u{0FFFD}\\u{10000}-\\u{EFFFF}][a-zA-Z0-9:_\\-.ยท\\u{00300}-\\u{0036F}\\u{0203F}-\\u{02040}\\u{000C0}-\\u{000D6}\\u{000D8}-\\u{000F6}\\u{000F8}-\\u{002FF}\\u{00370}-\\u{0037D}\\u{0037F}-\\u{01FFF}\\u{0200C}-\\u{0200D}\\u{02070}-\\u{0218F}\\u{02C00}-\\u{02FEF}\\u{03001}-\\u{0D7FF}\\u{0F900}-\\u{0FDCF}\\u{0FDF0}-\\u{0FFFD}\\u{10000}-\\u{EFFFF}]*", - "flags": "u" - }, "text": { "type": "REPEAT1", "content": { "type": "CHOICE", "members": [ { - "type": "SYMBOL", - "name": "literal_text" + "type": "PATTERN", + "value": "(\\\\[@}\\\\]|[^@}\\\\])+" }, { "type": "SEQ", @@ -196,105 +208,20 @@ "value": "@" }, { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "comment" - }, - { - "type": "SYMBOL", - "name": "node" - } - ] + "type": "SYMBOL", + "name": "_toplevel" } ] } ] } - }, - "literal_text": { - "type": "PATTERN", - "value": "(\\\\[@}\\\\]|[^@}\\\\])+" - }, - "attribute_list": { - "type": "REPEAT1", - "content": { - "type": "SYMBOL", - "name": "attribute" - } - }, - "attribute": { - "type": "CHOICE", - "members": [ - { - "type": "SYMBOL", - "name": "class_shorthand" - }, - { - "type": "SYMBOL", - "name": "id_shorthand" - }, - { - "type": "SEQ", - "members": [ - { - "type": "SYMBOL", - "name": "attribute_name" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "STRING", - "value": "=" - }, - { - "type": "SYMBOL", - "name": "attribute_value" - } - ] - }, - { - "type": "BLANK" - } - ] - } - ] - } - ] - }, - "class_shorthand": { - "type": "PATTERN", - "value": "\\.\\P{White_Space}+", - "flags": "u" - }, - "id_shorthand": { - "type": "PATTERN", - "value": "#\\P{White_Space}+", - "flags": "u" - }, - "attribute_name": { - "type": "PATTERN", - "value": "[a-zA-Z0-9_-]+" - }, - "attribute_value": { - "type": "PATTERN", - "value": "\"(\\\\.|[^\"\\\\])*\"" - }, - "_S": { - "type": "PATTERN", - "value": "\\p{White_Space}+", - "flags": "u" } }, "extras": [ { - "type": "SYMBOL", - "name": "_S" + "type": "PATTERN", + "value": "\\p{Pattern_White_Space}+", + "flags": "u" } ], "conflicts": [], |