Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Процесс трансляции состоит из 2-х логических частей:
Фазы трансляции:
цепочка символов
последовательн ость лексем Анализ исходной
программы
внутренний фор мат программы
улучшенная внутренн яя форма программы
последовательность машинных комманд
улучшенная последоват ельность машинных команд
Синтез объектного кода
Исходная программа подается на вход лексического анализа в виде цепочки символов.
Лексический анализ выделение в тексте исходной проги элементарных единиц языка (идентификаторы, константы, ключевые слова, символы операций, разделители и др.) лексемы. Часть транслятора, выполняющая лексический анализ сканер (лексический анализатор). Для удобства выполнения последующих этапов сканер преобразует выделенные лексемы в некоторую унифицированную числовую форму (коды лексем).
Синтаксический анализ (грамматический разбор) в последовательности лексем выделяются более крупные программные структуры синтаксических единиц языка (выражения, операторы присваивания, управляющие операторы, описания данных и др.). Во время синтаксического анализа идет проверка грамматической правильности исходной программы.
Семантический анализ выполняется при взаимодействии с процессом грамматического разбора. Каждая распознанная синтаксическая конструкция анализируется с точки зрения смысла (семантики языка) (в операторах присваивания проверяется соответствие типов левых и правых частей, проверяется, не были ли описаны какие либо данные многократно, наличие одинаковых меток и др). Семантический анализ каждой выделенной конструкции исходной программы завершается ее преобразованием в некоторую внутреннюю форму представления. Такая внутренняя форма уже не зависит от синтаксиса исходного языка, но еще не зависит от системы команд конкретной машины. В качестве внутренней формы наиболее часто используется семантическое дерево, польская запись и тетрадная форма представления.
С этапа машинно-независимой оптимизации начинается синтез объектной программы. Такой вид оптимизации выполняется над программой, представленной во внутренней форме. Целью оптимизации является сокращение времени выполнения программы или объема используемой памяти. Это достигается за счет ряда преобразований программы:
1) операторы, расположенные внутри циклов, но независящие от переменных цикла, выносятся за пределы цикла;
2) выполняются действия с константами, формируются новые константы;
3) общие выражения и подвыражения, встречающиеся несколько раз, а в остальных местах указываются ссылки на результат;
4) оптимизируется использование регистровой памяти для хранения данных.
Генерация кода перевод полученного внутреннего представления программы на язык ассемблера или непосредственно в двоичный машинный код.
Машинно-зависимая оптимизация выполняется с учетом особенностей архитектуры и системы команд конкретной модели ЭВМ. Преследуются две цели:
На всех фазах трансляции происходят попытки обнаружения и диагностирования ошибок. В некоторых трансляторах производится их исправление, в большинстве только указывается расположение.
Информационные таблицы используются для хранения данных, требуемых при работе транслятора. На этапах анализа данные заносят в таблицы с целью последующего использования на этапах синтеза. Основной таблицей транслятора является таблица имен, где сохраняются все уникальные имена (идентификаторы), используемые программистом в теле программы, а так же соответствующие данные о них. Кроме того могут присутствовать таблица констант (информация о константах), таблица циклов, вложенности блоков и др.
Замечание: 1) Рассмотренные процесс трансляции соответствует работе компилятора. Для реальных компиляторов некоторые фазы могут объединяться или отсутствовать.
2) Интерпретатор, подобно компилятору, выполняет фазы анализа, но отдельно для каждого оператора (строки программы), переводит во внутреннее представление и моделирует выполнение программы.
Варианты организации языковых процессоров
Языковой процессор (транслятор) программная система, которая переводит (транслирует) исходную программу в выполняемую форму, называемую объектной программой. Процесс преобразования исходной программы в эквивалентную объектную программу называется трансляцией.
Различают два типа языковых процессоров, используемых в САПР: компилятор и интерпретатор. Компилятор системная программа, которая полностью формирует объектную программу и только после этого передает её на исполнение. Объектной программой в этом случае обычно является программа в машинных командах объектный код.
При использовании компиляторов процесс трансляции компиляция. Т. о. компилятор это системная программа, написанная на некотором языке, для которой входной информацией является исходная программа, а результатом - эквивалентная ей объектная программа.
Интерпретатор системная программа, которая считывает исходную программу небольшими фрагментами (отдельными операторами или строками), анализирует их и моделирует выполнение каждого в отдельности.
Промежуточное положение занимают:
- компиляторы интерпретирующего типа: обрабатывают исходную программу в 2 этапа: на первом текст исходной программы полностью компилируется в некоторую промежуточную форму, а на втором производится интерпретация этой программы. Такие компиляторы эффективны если: промежуточная форма занимает меньший объем памяти, чем объектный код; интерпретация промежуточной формы выполняется быстрее, чем интерпретация текста исходной программы.
- шаговые компиляторы делят текст исходной программы на части, которые последовательно транслируются и передаются на исполнение. Шаговые компиляторы удобны при работе с языками проектирования, т.к. позволяют организовать поэтапное выполнение проектных процедур САПР.
PAGE 1