/** * 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; } }
@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
@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; }
/** * 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); }
/** * Converts this node into a human readable string. * * @return The string "<code>left</code> + <code>right</code>", where left and right are the results of the toString * methods of the left and right operand. */ public String toString() { return bracketComposite(getLeft()) + " + " + bracketComposite(getRight()); }
sumOfSquares = square; else sumOfSquares = new Addition(sumOfSquares, square);
@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; } } }