예제 #1
0
 public VarBase Calculate()
 {
     if (m_c == 0)
         throw new CalcException("Ошибка: пустое выражение.");
     Element top1 = null;
     Element cur = m_top;
     try {
         for (; cur != null; cur = cur.m_next) {
             if (cur.m_o is Call) {
                 int rc = (cur.m_o as Call).ReqCount;
                 ArgList al = new ArgList();
                 for (int i = 0; i < rc; i++) {
                     if (top1 == null)
                         throw new CalcException("Ошибка при вычислении выражения");
                     al.Add(top1.m_o.Compute());
                     top1 = top1.m_next;
                 }
                 (cur.m_o as Call).SetArgList(al);
                 top1 = new Element((cur.m_o as Call).Compute(), top1);
             }
             else {
                 top1 = new Element(cur.m_o, top1);
             }
         }
         if ((top1 == null) || (top1.m_next != null))
             throw new CalcException("Ошибка при вычислении выражения");
         return top1.m_o.Compute();
     }
     catch (CalcException ex) {
         throw ex;
     }
     catch {
         throw new CalcException("Ошибка при вычислении выражения");
     }
 }