
- •Упрощенная модель компилятора. Проходы компилятора.
- •3. Проходы компиляторов
- •Задача идентификации. Транслитерация.
- •Методы лексического анализа.
- •Использование автомата для решения задачи идентификации слов (различные классы лексем).
- •Контекстно-свободные грамматики. Основные определения.
- •Задание кс грамматики. Способы задания грамматик: синтаксические диаграммы, форма Бекуса-Наура.
- •Выводы. Деревья синтаксического разбора.
- •Праволинейная грамматика.
- •Лишние нетерминалы.
- •Атрибутные грамматики. Наследуемые и синтезируемые атрибуты.
- •1 Синтезируемые атрибуты
- •2 Наследуемые атрибуты
- •Использование автоматов с магазинной памятью для нисходящего разбора.
- •Общие правила построения нисходящего распознающего автомата.
- •Распознающий автомат для s - грамматик.
- •Ll(1) - грамматики. Множество выбора.
- •Метод рекурсивного спуска.
- •Обработка ошибок при нисходящем разборе.Обнаружение и нейтрализация ошибок.
- •Восходящие методы синтаксического разбора. Метод перенос-свертка.
- •Задачи семантического анализа. Семантические соглашения.
Оглавление
Упрощенная модель компилятора. Проходы компилятора.
Для того, чтобы компьютер мог понять программу, написанную на каком-то языке программирования, необходим переводчик (транслятор) такой программы в машинные коды. Отметим, что, если оператор языка ассемблера отображается при трансляции чаще всего1)в одну машинную инструкцию, предложения языков более высокого уровня отображаются, вообще говоря, в несколько машинных инструкций.
Трансляторы бывают двух типов: компиляторы (compiler) и интерпретаторы (interpreter). Процесс компиляции состоит из двух частей: анализа (analysis) и синтеза (synthesis). Анализирующая часть компилятора разбивает исходную программу на составляющие ее элементы (конструкции языка) и создает промежуточное представление исходной программы. Синтезирующая часть из промежуточного представления создает новую программу, которую компьютер в состоянии понять. Такая программа называется объектной программой. Объектная программа может в дальнейшем выполняться без перетрансляции. В качестве промежуточного представления обычно используются деревья, в частности, так называемые деревья разбора. Под деревом разбора понимается дерево, каждый узел которого соответствует некоторой операции, а сыновья этого узла - операндам.
2. УПРОЩЕННАЯ МОДЕЛЬ КОМПИЛЯТОРА
Я
промежут.
представл.
(атом)
промежут.
представл.
семантич.
корректн.
зык программирования – формальный язык для написания программ
язык высокого уровня
лексема
(токен)
лексический анализатор
синтаксич. анализатор
семантич. анализатор
генератор
кода
объектн. язык
таблица (словарь)
Лексический анализатор (ЛА)
На входе: набор символов (литер)
Разбивает цепочку на слова (лексемы), где слово – некоторая структура, объединенная некой семантической структурой.
«Умный» ЛА
На входе транслитератор считывает первый символ и, в зависимости от него, определяет класс символа и что делать дальше.
Примитивный ЛА – без транслитератора, не работает с классами слов
Лексема – слово языка, которое выделяет ЛА.
Атрибуты лексемы:
Класс (константа, зарезервированное слово и т.д.)
Значение
В результате при лексическом анализе должны получить вот такую табличку:
-
№ строки
Имя лексемы
Класс
Значение
Синтаксический анализатор решает бинарную задачу: определение, соответствует ли последовательность лексем синтаксису языка. Правила построения корректных цепочек задаются грамматикой языка.
Задачи синтаксического анализатора:
должен обрабатывать ошибочные ситуации
представить синтаксическую последовательность в виде атомов (единой конструкции)
Семантический анализатор проверяет соответствие семантики входных выражений семантическим соглашениям языка, которые хранятся в таблице. Семантика – это смысл языковой конструкции.
Генератор кода развертывает атомы в последовательность команд целевой машины (объектный язык).