2023-02-07 02:07:53 -05:00
|
|
|
#[macro_use] extern crate lalrpop_util;
|
|
|
|
|
lalrpop_mod!(pub grammar);
|
|
|
|
|
|
|
|
|
|
use std::rc::Rc;
|
|
|
|
|
|
|
|
|
|
mod ast;
|
2023-03-14 20:14:17 -04:00
|
|
|
use crate::ast::{eval,root_env};
|
|
|
|
|
mod pe_ast;
|
|
|
|
|
use crate::pe_ast::{mark,partial_eval,new_base_ctxs};
|
|
|
|
|
|
|
|
|
|
mod test;
|
2023-02-07 02:07:53 -05:00
|
|
|
|
2023-02-08 23:37:23 -05:00
|
|
|
|
|
|
|
|
fn main() {
|
2023-02-08 01:54:53 -05:00
|
|
|
let input = "(= 17 ((vau d p (+ (eval (car p) d) 13)) (+ 1 3)))";
|
2023-02-14 00:50:05 -05:00
|
|
|
let parsed_input = Rc::new(grammar::TermParser::new().parse(input).unwrap());
|
|
|
|
|
println!("Parsed input is {} - {:?}", parsed_input, parsed_input);
|
2023-02-19 12:37:12 -05:00
|
|
|
let (bctx, dctx) = new_base_ctxs();
|
2023-02-22 01:22:57 -05:00
|
|
|
let (bctx, marked) = mark(Rc::clone(&parsed_input),bctx);
|
2023-02-18 19:32:59 -05:00
|
|
|
let unvaled = marked.unval().unwrap();
|
2023-02-16 18:21:13 -05:00
|
|
|
println!("Parsed unvaled that is {}", unvaled);
|
2023-02-23 01:38:46 -05:00
|
|
|
let (bctx, ped) = partial_eval(bctx, dctx, unvaled);
|
2023-02-14 00:50:05 -05:00
|
|
|
let result = eval(root_env(), parsed_input);
|
|
|
|
|
println!("Result is {} - {:?}", result, result);
|
2023-02-07 02:07:53 -05:00
|
|
|
}
|
2023-02-12 12:19:56 -05:00
|
|
|
|