Я работаю над сценарием VBA, который анализирует строку ввода пользователя для последующей оценки.Мне удалось объяснить это следующим образом, где буквы - это переменные, которые содержат строки, числа или другие функции для оценки позже.Они сравниваются в операторах AND / OR, которые имеют неопределенные переменные, поэтому я не могу просто оценить их заранее.Таким образом, я упростил это:
( ( [$$FIELD_1] [$$REL_GREATER_THAN] [$$FUNC_ROUND_OPEN] 6000.25
[$$FUNC_ROUND_CLOSE] AND [$$FIELD_1] [$$REL_LESS_THAN] [$$FUNC_ABS_OPEN]
[$$FUNC_FLOOR_OPEN] - 7000.99 [$$FUNC_FLOOR_CLOSE] [$$FUNC_ABS_CLOSE] OR
[$$FIELD_1] [$$REL_LESS_THAN] [$$FIELD_3] ^ 2 + 8 ) AND ( [$$STRING_1] &
[$$STRING_2] & [$$STRING_3] [$$REL_NOT_EQUAL] [$$FIELD_5] & [$$STRING_4] &
[$$FIELD_4] ) ) OR [$$FIELD_6] [$$REL_EQUAL] [$$STRING_5]
, заменив логические переменные, а я заменил И на умножение, ИЛИ на сложение:
( ( A * B + C ) * ( D ) ) + E
Теперь мне нужно сделать следующее:расширить это с помощью дистрибутивного свойства алгебры.Результат будет выглядеть примерно так:
A*B*D + C*D + E
, в который я затем смогу начать подстановку значений обратно.
Порядок, в котором находятся термины, на самом деле не имеет значения, его просто нужно сгруппироватьв умножение или сложение.Это стало гораздо более сложной проблемой, чем я думал вначале, потому что мне нужно, чтобы он был достаточно устойчивым для работы с другими уравнениями, а не только с одним конкретным примером.
Я искал что-то встроенное в VBA, способное сделать этоестественно, но я еще ничего не нашел.Это аналогичный вопрос, но для Java и C: Разбор нестандартной формы в стандартную форму в java .К сожалению, единственный ответ там по сути сводился к «просто разбери его» ... с этой частью мне нужна помощь.
Как я могу программно определить эти дистрибутивные расширения?Есть ли алгоритм для этого?