Статистические управляемые схемы перевода и атрибутные грамматики.

Формально процесс синтаксического анализа и синтеза объектной программы реализует преобразование синтаксического дерева текста программы на входном языке в текст эквивалентной формы объектной программы. Это преобразование и сложность его программной реализации существенно зависят от выбора объектного языка. Выбор последнего в синтаксически управляемых методах перевода тесно связан не только с синтаксической структурой входного языка, но и ориентирован на неё.

Хорошей теоретической моделью преобразований синтаксического дерева являются простые синтаксически управляемые схемы перевода. Они не учитывают контекстные соотношения в исходной программе, однако позволяют строить синтаксически правильные формы объектных программ. Объектная программа включает в себя понятие программ на объектом языке, семантически эквивалентной исходной программе. Степень адекватности первой программы по отношению ко второй будет зависеть от семантики исходной программы, которая в априори должна быть заложена в семантические процедуры анализа и определять суть семантического анализа и контроля. Обычно при семантическом анализе и контроле ограничиваются проверкой контекстных условий.

В трансляторах интерпретирующего типа проверка некоторых контекстных условий, например, соответствий видов значений, участвующих в операциях часто выполняется при интерпретации объектной программы.

Атрибутные грамматики (А – грамматики) в сочетании с методом синтаксически управляемого перевода позволяют учитывать контекстные условия при отображении синтаксического дерева в объектную программу. Понятие атрибутной трансляционной грамматики (АТ – грамматики), включающие два указанных понятия, будем использовать для построения отображения синтаксического дерева исходной программы в объектную программу.

Понятие атрибутивной трансляционной грамматики (АТ – грамматики), включающие два указанных понятия, будем использовать для построения отображения синтаксического дерева исходной программы в объектную программу.

Определение: КС-грамматика G(VT,VN,P,S) называется атрибутной, если выполняются следующие условия:

1) Каждому символу хVTVN сопоставлено два непересекающихся множества: множество синтезированных атрибутов А0 (х) и множество унаследованных атрибутов А1(х),А1(S)=к А(х)=хVT; пусть А(х)=А0(х)А1(х)

2) Каждый атрибут αимеет множество значений(возможно, бесконечное)

3) С каждым правилом X0→ X1X2…XnР,n≥0, связывается множество семантических правил, которые определяются функциями вида:

:xx…x->при ≤i≤n и некоторых αА(xi), если i=0 или αА1(xi), i>0, где t=t(i,α)≥0 и αjj(i,α)А(Xkj), 0≤kj=kj(i,α)≤n,i≤j≤t.

Другими словами функция задаёт правило вычисления значения атрибута α символа хi по значениям некоторых атрибутов символов X0,X1,…,Xn. Атрибутная грамматика связывает атрибуты с вершинами синтаксического дерева вывода. Семантические правила вычисления значений атрибутов, соответствующие правилу КС- грамматики, применяются для всех вхождений этого правила в дерево вывода. Синтезированные атрибуты некоторой вершины хранят информацию, которая синтезируется из поддерева этой вершины и передаётся вверх к корню дерева. Унаследованные атрибуты служат для хранения информации, которая передаётся сверху вниз от корня дерева к его листьям. Фактически унаследованные атрибуты определяют контекст, в котором погружена вершина вместе со своим поддеревом.

Контекстно-зависимые условия входного языка должны выражаться через ряд условий, входящих в семантические правила атрибутной грамматики. Эти условия должны выражать соотношения между значениями атрибутов, которые выполняются в дереве вывода правильной программы.

Описание семантики языка с помощью атрибутных грамматик позволяет определить «смысл» исходной программы, как значение одного или нескольких специальных атрибутов корня синтаксического дерева этой программы, т.к. главной задачей в процессе трансляции является получение объектной, то можно считать, что один из специальных атрибутов корня синтаксического дерева получает значение – последовательности операций абстрактной машины, т.е. объектную программу. Удобным формализмом для построения контекстно-свободной структуры объектной программы по синтаксическому дереву исходной программы является аппаратом простых синтаксически управляемых схем (СУ-схем) перевода.

 

Определение: Пусть G(VT,VN,P,S) – КС грамматика. ∆-множество операционных символов. Каждому правилу A0→x1A1x2A2…xnAnXn+1Р, где AiVN, xi+1VT*,0≤i≤n, будет соответствовать правило A0→y1A1y2A2…ynAnyn+1, yi+1∆*. Простой СУ – схемой называется пятёрка T=(VT,∆,VN,R,S), где R – множество пар правил (A0→x1A1x2A2…Anxnxn+1,A0→y1A1y2…ynAnyn+1). Обозначим пару таких правил через (A0→α,A0→α').

Множество пар терминальных цепочек (х,у)синхронно выводимых из пары цепочек (S,S) с помощью СУ –правил (A0→α,A0→α') называется простым синтаксически управляемым переводом.

Простая СУ-схема, является частным случаем атрибутикой грамматики. Если считать, что вторая компонента в каждом СУ-правиле определяет синтаксическое правило для вычисления значения специального синтезируемого атрибута, связанного с нетерминалом, стоящим в левой части этой компоненты.

Каждой синтаксически правильной исходной программе х простой СУ- перевод ставит в соответствие цепочку у из операционных символом, которая определяет некоторую контекстно-свободную форму объектной программы. Например, с помощью просто СУ-схемы легко получить польскую обратную запись различных конструкций входного языка.

Определение: КС-грамматика, у которой множество терминальных символов разбито на множество входных символов VT и множество операционных символов ∆ называется трансляционной. Предложения языка порождённые трансляционной грамматикой называется активными цепочками.

 

Реальный транслятор строит не только синтаксическую структуру объектной программы. Вхождениям операционных символов будут соответствовать вызовы семантических процедур.

Определение: Атрибутной трансляционной грамматикой называется трансляционная грамматика с атрибутами и семантическими правилами вычисления значений атрибутов.

Определение:АТ- грамматика называется L-атрибутной, если выполняются следующие условия:

1) Пусть x0→x1x2…xnP – правило АТ- грамматики, – семантическая функция для вычисления унаследованного атрибута αАi(xi) 1≤i≤n. Тогда каждый аргумент - либо атрибут βА1(x0), либо произвольный атрибут А(xj) 1≤j≤n.

2) Пусть - функция для вычисления синтезированного атрибута αА0(x0). Тогда каждый аргумент либо атрибут А1(x0), либо произвольный атрибут А(xj), 1≤j≤n.

3) Если Xi – операционный символ и αА0(xi), в функции все аргументы представляют собой унаследованный атрибуты этого символа.

Для правила A→BC,например, значения атрибутов можно вычислить в таком порядке:

a. Унаследованные атрибуты символа А;

b. Унаследованные атрибуты В;

c. Синтезированные атрибуты символа В;

d. Унаследованные атрибуты символа С;

e. Синтезированные атрибуты символы С;

f. Синтезированные атрибуты символа А.

Этот порядок соответствует обходу дерева сверху вниз и слева направо. Спускаясь вниз от вершины, вычисляем унаследованные атрибуты, поднимаясь вверх к вершине, вычисляем синтезированные атрибуты.

Операционные символы АТ – грамматики можно интерпретировать как вызовы семантических процедур, которые реализуют соответствующие семантические правила для вычисления (с учётом контекстных условий) специального атрибута <объектная программа>. Очевидно, контекстные условия должны определяться унаследованными атрибутами операционных символов. При передаче значений атрибутов операционные символы употребляются, когда требуется обозначить сложную операцию, связанную с проверкой контекстно-зависимых соотношений для атрибутов и с вычислением их значений.

В случае простой передачи достаточного с нетерминалом в левой части правила грамматики и соответствующим символом в правой части связать одно тоже имя атрибута. Каждое правило L-атрибутной грамматики можно интерпретировать, как описание рекурсивной процедуры, причём нетерминал в левой части правила принимают за имя процедуры, а его атрибуты – за параметры этой процедуры.

Вхождение нетерминалов в правую часть правила вместе с их атрибутами интерпретирующая как вызовы соответствующих процедур с параметрами. Последние замечания имеют значения в связи с возможностью реализации однопроходного транслятора для входного языка.