Fix unescaping in matlab, miniMAL and rpython.
[jackhill/mal.git] / miniMAL / reader.json
1 ["do",
2
3 ["def", "rdr-new", ["fn", ["tokens"],
4 ["hash-map", ["`", "tokens"], "tokens",
5 ["`", "position"], 0]]],
6
7 ["def", "rdr-next", ["fn", ["rdr"],
8 ["let", ["pos", ["get", "rdr", ["`", "position"]],
9 "val", ["get", ["get", "rdr", ["`", "tokens"]], "pos"]],
10 ["do",
11 ["assoc!", "rdr", ["`", "position"], ["+", 1, "pos"]],
12 "val"]]]],
13
14 ["def", "rdr-peek", ["fn", ["rdr"],
15 ["let", ["pos", ["get", "rdr", ["`", "position"]]],
16 ["get", ["get", "rdr", ["`", "tokens"]], "pos"]]]],
17
18
19 ["def", "re-matches", ["fn", ["re", "strn", "acc"],
20 ["let", ["match", [".", "re", ["`", "exec"], "strn"],
21 "g1", ["get", "match", 1]],
22 ["if", ["=", "g1", ["`", ""]],
23 "acc",
24 ["re-matches", "re", "strn", ["concat", "acc", "g1"]]]]]],
25
26 ["def", "tokenize", ["fn", ["strn"],
27 ["let", ["re-str", ["`", "[\\s,]*(~@|[\\[\\]{}()'`~^@]|\"(?:\\\\.|[^\\\\\"])*\"|;.*|[^\\s\\[\\]{}('\"`,;)]*)"],
28 "re", ["RegExp", "re-str", ["`", "g"]]],
29 [".",
30 ["re-matches", "re", "strn", ["`", []]],
31 ["`", "filter"],
32 ["fn", ["x"], ["not", ["=", ["get", "x", 0],
33 ["`", ";"]]]]]]]],
34
35 ["def", "read-atom", ["fn", ["rdr"],
36 ["let", ["token", ["rdr-next", "rdr"]],
37 ["if", [".", "token", ["`", "match"], ["RegExp", ["`", "^-?[0-9]+$"]]],
38 ["parseInt", "token", 10],
39 ["if", ["=", ["`", "\""], ["get", "token", 0]],
40 [".",
41 ["slice", "token", 1, ["-", ["count", "token"], 1]],
42 ["`", "replace"], ["RegExp", ["`", "\\\\(.)"], ["`", "g"]],
43 ["fn", ["_", "c"],
44 ["if", ["=", "c", ["`", "n"]],
45 ["`", "\n"],
46 "c"]]],
47 ["if", ["=", ["`", ":"], ["get", "token", 0]],
48 ["keyword", ["slice", "token", 1]],
49 ["if", ["=", ["`", "nil"], "token"],
50 null,
51 ["if", ["=", ["`", "true"], "token"],
52 true,
53 ["if", ["=", ["`", "false"], "token"],
54 false,
55 ["symbol", "token"]]]]]]]]]],
56
57 ["def", "read-list-entries", ["fn", ["rdr", "start", "end"],
58 ["let", ["tok", ["rdr-peek", "rdr"]],
59 ["if", "tok",
60 ["if", ["=", "end", "tok"],
61 ["`", []],
62 ["cons", ["read-form", "rdr"],
63 ["read-list-entries", "rdr", "start", "end"]]],
64 ["throw", ["str", ["`", "expected "], "end"]]]]]],
65
66 ["def", "read-list", ["fn", ["rdr", "start", "end"],
67 ["let", ["token", ["rdr-next", "rdr"]],
68 ["if", ["=", "start", "token"],
69 ["let", ["lst", ["read-list-entries", "rdr", "start", "end"]],
70 ["do",
71 ["rdr-next", "rdr"],
72 "lst"]],
73 ["throw", ["str", ["`", "expected "], "start"]]]]]],
74
75 ["def", "read-form", ["fn", ["rdr"],
76 ["let", ["token", ["rdr-peek", "rdr"]],
77 ["if", ["=", ["`", "'"], "token"],
78 ["do",
79 ["rdr-next", "rdr"],
80 ["list", ["symbol", ["`", "quote"]], ["read-form", "rdr"]]],
81 ["if", ["=", ["`", "`"], "token"],
82 ["do",
83 ["rdr-next", "rdr"],
84 ["list", ["symbol", ["`", "quasiquote"]], ["read-form", "rdr"]]],
85 ["if", ["=", ["`", "~"], "token"],
86 ["do",
87 ["rdr-next", "rdr"],
88 ["list", ["symbol", ["`", "unquote"]], ["read-form", "rdr"]]],
89 ["if", ["=", ["`", "~@"], "token"],
90 ["do",
91 ["rdr-next", "rdr"],
92 ["list", ["symbol", ["`", "splice-unquote"]], ["read-form", "rdr"]]],
93 ["if", ["=", ["`", "^"], "token"],
94 ["do",
95 ["rdr-next", "rdr"],
96 ["let", ["meta", ["read-form", "rdr"]],
97 ["list", ["symbol", ["`", "with-meta"]], ["read-form", "rdr"], "meta"]]],
98 ["if", ["=", ["`", "@"], "token"],
99 ["do",
100 ["rdr-next", "rdr"],
101 ["list", ["symbol", ["`", "deref"]], ["read-form", "rdr"]]],
102
103 ["if", ["=", ["`", ")"], "token"],
104 ["throw", ["`", "unexpected ')'"]],
105 ["if", ["=", ["`", "("], "token"],
106 ["read-list", "rdr", ["`", "("], ["`", ")"]],
107
108 ["if", ["=", ["`", "]"], "token"],
109 ["throw", ["`", "unexpected ']'"]],
110 ["if", ["=", ["`", "["], "token"],
111 ["vectorl", ["read-list", "rdr", ["`", "["], ["`", "]"]]],
112
113 ["if", ["=", ["`", "}"], "token"],
114 ["throw", ["`", "unexpected '}'"]],
115 ["if", ["=", ["`", "{"], "token"],
116 ["apply", "hash-map", ["read-list", "rdr", ["`", "{"], ["`", "}"]]],
117
118 ["read-atom", "rdr"]]]]]]]]]]]]]]]],
119
120 ["def", "read-str", ["fn", ["strn"],
121 ["let", ["tokens", ["tokenize", "strn"],
122 "rdr", ["rdr-new", "tokens"]],
123 ["if", ["empty?", "tokens"],
124 null,
125 ["read-form", "rdr"]]]]],
126
127 null
128 ]