LINUX.ORG.RU

[php] Вычисления

 


0

1

Всем привет!

Подскажите какую нибудь библиотеку или встроенную функцию, чтобы она посчитала результат вычислений в строке.
Есть строка типа "(3+6)*8/(7+15)", надо получить результат.

P.S. Php видел 2 раза в жизни, поэтому задаю такие вопросы.
Пытался гуглить, но ничего не нашел, видимо не так сформулировал.

★★★★★

Ответ на: комментарий от FollowTheRabbit

http://php.net/manual/en/function.eval.php

Этот вариант очень плох с точки зрения безопасности, так как позволяет выполнить _любой_ PHP-код. Так что если вычисляемое выражение будет запрашиваться у пользователя, и не будет проводится кучи проверок, то пользователь сможет выполнить любой код с правами интерпретатора PHP.

ИМХО гораздо лучше написать свой парсер и «считалку» подобных выражений. Тем более что парсер нужно писать и в случае использования eval, для отфильтровывания небезопасного кода.

Deleted
()
Ответ на: комментарий от Deleted

Хотя уже ответили, но какая куча проверок? Одной регулярки хватит. А свой парсер писать, в данном случае, это махровый велосипед.

FollowTheRabbit
()
Ответ на: комментарий от dizza

>Напиши, епт. Не прграммист, что ли?
Можно конечно и написать, но оно 100% уже давно написано, просто надо знать как называется.

ls-h ★★★★★
() автор топика
Ответ на: комментарий от FollowTheRabbit

Хотя уже ответили, но какая куча проверок? Одной регулярки хватит.

Если в выражении только +, -, скобки и числа, то да - хватит.

А свой парсер писать, в данном случае, это махровый велосипед.

А eval + проверки - это костыль. Я бы выбрал велосипед вместо костыля =).

Deleted
()
Ответ на: комментарий от Deleted

С учетом того, что в info bison имеется полный пример калькулятора, написание велосипеда парсера становится приятным занятием

annoynimous ★★★★★
()

я сразу захотел разделить на ноль, а потом ченить огроменное возвести в степень самого себя

VladimirMalyk ★★★★★
()
Ответ на: комментарий от Deleted

> Если в выражении только +, -, скобки и числа, то да - хватит.
а что вы туда хотите еще впихнуть? функции?
если в выражении только +, -, скобки и числа, парсер не займет много времени. Тем более, что задачка то обычно используется в качестве учебной и оптимальный алгоритм давно известен. Но на этом никто же не остановится. Потом понадобится функции впихнуть, переменные, вот это будет веселуха и скорость соответствующая...

А вызов библиотечной функции с предварительной верификацией аргументов - это не такой уж костыль.

FollowTheRabbit
()
Ответ на: комментарий от FollowTheRabbit

А вызов библиотечной функции с предварительной верификацией аргументов - это не такой уж костыль.

А ничего, что эта функция является интепретатором PHP? Не нужно подменять понятия. Костыль это.

dizza ★★★★★
()
Ответ на: комментарий от annoynimous

С учетом того, что в info bison имеется полный пример калькулятора, написание велосипеда парсера становится приятным занятием

Плюсую. Кстати примеры реализаций калькулятора есть в каждой второй нормальной книжке по программированию =). Точно помню, что в Страуструпе он где-то в пределах первых двухсот страниц...

Deleted
()
Ответ на: комментарий от ls-h

но оно 100% уже давно написано, просто надо знать как называется.

Быдлокодеры, такие быдлокодеры.

dizza ★★★★★
()
Ответ на: комментарий от trashymichael

пхп — костыль, и нечего тут спорить.

Не пхп костыль, костыль использовать полноценный яп как калькулятор для арифметики.

dizza ★★★★★
()

Лексический анализ + синтаксический методом рекурсивного спуска + обратная польская запись => можно считать любые выражения :)

sjinks ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.