/** * Returns a deep clone of this {@link AFieldNumberExp} node. * @return a deep clone of this {@link AFieldNumberExp} node */ public AFieldNumberExp clone() { return new AFieldNumberExp( _type, _location, cloneNode(_tuple), cloneNode(_field) ); }
/** * Creates a deep clone of this {@link AFieldNumberExp} node while putting all * old node-new node relations in the map {@code oldToNewMap}. * @param oldToNewMap the map filled with the old node-new node relation * @return a deep clone of this {@link AFieldNumberExp} node */ public AFieldNumberExp clone(Map<INode,INode> oldToNewMap) { AFieldNumberExp node = new AFieldNumberExp( _type, _location, cloneNode(_tuple, oldToNewMap), cloneNode(_field, oldToNewMap) ); oldToNewMap.put(this, node); return node; }
public static PExp newAFieldNumberExp(PExp tuple, LexIntegerToken field) { AFieldNumberExp result = new AFieldNumberExp(); result.setLocation(tuple.getLocation()); result.setTuple(tuple); result.setField(field); result.getField().getLocation().executable(true); return result; }
private PExp buildStructuralLessThan(PExp left_exp, PExp right_exp, int tupleCounter, int recCounter) { // left.i AFieldNumberExp leftField_exp = new AFieldNumberExp(); leftField_exp.setTuple(left_exp.clone()); leftField_exp.setField(new LexIntegerToken(tupleCounter, null)); // right.i AFieldNumberExp rightField_exp = new AFieldNumberExp(); rightField_exp.setTuple(right_exp.clone()); rightField_exp.setField(new LexIntegerToken(tupleCounter, null)); if (recCounter == 1) { // last one. don't chain further ifs return AstExpressionFactory.newAGreaterNumericBinaryExp(leftField_exp, rightField_exp); } // left.i <> right.i ANotEqualBinaryExp notEquals_exp = AstExpressionFactory.newANotEqualBinaryExp(leftField_exp, rightField_exp); // if left.i <>right.i then left.i , right.i else [recurse] AGreaterNumericBinaryExp gt_exp = AstExpressionFactory.newAGreaterNumericBinaryExp(leftField_exp.clone(), rightField_exp.clone()); AIfExp if_exp = new AIfExp(); if_exp.setTest(notEquals_exp); if_exp.setThen(gt_exp); if_exp.setElse(buildStructuralLessThan(left_exp.clone(), right_exp.clone(), tupleCounter + 1, recCounter - 1)); return if_exp; }