Библиотека умеет парсить выражения с математическими знаками (+, -, *, /), а также делением по модулю (mod) и возведением в степень (^). Скобки поддерживаются. Функции не поддерживаются.
Деление по модулю выполняется с предварительным округлением операндов.
Вся логика лежит в одном модуле, который использует стандартные Delphi’йские модули (SysUtils, Contnrs, Classes, Math).
Пользователю доступны две функции:
CreateCalculator(Const Expression:String):ICalculator;CreateCalculatorLocale(Const Expression:String):ICalculator;
Различаются тем, что первая в качестве десятичной запятой использует символ ".", а вторая — символ в текущей локали.
Функции принимают математическое выражение и тут же его парсят. Если в выражении есть ошибка, вызывается исключение.
Обе функции возвращают интерфейс 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 для удобства их перехвата.