package fr.umlv.sableccexample.expr;

public class Operations {
  public enum Op {
    PLUS {
      int operate(int v1,int v2) {
        return v1+v2;
      }
    }, MINUS {
      int operate(int v1,int v2) {
        return v1-v2;
      }
    }, MULT {
      int operate(int v1,int v2) {
        return v1*v2;
      }
    }, DIV {
      int operate(int v1,int v2) {
        return v1/v2;
      }
    };
    abstract int operate(int v1,int v2);
  }
  
  public static Expr binOp(final Op op,final Expr left,final Expr right) {
    return new Expr() {
      public int eval() {
        return op.operate(left.eval(),right.eval());
      }
    };
  }
  public static Expr number(final int value) {
    return new Expr() {
      public int eval() {
        return value;
      }
    };
  }

  /* À compléter... */
}
