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