diff options
| author | Joel Martin <github@martintribe.org> | 2014-04-07 22:40:30 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-04-07 22:40:30 -0500 |
| commit | 5a159ae75ae4a9b302f2a5a1c826fbc872981368 (patch) | |
| tree | 0b8e36d8939682f919965771853903300e77fbfe /cs/reader.cs | |
| parent | b0293c15717ff0115f8316850d0d105f69a99308 (diff) | |
| download | mal-5a159ae75ae4a9b302f2a5a1c826fbc872981368.tar.gz mal-5a159ae75ae4a9b302f2a5a1c826fbc872981368.zip | |
C#: add step7_quote
Diffstat (limited to 'cs/reader.cs')
| -rw-r--r-- | cs/reader.cs | 30 |
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; |
