diff options
author | 6cdh <cd6cdh@gmail.com> | 2023-08-02 13:34:17 +0800 |
---|---|---|
committer | 6cdh <cd6cdh@gmail.com> | 2023-08-02 13:34:17 +0800 |
commit | dbfe8096bc1b54fb4f2abe26f27b89e73be5a013 (patch) | |
tree | d41c21489474d65bb4d87373b6fddbbaca76ba1d | |
parent | d181a9738177a3b21b9f0e7bbb33b1a562f73ba6 (diff) |
feat: optimize symbol/number parse and reduce library size
-rw-r--r-- | grammar.js | 38 | ||||
-rw-r--r-- | src/grammar.json | 12446 | ||||
-rw-r--r-- | src/node-types.json | 18 | ||||
-rw-r--r-- | src/parser.c | 13634 |
4 files changed, 12829 insertions, 13307 deletions
diff --git a/grammar.js b/grammar.js index 21839a109..e46a9d37a 100644 --- a/grammar.js +++ b/grammar.js @@ -1,10 +1,6 @@ const PREC = { first: $ => prec(100, $), last: $ => prec(-1, $), - number: $ => prec(2, $), - symbol: $ => prec(1, $), - left: prec.left, - right: prec.right, }; const LEAF = { @@ -164,17 +160,16 @@ module.exports = grammar({ // string }}} number: _ => - PREC.number( - token( - choice( - extflonum(2), - extflonum(8), - extflonum(10), - extflonum(16), - number_base(2), - number_base(8), - number_base(10), - number_base(16)))), + token( + choice( + extflonum(2), + extflonum(8), + extflonum(10), + extflonum(16), + number_base(2), + number_base(8), + number_base(10), + number_base(16))), decimal: _ => /[0-9]+/, @@ -191,13 +186,12 @@ module.exports = grammar({ /./))), symbol: _ => - PREC.symbol( - token( - choice( - /#[cC][iIsS]/, // read-case-sensitive parameter - seq( - LEAF.symbol_start, - repeat(LEAF.symbol_remain))))), + token( + choice( + /#[cC][iIsS]/, // read-case-sensitive parameter + seq( + LEAF.symbol_start, + repeat(LEAF.symbol_remain)))), keyword: _ => token( diff --git a/src/grammar.json b/src/grammar.json index fa6443736..741fd1804 100644 --- a/src/grammar.json +++ b/src/grammar.json @@ -525,6555 +525,6551 @@ } }, "number": { - "type": "PREC", - "value": 2, + "type": "TOKEN", "content": { - "type": "TOKEN", - "content": { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "#[bB]" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "PATTERN", - "value": "[+-]" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[01]" - } - }, - { - "type": "REPEAT", - "content": { - "type": "STRING", - "value": "#" - } + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "#[bB]" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[+-]" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[01]" } - ] - }, - { - "type": "CHOICE", - "members": [ - { + }, + { + "type": "REPEAT", + "content": { "type": "STRING", - "value": "." - }, - { - "type": "BLANK" + "value": "#" } - ] - }, - { - "type": "REPEAT", - "content": { + } + ] + }, + { + "type": "CHOICE", + "members": [ + { "type": "STRING", - "value": "#" + "value": "." + }, + { + "type": "BLANK" } + ] + }, + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": "#" } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[01]" - } - }, - { - "type": "BLANK" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[01]" } - ] - }, - { - "type": "STRING", - "value": "." - }, - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[01]" - } - }, - { - "type": "REPEAT", - "content": { - "type": "STRING", - "value": "#" - } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[01]" } - ] - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[01]" - } - }, - { - "type": "REPEAT", - "content": { - "type": "STRING", - "value": "#" - } + }, + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": "#" } - ] - }, - { - "type": "STRING", - "value": "/" - }, - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[01]" - } - }, - { - "type": "REPEAT", - "content": { - "type": "STRING", - "value": "#" - } + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[01]" } - ] - } - ] - } - ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[tT]" - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "PATTERN", - "value": "[+-]" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[01]" - } + }, + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": "#" } - ] - } - ] - }, - { - "type": "BLANK" - } - ] - } - ] - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[+-]" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "PATTERN", - "value": "[iI][nN][fF]\\.[0fFtT]" - }, - { - "type": "PATTERN", - "value": "[nN][aA][nN]\\.[0fFtT]" - } - ] - } - ] - } - ] - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "#[oO]" - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "PATTERN", - "value": "[+-]" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { + } + ] + }, + { + "type": "STRING", + "value": "/" + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[01]" + } + }, + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": "#" + } + } + ] + } + ] + } + ] + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "[tT]" + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { "type": "PATTERN", - "value": "[0-7]" - } - }, - { - "type": "REPEAT", - "content": { - "type": "STRING", - "value": "#" + "value": "[+-]" + }, + { + "type": "BLANK" } + ] + }, + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[01]" + } + } + ] + } + ] + }, + { + "type": "BLANK" + } + ] + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "[+-]" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[iI][nN][fF]\\.[0fFtT]" + }, + { + "type": "PATTERN", + "value": "[nN][aA][nN]\\.[0fFtT]" + } + ] + } + ] + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "PATTERN", + "value": "#[oO]" + }, + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "PATTERN", + "value": "[+-]" + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-7]" } - ] - }, - { - "type": "CHOICE", - "members": [ - { + }, + { + "type": "REPEAT", + "content": { "type": "STRING", - "value": "." - }, - { - "type": "BLANK" + "value": "#" } - ] - }, - { - "type": "REPEAT", - "content": { + } + ] + }, + { + "type": "CHOICE", + "members": [ + { "type": "STRING", - "value": "#" + "value": "." + }, + { + "type": "BLANK" } + ] + }, + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": "#" } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[0-7]" - } - }, - { - "type": "BLANK" + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "CHOICE", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-7]" } - ] - }, - { - "type": "STRING", - "value": "." - }, - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[0-7]" - } - }, - { - "type": "REPEAT", - "content": { - "type": "STRING", - "value": "#" - } + }, + { + "type": "BLANK" + } + ] + }, + { + "type": "STRING", + "value": "." + }, + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-7]" } - ] - } - ] - }, - { - "type": "SEQ", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[0-7]" - } - }, - { - "type": "REPEAT", - "content": { - "type": "STRING", - "value": "#" - } + }, + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": "#" } - ] - }, - { - "type": "STRING", - "value": "/" - }, - { - "type": "SEQ", - "members": [ - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[0-7]" - } - }, - { - "type": "REPEAT", - "content": { - "type": "STRING", - "value": "#" - } + } + ] + } + ] + }, + { + "type": "SEQ", + "members": [ + { + "type": "SEQ", + "members": [ + { + "type": "REPEAT1", + "content": { + "type": "PATTERN", + "value": "[0-7]" } - ] - } - ] - } - ] - }, - { - "type": "CHOICE", - "members": [ - { - "type": "SEQ", - "members": [ - { - "type": "PATTERN", - "value": "[tT]" - }, - { - "type": "SEQ", - "members": [ - { - "type": "CHOICE", - "members": [ - { - "type": "PATTERN", - "value": "[+-]" - }, - { - "type": "BLANK" - } - ] - }, - { - "type": "REPEAT1", - "content": { - "type": "PATTERN", - "value": "[0-7]" - } + }, + { + "type": "REPEAT", + "content": { + "type": "STRING", + "value": "#" |