Implement quote support resolves #9
parent
3b3ab96f7d
commit
a7caac30f9
|
@ -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),
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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![];
|
||||
|
||||
|
|
Loading…
Reference in New Issue