atm = str2double(token);
elseif strcmp(token(1), '"')
atm = token(2:length(token)-1);
- %else if token eq 'nil'
+ atm = strrep(atm, '\"', '"');
+ atm = strrep(atm, '\n', char(10));
+ elseif strcmp(token, 'nil')
+ atm = types.nil;
elseif strcmp(token, 'true')
atm = true;
elseif strcmp(token, 'false')
function ast = read_form(rdr)
%fprintf('in read_form\n');
token = rdr.peek();
- switch token(1)
+ switch token
+ case ''''
+ rdr.next();
+ ast = {types.Symbol('quote'), reader.read_form(rdr)};
+ case '`'
+ rdr.next();
+ ast = {types.Symbol('quasiquote'), reader.read_form(rdr)};
+ case '~'
+ rdr.next();
+ ast = {types.Symbol('unquote'), reader.read_form(rdr)};
+ case '~@'
+ rdr.next();
+ ast = {types.Symbol('splice-unquote'), reader.read_form(rdr)};
case ')'
error('unexpected '')''');
case '('