Similar presentations:
Методы разработки компиляторов. Атрибутные грамматики
1.
Методы разработкикомпиляторов.
Атрибутные грамматики
Лекции по курсу
Методы разработки компиляторов
семестр 7, ФИИТ
Михалкович С.С.
2.
Атрибутные грамматикиКурс «Методы разработки компиляторов»
2
3.
ОпределенияОпределение. Атрибутная грамматика – расширение КС-грамматики,
при котором каждому символу (терминалу, нетерминалу) ставится в
соответствие конечное множество атрибутов (семантических
параметров) некоторого типа.
Для каждого правила грамматики определяется одно или несколько
семантических правил – функциональных зависимостей одних
семантических атрибутов от других.
Дерево разбора, включающее значения атрибутов в каждом узле,
называется аннотированным или украшенным, а процесс
вычисления атрибутов по дереву – аннотированием дерева разбора.
Курс «Методы разработки компиляторов»
3
4.
ПримерКурс «Методы разработки компиляторов»
4
5.
Интерпретатор по атрибутнойграмматике
Курс «Методы разработки компиляторов»
5
6.
Синтезированные атрибутыКурс «Методы разработки компиляторов»
6
7.
Унаследованные атрибутыКурс «Методы разработки компиляторов»
7
8.
Пример 2Курс «Методы разработки компиляторов»
8
9.
Пример 2 – AST-дерево и дереворазбора
AST-дерево и дерево вывода
Курс «Методы разработки компиляторов»
9
10.
Пример 2 – интерпретаторПосле построения AST-дерева добавим к каждому узлу метод eval()
для вычисления результата поддерева
Затем вызовем eval() для корня дерева
Данный подход лучше первого интерпретатора тем, что
• Вначале строится дерево и проверяются все ошибки (компилятор
в дерево)
• Можно запускать программу с различными исходными данными
без перекомпиляции (это быстрее)
Курс «Методы разработки компиляторов»
10
11.
Пример 3. Заполнение таблицысимволов по описанию переменных
Курс «Методы разработки компиляторов»
11
12.
Пример 3. Заполнение таблицысимволов по описанию переменных
Курс «Методы разработки компиляторов»
12
13.
Пример 3 – дерево разбораКурс «Методы разработки компиляторов»
13
14.
ВопросыВ каком порядке вычислять атрибуты?
Всегда ли существует порядок, в котором можно вычислить все
атрибуты?
Можно ли предложить один алгоритм для всех деревьев
разбора?
Курс «Методы разработки компиляторов»
14
15.
Определения, утвержденияКурс «Методы разработки компиляторов»
15
16.
Пример 4. Грамматика для представлениярациональных двоичных чисел
Курс «Методы разработки компиляторов»
16
17.
Пример 4. Грамматика 2 для представлениярациональных двоичных чисел
Курс «Методы разработки компиляторов»
17
18.
Пример 4. Грамматика 2 для представлениярациональных двоичных чисел
Курс «Методы разработки компиляторов»
18
19.
Пример 4. Дерево разбора и графзависимостей для 101.01
Выводы - ?
Курс «Методы разработки компиляторов»
19
20.
Пример 5. Символьное дифференцированиеКурс «Методы разработки компиляторов»
20
21.
Пример 5. Символьное дифференцирование(2)
Курс «Методы разработки компиляторов»
21
22.
S-атрибутные и L-атрибутные грамматикиКурс «Методы разработки компиляторов»
22
23.
Порядок вычислений в L-атрибутнойграмматике
Курс «Методы разработки компиляторов»
23
24.
Практический пример 34 + 23Курс «Методы разработки компиляторов»
24
25.
Калькулятор для нелеворекурсивнойграмматики
Курс «Методы разработки компиляторов»
25
26.
Курс «Методы разработки компиляторов»
26
27.
Калькулятор для нелеворекурсивнойграмматики (3)
Граф зависимости атрибутов
Курс «Методы разработки компиляторов»
27
28.
Построитель AST-дерева длянелеворекурсивной грамматики 3 + 4 + 5
Курс «Методы разработки компиляторов»
28
29.
Граф зависимостей для a - 4 + cКурс «Методы разработки компиляторов»
29
30.
В каком порядке вычислять атрибутыКурс «Методы разработки компиляторов»
30
31.
Q&AКурс «Методы разработки компиляторов»
31
informatics