Теория и реализация языков программирования



             

Обобщенные схемы синтаксически управляемого перевода - часть 2


Такие выражения порождает грамматика

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 = 1 d0 = 0 d1 = 0

Эти законы можно реализовать следующей ОСУ-схемой:

E

E + T E1 = E1 + T1 E2 = E2 + T2 E
T E1 = T1 E2 = T2 T
T * F T1 = T1 * F1 T2 = T1 * F2 + T2 * F1 T
F T1 = F1 T2 = F2 F
(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)


Рис. 5.1. 

F

x F1 = x F2 = 1 F
0 F1 = 0 F2 = 0 F
1 F1 = 1 F2 = 0

Дерево вывода для sin (cos (x)) + x приведено на рис. 5.1.




Содержание  Назад  Вперед