Still buggy, but implemented a more tail-recursive PE with non-recursive drop_redundent_veval, special forms SuspendedEval and SuspendedIf, simplification of how primitives work, and more
This commit is contained in:
1629
kr/src/ast.rs
1629
kr/src/ast.rs
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,7 @@ lalrpop_mod!(pub grammar);
|
|||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
mod ast;
|
mod ast;
|
||||||
use crate::ast::{partial_eval,new_base_ctxs,eval,root_env,MarkedForm,Form,PossibleTailCall};
|
use crate::ast::{mark,partial_eval,new_base_ctxs,eval,root_env,MarkedForm,Form,PossibleTailCall};
|
||||||
|
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
@@ -12,7 +12,7 @@ fn main() {
|
|||||||
let parsed_input = Rc::new(grammar::TermParser::new().parse(input).unwrap());
|
let parsed_input = Rc::new(grammar::TermParser::new().parse(input).unwrap());
|
||||||
println!("Parsed input is {} - {:?}", parsed_input, parsed_input);
|
println!("Parsed input is {} - {:?}", parsed_input, parsed_input);
|
||||||
let (bctx, dctx) = new_base_ctxs();
|
let (bctx, dctx) = new_base_ctxs();
|
||||||
let (bctx, marked) = parsed_input.marked(bctx);
|
let (bctx, marked) = mark(Rc::clone(&parsed_input),bctx);
|
||||||
let unvaled = marked.unval().unwrap();
|
let unvaled = marked.unval().unwrap();
|
||||||
println!("Parsed unvaled that is {}", unvaled);
|
println!("Parsed unvaled that is {}", unvaled);
|
||||||
match partial_eval(bctx, dctx, unvaled) {
|
match partial_eval(bctx, dctx, unvaled) {
|
||||||
@@ -45,11 +45,12 @@ fn eval_test<T: Into<Form>>(also_pe: bool, gram: &grammar::TermParser, e: &Rc<Fo
|
|||||||
assert_eq!(*basic_result, expected.into());
|
assert_eq!(*basic_result, expected.into());
|
||||||
if also_pe {
|
if also_pe {
|
||||||
let (bctx, dctx) = new_base_ctxs();
|
let (bctx, dctx) = new_base_ctxs();
|
||||||
let (bctx, marked) = parsed.marked(bctx);
|
let (bctx, marked) = mark(parsed,bctx);
|
||||||
let unvaled = marked.unval().unwrap();
|
let unvaled = marked.unval().unwrap();
|
||||||
let (bctx, ped) = partial_eval(bctx, dctx, unvaled).unwrap();
|
let (bctx, ped) = partial_eval(bctx, dctx, unvaled).unwrap();
|
||||||
let (bctx, marked_basic_result) = basic_result.marked(bctx);
|
let (bctx, marked_basic_result) = mark(basic_result,bctx);
|
||||||
println!("Final PE {}", ped);
|
println!("Final PE {}", ped);
|
||||||
|
println!("wanted {}", marked_basic_result);
|
||||||
assert_eq!(*ped, *marked_basic_result);
|
assert_eq!(*ped, *marked_basic_result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user