31
и вместе с ней предложение входного языка определяются с учетом контекстных
условий, задаваемых резольверами. При этом предполагается, что резольверы
вычисляются синхронно с семантическими преобразованиями с учетом порядка
вхождения резольверных и семантических символов в управ-ляющую цепочку.
Синхронизация означает, что сначала вычисляются предика-ты, ассоциирован-
ные с резольверными символами, предшествующими терми-налу a
1
,
в порядке
следования резольверных символов. Если все они выполняяются, то испол-
няются преобразования операционной среды, ассоциированные с семантиче-
скими символами, предшествующими терминалу a
1
(также в тек-стуальном
порядке). Затем аналогичным порядком выполняются резольверы и семантики,
предшествующие терминалу a
2
, и т.д. Процесс заканчивается, когда успешно
завершается вычисление конъюнкции предикатов, следующих за символом a
m
, и
исполнение соответствующих семантик.
Синтаксически правильными считаются лишь те входные цепочки, которые
входят в состав управляющих, на которых выполняются все предикаты, ассо-
циированные с их резольверными символами. "Смысл" входного предложения x
представляется семантической цепочкой σ
1
σ
2
...σ
n
.
Если некоторому входному предложению соответствует несколько управ-
ляющих цепочек с разными семантическими составляющими, то такое пред-
ложение называется семантически неоднозначным. В SYNTAX-технологии
семантическая неоднозначность не допускается
28
. Однако использование ре-
зольверов во многих случаях помогает избегать этой опасности.
Приведем два примера трансляционных грамматик, одна из которых трак-
туется как анализирующая, а другая — как порождающая. Первый пример ил-
люстрирует спецификацию интерпретатора арифметических выражений (каль-
кулятора), а второй — вычисление функции факториал. Эти примеры обсуж-
даются далее на протяжении нескольких разделов в связи с рассмотрением раз-
личных аспектов использования SYNTAX-технологии. Как и во всех других
примерах в этой книге, управляющие грамматики записываются на языке TSL
29
, а
операционная среда представлена на языке программирования Borland Pascal 7.0.
1.3. АНАЛИЗИРУЮЩАЯ ТРАНСЛЯЦИОННАЯ
ГРАММАТИКА КАЛЬКУЛЯТОРА
Синтаксически управляемый калькулятор (спецификация которого дается в
этом разделе) вычисляет арифметические выражения, операндами которых яв-
ляются целые и вещественные числа, представленные в формате языка Пас-
каль. Допустимы арифметические операции: сложение, вычитание, умножение,
деление, а также унарные плюс и минус. Унарные операции можно использо-
вать подряд в любом количестве и последовательности. Круглые скобки также
употребимы.
Построение спецификации калькулятора обсуждается в гл. 5.
28
Фактически семантическая неоднозначность контролируется при построении управляющих
таблиц процессоров.
29
Описание языка TSL дано в гл. 8.