ralix 0.2.0

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

mod alias;
mod assignment;
mod binding;
mod r#const;
mod expression;
mod function;
mod get_import_export;
mod r#return;

impl Parser<'_> {
    pub fn parse_statement(&mut self) -> ParserResult<Statement> {
        match &self.current_token {
            Token::Type if matches!(self.peek_token, Token::Ident(_)) => {
                self.parse_type_alias_statement()
            }
            Token::Const => self.parse_constant_statements(),
            Token::Function => self.parse_function_statement(),
            Token::Return => self.parse_return_statement(),
            Token::Let
            | Token::TyInt
            | Token::TyFloat
            | Token::TyString
            | Token::TyChar
            | Token::TyBool
            | Token::TyArr
            | Token::TyMap
            | Token::Type
            | Token::Ident(_) => self.parse_binding_statement(),
            Token::Get => self.parse_import_statement(),
            Token::Out => self.parse_export_statement(),
            _ => self.parse_expression_statement(),
        }
    }
}