Выполняет парсинг математического выражения и вычисляет его.
Калькулятор использует обратную польскую запись и содержит преобразователь из инфиксной нотации.
Парсер поддерживает бинарные операции и постфиксные и префиксные функции от одного параметра, приэтом помимо стандартных математических операций можно добавлять свои токены. Например, чтобы добавить операцию + необходимо выполнить следующий код:
parser.AddBinaryOperation(new BinaryOperationToken('+', (a, b) => a + b, 0, Associativity.Left));
Пользовательскую бинарную операцию можно добавить точно также:
parser.AddBinaryOperation(new BinaryOperationToken('f', (a, b) => a * b - a / b, 0, Associativity.Left));
Парсер содержит статический метод Default()
, он возвращает объект парсера в который уже добавлены основные математические операции.
Cписок доступных токенов:
- Бинарные операции:
- '+' сложение
- '-' вычитание
- '/' деление
- '*' умножение
- '^' возведение в степень(правоассоциативное)
- '%' деление по модулю
- Функции:
- '!' факторил
- 'sin()' синус
- 'cos()' косинус
- 'tan()' тангенс
- 'arcsine()' арксинус
- 'arccosine()' арккосинус
- 'arctan()' арктангенс
- 'sqrt()' квадратный корень
- 'abs()' модуль числа
- 'log()' логарифм по основанию e
- 'log10()' логарифм по сонованию 10
- 'round()' округление
- 'truncate()' отбрасывание дробной части числа
После парсинга строки на выходе получается список токенов в порядке польской записи, по которому можно уже посчитать значение выражения. Список можно сформировать не обязательно этим парсером, но и каким-либо другим.