Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsii_YaPiMT_ispravlennoe (2).docx
Скачиваний:
1
Добавлен:
01.03.2025
Размер:
343 Кб
Скачать
☆

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Определение: Пусть G(VT,VN,P,S) – КС грамматика. ∆-множество операционных символов. Каждому правилу A0→x1A1x2A2…xnAnXn+1 Р, где Ai VN, xi+1 VT*,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…xn P – правило АТ- грамматики, – семантическая функция для вычисления унаследованного атрибута α А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,например, значения атрибутов можно вычислить в таком порядке:

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

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

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

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

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

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

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

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

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

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]