2022-07-03 15:17:37 +02:00
|
|
|
use std::fs::read_to_string;
|
|
|
|
|
2022-07-02 23:42:15 +02:00
|
|
|
use env::Env;
|
2022-07-03 16:01:45 +02:00
|
|
|
use function::FunctionMap;
|
2022-07-02 23:42:15 +02:00
|
|
|
use statement::Statement;
|
|
|
|
use value::Value;
|
|
|
|
|
|
|
|
mod env;
|
|
|
|
mod expression;
|
|
|
|
mod function;
|
|
|
|
mod macros;
|
|
|
|
mod statement;
|
|
|
|
mod value;
|
2022-07-03 15:17:37 +02:00
|
|
|
// mod lexer;
|
|
|
|
// mod parser;
|
|
|
|
mod pest_parser;
|
2022-07-02 23:42:15 +02:00
|
|
|
|
2022-07-03 16:01:45 +02:00
|
|
|
fn run(functions: FunctionMap, statement: Statement) {
|
2022-07-02 23:42:15 +02:00
|
|
|
let env = Env::new();
|
2022-07-03 16:01:45 +02:00
|
|
|
statement.eval(&env, &functions);
|
2022-07-02 23:42:15 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
2022-07-03 15:17:37 +02:00
|
|
|
let f = read_to_string("./test.foo").unwrap();
|
2022-07-03 16:01:45 +02:00
|
|
|
let (res, funcs) = pest_parser::parse(f);
|
|
|
|
let mut m = FunctionMap::new();
|
|
|
|
m.insert_holder(funcs);
|
2022-07-02 23:42:15 +02:00
|
|
|
m.insert_native("print", |a: &Value| {
|
|
|
|
println!("{}", a);
|
|
|
|
});
|
|
|
|
m.insert_native("waluigi", || "Waluigi");
|
2022-07-03 16:01:45 +02:00
|
|
|
run(m, res);
|
2022-07-02 23:42:15 +02:00
|
|
|
}
|