package fr.umlv.poo.visitor;

import java.util.Iterator;

public interface Expr {
  public int eval();
  
  public static Expr parseExpr(Iterator<String> it) {
    if (!it.hasNext()) {
      throw new IllegalArgumentException("no more tokens");
    }
    String token = it.next();
    switch(token) {
    case "+":
      return new BinOp(BinOp.Operator.ADD, parseExpr(it), parseExpr(it));
    case "-":
      return new BinOp(BinOp.Operator.SUB, parseExpr(it), parseExpr(it));
    case "*":
      return new BinOp(BinOp.Operator.MUL, parseExpr(it), parseExpr(it));
    case "/":
      return new BinOp(BinOp.Operator.DIV, parseExpr(it), parseExpr(it));
    default:
      return new Value(Integer.parseInt(token));
    }
  }
}
