aboutsummaryrefslogtreecommitdiff
path: root/r/reader.r
diff options
context:
space:
mode:
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))