Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Понятие прохода. Однопроходные и многопроходные компиляторы




Модель анализа-синтеза компиляции

Компиляция состоит из двух основных частей: анализа и синтеза.

Анализ – это разбиение исходной программы на составные части и создание ее промежуточного представления.

В процессе анализа определяются и записываются в иерархическую древовидную структуру операции, заданные исходной программой. Часто используется специальный вид дерева – синтаксическое дерево, котором каждый узел представляет операцию, а его дочерние узлы – аргументы операции (операнды).

Синтез – это конструирование требуемой целевой программы из промежуточного представления.

Процесс трансляции разбивается на несколько этапов, за выполнение каждого из которых отвечает свой блок.

Основные фазы трансляции: лексический анализ, синтаксический анализ, семантический анализ, синтез объектной программы.

Цели лексического анализа:

1) перевод исходной программы на внутренний язык компилятора, в котором ключевые слова, идентификаторы, метки и константы приведены к одному формату и заменены условными кодами: числовыми или символьными, которые называются дескрипторами. Каждый дескриптор состоит из двух частей: класса-типа лексемы и указателя на адрес в памяти, где хранится информация о конкретной лексеме. Эта информация организуется в виде таблиц.

2) лексический контроль – выявление в программе недопустимых слов.

Цели синтаксического анализа:

1) перевод последовательности образов лексем в форму промежуточной программы;

2) синтаксический контроль – выявление синтаксических ошибок в программе.

Цель семантического анализа – проверка семантических ошибок в исходной программе. Например, проверка типов, единственность описания каждого идентификатора.

Синтез объектной программы – построение объектного кода программы на основании внутреннего представления и информации, содержащейся в таблице идентификаторов. Основные этапы синтеза: генерация промежуточного кода, оптимизация кода и генерация кода.

Порядок выполнения фаз компиляции может меняться в разных вариантах компиляторов. Состав фаз тоже может быть изменен, т.е. некоторые фазы могут быть объединены в одну фазу, или наоборот – разбиты на составляющие.

Проход – это процесс последовательного чтения компилятором данных из внешней памяти, их обработки и помещения результата работы во внешнюю память.

Компилятор может просмотреть текст исходной программы и сразу выполнить все фазы компиляции и получить результат – объектный код. В другом варианте он выполняет над исходным текстом только некоторые из фаз компиляции и получает не конечный результат, а набор некоторых промежуточных данных. Эти данные затем снова подвергаются обработке, и этот процесс может повторяться несколько раз.

Реальные компиляторы, как правило, выполняют трансляцию текста исходной программы за несколько проходов. Один проход чаще всего включает в себя выполнение одной или нескольких фаз компиляции. Результатом промежуточных проходов является внутреннее представление исходной программы. Результатом последнего прохода – результирующая объектная программа. При выполнении каждого прохода компилятору доступна информация, полученная в результате предыдущих проходов. Как правило, компилятор стремится использовать информацию, полученную на предыдущем проходе, но может обращаться и к данным более ранних проходов.

Информация, получаемая компилятором, при выполнении проходов, не доступна пользователю. Поэтому человек, работающий с компьютером, может даже не знать, сколько проходов выполняет компилятор – он всегда видит только исходную программу и результирующую объектную программу. Однако, количество проходов – важная техническая характеристика компилятора.




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 1436; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.