
- •Компиляция. Основные понятия. Контекст компилятора
- •Этапы, фазы и проходы
- •Фаза анализа. Основные понятия.
- •Фаза синтеза. Основные понятия.
- •Методы определения языка
- •Понятие регулярных выражений
- •Понятие грамматики
- •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. Куча. Основные понятия. Методы автоматического освобождения памяти.
Компиляция. Основные понятия. Контекст компилятора
Этапы, фазы и проходы
Фаза анализа. Основные понятия.
Фаза синтеза. Основные понятия.
Методы определения языка
Понятие регулярных выражений
Понятие грамматики
Иерархия грамматик по Хомскому
Порождения, синтаксические деревья
Неоднозначность
Понятие лексического анализа
Лексический анализ с помощью регулярных выражений
Лексический анализ с помощью конечных автоматов
Лексический анализ с помощью Lex
Нисходящий анализ. Критерии принятия решений.
Понятие LL(1)-грамматики
Рекурсивный спуск. Расширенная форма записи правил для исключения рекурсивных вызовов.
Рекурсивный спуск. Комбинирование рекурсии и итерации.
Преобразование грамматик. Удаление левой рекурсии
Преобразование грамматик. Факторизация
Введение действий в грамматику
Восходящий синтаксический анализ. Основные понятия. Критерий принятия решений
Восходящий синтаксический анализ. Таблица синтаксического анализа.
Восходящий синтаксический анализ. Построение таблицы синтаксического анализа.
Восходящий синтаксический анализ. Характеристический конечный автомат.
Восходящий синтаксический анализ. SLR(1), LALR(1), общий алгоритм формирования таблицы LR(1)-анализа.
Восходящий синтаксический анализ. Генератор восходящих анализаторов YACC. Основные понятия.
Семантический анализ. Не-контекстно-свободные характеристики языков.
Семантический анализ. Таблица символов.
Семантический анализ. Таблица типов.
Семантический анализ. Таблицы функций. Таблицы меток.
Распределение памяти. Классификация памяти.
Распределение памяти. Стек времени выполнения. Определение области видимости.
Распределение памяти. Стековый фрейм.
Распределение памяти. Дисплей.
Распределение памяти. Адреса времени компиляции. Простые адреса. Адресация элементов статического массива.
Распределение памяти. Адреса времени компиляции. Адресация динамического массива.
Куча. Основные понятия. Методы автоматического освобождения памяти.
Компиляция. Основные понятия. Контекст компилятора
Компилятор – программа, которая считывает текст программы, написанной на исходном, и транслирует (переводит) его в эквивалентный текст на целевом языке.
В зависимости от предназначения, принципов и технологии создания компиляторы могут быть
Однопроходные
Многопроходные
Исполняющие
Отлаживающие
Оптимизирующие
Основные понятия.
Анализ – разбиение исходной программы на составные части
Синтез – конструирование целевой программы
Контекст компилятора.
При создании целевой программы, кроме компилятора, могут потребоваться и другие программы.
Этапы, фазы и проходы
Логически процесс компиляции разделяется на этапы, которые в свою очередь разделяются на фазы. Физически компилятор разделяется на проходы. Основными этапами компиляции является анализ (определение структуры и значений исходного кода) и синтез (построение целевого кода). Может быть этап предварительной обработки, в которой происходит присоединение исходных файлов, развертывание макросов. Этап анализа принято разделять на 3 отдельных фазы: 1.Лексический анализ. 2.Синтаксический анализ. 3.Семантический анализ. Этап синтеза состоит из следующих фаз: 1.Генерация машинно-независимого кода. 2.Оптимизация машинно-независимого кода. 3.Распределение памяти. 4.Генерация машинного кода. 5.Оптимизация машинного кода. Лексический анализ – это относительно простая фаза, в которой формируются символы (или токены) языка. Задачей фазы лексического анализа или лексического анализатора является переход от последовательности знаков к символам языка, с которыми в дальнейшем будут работать синтаксическая и семантическая фазы. Лексический анализатор также обрабатывает пробелы и удаляет комментарии и любые другие символы, не имеющие смысловой нагрузки для последующих этапов анализа. Лексический анализатор обычно не работает с контекстом, его выполнение занимает значительное время в процессе компиляции. В процессе синтаксического анализа определяется общая структура программы, что включает понимание порядка следования символов в программе. Синтаксический анализатор должен обладать информацией о контексте, в котором он работает, т.е. учитывать уже прочитанные символы. Результатом работы синтаксического анализатора является представление программы в древовидной форме, которую называют синтаксическим деревом. Синтаксический анализатор считывает символы в программе слева направо. В процессе считывания он должен уметь определять, является ли последовательность уже считанных символов началом программы. Фаза синтаксического анализа является ключевой на этапе анализа. Она непосредственно взаимодействует с лексической фазой, а результаты её работы в дальнейшем будут использоваться семантической фазой. Фаза синтаксического анализа создает основу для работы компилятора в целом, коды этапа синтеза образуются именно благодаря взаимодействию со структурой, которую образует фаза синтаксического анализа. Статический анализ- анализ, который осуществляется над исходным кодом без его выполнения. Анализ кода, связанный с выполнением команд исходного кода, называется динамическим. В фазе распределения памяти каждая константа и переменная, фигурирующие в программе, получают зарезервированное место в памяти для хранения своего значения. Статическая память, если время жизни переменно равно времени жизни программы; не может быть освобождена до завершения выполнения программы. Динамическая память, если время жизни переменной равно времени жизни определенного блока, функции или процедуры; может быть освобождена после выполнения данного фрагмента программы. Глобальная память, если на момент компиляции время жизни неизвестно, а память должна выделяться и освобождаться в процессе выполнения. Результатом работы фазы распределения памяти является создание адреса, в котором содержится полная информация о локализации памяти. В дальнейшем адрес передается генератору кода. Если в логических терминах компилятор рассматривается как состоящий из этапов и фаз, физически он составлен из проходов. Компилятор осуществляет проход каждый раз при считывании исходного кода или его представления. Многие компиляторы являются однопроходными, т.е. полный процесс компиляции полностью выполняется при однократном чтении кода.