aboutsummaryrefslogtreecommitdiff
path: root/miniMAL/reader.json
diff options
context:
space:
mode:
Diffstat (limited to 'miniMAL/reader.json')
-rw-r--r--miniMAL/reader.json35
1 files changed, 24 insertions, 11 deletions
diff --git a/miniMAL/reader.json b/miniMAL/reader.json
index 428d12d..e9ea6e1 100644
--- a/miniMAL/reader.json
+++ b/miniMAL/reader.json
@@ -42,31 +42,33 @@
["slice", "token", 1, ["-", ["count", "token"], 1]],
["`", "replace"], ["RegExp", ["`", "\\\\\""], ["`", "g"]], ["`", "\""]],
["`", "replace"], ["RegExp", ["`", "\\\\n"], ["`", "g"]], ["`", "\n"]],
+ ["if", ["=", ["`", ":"], ["get", "token", 0]],
+ ["keyword", ["slice", "token", 1]],
["if", ["=", ["`", "nil"], "token"],
null,
["if", ["=", ["`", "true"], "token"],
true,
["if", ["=", ["`", "false"], "token"],
false,
- ["symbol", "token"]]]]]]]]],
+ ["symbol", "token"]]]]]]]]]],
-["def", "read-list-entries", ["fn", ["rdr"],
+["def", "read-list-entries", ["fn", ["rdr", "start", "end"],
["let", ["tok", ["rdr-peek", "rdr"]],
["if", "tok",
- ["if", ["=", ["`", ")"], "tok"],
+ ["if", ["=", "end", "tok"],
["`", []],
["cons", ["read-form", "rdr"],
- ["read-list-entries", "rdr"]]],
- ["throw", ["`", "expected ')'"]]]]]],
+ ["read-list-entries", "rdr", "start", "end"]]],
+ ["throw", ["str", ["`", "expected "], "end"]]]]]],
-["def", "read-list", ["fn", ["rdr"],
+["def", "read-list", ["fn", ["rdr", "start", "end"],
["let", ["token", ["rdr-next", "rdr"]],
- ["if", ["=", ["`", "("], "token"],
- ["let", ["lst", ["read-list-entries", "rdr"]],
+ ["if", ["=", "start", "token"],
+ ["let", ["lst", ["read-list-entries", "rdr", "start", "end"]],
["do",
["rdr-next", "rdr"],
"lst"]],
- ["throw", ["`", "expected '('"]]]]]],
+ ["throw", ["str", ["`", "expected "], "start"]]]]]],
["def", "read-form", ["fn", ["rdr"],
["let", ["token", ["rdr-peek", "rdr"]],
@@ -90,8 +92,19 @@
["if", ["=", ["`", ")"], "token"],
["throw", ["`", "unexpected ')'"]],
["if", ["=", ["`", "("], "token"],
- ["read-list", "rdr"],
- ["read-atom", "rdr"]]]]]]]]]],
+ ["read-list", "rdr", ["`", "("], ["`", ")"]],
+
+ ["if", ["=", ["`", "]"], "token"],
+ ["throw", ["`", "unexpected ']'"]],
+ ["if", ["=", ["`", "["], "token"],
+ ["vectorl", ["read-list", "rdr", ["`", "["], ["`", "]"]]],
+
+ ["if", ["=", ["`", "}"], "token"],
+ ["throw", ["`", "unexpected '}'"]],
+ ["if", ["=", ["`", "{"], "token"],
+ ["apply", "hash-map", ["read-list", "rdr", ["`", "{"], ["`", "}"]]],
+
+ ["read-atom", "rdr"]]]]]]]]]]]]]],
["def", "read-str", ["fn", ["strn"],
["let", ["tokens", ["tokenize", "strn"],