Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК по СПО.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.79 Mб
Скачать

УЧЕБНО-ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра технической кибернетики

УЧЕБНО-МЕТОДИЧЕСКИЙ КОМПЛЕКС

«Системное программное обеспечение.

Синтаксические анализаторы»

для специальностей:

Т.10.03 «Вычислительные системы и сети»

Т.10.02 «Программное обеспечение информационных технологий»

Автор-составитель: проректор

по информатизации, к.т.н.

Глухов Дмитрий Олегович

Новополоцк, 2004

Содержание

Содержание 2

Об УМК 6

1. Рабочая программа 7

2. Модуль Вводный 10

3. Модуль Формальные грамматики и языки 13

3.1. Языки и цепочки символов. Способы задания языков 13

3.1.1. Цепочки символов. Операции над цепочками символов 13

3.1.2. Понятие языка. Формальное определение языка 14

3.1.3. Способы задания языков 15

3.1.4. Синтаксис и семантика языка 17

3.2. Определение грамматики 18

3.2.1. Особенности языков программирования 18

3.2.2. Определение грамматики. Форма Бэкуса—Наура 20

3.2.3. Принцип рекурсии в правилах грамматики 23

3.2.4. Другие способы задания грамматик 25

3.3. Классификация языков и грамматик 26

3.3.1. Классификация грамматик 26

3.3.2. Классификация языков 29

3.4. Контроль 32

4. Модуль Распознаватели, механизм вывода цепочек символов 33

4.1. Цепочки вывода. Сентенциальная форма. 33

4.1.1. Сентенциальная форма грамматики. Язык, заданный грамматикой 35

4.1.2. Левосторонний и правосторонний выводы 36

4.1.3. Однозначные и неоднозначные грамматики 37

4.1.4. Эквивалентность и преобразование грамматик 39

4.2. Распознаватели. Задача разбора 41

4.2.1. Общая схема распознавателя 41

4.2.2. Виды распознавателей 44

4.2.3. Классификация распознавателей по типам языков 45

4.3. Контроль 48

5. Модуль Регулярные грамматики и языки 50

5.1. Регулярные языки и грамматики 50

5.2. Леволинейные и праволинейные грамматики. Автоматные грамматики 51

5.3. Алгоритм преобразования регулярной грамматики к автоматному виду 52

5.4. Конечные автоматы 54

5.4.1. Определение конечного автомата 54

5.4.2. Детерминированные и недетерминированные конечные автоматы 56

5.4.3. Преобразование конечного автомата к детерминированному виду 57

5.5. Контроль 60

6. Модуль Контекстно-свободные грамматики и языки 61

6.1. Контекстно-свободные языки 61

6.1.1. Распознаватели КС-языков. Автоматы с магазинной памятью. Определение МП-автомата 61

6.2. Классы КС-языков и грамматик. Класс LL(k) грамматик. 63

6.3. Принципы построения распознавателей для LL(k)-грамматик 67

6.4. Левая факторизация 68

6.5. Удаление левой рекурсии 69

6.6. Алгоритм разбора для LL(1)-грамматик 70

6.7. Алгоритм построения множества FIRST(1,A) 72

6.8. Алгоритм построения множества FOLLOW(1,A) 73

6.9. Восходящие распознаватели КС-языков без возвратов 74

6.9.1. Определение LR(k)-грамматики 74

6.10. Принципы построения распознавателей для LR(k)-грамматик 78

6.10.1. Грамматики простого предшествования 82

6.11. Распознаватели для LR(0) и LR(1) грамматик 86

6.11.1. Распознаватель для LR(0)-грамматики 86

6.11.2. Распознаватель для LR(1) грамматики 89

6.12. Контроль 92

7. Модуль Инструментальные средства для построения трансляторов 93

7.1. Инструментальные средства для построения компиляторов 93

7.1.1. Построитель лексических анализаторов Lex 93

7.1.2. Yacc 114

7.2. Контроль 123

8. Модуль Особенности программирование трансляторов 124

8.1. Использование значений произвольных типов, алгоритм разбора 124

8.1.1. Алгоритм синтаксического разбора 126

8.1.2. Семантический стек 131

8.2. Неоднозначности и конфликты 133

8.3. Старшинство операций 138

8.4. Дополнительные возможности программ yacc и lex 141

8.4.1. Обработка ошибок 141

8.5. Совместное использование lex и yacc 144

8.5.1. Кодировка лексем и интерфейс 147

8.5.2. Сборка yacc-программ 149

8.6. Советы по подготовке спецификаций 154

8.6.1. Стиль 154

8.6.2. Использование левой рекурсии 155

8.6.3. Уловки анализа лексики 156

8.6.4. Входной синтаксис yacc'а 157

8.7. Контроль 159

9. Модуль Заключение 160

10. Обеспечение лабораторного практикума 161

11. Дополнительная информация. Примеры 162

11.1. Функции работы со строками языка С/С++ для С, MS Visual C++, Borland C++ Builder 162

11.2. Функции работы с потоками языка С / С++ 163

11.3. Функции работы с потоками в Borland C++ Builder 166

11.4. Пример простейшего интерпретатора формул 168

11.5. Простой пример 169

11.6. Более сложный пример 172

11.7. Генераторы лексических и синтаксических анализаторов 181

11.8. Генераторы лексических и синтаксических анализаторов на java 187

11.9. Пакеты для разработки компиляторов 191

Список сокращений 193

Литература 194

Приложения 196

Приложение 1. Учебно–методическая карта дисциплины “Системное программное обеспечение. Синтаксические анализаторы” 197

Приложение 2. Вопросы для зачета по дисциплине “Системное программное обеспечение. Синтаксические анализаторы” 198

Приложение 3. Методические указания к лабораторным работам по дисциплине «Системное программное обеспечение. Синтаксические анализаторы» 200

Приложение 4. Организация рейтингового контроля по дисциплине «Системное программное обеспечение. Синтаксические анализаторы» 222

Об УМК

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

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

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