Расширим определение СУ-схемы, с тем чтобы выполнять
более широкий класс переводов. Во-первых, позволим иметь в каждой вершине дерева разбора несколько переводов. Как и в обычной СУ-схеме, каждый перевод зависит от прямых потомков соответствующей вершины дерева. Во-вторых, позволим элементам перевода быть произвольными цепочками выходных символов и символов, представляющих переводы в потомках. Таким образом, символы перевода могут повторяться или вообще отсутствовать.
Определение. Обобщенной схемой синтаксически управляемого перевода (или трансляции, сокращенно: OСУ-схемой) называется шестерка Tr = (N, T,




A

удовлетворяющих следующим условиям:







во всех v соотнесен (верхним индексом) с конкретным вхождением B.
A

Выход ОСУ-схемы определим снизу вверх. С каждой внутренней вершиной n дерева разбора (во входной грамматике), помеченной A, свяжем одну цепочку для каждого Ai. Эта цепочка называется значением (или переводом) символа Ai
в вершине n. Каждое значение вычисляется подстановкой значений символов перевода данного элемента перевода Ai = vi, определенных в прямых потомках вершины n.
Переводом

грамматике для Tr и y - значение выделенного символа перевода Sk в корне этого дерева}.
Пример 5.4.
Рассмотрим формальное дифференцирование выражений, включающих константы 0 и 1, переменную x, функции sin и cos , а также операции * и +. Такие выражения порождает грамматика
E ![]() |
|
T ![]() |
|
F ![]() |
|
| d(f(x) + g(x)) = df(x) + dg(x) |
| d(f(x) * g(x)) = f(x) * dg(x) + g(x) * df(x) |
| d sin (f(x)) = cos (f(x)) * df(x) |
| d cos (f(x)) = - sin (f(x))df(x) |
| dx = 1 |
| d0 = 0 |
| d1 = 0 |
E ![]() | E1 = E1 + T1 |
| E2 = E2 + T2 | |
E ![]() | E1 = T1 |
| E2 = T2 | |
T ![]() | T1 = T1 * F1 |
| T2 = T1 * F2 + T2 * F1 | |
T ![]() | T1 = F1 |
| T2 = F2 | |
F ![]() | F1 = (E1) |
| F2 = (E2) | |
F ![]() | F1 = sin (E1) |
| F2 = cos (E1) * (E2) | |
F ![]() | F1 = cos (E1) |
| F2 = - sin (E1) * (E2) | |
F ![]() | F1 = x |
| F2 = 1 | |
F ![]() | F1 = 0 |
| F2 = 0 | |
F ![]() | F1 = 1 |
| F2 = 0 | |
![]()
|