Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ШПОРЫ_ТЯП.docx
Скачиваний:
2
Добавлен:
01.03.2025
Размер:
1.63 Mб
Скачать
  1. Фаза анализа. Основные понятия.

  • Лексический анализ

  • Синтаксический анализ

  • Семантический анализ

Лексический анализ (сканирование) - Поток символов исходной программы считывается слева направо и группируется в токены, представляющие собой последовательности символов с определенным совокупным значением.

Синтаксический анализ (разбор) - Выполняет группирование токенов исходной программы в грамматические фразы, используемые компилятором для синтеза вывода.

Семантический анализ - Проверяется наличие семантических

ошибок и накапливается информация о типах для следующей стадии.

  1. Фаза синтеза. Основные понятия.

Этап синтеза состоит из следующих фаз: 1.Генерация машинно-независимого кода. 2.Оптимизация машинно-независимого кода. 3.Распределение памяти. 4.Генерация машинного кода. 5.Оптимизация машинного кода.

В фазе распределения памяти каждая константа и переменная, фигурирующие в программе, получают зарезервированное место в памяти для хранения своего значения. Статическая память, если время жизни переменно равно времени жизни программы; не может быть освобождена до завершения выполнения программы. Динамическая память, если время жизни переменной равно времени жизни определенного блока, функции или процедуры; может быть освобождена после выполнения данного фрагмента программы. Глобальная память, если на момент компиляции время жизни неизвестно, а память должна выделяться и освобождаться в процессе выполнения. Результатом работы фазы распределения памяти является создание адреса, в котором содержится полная информация о локализации памяти. В дальнейшем адрес передается генератору кода. Если в логических терминах компилятор рассматривается как состоящий из этапов и фаз, физически он составлен из проходов. Компилятор осуществляет проход каждый раз при считывании исходного кода или его представления. Многие компиляторы являются однопроходными, т.е. полный процесс компиляции полностью выполняется при однократном чтении кода.

Инструментальные средства

  • Генераторы сканеров

  • Генераторы синтаксических анализаторов

  • Автоматические генераторы кода

  1. Методы определения языка

Определение языка должно определять все строки символов, существующих в данном языке (синтаксис языка), а также их значения или планируемый эффект (семантика языка). ; где «|»-знак, означающий «где», n-целое, «умножение»- конкатенация. - пустая строка. Пустые строки играют важную роль в определении языков программирования. x*y* где «*»- звездочка Клини, означает, что предшествующий ему элемент, употребляется нуль или ещё большее число раз. x*y+ где «+»- одно или большее число вхождений, предшествующего элемента. Алфавит представляет собой конечный набор символов. Если А-алфавит, то к числу регулярных выражений относятся: нулевая строка( ), любой элемент А.

Определение языка должно быть

  • точным (или формальным);

  • лаконичным;

  • машинно-читаемым.

Несколько очень простых языков

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]