Support hash table read syntax

pull/48/head
Wilfred Hughes 2021-08-15 18:52:53 +07:00
parent a4e19e9a9e
commit 0f90ade631
6 changed files with 3882 additions and 3106 deletions

@ -14,7 +14,6 @@ Syntax supported:
Currently unsupported:
* Hash table literals
* Autoload cookies
* Special forms (e.g. `let`, currently treated as symbols)
* Definitions (e.g. `defun`, `defvar`, `defmacro`)

@ -34,6 +34,7 @@ module.exports = grammar({
choice(
$.list,
$.vector,
$.hash_table,
$.bytecode,
$.string_text_properties,
$._atom,
@ -81,6 +82,8 @@ module.exports = grammar({
string_text_properties: ($) => seq("#(", $.string, repeat($._sexp), ")"),
hash_table: ($) => seq("#s(hash-table", repeat($._sexp), ")"),
comment: ($) => COMMENT,
},
});

@ -19,6 +19,10 @@
"type": "SYMBOL",
"name": "vector"
},
{
"type": "SYMBOL",
"name": "hash_table"
},
{
"type": "SYMBOL",
"name": "bytecode"
@ -387,6 +391,26 @@
}
]
},
"hash_table": {
"type": "SEQ",
"members": [
{
"type": "STRING",
"value": "#s(hash-table"
},
{
"type": "REPEAT",
"content": {
"type": "SYMBOL",
"name": "_sexp"
}
},
{
"type": "STRING",
"value": ")"
}
]
},
"comment": {
"type": "TOKEN",
"content": {

@ -23,6 +23,10 @@
"type": "float",
"named": true
},
{
"type": "hash_table",
"named": true
},
{
"type": "integer",
"named": true
@ -67,6 +71,73 @@
"named": true,
"fields": {}
},
{
"type": "hash_table",
"named": true,
"fields": {},
"children": {
"multiple": true,
"required": false,
"types": [
{
"type": "byte_compiled_file_name",
"named": true
},
{
"type": "bytecode",
"named": true
},
{
"type": "char",
"named": true
},
{
"type": "float",
"named": true
},
{
"type": "hash_table",
"named": true
},
{
"type": "integer",
"named": true
},
{
"type": "list",
"named": true
},
{
"type": "quote",
"named": true
},
{
"type": "string",
"named": true
},
{
"type": "string_text_properties",
"named": true
},
{
"type": "symbol",
"named": true
},
{
"type": "unquote",
"named": true
},
{
"type": "unquote_splice",
"named": true
},
{
"type": "vector",
"named": true
}
]
}
},
{
"type": "integer",
"named": true,
@ -100,6 +171,10 @@
"type": "float",
"named": true
},
{
"type": "hash_table",
"named": true
},
{
"type": "integer",
"named": true
@ -163,6 +238,10 @@
"type": "float",
"named": true
},
{
"type": "hash_table",
"named": true
},
{
"type": "integer",
"named": true
@ -226,6 +305,10 @@
"type": "float",
"named": true
},
{
"type": "hash_table",
"named": true
},
{
"type": "integer",
"named": true
@ -289,6 +372,10 @@
"type": "float",
"named": true
},
{
"type": "hash_table",
"named": true
},
{
"type": "integer",
"named": true
@ -357,6 +444,10 @@
"type": "float",
"named": true
},
{
"type": "hash_table",
"named": true
},
{
"type": "integer",
"named": true
@ -420,6 +511,10 @@
"type": "float",
"named": true
},
{
"type": "hash_table",
"named": true
},
{
"type": "integer",
"named": true
@ -483,6 +578,10 @@
"type": "float",
"named": true
},
{
"type": "hash_table",
"named": true
},
{
"type": "integer",
"named": true
@ -538,6 +637,10 @@
"type": "#[",
"named": false
},
{
"type": "#s(hash-table",
"named": false
},
{
"type": "'",
"named": false

File diff suppressed because it is too large Load Diff

@ -0,0 +1,11 @@
================================================================================
Hash table read syntax
================================================================================
#s(hash-table 0)
--------------------------------------------------------------------------------
(source_file
(hash_table
(integer)))