- •Понятие транслятора. Структура транслятора. Фазы трансляции. Основные блоки транслятора.
- •Понятие транслятора. Многопроходная организация взаимодействия блоков транслятора.
- •Понятие транслятора. Однопроходная организация взаимодействия блоков транслятора.
- •Понятие транслятора. Комбинированные взаимодействия блоков транслятора.
- •Способы определения языков. Механизмы порождения и распознавания.
- •Формальные грамматики. Порождающие грамматики Хомского.
- •Конечные автоматы. Детерминированные конечные автоматы.
- •Конечные автоматы. Недетерминированные конечные автоматы.
- •Автоматы с магазинной памятью. Устройство автомата с магазинной памятью.
- •Автоматы с магазинной памятью. Детерминированные и недетерминированные автоматы с магазинной памятью.
- •Машина Тьюринга. Устройство машины Тьюринга. Отличия конечного автомата от машины Тьюринга.
- •Машина Тьюринга. Линейно-ограниченные автоматы.
- •Системы Линденмайера (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, называется множество терминальных цепочек, выводимых из начального символа грамматики. Или, формально, .
Итак, любой вывод цепочек языка мы должны начинать только с начального нетерминального символа. Если после произвольного конечного числа подстановок, выполненных в соответствии с правилами грамматики, полученная в результате цепочка состоит только из терминалов, то это цепочка является цепочкой порождаемого данной грамматикой языка. Отсюда ясны названия терминальные/нетерминальные символы. Только терминальные, окончательные символы могут встретиться в цепочках языка, заканчивающих вывод. Нетерминальные — это дополнительные, вспомогательные символы, необходимые для задания языка конечным набором правил.