
- •Понятие транслятора. Структура транслятора. Фазы трансляции. Основные блоки транслятора.
- •Понятие транслятора. Многопроходная организация взаимодействия блоков транслятора.
- •Понятие транслятора. Однопроходная организация взаимодействия блоков транслятора.
- •Понятие транслятора. Комбинированные взаимодействия блоков транслятора.
- •Способы определения языков. Механизмы порождения и распознавания.
- •Формальные грамматики. Порождающие грамматики Хомского.
- •Конечные автоматы. Детерминированные конечные автоматы.
- •Конечные автоматы. Недетерминированные конечные автоматы.
- •Автоматы с магазинной памятью. Устройство автомата с магазинной памятью.
- •Автоматы с магазинной памятью. Детерминированные и недетерминированные автоматы с магазинной памятью.
- •Машина Тьюринга. Устройство машины Тьюринга. Отличия конечного автомата от машины Тьюринга.
- •Машина Тьюринга. Линейно-ограниченные автоматы.
- •Системы Линденмайера (l-системы). Внутреннее устройство l-систем.
- •Системы автоматической генерации компиляторов. Основные спецификации и идеологии.
- •Системы автоматической генерации компиляторов. Проект Coco/r.
- •Системы автоматической генерации компиляторов. Проект Yacc.
- •Системы автоматической генерации компиляторов. Генерация лексического анализатора.
- •Системы автоматической генерации компиляторов. Генерация синтаксического анализатора.
- •Понятие компилятора. Этапы анализа исходной программы.
- •Понятие компилятора. Лексический анализ.
- •Понятие компилятора. Синтаксический анализ.
- •Понятие компилятора. Семантический анализ.
- •Понятие компилятора. Основные фазы компиляции.
- •Понятие компилятора. Генерация кода. Основные подходы к генерации кода. Понятие целевой машины.
- •Понятие компилятора. Оптимизация кода. Основные источники оптимизации.
Формальные грамматики. Порождающие грамматики Хомского.
В 1956 г. американский лингвист Ноам Хомский предложил модель порождающей грамматики, которая весьма удобна для задания искусственных языков. Особенность этой модели состоит в том, что каждой порождаемой цепочке языка эта модель позволяет сопоставить ее структуру.
Определение. Порождающей грамматикой Хомского G называется четверка объектов: G = (T, N, S, R), где:
□ Т - конечное непустое множество (терминальный словарь). Элементы множества T будем называть терминальными символами;
N - конечное непустое множество (нетерминальный словарь). Элементы множества N будем называть нетерминальными символами; множества N и T не пересекаются;
S
-
выделенный элемент нетерминального
словаря, S
N
так
называемый начальный символ;
R
- конечное непустое множество правил
(продукций), каждое из которых имеет
вид
,
где и
,
и
— это цепочки над объединенным словарем
T
N,
т.
е. составлены как из терминальных, так
и из нетерминальных символов.
Пример.
Рассмотрим
следующую грамматику Хомского:
,
где:
Определение.
Из
цепочки
непосредственно выводима цепочка
в грамматике G
(операция непосредственной выводимости
обозначается
,
или просто
,
если грамматика G
очевидна), если:
цепочку
можно представить как конкатенацию
трех цепочек,
(некоторые из этих цепочек могут быть
пустыми);
цепочку
также можно представить как конкатенацию
трех цепочек
;
в
грамматике G
есть продукция
"разрешающая" вместо подцепочки
т подстановку цепочки
.
Каждая грамматика Хомского G определяет
свое бинарное отношение, на множестве T N всех цепочек, составленных из терминальных и нетерминальных символов грамматики G: две такие цепочки находятся в этом отношении, если из первой можно получить вторую, используя какое-либо из правил грамматики G.
Таким образом, грамматика Хомского - это просто конечное число правил подстановки одних цепочек вместо других. С помощью этих правил можно преобразовывать цепочки символов: из одних цепочек можно получить другие цепочки. Правила грамматики — операции непосредственной подстановки — можно выполнять многократно, используя каждую следующую полученную цепочку как исходную для дальнейшего преобразования.
Определение.
Из
цепочки
выводима
цепочка
в грамматике G,
если существует конечное множество
цепочек
,
такое, что
,
и для всех i=1,..n
выполняется
.
Иными словами, цепочка выводима из цепочки в грамматике G, если можно получить из за конечное число шагов применения операции непосредственной выводимости.
Определение.
Языком,
порождаемым грамматикой G,
называется множество терминальных
цепочек,
выводимых из начального символа
грамматики. Или, формально,
.
Итак, любой вывод цепочек языка мы должны начинать только с начального нетерминального символа. Если после произвольного конечного числа подстановок, выполненных в соответствии с правилами грамматики, полученная в результате цепочка состоит только из терминалов, то это цепочка является цепочкой порождаемого данной грамматикой языка. Отсюда ясны названия терминальные/нетерминальные символы. Только терминальные, окончательные символы могут встретиться в цепочках языка, заканчивающих вывод. Нетерминальные — это дополнительные, вспомогательные символы, необходимые для задания языка конечным набором правил.