Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ТЯП_шпоры.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
3.21 Mб
Скачать

Вопрос 49

Транслирующие грамматики

В простых СУ-схемах можно объединить левые и правые части соответствующих правил входной и выходной грамматик. Получающиеся таким образом грамматики принято называть транслирующими грамматиками (Т-грамматиками). Символы выходного алфавита  в Т-грамматике называют операционными символами. При записи Т-грамматики каждый операционный символ во избежание путаницы каким-либо образом выделяют. Будем заключать такой символ в прямоугольные скобки.

Пример 5.4. Определение Т-грамматики для перевода инфиксных логических выражений в ПОЛИЗ: VT = {, , , имя, (, )}; = {[], [], [], [имя]}; S – начальный символ, правила R имеют вид:

1) SE 2) EET[] 3) ET 4) TTF[]

5) TF 6) F(E) 7) F F[] 7) Fимя[имя]

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

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

Пример 5.5. Активная цепочка с[с]b[b]a[a][][] описывает процесс трансляции входной цепочки cba (исключили из активной цепочки операционные символы) в ПОЛИЗ [c][b][a][][] (исключили из активной цепочки терминалы). Действительно, существует вывод:

S Е ЕТ[]  ТТ[]  FT[]  c[c]Т[]  c[c]TF[][]   c[c]FF[][]  c[c]b[b]F[][]  c[c]b[b]a[a][][].

Пара (cba, [c][b][a][][]) принадлежит переводу инфиксных выражений в ПОЛИЗ. В этом примере каждый операционный символ обозначает выдачу соответствующего входного символа в выходную строку.

Вопрос 50

Каждому символу формальной грамматики присущ класс и значение. Например, если символом Е обозначено арифметическое выражение, то с ним может быть связано числовое значение, адрес памяти для числа, тип числа, признак обнаруженной в выражении ошибки и т.д. Все это значения символа Е.

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

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

Наследуемые атрибуты в некотором узле являются функциями атрибутов его узла-предка и (или) узлов-потомков этого предка. Такие атрибуты могут распространять информацию в противоположном направлении.

КС-грамматика, снабженная атрибутами, сохраняет свои обычнее свойства и вместе с тем позволяет формально учесть контекстно-зависимые условия языка. А элементы контекстной зависимости присутствуют во всех языках программирования.

Рассмотрим суть синтезируемых атрибутов на примере.

Пример 5.6. Пусть синтаксический анализатор арифметических выражений выдает численное значение выражения. В этом примере операндами могут быть только константы. Т-грамматика выражений содержит единственный операционный символ (обозначим его [ЗНАЧ]) и имеет вид:

1) S Е[ЗНАЧ] 2) Е Е-Т 3) E T

4) T T/F 5) T F 6) F  (E) 7) F C

где VN = {S, E, T, F}, VT = {-, /, (,), С}, S – начальный символ; С - константа, значение которой во внутреннем представлении построил лексический анализатор.

Возьмем строку С12/(С9С3) в качестве входной для синтаксического анализатора. В этом выражении подстрочными индексами указаны значения констант, которые и будем считать их атрибутами. Построим дерево разбора активной цепочки С12/(С9С3)[ЗНАЧ]2 и снабдим нетерминалы (в узлах дерева) значениями синтезируемых атрибутов (рисунок 5.4а).

1) S Еq[ЗНАЧ]r

r = q

2) Еp Еq Тr

p = q - r

3) Ep Tq

p = q

4) Tp Tq/Fr

p = q/r

5) Tp Fq

p = q

6) Fp  (Eq)

p = q

7) Fp Cq

p = q

а) дерево разбора б) АТ-грамматика

Рисунок 5.4 – Разбор активной цепочки С12/(С9С3)[ЗНАЧ]2

Значение выражения формируется из значений его подвыражений по правилам (формулам), соответствующим правилам грамматики. Представим эти формулы математически, для чего в каждом правиле грамматики предусмотрим различные имена для разных значений атрибутов, а затем запишем соответствующие формулы. Атрибутом снабжается каждый нетерминал правила грамматики. Имена атрибутов обычно записывают как подстрочные индексы. Например, правилу Е Е - Т транслирующей грамматики соответствуют правило Ер Eq - Tr и формула р = q - r. Обозначения атрибутов в различных правилах не имеют между собой ничего общего и могут быть одинаковыми.

Полученные таким образом правила называют атрибутными, а грамматику с атрибутными правилами и формулами для атрибутов - атрибутной транслирующей грамматикой (АТ-грамматикой).

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