140
Для определения операционной семантики некоторой конструкции языка
достаточно в правые части правил исходной грамматики внести семантические
и резольверные символы и задать их интерпретацию в некоторой
операционной среде на некотором инструментальном языке
программирования. Планирование семантических преобразований
производится в контексте отдельного правила грамматики, точнее, каждой его
альтернативы (т.е. члена объединения). Следует исходить из того, что входная
цепочка реализуемого языка является заданием преобразований операционной
среды, которые выполняются по ходу ее сканирования и анализа.
Предполагается, что механизм анализа, сканируя входную цепочку,
сопоставляет некоторую ее часть с рассматриваемой альтернативой, как с
образцом, определяющим ее структуру. При этом подразумевается, что те
преобразования, которые заданы подцепочками, соответствующими
вхождениям нетерминалов в образец, уже выполнены во время сканирования
этих подцепочек. В данной же альтернативе правила необходимо определить
продолжение этих преобразований операционной среды, исходя из текущего ее
состояния.
Представление о текущем состоянии операционной среды складывается при
рассмотрении данной альтернативы по ее составу и правилам трансляционной
грамматики, определяющим нетерминалы, входящие в данную альтернативу, с
учетом семантик, используемых в упомянутых правилах.
Продолжение преобразований, ассоциированных с некоторым вхождением
нетерминала в данную альтернативу, задается путем вставки семантического
символа или даже последовательности таких символов после данного
вхождения нетерминала (т.е. справа) — для прямого просмотра или перед ним
(т.е. слева) — для обратного.
В отличие от описанной трактовки нетерминалов, предполагается, что с
вхождением терминала в образец не связаны никакие предварительные
преобразования. Они как раз и должны начаться в данной альтернативе в связи
с данным вхождением терминального символа. Для указания требуемых
преобразований, связанных с данным вхождением терминала, следует вставить
семантический символ или последовательность таких символов
слева от него
— для прямого просмотра, или
справа от него — для обратного.
Что касается резольверных символов, то размещение резольверной цепочки
слева от терминального символа (для прямого просмотра) или справа от него
(для обратного) определяет некоторое контекстное условие
105
, при выполнении
которого только и допустим данный символ.
Каждый новый резольверный или семантический символ полезно вносить в
реестр спецификаций, ассоциированных с такими символами предикатов и
преобразований операционной среды. Ведение такого реестра в процессе
написания трансляционной грамматики помогает повторно использовать уже
определенные семантики и резольверы в других правилах. В дальнейшем эти
спецификации используются при написании кода, реализующего
соответствующие предикаты и преобразования операционной среды.
105
Это условие — истинность конъюнкции предикатов, ассоциированных с резольверными
символами соответственно прямого или обратного просмотров.