.: [предыдущая | оглавление | следующая] :.

16.7 Алгоритм поиска и сокращенияподобных членов

В процессе преобразования выражения может образоваться несколько подобных членов. Например,

3.7 * a * b/c + a * b/c.

       Поэтому необходимо произвести сокращение подобных членов. Для нашего примера это 4.7 * a * b/c. Известно, что два выражения подобны, если отличаются друг от друга только множителем - константой. При сокращении подобных членов может быть две ситуации:
       1)члены подобны в списке аддитивных составляющих;
       2)члены подобны в мультипликативных составляющих.
       Во второй ситуации необходимо проверять операцию деления. Например,
a * b/a = > b.

       Таким образом, необходимо использовать два алгоритма сокращения подобных членов. В основе первого алгоритма лежит попарное сравнение поддеревьев узлов <T>, которые являются сыновьями некоторого узла <E>. Причем сравнение производится с учетом самого левого <D> в дереве, который может ссылаться на константу. Если два узла <T> совпали, то производится преобразование синтаксического дерева. Второй алгоритм работает несколько по-другому. Здесь производится попарное сравнение узлов <D>, некоторого узла <T>. Причем первый узел <D> берется из класса умножения, второй из класса деления. Если они совпадут, то производится преобразование синтаксического дерева: оба узла удаляются и вставляется узел <D> со ссылкой на "1" и определяется необходимость знака "умножить".
.: [предыдущая | оглавление | следующая] :.