
- •Модуль № 2.
- •1. Методы лексического, семантического и синтаксического анализа. Регулярные языки.
- •2. Методы лексического, семантического и синтаксического анализа. Контекстно-свободные языки.
- •3. Методы лексического, семантического и синтаксического анализа. Классы кс-языков и грамматик.
- •4. Компиляторы. Этапы трансляции. Общая схема работы транслятора.
- •5. Компиляторы. Понятие прохода. Многопроходные и однопроходные компиляторы.
- •6. Интерпретаторы. Особенности построения интерпретаторов.
- •7. Трансляторы с языка ассемблера («ассемблеры»).
- •8. Лексические анализаторы (сканеры). Принципы построения сканеров. Назначение лексического анализатора.
- •Принципы построения лексических анализаторов
- •Этапы семантического анализа
- •10. Генератор кода. Распределение памяти. Принципы распределения памяти. Дисплей памяти процедуры (функции).
- •Общие принципы генерации кода
- •12. Системы программирования. Понятие и структура системы программирования.
- •13. Системы программирования. Принципы функционирования систем программирования.
- •14. Системы программирования. Функции текстовых редакторов в системах программирования.
- •15. Системы программирования. Компоновщик. Назначение и функции компоновщика.
- •16. Системы программирования. Загрузчики. Функции загрузчика.
- •17. Системы программирования . Библиотеки подпрограмм как составная часть систем программирования.
- •18. Системы программирования. Разработка программ в архитектуре «клиент—сервер»
7. Трансляторы с языка ассемблера («ассемблеры»).
Язык ассемблера — это язык низкого уровня. Структура и взаимосвязь цепочек
этого языка близки к машинным командам целевой вычислительной системы, где должна выполняться результирующая программа. Применение языка ассемблера позволяет разработчику управлять ресурсами (процессором, оперативной памятью, внешними устройствами и т. п.) целевой вычислительной системы на
уровне машинных команд. Каждая команда исходной программы на языке ассемблера в результате компиляции преобразуется в одну машинную команду.
Компилятор с языка ассемблера по своей структуре и назначению ничем не отличается от всех прочих компиляторов. Однако язык ассемблера имеет ряд особенностей, которые упрощают реализацию компилятора для этого языка по сравнению с любым компилятором для языка высокого уровня.
Компиляторы с языка ассемблера реализуются чаще всего по двухпроходной схеме. На первом проходе компилятор выполняет разбор исходной программы, ее преобразование в машинные коды и одновременно заполняет таблицу идентификаторов. Но на первом проходе в машинных командах остаются незаполненными адреса тех операндов, которые размещаются в оперативной памяти. На втором проходе компилятор заполняет эти адреса и одновременно обнаруживает неописанные идентификаторы. Это связано с тем, что операнд может быть описан в программе после того, как он первый раз был использован. Тогда его адрес еще не известен на момент построения машинной команды, а поэтому требуется второй проход.
8. Лексические анализаторы (сканеры). Принципы построения сканеров. Назначение лексического анализатора.
Прежде чем перейти к рассмотрению лексических анализаторов, необходимо дать четкое определение того, что же такое лексема.
Лексема (лексическая единица языка) — это структурная единица языка, которая состоит из элементарных символов языка и не содержит в своем составе других структурных единиц языка.
Лексемами языков программирования являются идентификаторы, константы, ключевые слова языка, знаки операций и т. п. Состав возможных лексем каждого конкретного языка программирования определяется синтаксисом этого языка.
Лексический анализатор (или сканер) — это часть компилятора, которая читает исходную программу и выделяет в ее тексте лексемы входного языка. На вход лексического анализатора поступает текст исходной программы, а выходная информация передается для дальнейшей обработки компилятором на этапе синтаксического анализа и разбора.
Принципы построения лексических анализаторов
Лексический анализатор имеет дело с такими объектами, как различного рода
константы и идентификаторы (к последним относятся и ключевые слова). Язык
констант и идентификаторов является регулярным — то есть может быть описан
с помощью регулярных грамматик. Распознавателями для регулярных языков
являются конечные автоматы. Следовательно, основой для реализации лексических анализаторов служат регулярные грамматики и конечные автоматы.
Конечный автомат для каждой входной цепочки языка дает ответ на вопрос о том,
принадлежит или нет цепочка языку, заданному автоматом. Однако в общем
случае задача лексического анализатора несколько шире, чем просто проверка
цепочки символов лексемы на соответствие входному языку. Кроме этого, он
должен выполнить следующие действия:
1) определить границы лексем, которые в тексте исходной программы явно не
указаны;
2) выполнить действия для сохранения информации об обнаруженной лексеме (или выдать сообщение об ошибке, если лексема неверна).
Результатом работы лексического анализатора является перечень всех найденных
в тексте исходной программы лексем с учетом характеристик каждой лексемы.
Этот перечень лексем можно представить в виде таблицы, называемой таблицей
лексем. Каждой лексеме в таблице лексем соответствует некий уникальный условный код.
9. Генератор кода. Семантический анализ и подготовка к генерации кода. Этапы семантического анализа.
Генератор кода строит код объектной машины на основе анализа объектной модели или промежуточного представления. Построение кода сопровождается дополнительным семантическим анализом, связанным с необходимостью преобразования обобщенных команд в коды конкретной вычислительной машины. На этапе такого анализа окончательно определяется возможность преобразования, и выбираются эффективные варианты. Сама генерация кода является перекодировкой одних команд в другие.