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;
 }