Итак, мы можем разделить все формулы на следующие классы:
Теперь мы можем представить себе процесс вычисления значения формулы, как следующий вызов:
Expression (Term (Factor ())),
где Factor - процедура вычисления простейшей формулы, являющейся либо числом, либо произвольной формулой, заключенной в круглые скобки, Term - процедура вычисления значения формулы, содержащей операции типа умножения, Expression - процедура вычисления значения формулы, содержащей операции типа сложения.
Опишем процедуру, вычисляющую значение простейшей формулы:
int Factor () { char ch = getChar(); if (isDigit (ch)) return getValue(ch); if (ch == '(') { int result = Formula (); if (getChar() == ')') return result; error ("Неожиданный символ"); return 0; } return error ("Неожиданный символ"); }