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