heraclitus-compiler 1.9.0

Compiler frontend for developing great programming languages
Documentation
use heraclitus_compiler::prelude::*;
use super::*;

#[derive(Debug)]
pub struct Add {
    left: Option<Expr>,
    right: Option<Expr>
}

impl SyntaxModule<DefaultMetadata> for Add {
    syntax_name!("Add");
    fn new() -> Self {
        Add {
            left: None,
            right: None
        }
    }
    fn parse(&mut self, meta: &mut DefaultMetadata) -> SyntaxResult {
        match meta.expr.get(meta.index) {
            Some(_) => {
                let mut  left = Expr::new();
                let mut right = Expr::new();
                left.exclude(ExprId::Add);
                syntax(meta, &mut left)?;
                self.left = Some(left);
                token(meta, "+")?;
                syntax(meta, &mut right)?;
                self.right = Some(right);
                Ok(())
            }
            None => Err(Failure::Quiet(PositionInfo::at_eof(meta)))
        }
    }
}