diff options
Diffstat (limited to 'miniMAL/reader.json')
| -rw-r--r-- | miniMAL/reader.json | 35 |
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"], |
