Студопедия

КАТЕГОРИИ:

АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника


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




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

 

Но сократить число проходов не всегда возможно. Количество проходов определяется, прежде всего, грамматикой и семантическими правилами исходного языка. Чем сложнее грамматика языка и чем больше вариантов предполагают семантические правила − тем больше проходов будет выполнять компилятор. Например, компиляторы с языка Pascal работают быстрее, чем компиляторы с языка С из-за того, что грамматика языка Pascal более проста, а семантические правила более жёсткие.

 

Однопроходные компиляторы − редкость, они возможны только для очень простых языков. Реальные компиляторы выполняют от двух до пяти проходов и являются многопроходными. Например, трехпроходный компилятор работает так:

 

− первый проход − лексический анализ;

− второй − синтаксический разбор и семантический анализ;

− третий − генерация и оптимизация кода.

 


Поделиться:

Дата добавления: 2015-04-18; просмотров: 108; Мы поможем в написании вашей работы!; Нарушение авторских прав





lektsii.com - Лекции.Ком - 2014-2024 год. (0.006 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав
Главная страница Случайная страница Контакты