From 320455465294f170f54cda772142f4de4cb6f602 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Mon, 16 Feb 2015 00:33:30 -0600 Subject: miniMAL: keyword, vector and hash-map support. --- miniMAL/reader.json | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) (limited to 'miniMAL/reader.json') 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"], -- cgit v1.2.3