3 ["def", "rdr-new", ["fn", ["tokens"],
4 ["hash-map", ["`", "tokens"], "tokens",
5 ["`", "position"], 0]]],
7 ["def", "rdr-next", ["fn", ["rdr"],
8 ["let", ["pos", ["get", "rdr", ["`", "position"]],
9 "val", ["get", ["get", "rdr", ["`", "tokens"]], "pos"]],
11 ["assoc!", "rdr", ["`", "position"], ["+", 1, "pos"]],
14 ["def", "rdr-peek", ["fn", ["rdr"],
15 ["let", ["pos", ["get", "rdr", ["`", "position"]]],
16 ["get", ["get", "rdr", ["`", "tokens"]], "pos"]]]],
19 ["def", "re-matches", ["fn", ["re", "strn", "acc"],
20 ["let", ["match", [".", "re", ["`", "exec"], "strn"],
21 "g1", ["get", "match", 1]],
22 ["if", ["=", "g1", ["`", ""]],
24 ["re-matches", "re", "strn", ["concat", "acc", "g1"]]]]]],
26 ["def", "tokenize", ["fn", ["strn"],
27 ["let", ["re-str", ["`", "[\\s,]*(~@|[\\[\\]{}()'`~^@]|\"(?:\\\\.|[^\\\\\"])*\"|;.*|[^\\s\\[\\]{}('\"`,;)]*)"],
28 "re", ["RegExp", "re-str", ["`", "g"]]],
29 ["re-matches", "re", "strn", ["`", []]]]]],
31 ["def", "read-atom", ["fn", ["rdr"],
32 ["let", ["token", ["rdr-next", "rdr"]],
33 ["if", [".", "token", ["`", "match"], ["RegExp", ["`", "^-?[0-9]+$"]]],
34 ["parseInt", "token", 10],
35 ["if", ["=", ["`", "\""], ["get", "token", 0]],
36 ["slice", "token", 1, ["-", ["count", "token"], 1]],
37 ["if", ["=", ["`", "nil"], "token"],
39 ["if", ["=", ["`", "true"], "token"],
41 ["if", ["=", ["`", "false"], "token"],
43 ["symbol", "token"]]]]]]]]],
45 ["def", "read-list-entries", ["fn", ["rdr"],
46 ["let", ["tok", ["rdr-peek", "rdr"]],
48 ["if", ["=", ["`", ")"], "tok"],
50 ["cons", ["read-form", "rdr"],
51 ["read-list-entries", "rdr"]]],
52 ["throw", ["`", "expected ')'"]]]]]],
54 ["def", "read-list", ["fn", ["rdr"],
55 ["let", ["token", ["rdr-next", "rdr"]],
56 ["if", ["=", ["`", "("], "token"],
57 ["let", ["lst", ["read-list-entries", "rdr"]],
61 ["throw", ["`", "expected '('"]]]]]],
63 ["def", "read-form", ["fn", ["rdr"],
64 ["let", ["token", ["rdr-peek", "rdr"]],
65 ["if", ["=", ["`", ")"], "token"],
66 ["throw", ["`", "unexpected ')'"]],
67 ["if", ["=", ["`", "("], "token"],
69 ["read-atom", "rdr"]]]]]],
71 ["def", "read-str", ["fn", ["strn"],
72 ["let", ["tokens", ["tokenize", "strn"],
73 "rdr", ["rdr-new", "tokens"]],
74 ["if", ["empty?", "tokens"],
76 ["read-form", "rdr"]]]]],