Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4. ТЯП_5.doc
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
525.82 Кб
Скачать

Теория языков программирования и методы трансляции

1. Языки программирования и формальные языки. Понятие транслятора и компилятора. Фазы компиляции. Инструменты и технологии разработки и реализации языков программирования.

Понятие компилятора и его структура

Любая прикладная программа, написанная на языке программирования высокого уровня или проблемно-ориентированном языке, должна быть переведена в эквивалентную программу на языке машинных команд. Эту эквивалентную программу называют объектной программой или объектным кодом.

Программа, которая переводит исходную программу в эквивалентную ей объектную программу, называется транслятором (поэтому термин "трансляция" эквивалентен термину "перевод").

Транслятор, выполняющий перевод программы с языка высокого уровня (Фортран, Паскаль, Си и др.) в объектную программу (в кодах Ассемблера и т.п.), называется компилятором.

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

Обычно выделяют три фазы: - лексического анализа; - фазу синтаксического и семантического анализов; - фазу генерации кода.

Лексический анализ реализуется частью компилятора, которая называется лексическим анализатором или сканером. Входом сканера является цепочка символов некоторого алфавита (текст исходной программы). С точки зрения смысла программы некоторые подцепочки этой входной цепочки представляют собой определенные объекты, которые должны рассматриваться как единое целое. Например: имена переменных, константы, зарезервированные слова и т.д. Такие цепочки принято называть лексемами. Задача сканера состоит в выделении лексем из входного текста. Так, после сканирования оператора S:=(a+b)*0.17 будет получена следующая цепочка лексем:

< переменная>1 :=( < переменная>2 + < переменная>3)*<константа>1

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

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

Синтаксическое дерево, закодированное и представленное в памяти ЭВМ тем или иным способом (например, в виде связной списочной структуры), называется промежуточной программой.

С фазой синтаксического анализа программы тесно связан ее семантический анализ. Если синтаксический анализ предназначен для распознавания и проверки правильности различных конструкций языка с точки зрения их синтаксиса (структуры), то семантический анализ предназначен для контроля этих конструкций с точки зрения их смыслового содержания.

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

Фаза генерации кода предназначена для перевода промежуточной программы на машинный язык (мы будем предполагать коды Ассемблера). Алгоритмы генерации кода зависят от формы представления промежуточной программы, от набора команд используемого Ассемблера и других факторов.

2. Способы задания формальных языков. Грамматики, классификация грамматик и языков. Распознаватели, конечные автоматы, автоматы с магазинной памятью. Регулярные выражения и синтаксические диаграммы. Соответствия между способами описания языков.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]