Initial version of environment model

This commit is contained in:
2021-05-27 21:02:18 -04:00
parent 56f5426426
commit 794cad2219
4 changed files with 74 additions and 36 deletions

View File

@@ -1,7 +1,7 @@
use crate::lexer::Token;
use crate::lexer::Tokens;
#[derive(Debug)]
#[derive(Debug, Clone)]
pub enum Datum {
Boolean(bool),
Number(i64),
@@ -11,6 +11,10 @@ pub enum Datum {
Unspecified,
}
pub fn make_symbol(s: &str) -> Datum {
Datum::Symbol(s.to_string())
}
impl Default for Datum {
fn default() -> Self {
Datum::Unspecified
@@ -35,12 +39,14 @@ fn parse_datum(tokens: &Tokens, ix: usize) -> (Datum, usize) {
pub fn parse_list(tokens: &Tokens, mut ix: usize) -> (Datum, usize) {
let mut datums = vec![];
// FIXME: will crash when RightRoundBracket is missing
while tokens[ix] != Token::RightRoundBracket {
while ix < tokens.len() && tokens[ix] != Token::RightRoundBracket {
let (datum, new_ix) = parse_datum(tokens, ix);
datums.push(datum);
ix = new_ix;
}
if ix == tokens.len() {
panic!("PARSE_LIST -- missing closing bracket {:?}", tokens)
}
(Datum::List(datums), ix + 1)
}