5.3.4. Расширенный вывод для АТ-грамматики
В качестве иллюстрации
описанного способа обработки атрибутов рассмотрим изображение расширенного
вывода в грамматике Г 5. 5.
Такой
вывод включает не только терминальные, нетерминальные и операционные символы,
но и атрибуты, значения которых еще не определены. Для отображения связей
между атрибутами, соответствующих операциям присваивания, воспользуемся
линейным выводом. Такой вывод строится следующим образом:
а) Переместим атрибуты с позиции индексов
в строку и поместим их непосредственно за соответствующим символом грамматики.
б) Каждому копирующему правилу, которое
соответствует шагу отложенных вычислений, поставим в соответствие дугу,
связывающую в цепочки вывода источник и приемник, и направленную от источника
к приемнику.
в) Множественным копирующим правилам
поставим в соответствие в выводимой цепочке последовательность дуг, связывающих
источник с приемниками.
г) Если в процессе вывода атрибут
получает значение, то это значение запишем в выводимую цепочку вместо имени
атрибута, а соответствующую дугу удалим.
д) При замене нетерминального символа
в выводимой цепочке он удаляется, но его атрибуты должны остаться на месте.
Линейный вывод цепочки с/1+с/2*с/3
в
грамматике Г 5. 5 можно
представить в следующем виде:
В приведенном выводе
атрибут каждого заменяемого нетерминального символа сохраняется в цепочке
вывода. Подстановка символа с определенным значением атрибута при выполнении
шагов 6, 9, 10 приводит к исключению из цепочки вывода всех промежуточных
атрибутов, определяющих пути передачи значения. Шаги 11 и 12 введены только
для того, чтобы показать, как операционные символы влияют на определение
значений атрибутов. В общем случае эти шаги можно совместить с шагом 10.