PHP Math Lexer?

Привет всему хабрасообществу.


Подскажите пожалуйста, есть ли какой-то универсальный математический парсер на PHP?


Суть задачи:

Есть простая строка, в которой присутвуют числа, функции, операнды. К примеру:

0.85 + 1.15
(2^3 - 200) * 2
abs(-100) + sin(0.75) - 2
2*3*(0.55 + 0.15) / 100


И необходимо вернуть результат исполнения этой строки как математического выражения.


Все эти строки будут сохраняться в БД, в результате и возникла мысль найти (написать) математический парсер.


Есть также некоторые пожелания:

1. Внедрение переменных.
$mathParser = new MathParser(':a * :b');
$mathParser
  ->setVariable('a', 0.25)
  ->setVariable('b', 0.35);

$result = $mathParser->getResult();



2. Внедрение собственных функций.
$mathParser = new MathParser('my_func(:a)');
$mathParser
  ->setVariable('a', $myVariable)
  ->addFunction('my_func', function($a) { return abs($a); } );

$result = $mathParser->getResult();



3. Хороший контроль синтаксических ошибок (Для проверки перед исполнением/сохранением).

UPDATE:

Поркомендовали посмотреть:

1. github.com/SymDevStudio/MathExecutor
  • Вопрос задан
  • 3335 просмотров
Пригласить эксперта
Ответы на вопрос 1
AxisPod
@AxisPod
Ну и возьмите MathExecutor, он очень даже прост, можно без проблем добавить свои функции.

Свой (но на C++), что-то за пару дней реализовал, на самом деле Обратная Польская Запись очень легка в обработке, а сконвертировать обычную запись в ОПЗ ничего сложного из себя не представляет, алгоритмы все описаны в инете.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы