Что было бы хорошим алгоритмом или, по крайней мере, частью кода для синтаксического анализа и вычисления некоторого пользовательского математического выражения?PHP-анализ пользовательского математического выражения MATLAB style
Например:
abs(add(subtract(5,10),abs(add(2,4))))
Другой пример:
abs(add(add(2,6),subtract(7,multiply(-1,multiply(-1,5)))))
Так что будет оценивать 5-10 = -5, а затем 2 + 4 = 6. абсолютное значение 6 просто 6. Затем следующая операция равна -5 + 6 = 1, а абсолютная величина равна 1.
Так пытаясь найти решение для разбора чего-то подобного без использования eval().
Вот что я пробовал до сих пор.
$expr = "abs(add(subtract(5,10),abs(add(2,4))))";
$expr_array = preg_split("/(subtract\()/", $expr, NULL, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
foreach($expr_array as $key => $value) {
$value = preg_replace("/(\)|\()/", "", $value);
echo $value."\n";
}
это только делает
absadd вычитать 5,10, absadd2,4
Но еще нужен хороший метод для разбора через него и различать операндов внутри() для каждого. Если бы это был тот же формат, было бы проще.
Я подумал об использовании preg_split для синтаксического анализа строки, а также создания отдельных массивов для операнда, а другой для чисел, но некоторые из чисел являются фактическим операндом с числами в нем, как abs (add (2,4). Идеи?
не очень хороший подход пока, следовательно, почему я не задаю вопрос. –
нет ответов, кажется, что это действительно сложный алгоритм, то –