jweinst1
4/18/2017 - 1:22 AM

beginning model for noodle programming language

beginning model for noodle programming language



#[derive(Debug)]
enum Noodle {
    Int(i32),
    Plus(Box<Noodle>, Box<Noodle>),
    Sub(Box<Noodle>, Box<Noodle>),
    Mul(Box<Noodle>, Box<Noodle>),
    Div(Box<Noodle>, Box<Noodle>),
    Rem(Box<Noodle>, Box<Noodle>),
    Name(String),
    Func(Box<Noodle>, Box<Noodle>)
}

impl Noodle {
    fn call(self) -> Noodle {
        match self {
            Noodle::Int(num) => Noodle::Int(num),
            Noodle::Plus(l, r) => Noodle::Int(l.call().int() + r.call().int()),
            Noodle::Sub(l, r) => Noodle::Int(l.call().int() - r.call().int()),
            Noodle::Mul(l, r) => Noodle::Int(l.call().int() * r.call().int()),
            Noodle::Div(l, r) => Noodle::Int(l.call().int() / r.call().int()),
            Noodle::Rem(l, r) => Noodle::Int(l.call().int() % r.call().int()),
        }
    }
    
    fn int(self) -> i32 {
        match self {
            Noodle::Int(num) => num,
            _ => self.call().int()
        }
    }
    
}

fn main() {
   

   // (8 - 6) * 6 = 12
}