Я знаю, что эта тема действительно старая, но ее можно искать в Google.
Я пишу калькулятор TI-83 plus, который решает подобные проблемы. В моем случае я пытаюсь на самом деле решить уравнение для конкретной переменной по числу, но оно все равно может относиться к вашей проблеме, хотя я использую массив, поэтому мне будет проще выбрать конкретные значения. ..
Это не совсем сделано, но оно избавляет от подавляющего большинства скобок с (я думаю), несколько элегантным решением.
Что я делаю, так это просматриваю уравнение / функцию / что угодно, отслеживая каждую открывающую скобку "(" пока не найду закрывающую скобку ")", и в этот момент я могу быть уверен, что не столкнусь с какой-либо более глубоко вложенные скобки.
y = ((3x + (2))) сначала покажет (2), затем (3x + (2)), а затем ((3x + 2))).
Затем он проверяет значения непосредственно перед и после каждой круглой скобки. В случае выше, это возвратило бы + и). Каждому из них присваивается числовое значение. Между двумя из них используется высшее. Если операторы не найдены (*, /, +, ^ или -), я по умолчанию принимаю значение 0.
Затем я просматриваю скобки. Я использую аналогичную систему нумерации, хотя в этом случае я использую самое низкое найденное значение, а не самое высокое. Я по умолчанию на значение 5, если ничего не найдено, как было бы в случае выше.
Идея состоит в том, что вы можете присвоить число важности скобок, вычтя два значения. Если у вас есть что-то вроде ^ вне скобок
(2 + 3) ^ 5
эти скобки потенциально очень важны, и им будет дано большое значение (в моей программе я использую 5 для ^).
Возможно, однако, что внутренние операторы сделают скобки очень неважными,
(2) ^ 5
где ничего не найдено В этом случае внутреннему элементу будет присвоено значение 5. Вычитая эти два значения, вы можете определить, является ли необходимым набор скобок, просто проверив, больше ли полученное число больше 0. В случае (2 +3) ^ 5, a ^ даст значение 5, а + даст значение 1. Результирующее число будет 4, что будет означать, что скобки действительно нужны.
В случае (2) ^ 5 у вас будет внутреннее значение 5 и внешнее значение 5, в результате
в конечном значении 0, показывая, что круглые скобки не важны и могут быть удалены.
Недостатком этого является то, что (по крайней мере, на TI-83) сканирование по уравнению очень много раз смехотворно медленное. Но если скорость не проблема ...
Не знаю, поможет ли это вообще, я могу быть совершенно не в теме. Надеюсь, у вас все работает и работает.