@Override protected Addition create(Expression left, Expression right) { return new Addition(left, right); } }
@Override public void visit(Addition node) { handlebinary(node); resultExpr = new Addition(left, right); left=null; right=null; }
/** * Creates a single expression of expression array, which represents the summands * @param arr The expression array * @return The created expression */ public static Expression exprArrToAddition(Expression[] arr) { if (arr.length == 1) { return arr[0]; } else { Addition r = new Addition(arr[0], null); Addition cur = r; for (int i=1;i<arr.length-1;i++) { Addition add = new Addition(arr[i], null); cur.setRight(add); cur = add; } cur.setRight(arr[arr.length-1]); return r; } }
/** * adds up all expressions in a set. */ private Expression recCreateAddTree( Set<Expression> set){ Expression exp; Iterator <Expression>it = set.iterator(); if (it.hasNext()){ exp=it.next(); if(it.hasNext()){ // next iteration step set.remove(exp); return new Addition (exp, recCreateAddTree(set)); } else return exp; } else return new FloatConstant(0.0f); //this should never happen }
@Override public Object visitAddition(CluCalcParser.AdditionContext ctx) { Expression l = (Expression) visit(ctx.left); Expression r = (Expression) visit(ctx.right); return new Addition(l,r); }
@Override public Expression visitAddition(MaximaParser.AdditionContext ctx) { return new Addition(visit(ctx.left), visit(ctx.right)); }
@Override public void visit(Addition node) { traverseBinary(node); MvExpressions left = expressions.get(node.getLeft()); MvExpressions right = expressions.get(node.getRight()); MvExpressions result = createNewMvExpressions(); for (int blade = 0; blade < bladeCount; blade++) { if (left.bladeExpressions[blade] != null) { if (right.bladeExpressions[blade] != null) { result.bladeExpressions[blade] = new Addition(left.bladeExpressions[blade], right.bladeExpressions[blade]); } else { result.bladeExpressions[blade] = left.bladeExpressions[blade]; } } else if (right.bladeExpressions[blade] != null) { result.bladeExpressions[blade] = right.bladeExpressions[blade]; } } expressions.put(node, result); }
sumOfSquares = square; else sumOfSquares = new Addition(sumOfSquares, square);
@Override //dfg public void visit(Addition node) { node.getLeft().accept(this); Expression lhs =nx; node.getRight().accept(this); Expression rhs =nx; nx = new Addition(lhs, rhs); }
@Override public void visit(Addition node) { result = null; node.getLeft().accept(this); Expression leftResult = result; node.getRight().accept(this); Expression rightResult = result; if (leftResult != null || rightResult != null) result = new Addition(leftResult, rightResult); }
@Override public void visit(Addition node) { node.getLeft().accept(this); Expression left = result; node.getRight().accept(this); if (left != zero) { result = (result == zero) ? left //left+0 : new Addition(left, result); } }
@Override public Expression copy() { return new Addition(getLeft().copy(), getRight().copy()); }
private void visitVar(Variable node) { if (node.getName().equals("_V_X")) result = new Addition(new MultivectorComponent("_V_ox", 0), new MultivectorComponent("_V_t", 0)); if (node.getName().equals("_V_Y")) result = new MultivectorComponent("_V_oy", 0); if (node.getName().equals("_V_Z")) result = new MultivectorComponent("_V_oz", 0); }
@Override public void visit(Addition node) { if (opstor.OperationShouldBeReplaced(node)) { nx = new Variable(opstor.getReplacementID(node)); System.out.println("Replacer: Node in Set: ( " + node.toString() + " ) ---> Replacing with " + opstor.getReplacementID(node)); } else { node.getLeft().accept(this); Expression lhs = nx; node.getRight().accept(this); Expression rhs = nx; nx = new Addition(lhs, rhs); } } @Override
result.bladeExpressions[bladeResult] = prodExpri; } else { result.bladeExpressions[bladeResult] = new Addition(result.bladeExpressions[bladeResult], prodExpri);
@Override public void visit(Addition node) { node.getLeft().accept(this); Expression left = resultExpr; node.getRight().accept(this); Expression right = resultExpr; resultExpr = new Addition(left, right); if ((left instanceof FloatConstant) && (right instanceof FloatConstant)) { FloatConstant leftc = (FloatConstant) left; FloatConstant rightc = (FloatConstant) right; resultExpr = new FloatConstant(leftc.getValue() + rightc.getValue()); } else if(left instanceof FloatConstant) { FloatConstant leftc = (FloatConstant) left; if(leftc.getValue() == 0.0) { resultExpr = right; } } else if (right instanceof FloatConstant) { FloatConstant rightc = (FloatConstant) right; if(rightc.getValue() == 0.0) { resultExpr = left; } } }
@Override public void visit(Subtraction node) { node.getLeft().accept(this); Expression left = resultExpr; node.getRight().accept(this); Expression right = resultExpr; resultExpr = new Subtraction(left, right); if ((left instanceof FloatConstant) && (right instanceof FloatConstant)) { FloatConstant leftc = (FloatConstant) left; FloatConstant rightc = (FloatConstant) right; resultExpr = new FloatConstant(leftc.getValue() - rightc.getValue()); } else if (right instanceof Negation) { Negation neg = (Negation) right; resultExpr = new Addition(left, neg.getOperand()); } else if (left instanceof FloatConstant) { FloatConstant leftc = (FloatConstant) left; if(leftc.getValue() == 0.0) { resultExpr = new Negation(right); } } else if(right instanceof FloatConstant) { FloatConstant rightc = (FloatConstant) right; if(rightc.getValue() == 0.0) { resultExpr = left; } } }
@Override public void visit(Multiplication node) { node.getLeft().accept(this); Expression dLeft = result; node.getRight().accept(this); Expression dRight = result; if (dLeft == zero) { if (dRight == zero) { result = zero; } else { result = new Multiplication(node.getLeft().copy(), dRight); } } else { //dLeft != zero !! if (dRight == zero) { result = new Multiplication(dLeft, node.getRight().copy()); } else { result = new Addition( new Multiplication(dLeft, node.getRight().copy()), new Multiplication(node.getLeft().copy(), dRight) ); } } }
@Override public void visit(Addition node) { node.getLeft().accept(this); Expression left = resultExpr; node.getRight().accept(this); Expression right = resultExpr; resultExpr = new Addition(left, right); if (isConstant(left) && isConstant(right)) { FloatConstant leftc = (FloatConstant) left; FloatConstant rightc = (FloatConstant) right; resultExpr = new FloatConstant(leftc.getValue() + rightc.getValue()); setGraphModified(); } else if (isConstant(left)) { FloatConstant leftc = (FloatConstant) left; if (doubleEquals(leftc.getValue(), 0.0f)) { resultExpr = right; setGraphModified(); } } else if (isConstant(right)) { FloatConstant rightc = (FloatConstant) right; if (doubleEquals(rightc.getValue(), 0.0f)) { resultExpr = left; setGraphModified(); } } }
} else if (DFGNodeTypeGetter.getTypeOfDFGNode(right) == DFGNodeType.Negation) { Negation neg = (Negation) right; resultExpr = new Addition(left, neg.getOperand()); setGraphModified(); } else if (isConstant(left)) {