Оптимизация трёхадресного кода

Упражнение 1. Примените методики оптимизации базовых блоков, рассмотренные в лекции 14 (устранение локальных общих подвыражений, удаление неиспользуемого кода) к промежуточному коду, генератор которого разработан в предыдущей работе.

Упражнение 2 (**). Если Ваша реализация поддерживает (не бесконечную) рекурсию, примените в кодогенераторе оптимизацию хвостовой рекурсии. Для этого, вероятно, понадобится добавить в промежуточный код команду SetParam, позволяющую на месте перезаписать значение аргумента функции.