Fixed everything, removed compile time and logical errors.

recursive
Goren Barak 2023-11-21 10:06:21 -05:00
parent d9bb758569
commit fdb04a1a43
2 changed files with 29 additions and 6 deletions

View File

@ -7,6 +7,28 @@ use crate::parse::ast::*;
pub mod parse;
fn main() {
let fc = fasm_codegen(&vec![Expr::VarDefinition(VarDefinition {name: "goren", value: Value::Number(10)}), Expr::MathExpr(Math { left: Value::Var(VarReference { name: "goren"}), right: Value::Number(17), operator: MathOperator::OP_MULT}), Expr::FunDefinition(FunDefinition {name: "adder", contents: vec![Expr::MathExpr(Math {left: Value::Param(ParamReference {param_number: 0}), right: Value::Param(ParamReference {param_number: 1}), operator: MathOperator::OP_ADD})]}), Expr::Breakpoint], true);
let fc = fasm_codegen(&
vec![
Expr::VarDefinition(VarDefinition {name: "goren", value: Value::Number(10)}),
Expr::MathExpr(Math {
left: &Value::Var(VarReference { name: "goren"}),
right: &Value::Number(17),
operator: MathOperator::OP_MULT
}
),
Expr::FunDefinition(FunDefinition {
name: "adder", contents: vec![
Expr::Return(Value::Math(
Math {
left: &Value::Param(ParamReference {param_number: 0}),
right: &Value::Param(ParamReference {param_number: 1}),
operator: MathOperator::OP_ADD
}
))
]
}),
Expr::Breakpoint],
true
);
println!("{}", fc);
}

View File

@ -10,14 +10,14 @@ pub enum Expr<'a> {
// MATH EXPRESSION
#[derive(Debug)]
#[derive(Debug, Copy, Clone)]
pub struct Math<'a> {
pub left: Value<'a>,
pub right: Value<'a>,
pub left: &'a Value<'a>,
pub right: &'a Value<'a>,
pub operator: MathOperator
}
#[derive(Debug)]
#[derive(Debug, Copy, Clone)]
pub enum MathOperator {
OP_ADD, // Addition
OP_SUB, // Subtraction
@ -59,6 +59,7 @@ pub struct VarDefinition<'a> {
pub value: Value<'a>,
}
#[derive(Debug, Copy, Clone)]
pub struct VarReference<'a> {
pub name: &'a str,
@ -74,7 +75,7 @@ pub enum Value<'a> {
Var(VarReference<'a>),
Param(ParamReference),
Number(u64),
Math(Math),
Math(Math<'a>),
}
impl<'a> Value<'a> {