ralix 0.2.0

A simple, type-safe, tree walking interpreter
use crate::{Expression, Parser, ParserResult, Token};

impl Parser<'_> {
    pub fn parse_scope_expression(&mut self) -> ParserResult<Expression> {
        self.consume_current_token(Token::LBrace);

        self.symbol_table.enter_scope();
        let mut statements = Vec::new();
        loop {
            if self.is_current_token(Token::RBrace) || self.is_current_token(Token::EOF) {
                self.symbol_table.leave_scope();
                break Ok(Expression::Scope { statements });
            }

            let stmt = self.parse_statement()?;
            statements.push(stmt);
            self.next_token();
        }
    }
}