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



         

Пример



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

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

Неформально говоря данная грамматика используется для выбора команд для дерева выражения, состоящего из констант ( const ), переменных ( loc ), бинарного сложения ('+'), присваивания (' =') и косвенной адресации ( fetch).

Нетерминалы грамматики имеют следующий смысл: Imm - непосредственный операнд, Reg - регистр, Addr - адрес в памяти, Void - стартовый нетерминал. Таким образом, мы видим, что язык, определяемый грамматикой, действительно описывает внутреннее представление программы, а нетерминалы и правила машиннозависимы и отражают систему команд и элементы архитектуры устройства.

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




Содержание  Назад  Вперед