
89
Если прямой просмотр завершается успешно, то это гарантирует существо-
вание по крайней мере одного полного маршрута, порождающего просканиро-
ванную входную цепочку (при условии, конечно, что контекстные условия,
тестируемые резольверами обратного просмотра, выполняются). Сколько бы
их ни было, все они могут быть определены путем их "попятного" прослежива-
ния. А именно: обратный просмотр, сканируя поток состояний прямого про-
смотра в обратной последовательности, за концы полных маршрутов, "вытяги-
вает" из пучка с обрывами все целые нити полных порождающих маршрутов
для данной входной цепочки. Если такой маршрут единственен, то цепочка
входного языка синтаксически однозначна. В противном случае обратный про-
смотр требует, чтобы все эти маршруты были семантически равнозначны отно-
сительно семантик обратного просмотра. Заметим, что параллельное продви-
жение по маршрутам в прямом и обратном направлениях происходит в зависи-
мости от входных символов
59
и контекста — состояния операционной среды,
тестируемого резольверами соответствующего просмотра.
Разумеется, возможность построения процессора такого рода обусловлива-
ется некоторыми ограничениями, накладываемыми на управляющую грамма-
тику (граф-схему). Эти ограничения обсуждаются в разд.3.3, где описывается
метод построения челночного процессора. Все они следуют из априорного тре-
бования детерминированности процессора. Однако детерминированность ав-
томатически не подразумевает синтаксическую однозначность. Допускается
использование синтаксически неоднозначных управляющих грамматик (граф-
схем) с тем лишь условием, что все возможные деревья вывода (или их аналоги
в RBNF-грамматиках) любой синтаксически неоднозначной цепочки входного
языка совпадают с точностью до меток
60
нетерминальных вершин. Очевидно,
что использование резольверов существенно снижает вероятность неоднознач-
ности.
Двухпросмотровая техника анализа, естественно, предполагает разделение
семантик и резольверов по просмотрам в зависимости от того, на каком про-
смотре они выполняются. Это находит свое отражение в языке TSL (списки
Forward/Backward semantics/resolvers).
Прямой просмотр реализуется процессором, описанным в разд.1.3. Он
управляется таблицами δ
1
, δ
2
, δ
3
, тогда как процессор обратного просмотра
управляется лишь таблицами δ
1
и δ
2
с теми особенностями, что в качестве
входных символов используются состояния прямого просмотра, а магазинные
цепочки — не более чем односимвольные: они представляют непосредственно
возвратные состояния
61
.
Обратный просмотр продолжает модификацию состояния операционной
среды, начатую прямым просмотром.
В тех случаях, когда семантики обратного просмотра не используются,
трансляция реализуется за один прямой просмотр. Именно такие случаи были
представлены в гл.1.
59
В роли которых на обратном просмотре выступают состояния прямого просмотра.
60
Т. е. такие деревья, если их несколько, имеют одинаковую структуру и могут отличаться
разве лишь метками нетерминальных вершин.
61
Именно поэтому обратный просмотр не использует таблицу возвратных состояний (δ
3
).