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