Опубликован: 23.07.2006 | Доступ: свободный | Студентов: 2218 / 892 | Оценка: 4.28 / 4.17 | Длительность: 21:37:00
Специальности: Системный архитектор
Лекция 15:

Выбор инструкций при генерации кода

Выводимость образцов


Для понимания того, как грамматики определяют язык, нам потребуется определить понятие выводимости образцов.

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

Правила грамматики в нормальной форме содержат в правой части образцы специального вида, однако в выводе будут встречаться образцы произвольной формы. Далее через leaves(p) мы будем обозначать множество листьев образца p , помеченных нетерминалами.

Пусть есть два образца p1 и p2, вершина v \in leaves(p_{1}) и правило грамматики R=N:p'. Будем говорить, что образец p2 выводится из образца p1 по правилу R , если v помечена нетерминалом N из левой части правила и p2 может быть получен подстановкой образца p' из правой части правила в образец p1 вместо вершины v .

Вывод в деревянной грамматике


Выводом в грамматике назовем последовательность троек

(p1,v1,R1),(p2,v2,R2),…,(pk,vk,Rk)

каждая из которых состоит из образца pi, вершины v \in leaves(p_{i}) и правила Ri , таких, что образец в каждой тройке, исключая первую, выведен применением правила из предыдущей тройки к образцу из предыдущей тройки относительно вершины из предыдущей тройки.

Для произвольных образцов p1 и pk определим DG(p1,pk) как множество всех выводов pk из p1.

Язык, определяемый грамматикой


Пусть есть грамматика G=(A,N,S,R) . Языком, определяемым G (обозначение L(G) ) назовем подмножество множества всех деревьев в алфавите A , для которых непусто множество выводов из тривиального дерева, единственная вершина которого помечена стартовым нетерминалом грамматики. Заметим, что такое дерево, так же, как и произвольное дерево в алфавите A , являются образцами.

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

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

Можно показать, что существуют деревянные языки, для которых невозможно их задание с помощью грамматики приведенного вида.