From fd637e0385f4b39a0d9e109c8b4b8afe20874fa7 Mon Sep 17 00:00:00 2001 From: Joel Martin Date: Mon, 21 Apr 2014 21:13:04 -0500 Subject: Perl: add step7_quote --- perl/reader.pm | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) (limited to 'perl/reader.pm') 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) } } } -- cgit v1.2.3