
- •Компиляция. Основные понятия. Контекст компилятора
- •Этапы, фазы и проходы
- •Фаза анализа. Основные понятия.
- •Фаза синтеза. Основные понятия.
- •Методы определения языка
- •Понятие регулярных выражений
- •Понятие грамматики
- •8.Иерархия грамматик по Хомскому
- •9 . Порождения синтаксические деревья
- •Неоднозначность
- •11.Понятие лексического анализа
- •12.Лексический анализ с помощью регулярных выражений
- •Лексический анализ с помощью конечных автоматов
- •14. Лексический анализ с помощью Lex
- •15. Нисходящий анализ. Критерии принятия решений.
- •16. Понятие ll(1)-грамматики
- •17. Рекурсивный спуск. Расширенная форма записи правил для исключения рекурсивных вызовов.
- •18. Рекурсивный спуск. Комбинирование рекурсии и итерации.
- •19. Преобразование грамматик. Удаление левой рекурсии
- •20. Преобразование грамматик. Факторизация
- •21. Введение действий в грамматику
- •22. Восходящий синтаксический анализ. Основные понятия. Критерий принятия решений
- •Восходящий синтаксический анализ. Таблица синтаксического анализа.
- •25. Характеристический конечный автомат.
- •Восходящий синтаксический анализ. Slr(1), lalr(1), общий алгоритм формирования таблицы lr(1)-анализа.
- •Восходящий синтаксический анализ. Генератор восходящих анализаторов yacc. Основные понятия.
- •Семантический анализ. Не-контекстно-свободные характеристики языков.
- •Семантический анализ. Таблица символов.
- •Семантический анализ. Таблица типов.
- •31.Семантический анализ. Таблицы функций. Таблицы меток
- •32. Распределение памяти. Классификация памяти
- •33. Распределение памяти. Стек времени выполнения. Определение области видимости.
- •34. Распределение памяти. Стековый фрейм.
- •35. Распределение памяти. Дисплей.
- •35. Адреса времени компиляции. Простые адреса. Адресация элементов статического массива.
- •37. Распределение памяти. Адреса времени компиляции. Адреса динамического массива
- •38. Куча. Основные понятия. Методы автоматического освобождения памяти.
8.Иерархия грамматик по Хомскому
Хомский определил 4 класса грамматик, которые назвал грамматиками 0-го…3-го типов. Грамматики 0-го типа или рекурсивно перечислимые грамматики. Грамматики 1-го типа –контекстно-зависимые, грамматики 2-го типа - контекстно-свободные, грамматики 3-го типа- регулярные грамматики. Грамматика являющаяся праволинейной называется регулярной. Язык, который можно сгенерировать с помощью регулярной грамматики, называется регулярным.
Хомский определил четыре класса грамматик:
0-го типа или рекурсивно-перечеслимые, определяются как все грамматики, которые соответствуют данному выше определению без ограничений на типы продукций.
Грамматики 0-го типа эквивалентны машинам Тьюринга в том смысле, что для любой данной грамматики 0-го типа существует машина Тьюринга, которая допускает, и только допускает, все предложения, сгенерированные данной грамматикой. И наоборот, для данной машины Тьюринга существует грамматика 0-го типа, которая генерирует точно все предложения, допускаемые машиной Тьюринга.
1-го типа или конткстно-зависимые. Определяются наложением следующего ограничения на продукции грамматики 0-го типа.
Д
ля
всех продукций вида
выполняется условие, что
Если обратиться к теории автоматов, грамматики 1-го типа эквивалентны линейно ограниченным автоматам в том же смысле, как грамматики 0-го типа эквивалентны машинам Тьюринга.
2-го типа или контектсно-свободная, определяется наложением
следующего ограничения на грамматику 1-го типа.
В левой части продукции должен находиться только один нетерминал
Грамматики 2-го типа эквивалентны магазинным автоматам.
4. 3-го типа или регулярные грамматики – праволинейные или леволинейные
грамматики
Праволинейная грамматика – если в правой части продукции
грамматики присутствует нетерминал, то он должен
находится только справа от терминала
Леволинейная грамматика - если в правой части продукции
грамматики присутствует нетерминал, то он должен
находится только
слева от терминала.
В грамматики 2-го и 3-го типа полезно добавить продукцию вида
9 . Порождения синтаксические деревья
Порождение предложения xxxxyyyy для языка
является единственным, генерирующим данное конкретное предложение.
В
прочем,
в общем случае порождения не являются
уникальными.
Например следующий язык
Предложения которого генерируются следующими продукциями
Предложение xxxyy может быть сгенерировано порождениями
Если на каждом шаге порождения заменяется крайний левый нетерминал сентенциальной формы, такое порождение называется левым (leftmost). Соответсвенно второе из рассмотренных порождений называется правым (rightmost).
Существуют порождения, которые не являются ни левыми, ни правыми.
Стоит обратить внимание, что в регулярных грамматиках для каждой строки существует единственное порождение. Прежде всего это связано с тем, что в сентенциальной форме имеется не более одного нетерминала.
П
орождение
можно описать с
помощью
синтаксического
дерева (или
дерева
синтаксического разбора).