public static CommonFunction operator +(CommonFunction f1, CommonFunction f2) { Sum result = new Sum(); if (f1 is Sum) { result.operands = ((Sum)f1).operands; result.signs = ((Sum)f1).signs; } else { result.operands.Add(f1); result.signs.Add(true); } if (f2 is Sum) { result.operands.AddRange(((Sum)f2).operands); result.signs.AddRange(((Sum)f2).signs); } else { result.operands.Add(f2); result.signs.Add(true); } return result; }
public static CommonFunction operator -(CommonFunction f1) { Sum result = new Sum(); if (f1 is Sum) { result = (Sum)f1; for (int i = 0; i < result.signs.Count; i++) { result.signs[i] = !result.signs[i]; } } else { result.operands.Add(f1); result.signs.Add(false); } return result; }
private CommonFunction Expression() { Sum sum = new Sum(); if (!IsAddop(look)) { sum.operands.Add(Term()); sum.signs.Add(true); } while (IsAddop(look)) { switch (look) { case '+': Match('+'); sum.operands.Add(Term()); sum.signs.Add(true); break; case '-': Match('-'); sum.operands.Add(Term()); sum.signs.Add(false); break; default: throw new Exception(); } } return sum; }