КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Основные этапы компиляции программ.Транслятор – это программа, которая переводит входную программу на исходном (входном) языке в эквивалентную ей программу на результирующем (выходном) языке. Компилятор (К) – это транслятор, который осуществляет перевод исходной программы в эквивалентную ей объектную программу на языке машинных команд или на языке ассемблера. Выход – obj-ный код (нет привязки к конкр. обл-м памяти) Процесс компиляции состоит из двух основных этапов – синтеза и анализа. Анализ - вып-ся распоз-ние текста исх проги (выдел. лексемы), созд-е и запол-ние таблиц идент-ров. Рез-том его работы служит некое внутр представление проги, понятное К. Синтез - на основании внутр представления проги и инфы, содер-ся в таблице (таблицах) идент-ров, порождается текст рез-щей проги. Рез-том этого этапа явл-ся объектный код. Также, в составе К присутствует часть, ответственная за ан-з и исправление ошибок, кот при наличии ошибки в тексте исх проги д/ макс-но полно инф-ть польз-ля о типе ошибки и месте ее возникновения. В лучшем случае К м/ предложить польз-лю вариант исправления ошибки. Эти этапы состоят из более мелких этапов, наз-мых фазами компиляции. К в целом с точки зрения теории формальных языков вып-ет 2 основные функции. 1) он является распоз-лем для языка исх проги. Т.е. он д/ получить на вход цепочку символов вх. языка, проверить ее принадлежность к языку и выявить правила, по кот эта цепочка была построена. 2) К явл-ся генератором для языка рез-щей проги. Он д/ построить на выходе цепочку вых. языка по опред. правилам, предполагаемым языком маш. команд или языком ассемблера. Распоз-лем этой цепочки б/ выступать уже выч-ная с-ма, под кот. создается рез-щая программа. Лексический анализ (сканер) – это часть К, кот. читает литеры проги на исх. языке и строит из них слова (лексемы) исх. языка. На вход лексического анализ-ра поступает текст исх. проги, а вых инфа передается для дальнейшей обр-ки К на этапе синтаксического разбора. С теоретической т. Зр. лексический анализатор не явл-ся обязательной частью К. Синтаксический разбор – это осн. часть К на этапе ан-за. Она выполняет выделение синтакс-х конструкций в тексте исх. проги, обработанном лексическим анализатором. На этой же фазе компиляции проверяется синтаксическая правильность программы. Синтаксический разбор играет главную роль – роль распознавателя текста вх языка прогр-ния. Семантический анализ – это часть К, проверяющая правильность текста исх. проги с т. зр. семантики вх. языка. Кроме непосредственно проверки, семантический анализ д/ выполнять преобразование текста, требуемые семантикой вх. языка (такие, как добавление функций неявного преобразования типов). В разл-х реализациях К семантический анализ м/ частично входить в фазу синтаксического разбора, частично – в фазу подготовки к генерации кода. Подготовка к генерации кода – это фаза, на кот. К выполняются предварительные действия. Непосредственно связанные с синтезом текста рез-щей проги, но еще не ведущие к порождению текста на вых. языке. Обычно в эту фазу входят действия, связанные с идентификацией эл-тов языка, распределением памяти и т.п. Генерация кода – это фаза, непосредственно связанная с порождением команд, составляющих предложения вых языка и в целом текст рез-щей проги. Это осн. фаза на этапе синтеза рез-щей проги. Кроме непосредственного порождения текста рез-щей проги, генерация обычно включает в себя также оптимизацию – процесс, связанный с обработкой порожденного текста. Иногда оптимизацию выделяют в отдельную фазу компиляции, т.к. она оказывает существенное влияние на качество и эффективность результирующей программы. Таблицы идентификаторов – это спец образом орг-ные наборы данных, служащие для хранения инфы об эл-тах исх проги, кот затем исп-тся для порождения текста рез-щей проги. Таблица идентификаторов в конкретной реализации К м/б одна, или же таких таблиц может быть несколько. Элементами исх проги, информацию о кот нужно хранить в процессе компиляции, являются переменные, константы, функции и т.п. – конкретный состав набора элементов зависит от используемого вх ЯП. Понятие «таблицы» вовсе не предполагает, что это хранилище данных должно быть организованно именно в виде таблиц или других массивов информации. Проход – процесс посл-ного чтения К данных из внеш памяти, их обр-ки и помещения рез-та работы во внеш память. Чаще всего 1 проход вкл. в себя выполнение 1 или неск-х фаз компиляции. Рез-том промежуточных проходов явл-ся внутр представление исх проги, рез-том последнего прохода – рез-щая объектная прога. Реальные К, как правило, выполняют от 2 до 5 проходов.
|