![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Обобщенные схемы синтаксически управляемого перевода
Расширим определение СУ-схемы, с тем чтобы выполнять более широкий класс переводов. Во-первых, позволим иметь в каждой вершине дерева разбора несколько переводов. Как и в обычной СУ-схеме, каждый перевод зависит от прямых потомков соответствующей вершины дерева. Во- вторых, позволим элементам перевода быть произвольными цепочками выходных символов и символов, представляющих переводы в потомках. Таким образом, символы перевода могут повторяться или вообще отсутствовать. Определение. Обобщенной схемой синтаксически управляемого перевода (или трансляции, сокращенно: OСУ-схемой) называется шестерка 1. 2. R - конечное множество правил перевода вида A -> u, A1 = v1,..., Am = vm, удовлетворяющих следующим условиям: 1. 2. каждый символ, входящий в v1,..., vm, либо принадлежит 3. если u имеет более одного вхождения символа B, то каждый символ Bk во всех v соотнесен (верхним индексом) с конкретным вхождением B. A -> u называют входным правилом вывода, Ai - переводом нетерминала A, Ai = vi - элементом перевода, связанным с этим правилом перевода. Если в ОСУ-схеме нет двух правил перевода с одинаковым входным правилом вывода, то ее называют семантически однозначной. Выход ОСУ-схемы определим снизу вверх. С каждой внутренней вершиной n дерева разбора (во входной грамматике), помеченнойA, свяжем одну цепочку для каждого Ai. Эта цепочка называется значением (или переводом) символа Ai в вершине n. Каждое значение вычисляется подстановкой значений символов перевода данного элемента перевода Ai = vi, определенных в прямых потомках вершины n. Переводом Пример 5.4. Рассмотрим формальное дифференцирование выражений, включающих константы 0 и 1, переменную x, функцииsin и cos, а также операции * и +. Такие выражения порождает грамматика E -> E + T | T T -> T * F | F F -> (E) | sin (E) | cos (E)|x|0|1 Свяжем с каждым из E, T и F два перевода, обозначенных индексом 1 и 2. Индекс 1 указывает на то, что выражение не дифференцировано, 2 - что выражение продифференцировано. Формальная производная - это E2. Законы дифференцирования таковы: 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 = 1d0 = 0d1 = 0Эти законы можно реализовать следующей ОСУ-схемой: E -> E + T E1 = E1 + T1 E2 = E2 + T2E -> T E1 = T1 E2 = T2T -> T * F T1 = T1 * F1 T2 = T1 * F2 + T2 * F1T -> F T1 = F1 T2 = F2F -> (E) F1 = (E1) F2 = (E2)F -> sin (E) F1 = sin (E1) F2 = cos (E1) * (E2)F -> cos (E) F1 = cos (E1) F2 = - sin (E1) * (E2)
Дерево вывода для sin (cos (x)) + x приведено на рис. 5.1.
|