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("Ошибка при вычислении выражения"); } }