Библиотека умеет парсить выражения с математическими знаками (+, -, *, /), а также делением по модулю (mod) и возведением в степень (^). Скобки поддерживаются. Функции не поддерживаются.

Деление по модулю выполняется с предварительным округлением операндов.

Вся логика лежит в одном модуле, который использует стандартные Delphi’йские модули (SysUtils, Contnrs, Classes, Math).

Пользователю доступны две функции:

Различаются тем, что первая в качестве десятичной запятой использует символ ".", а вторая — символ в текущей локали.

Функции принимают математическое выражение и тут же его парсят. Если в выражении есть ошибка, вызывается исключение.

Обе функции возвращают интерфейс ICalculator такого вида:

ICalculator=Interface
  procedure SetVariable(const AName: String; const Value: Double);
  procedure TrySetVariable(const AName: String; const Value: Double);
  Function Calc:Double;
End;{ICalculator}

Функции интерфейса:

SetVariable
Назначает переменную для выражения по имени. Если такой переменной нет — выкидывает исключение.
TrySetVariable
То же, что и предыдущая, только исключение тихо глотается.
Calc
Считает выражение и возвращает результат. Если есть какие-то неназначенные к этому моменту переменные — выкидывает исключение.

Все исключения, выбрасываемые калькулятором — наследники типа ECalc для удобства их перехвата.