124
интерпретацию семантических и резольверных символов, быть может даже
меняя их набор и элементы операционной среды, следя лишь за сохранением
самой трансляции, т. е. результирующего состояния операционной среды для
всех входных цепочек (такие преобразования мы будем называть семанти-
чески эквивалентными
; очевидно, что любое синтаксически эквивалентное пре-
образование является также и семантически эквивалентным)
93
.
На практике используются обе возможности. Поскольку, как уже отмеча-
лось, исключение нетерминалов из правил благотворно сказывается не только
на эффективности процессора, но и на самой возможности его построения, то
начнем обсуждение с синтаксически эквивалентных преобразований, позво-
ляющих исключить все несамовставленные нетерминалы. Напомним, что не-
терминал A ∈N называется самовставленным, если существует вывод вида:
A αAβ, где α и β∈W
+
, W=N∪T ∪ℜ∪Σ.
Другими словами, нетерминал A — самовставленный, если он выводится
сам из себя в одновременно непустых левом (α) и правом (β) контекстах. Если
нетерминал не является самовставленным, то он несамовставленный. В по-
следнем случае он не может быть одновременно и лево- и право- рекурсивным,
т. е. таким, что одновременно существуют выводы вида:
A αA (праворекурсивность) и A Aβ (леворекурсивность).
И в самом деле, в противном случае из двух этих выводов можно было бы
построить вывод вида A αAβ.
Из теории формальных грамматик известно
94
, что язык, порождаемый КС-
грамматикой без самовставлений, является регулярным, т.е. распознаваемым
некоторым конечным автоматом
95
. По следствию из теоремы Клини в этом
случае существует регулярное выражение над терминалами грамматики,
представляющее тот же самый язык. Оно может быть получено посредством
эквивалентных преобразований ее правил.
Аналогичные синтаксически эквивалентные преобразования можно приме-
нять и к управляющим КС-грамматикам без самовставлений с целью получить
регулярное выражение над терминалами, резольверами и семантиками, специи-
фицирующее то же самое синтаксическое управление. И тогда по этому регу-
лярному выражению можно построить конечный процессор, реализующий ту
же самую трансляцию. Во всяком случае, исключение из грамматики несамо-
вставленных нетерминалов всегда возможно.
Далее описывается алгоритм решения этой задачи.
93
Синтаксически эквивалентные преобразования обсуждаются и иллюстрируются далее в
этой главе. Пример совместного использования синтаксических и семантических
преобразований приводится в гл.6.
94
См., например, [2].
95
Однако из этого не следует, что грамматика с самовставленными нетерминалами не
может порождать регулярный язык.