Разработка компиляторов

       

Вычисление значения формулы


Итак, мы можем разделить все формулы на следующие классы:

  • Простейшие формулы: числа и произвольные формулы, заключенные в круглые скобки, например, 354, (17+3-18)
  • Формулы, содержащие операции типа умножения, т.е. умножение и деление, например, 18*2*(35+2)*7
  • Формулы, содержащие операции типа сложения, т.е. сложение и вычитание, например, 18*2*(35+2)*7+354+ (17+3-18)*(12-7) .

Теперь мы можем представить себе процесс вычисления значения формулы, как следующий вызов:

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 ("Неожиданный символ"); }



Содержание раздела