diff options
| author | Joel Martin <github@martintribe.org> | 2014-04-02 22:23:37 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-04-02 22:23:37 -0500 |
| commit | ea81a8087bcd7953b083a2be9db447f75e7ebf56 (patch) | |
| tree | 6cf47a2dbd55d42efc4a901eaabdec952f40ce89 /python/reader.py | |
| parent | 1617910ad342a55762f3ddabb975849d843cff85 (diff) | |
| download | mal-ea81a8087bcd7953b083a2be9db447f75e7ebf56.tar.gz mal-ea81a8087bcd7953b083a2be9db447f75e7ebf56.zip | |
All: split types into types, env, printer, core.
- types: low-level mapping to the implementation language.
- core: functions on types that are exposed directly to mal.
- printer: implementation called by pr-str, str, prn, println.
- env: the environment implementation
- Also, unindent all TCO while loops so that the diff of step4 and
step5 are minimized.
Diffstat (limited to 'python/reader.py')
| -rw-r--r-- | python/reader.py | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/python/reader.py b/python/reader.py index ddd6a32..846e2a8 100644 --- a/python/reader.py +++ b/python/reader.py @@ -1,5 +1,5 @@ import re -from mal_types import (new_symbol, Symbol, new_hash_map, List, new_list, Vector) +from mal_types import (_symbol, _list, _vector, _hash_map) class Blank(Exception): pass @@ -32,7 +32,7 @@ def read_atom(reader): elif token == "nil": return None elif token == "true": return True elif token == "false": return False - else: return Symbol(token) + else: return _symbol(token) def read_sequence(reader, typ=list, start='(', end=')'): ast = typ() @@ -49,13 +49,13 @@ def read_sequence(reader, typ=list, start='(', end=')'): def read_hash_map(reader): lst = read_sequence(reader, list, '{', '}') - return new_hash_map(*lst) + return _hash_map(*lst) def read_list(reader): - return read_sequence(reader, List, '(', ')') + return read_sequence(reader, _list, '(', ')') def read_vector(reader): - return read_sequence(reader, Vector, '[', ']') + return read_sequence(reader, _vector, '[', ']') def read_form(reader): token = reader.peek() @@ -65,23 +65,23 @@ def read_form(reader): return None elif token == '\'': reader.next() - return new_list(Symbol('quote'), read_form(reader)) + return _list(_symbol('quote'), read_form(reader)) elif token == '`': reader.next() - return new_list(Symbol('quasiquote'), read_form(reader)) + return _list(_symbol('quasiquote'), read_form(reader)) elif token == '~': reader.next() - return new_list(Symbol('unquote'), read_form(reader)) + return _list(_symbol('unquote'), read_form(reader)) elif token == '~@': reader.next() - return new_list(Symbol('splice-unquote'), read_form(reader)) + return _list(_symbol('splice-unquote'), read_form(reader)) elif token == '^': reader.next() meta = read_form(reader) - return new_list(Symbol('with-meta'), read_form(reader), meta) + return _list(_symbol('with-meta'), read_form(reader), meta) elif token == '@': reader.next() - return new_list(Symbol('deref'), read_form(reader)) + return _list(_symbol('deref'), read_form(reader)) # list elif token == ')': raise Exception("unexpected ')'") |
