aboutsummaryrefslogtreecommitdiff
path: root/r/reader.r
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-11-03 20:02:09 -0600
committerJoel Martin <github@martintribe.org>2015-01-09 16:16:43 -0600
commitc30efef469e22c8ba345a72c058c28362e57b746 (patch)
treee2b9a4252c7771dd8f4554c4b248d370b66e0ae3 /r/reader.r
parent01feedfe22a381c6b6ca79bdf0db798aa08c4104 (diff)
downloadmal-c30efef469e22c8ba345a72c058c28362e57b746.tar.gz
mal-c30efef469e22c8ba345a72c058c28362e57b746.zip
R: add step6_file and step7_quote
Change symbols to be special class.
Diffstat (limited to 'r/reader.r')
-rw-r--r--r/reader.r18
1 files changed, 15 insertions, 3 deletions
diff --git a/r/reader.r b/r/reader.r
index 46a3cdf..8d91f1c 100644
--- a/r/reader.r
+++ b/r/reader.r
@@ -27,7 +27,7 @@ tokenize <- function(str) {
res <- list()
i <- 1
for(v in m[[1]]) {
- if (v == "") next
+ if (v == "" || substr(v,1,1) == ";") next
res[[i]] <- v
i <- i+1
}
@@ -51,7 +51,7 @@ read_atom <- function(rdr) {
} else if (token == "false") {
FALSE
} else {
- as.symbol(token)
+ new.symbol(token)
}
}
@@ -75,7 +75,19 @@ read_seq <- function(rdr, start="(", end=")") {
read_form <- function(rdr) {
token <- Reader.peek(rdr)
- if (token == ")") {
+ if (token == "'") {
+ . <- Reader.next(rdr);
+ new.list(new.symbol("quote"), read_form(rdr))
+ } else if (token == "`") {
+ . <- Reader.next(rdr);
+ new.list(new.symbol("quasiquote"), read_form(rdr))
+ } else if (token == "~") {
+ . <- Reader.next(rdr);
+ new.list(new.symbol("unquote"), read_form(rdr))
+ } else if (token == "~@") {
+ . <- Reader.next(rdr);
+ new.list(new.symbol("splice-unquote"), read_form(rdr))
+ } else if (token == ")") {
throw("unexpected ')'")
} else if (token == "(") {
new.listl(read_seq(rdr))