Infrastructure to evaluate reduced AST
This commit is contained in:
parent
0bb0ecea76
commit
774ddd665b
@ -1,2 +1,38 @@
|
|||||||
|
use std::rc::Rc;
|
||||||
|
|
||||||
pub struct ReducedAST { }
|
use parsing::AST;
|
||||||
|
|
||||||
|
pub struct ReducedAST(pub Vec<Stmt>);
|
||||||
|
|
||||||
|
pub enum Stmt {
|
||||||
|
Binding {
|
||||||
|
name: Rc<String>,
|
||||||
|
expr: Expr,
|
||||||
|
},
|
||||||
|
Expr(Expr),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum Expr {
|
||||||
|
Literal(Lit),
|
||||||
|
Func(Func),
|
||||||
|
Call {
|
||||||
|
f: Func,
|
||||||
|
args: Vec<Expr>,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum Lit {
|
||||||
|
Int(u64),
|
||||||
|
Bool(bool),
|
||||||
|
StringLit(Rc<String>),
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Func {
|
||||||
|
params: Vec<Rc<String>>,
|
||||||
|
body: Vec<Stmt>,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
pub fn perform_ast_reduction(input: &AST) -> Result<ReducedAST, String> {
|
||||||
|
Ok(ReducedAST(vec![]))
|
||||||
|
}
|
||||||
|
@ -5,6 +5,7 @@ use std::fmt::Write;
|
|||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
|
|
||||||
use parsing::{AST, Statement, Declaration, Expression, Variant, ExpressionType};
|
use parsing::{AST, Statement, Declaration, Expression, Variant, ExpressionType};
|
||||||
|
use ast_reducing::ReducedAST;
|
||||||
use builtin::{BinOp, PrefixOp};
|
use builtin::{BinOp, PrefixOp};
|
||||||
|
|
||||||
pub struct State<'a> {
|
pub struct State<'a> {
|
||||||
@ -315,3 +316,11 @@ impl<'a> State<'a> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* BELOW HERE NEW STUFF */
|
||||||
|
|
||||||
|
impl<'a> State<'a> {
|
||||||
|
pub fn evaluate_new(&mut self, input: ReducedAST) -> Result<String, String> {
|
||||||
|
Ok("not done".to_string())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -94,10 +94,16 @@ fn typechecking(handle: &mut Schala, input: parsing::AST, comp: Option<&mut Unfi
|
|||||||
|
|
||||||
type TempASTReduction = (ast_reducing::ReducedAST, parsing::AST);
|
type TempASTReduction = (ast_reducing::ReducedAST, parsing::AST);
|
||||||
fn ast_reducing(handle: &mut Schala, input: parsing::AST, comp: Option<&mut UnfinishedComputation>) -> Result<TempASTReduction, String> {
|
fn ast_reducing(handle: &mut Schala, input: parsing::AST, comp: Option<&mut UnfinishedComputation>) -> Result<TempASTReduction, String> {
|
||||||
Ok((ast_reducing::ReducedAST { }, input))
|
let output = ast_reducing::perform_ast_reduction(&input)?;
|
||||||
|
Ok((output, input))
|
||||||
}
|
}
|
||||||
|
|
||||||
fn eval(handle: &mut Schala, input: TempASTReduction, _comp: Option<&mut UnfinishedComputation>) -> Result<String, String> {
|
fn eval(handle: &mut Schala, input: TempASTReduction, _comp: Option<&mut UnfinishedComputation>) -> Result<String, String> {
|
||||||
|
|
||||||
|
let new_input = input.0;
|
||||||
|
let _new_eval_output = handle.state.evaluate_new(new_input);
|
||||||
|
|
||||||
|
/* old-style eval */
|
||||||
let input = input.1;
|
let input = input.1;
|
||||||
let evaluation_outputs = handle.state.evaluate(input);
|
let evaluation_outputs = handle.state.evaluate(input);
|
||||||
let text_output: Result<Vec<String>, String> = evaluation_outputs
|
let text_output: Result<Vec<String>, String> = evaluation_outputs
|
||||||
|
Loading…
Reference in New Issue
Block a user