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

       

На иллюстрации показан пример построения


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



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

В качестве примера рассмотрим грамматику, приведенную на иллюстрации. Здесь в квадратных скобках указаны стоимости правил, в круглых - их номера.
Неформально говоря данная грамматика используется для выбора команд для дерева выражения, состоящего из констант ( const ), переменных ( loc ), бинарного сложения ('+'), присваивания (' =') и косвенной адресации ( fetch).
Нетерминалы грамматики имеют следующий смысл: Imm - непосредственный операнд, Reg - регистр, Addr - адрес в памяти, Void - стартовый нетерминал. Таким образом, мы видим, что язык, определяемый грамматикой, действительно описывает внутреннее представление программы, а нетерминалы и правила машиннозависимы и отражают систему команд и элементы архитектуры устройства.
Разметка дерева в соответствии с этой грамматикой приведена в правой части иллюстрации. Здесь также в квадратных скобках указана стоимость минимального вывода для данного нетерминала, в круглых скобках - номер правила, доставляющего минимальный вывод.

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