Implement quote support resolves #9

master
Felix Martin 2021-05-30 22:08:29 -04:00
parent 3b3ab96f7d
commit a7caac30f9
2 changed files with 9 additions and 1 deletions

View File

@ -135,8 +135,8 @@ pub fn interpret(exp: &Datum, env: &mut Env) -> Datum {
List(v) if has_tag(v, "cond") => panic!("cond-not-supported"),
List(v) if has_tag(v, "let") => panic!("let-not-supported"),
List(v) if has_tag(v, "begin") => interpret_begin(v, env),
List(v) if has_tag(v, "quote") => v[1].clone(),
List(v) => interpret_application(v, env),
// TODO: quoted
_ => panic!("unknown-expression {:?}", exp),
}
}

View File

@ -52,11 +52,19 @@ fn parse_datum(tokens: &Tokens, ix: usize) -> (Datum, usize) {
Token::Identifier(s) => (Datum::Symbol(s.to_string()), ix + 1),
Token::Boolean(b) => (Datum::Boolean(*b), ix + 1),
Token::Number(n) => (Datum::Number(*n), ix + 1),
Token::Quote => parse_quote(tokens, ix + 1),
Token::LeftRoundBracket => parse_list(tokens, ix + 1),
_ => panic!("Unexpected token {:?}", tokens[ix]),
}
}
pub fn parse_quote(tokens: &Tokens, ix: usize) -> (Datum, usize) {
let mut datums = vec![make_symbol("quote")];
let (datum, ix) = parse_datum(tokens, ix);
datums.push(datum);
(Datum::List(datums), ix)
}
pub fn parse_list(tokens: &Tokens, mut ix: usize) -> (Datum, usize) {
let mut datums = vec![];