aboutsummaryrefslogtreecommitdiff
path: root/cs/reader.cs
diff options
context:
space:
mode:
authorJoel Martin <github@martintribe.org>2014-04-07 22:40:30 -0500
committerJoel Martin <github@martintribe.org>2014-04-07 22:40:30 -0500
commit5a159ae75ae4a9b302f2a5a1c826fbc872981368 (patch)
tree0b8e36d8939682f919965771853903300e77fbfe /cs/reader.cs
parentb0293c15717ff0115f8316850d0d105f69a99308 (diff)
downloadmal-5a159ae75ae4a9b302f2a5a1c826fbc872981368.tar.gz
mal-5a159ae75ae4a9b302f2a5a1c826fbc872981368.zip
C#: add step7_quote
Diffstat (limited to 'cs/reader.cs')
-rw-r--r--cs/reader.cs30
1 files changed, 23 insertions, 7 deletions
diff --git a/cs/reader.cs b/cs/reader.cs
index a6d22c5..a8d09c6 100644
--- a/cs/reader.cs
+++ b/cs/reader.cs
@@ -4,6 +4,7 @@ using System.Collections.Generic;
using System.Text.RegularExpressions;
using Mal;
using MalVal = Mal.types.MalVal;
+using MalSymbol = Mal.types.MalSymbol;
using MalList = Mal.types.MalList;
using MalVector = Mal.types.MalVector;
using MalHashMap = Mal.types.MalHashMap;
@@ -109,13 +110,28 @@ namespace Mal {
if (token == null) { throw new MalContinue(); }
MalVal form = null;
- switch (token[0]) {
- case '(': form = read_list(rdr, new MalList(), '(' , ')'); break;
- case ')': throw new ParseError("unexpected ')'");
- case '[': form = read_list(rdr, new MalVector(), '[' , ']'); break;
- case ']': throw new ParseError("unexpected ']'");
- case '{': form = read_hash_map(rdr); break;
- case '}': throw new ParseError("unexpected '}'");
+ switch (token) {
+ case "'": rdr.next();
+ return new MalList(new MalSymbol("quote"),
+ read_form(rdr));
+ case "`": rdr.next();
+ return new MalList(new MalSymbol("quasiquote"),
+ read_form(rdr));
+ case "~":
+ rdr.next();
+ return new MalList(new MalSymbol("unquote"),
+ read_form(rdr));
+ case "~@":
+ rdr.next();
+ return new MalList(new MalSymbol("splice-unquote"),
+ read_form(rdr));
+
+ case "(": form = read_list(rdr, new MalList(), '(' , ')'); break;
+ case ")": throw new ParseError("unexpected ')'");
+ case "[": form = read_list(rdr, new MalVector(), '[' , ']'); break;
+ case "]": throw new ParseError("unexpected ']'");
+ case "{": form = read_hash_map(rdr); break;
+ case "}": throw new ParseError("unexpected '}'");
default: form = read_atom(rdr); break;
}
return form;