Упрощение выражения

Материал из CAMaaS preliminary wiki
Версия от 13:47, 21 апреля 2019; Alinap95 (обсуждение | вклад) (Новая страница: «На этом этапе выполняется перемещение токенов-аргументов в хранилища параметров токено…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к навигации Перейти к поиску

На этом этапе выполняется перемещение токенов-аргументов в хранилища параметров токенов-функций ops, вычисление функций, у которых каждый аргумент является числом. Данная операция выполняется для каждого элемента списка до тех пор, пока в нем не останется только один элемент – корень дерева.

Алгоритм упрощения:

Simplify.jpg

В цикле 6-11 выполняется перенос токенов-аргументов внутрь функционального токена. Каждый токен имеет метод get_required_parameter_count(), который возвращает количество ожидаемых аргументов. Если токен не является функциональным (т.е. число или переменная), то число параметров будет равно 0 и цикл выполняться не будет. В обратной польской нотации при записи функции или оператора сначала идут аргументы (их порядок сохраняется), а затем сама функция/оператор. Т.к. param_it указывает на функциональный токен, то шаг 7 перемещает итератор назад к аргументу, после этого выполняется его перемещение и удаление из списка. На шаге 13 осуществляется попытка упростить выражение. Если все аргументы готовы, то на выходе получаем значение функции/оператора.