extern crate core;
mod parser;
mod tokenizer;
pub mod ast;
pub mod environment;
mod evaluation;
pub use ast::*;
pub use environment::*;
pub fn tokenize_nylisp(plaintext: String) -> Vec<String> {
let tokenizer_obj = tokenizer::tokenizer::Tokenizer::new(plaintext);
tokenizer_obj.tokenize()
}
pub fn parse_nylisps(tokens: Vec<String>) -> Vec<Result<ast::ast::NylispExpression, ast::ast::NylispError>> {
let parser = parser::parser::Parser::new();
parser.parse_programs(tokens)
}
pub fn evaluate_nylisp(ast: Vec<ast::ast::NylispExpression>, env: &mut ast::ast::Environment) -> Vec<Result<ast::ast::NylispExpression, ast::ast::NylispError>> {
let mut evaluator = evaluation::evaluation::Evaluator::new(ast);
evaluator.eval_programs(env)
}