Разработка компиляторов

       

Свертка (окончание)



увеличить изображение

Здесь мы рассмотрим суть неформальных действий, которые выполняются при свертке для того, чтобы построить машинный код. Как было объявлено раньше, нетерминалы соответствуют классам размещений значений, а правила - операндам машинных инструкций или самим машинным инструкциям.

Каждый шаг свертки обладает следующей информацией:

  1. текущим правилом (и, следовательно, машинной командой или операндом, который должен быть порожден)
  2. текущим нетерминалом (и, следовательно, размещением результата текущей команды или операнда)
  3. списком нетерминалов, из которых выводятся поддеревья текущей вершины (и, следовательно, списком размещений аргументов текущей команды или операнда)
  4. вообще говоря, результатами свертки поддеревьев (то есть машинным кодом, построенным для их вычисления)

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

На иллюстрации приведен пример такой разметки. Здесь аргументы команд обозначены точками снизу команды, результаты - точками сверху, пунктирные стрелки указывают на соответствующие вершины дерева.



Содержание раздела