- Notifications
You must be signed in to change notification settings - Fork790
levand edited this pageJul 15, 2011 ·3 revisions
The reader is mostly complete. It follows the basic outline of LispReader.java, except in a non-object-oriented style and with some simplifications.
The code is all in the reader.cljs file. The primary function isread
, which takes an instance of thePushbackReader
protocol. An implementation of this protocol is provided,StringPushbackReader
, and may be constructed easily using thepush-back-reader
function, which takes a string and converts it to aStringPushBackReader
.
There are a number of known issues/limitations.
- There are some cases where a map may be incorrectly read as a set. An example that does this consistently is the form
(1 2 3 {:a 1 :b 2})
- Does not support hexadecimal or custom-radix numeric literals (e.g, 0xA3 or 8r3). These cases will throw an "Invalid Number Format" error. Octal numbers starting with a 0 are parsed as base-10 numbers. This is due to a difference in the Javascript and Java regex engines: the regex used in both cases is identical. The javascript one needs to be tested and modified before hex, octal and custom-radix numbers will work.
- The performance of the StringPushbackReader is currently poor, since it actually modifying a string on each read/unread. It would be much faster if it were rewritten to work by indexing into a constant string, with a separate small buffer to hold pushbacks.
- Rationale
- Quick Start
- Differences from Clojure
- [Usage of Google Closure](Google Closure)