@Override
 public MLExpression expr() {
   if (simpE) {
     return new AdditionMLExpression(e.expr(), e2.expr());
   } else {
     return new PersonMLExpression(Memory.REG1);
   }
 }
 @Override
 public String getWS() {
    int elsep = Helper.nextMark();
     int ende = Helper.nextMark();
     return e1.getWS() + e2.getWS() + Helper.subtract()
             + Helper.jumpz(elsep)
             + Helper.push(1)
             + Helper.jump(ende)
             + Helper.setMark(elsep)
             + Helper.push(0)
             + Helper.setMark(ende);
 }
  @Override
  public List<MLCommand> getML() {
    if (!simpE) {
      List<MLCommand> res = new ArrayList<>();
      if (!e.simpleExpression()) {
        res.addAll(e.getML());
      }
      res.add(new StackPushML(Memory.Stack, e.expr()));
      if (!e2.simpleExpression()) {
        res.addAll(e2.getML());
      }
      res.add(new StackPushML(Memory.Stack, e2.expr()));
      res.add(new StackPopML(Memory.Stack));
      res.add(new PersonAsignmentML(Memory.REG1, new PersonMLExpression(Memory.Stack)));
      res.add(new StackPopML(Memory.Stack));
      res.add(
          new PersonAsignmentML(
              Memory.REG1,
              new AdditionMLExpression(
                  new PersonMLExpression(Memory.REG1), new PersonMLExpression(Memory.Stack))));

      return res;
    }
    return null;
  }
  public AdditionExpressionEquiv(AdditionExpression additionExpression) {
    e = ExpressionEquiv.getEquiv(additionExpression.getE1());

    e2 = ExpressionEquiv.getEquiv(additionExpression.getE2());
    simpE = e.simpleExpression() && e2.simpleExpression();
  }