diff options
| author | Joel Martin <github@martintribe.org> | 2014-04-21 21:13:04 -0500 |
|---|---|---|
| committer | Joel Martin <github@martintribe.org> | 2014-04-21 21:13:04 -0500 |
| commit | fd637e0385f4b39a0d9e109c8b4b8afe20874fa7 (patch) | |
| tree | c5bec673165e467a827a2a69d314e5fc3a3386b7 /perl/reader.pm | |
| parent | 074cd7482bd5e6b0f5170f0128d417c1560ca00e (diff) | |
| download | mal-fd637e0385f4b39a0d9e109c8b4b8afe20874fa7.tar.gz mal-fd637e0385f4b39a0d9e109c8b4b8afe20874fa7.zip | |
Perl: add step7_quote
Diffstat (limited to 'perl/reader.pm')
| -rw-r--r-- | perl/reader.pm | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/perl/reader.pm b/perl/reader.pm index 6fac066..e173910 100644 --- a/perl/reader.pm +++ b/perl/reader.pm @@ -78,13 +78,21 @@ sub read_form { my($rdr) = @_; my $token = $rdr->peek(); given ($token) { - when(')') { die "unexpected ')'"; } - when('(') { return read_list($rdr, 'List'); } - when(']') { die "unexpected ']'"; } - when('[') { return read_list($rdr, 'Vector', '[', ']'); } - when('}') { die "unexpected '}'"; } - when('{') { return read_list($rdr, 'HashMap', '{', '}'); } - default { return read_atom($rdr); } + when("'") { $rdr->next(); List->new([Symbol->new('quote'), + read_form($rdr)]) } + when('`') { $rdr->next(); List->new([Symbol->new('quasiquote'), + read_form($rdr)]) } + when('~') { $rdr->next(); List->new([Symbol->new('unquote'), + read_form($rdr)]) } + when('~@') { $rdr->next(); List->new([Symbol->new('splice-unquote'), + read_form($rdr)]) } + when(')') { die "unexpected ')'" } + when('(') { return read_list($rdr, 'List') } + when(']') { die "unexpected ']'" } + when('[') { return read_list($rdr, 'Vector', '[', ']') } + when('}') { die "unexpected '}'" } + when('{') { return read_list($rdr, 'HashMap', '{', '}') } + default { return read_atom($rdr) } } } |
