Сопоставление строк - это просто низко висящий фрукт, очевидные случаи.Более сложные случаи, когда вы делаете похожие вещи, но в другом порядке.Например, предположим, что у вас есть:
X+Y
Y+X
Ваш подход сопоставления строк не поймет, что это эффективно то же самое.Если вы хотите пойти немного глубже, я думаю, что вам нужно проанализировать формулы в AST и сравнить их.Если вы это сделаете, вы увидите, что дерево на самом деле одно и то же, поскольку бинарный оператор '+' является коммутативным.
Вы также можете применять правила сокращения, чтобы вы могли вычислять сложные функции в более простые, например:
(X * A) + ( X * B)
X * ( A + B )
Это тоже самое!Сопоставление строк не поможет вам там.
- Разбор в AST
- Сокращение и оптимизация функций
- Сравнение полученного AST с другими AST
Если вы найдете совпадениезатем замените их вызовом общей функции.