@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(); }