Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Теория вычислительных процессов и структур. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
Например, множество натуральных чисел можно определить с помощью следующих форм:
<натуральное число> ::= <число без знака> | +<число без знака>
<число без знака> ::= <цифра> | <число без знака> <цифра> |
| <цифра> <число без знака>
<цифра> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
Кроме указанных элементов, используемых при построении формы, на практике могут быть использованы некоторые расширения. Например, необязательные элементы синтаксической конструкции могут быть заключены в квадратные скобки – [ и ], а повторяющиеся элементы – в фигурные скобки: { и }.
7.2.2. Синтаксические диаграммы Вирта
Методика синтаксических диаграмм Вирта основана на графи­ческом описании синтаксиса языка. Диаграммы, которые для этого используются, состоят из нескольких графических примитивов. В кружках указываются основные символы языка, а стрелки показыва­ют, каким образом связаны металингвистические переменные и сим­волы языка. Одна диаграмма Вирта определяет одну синтаксическую конструкцию, имя которой записывается над стрелкой, входящей в диаграмму. Эта стрелка называется точкой входа в диаграмму. Путь
от точки входа к выходу (исходящая из диаграммы стрелка) является цепочкой металингвистических переменных и основных символов
языка, которая соответствует некоторому варианту правой части фор­мы Бэкуса–Наура.
На рис. 7.1 представлен пример диаграммы Вирта. Пример ил­люстрирует определение конструкции «цифра» для множества нату­ральных чисел, формы Бэкуса–Наура для которого были рассмотрены выше.
Рис. 7.1. Пример диаграммы Вирта для определения конструкции
«цифра» для множества натуральных чисел
81
Не все правила синтаксиса языка программирования можно описать с помощью метаязыка форм Бэкуса–Наура. Описание некото­рых из них вплотную соприкасается с семантическим аспектом языка.
Контекстные условия анализируются на этапе синтаксическо- го анализа программы. Их называют также правилами статической
семантики.
7.2.3. Контекстные условия
Наиболее характерными являются следующие типы контекст­ных условий:
1. Правила единственности именования различных объектов
программы.
2. Необходимость описания идентификатора перед его исполь-
зованием.
3. Условия соответствия типов величин, входящих в конст-
рукции языка программирования.
4. Количественные ограничения в конкретной реализации язы-
ка программирования. Например, ограничение размерности массивов или глубины вложенности конструкций.
Контекстные условия языков программирования могут быть описаны с помощью некоторых расширений контекстно-свободных грамматик.
7.3. Определение семантики языка программирования
Задача формального определения семантики языка программи­рования для каждого конкретного случая может потребовать вре­мени не больше, чем задача определения синтаксиса, однако универсального решения здесь, по-видимому, пока не существует. Отдельно взятый метод может быть эффективен при описании одного языка программирования, но оказаться крайне сложным при описании другого. Эта же проблема может возникнуть при переносе соответст­вующих методик с модели языка на реальный язык программирова­ния.
Рассмотрим некоторые методы формального определения се­мантики.
82
7.3.1. Грамматические модели
Грамматические модели описания семантики основаны на расширениях грамматик, которые описывают синтаксис языков программирования. Например, это могут быть транслирующие и атри­бутные транслирующие грамматики.
Еще один способ описания семантики связан с использованием двухуровневых грамматик, или W-грамматик. Такая грамматика состоит из двух конечных множеств правил – множества метаправил и множества гиперправил.
Метаправила представляют собой модифицированные формы Бэкуса–Наура. Нетерминалы метаправил называются метапонятиями. Их принято записывать прописными буквами. В каждом метаправиле определяются все альтернативы данного метапонятия. Приняты сле­дующие обозначения:
1. Символ :: разделяет левую и правую часть метаправила.
2. Символ ; разделяет альтернативы данного метапонятия.
3. Символ . означает конец данного метаправила.
Например, метапонятие «ЦИФРА» описывается следующим образом:
ЦИФРА :: 0; 1; 2; 3; 4; 5; 6; 7; 8; 9
Гиперправила представляют собой прототипы, из которых по-
лучаются синтаксические правила. Для разделения левой и правой частей в гиперправилах применяется символ ::, альтернативы разде­ляются символом ;, а разные протопонятия внутри одной альтернати­вы – символом ,.
Если заменить в гиперправиле все метапонятия на протопоня­тия, выводимые из метапонятий с помощью метаправил, получится соответствующая металингвистическая форма.
Рассмотрим в качестве примера гиперправило для построения цепочки символов:
СИМВОЛ цепочка: СИМВОЛ;
СИМВОЛ цепочка.
В нем присутствует метапонятие «СИМВОЛ» и протопонятие «цепочка» (мы не будем описывать его формально, но понятно, что
83
речь идет о цепочках символов). Заменяя метапонятие «СИМВОЛ» на протопонятия «буква» и «цифра», получим формы, описывающие сло­ва и числа:
буква цепочка: буква;
буква цепочка.
цифра цепочка: цифра;
цифра цепочка.
С помощью подобных подстановок W-грамматики позволяют порождать бесконечное множество форм Бэкуса‒Наура, используемых для описания соответствующего языка программирования.
7.3.2. Операционная, аксиоматическая и денотационная семантики
Ниже представлен краткий обзор еще нескольких способов представления семантических конструкций языка программирования.
1. Операционная семантика. Операционное представление се­мантики состоит в описании процесса работы программы на некото­ром виртуальном или реальном компьютере. Виртуальный компьютер может быть определен как автомат, или процессор, который способен выполнять конечное множество формально определенных операций. Выполнение этих операций изменяет состояние процессора. Состоя­ние процессора определяется множеством значений, записанных в его память. Таким образом, процессор, начиная с исходного состояния, последовательно переходит от одного состояния к другому в соответ­ствии с определенными правилами, пока не окажется в конечном со­стоянии.
Семантика каждой конструкции языка программирования оп-
ределяется изменениями, которые происходят в состоянии процессора в результате выполнения данной конструкции.
Для использования операционного метода необходимо созда­ние транслятора, служащего для преобразования операторов языка в операторы виртуального процессора, и интерпретатора команд вирту­ального процессора, который моделируется программно.
Далее приведены три разновидности операционной семантики: итерационная, трансляционная и трансформационная.
84
Интерпретационная семантика – описание операционной се­мантики в терминах языков программирования низкого уровня (например, ассемблер).
Трансляционная семантика – описание операционной семан­тики в терминах языков программирования высокого уровня.
Трансформационная семантика – описание операционной се­мантики языка в терминах этого же языка. Трансформационная семан­тика лежит в основе метапрограммирования (создание программ, ко­торые порождают другие программы в качестве результата своей ра­боты, либо программ, которые меняют себя во время выполнения).
2. Аксиоматическая семантика. Аксиоматический способ опи- сания семантики связан с методом доказательства правильности программ, призванным ответить на вопрос, соответствуют ли вычис­ления, выполняемые программой, ее спецификации. Каждый оператор сопровождается предусловием и постусловием, которые являются, со­ответственно, предшествующим и последующим логическими выра­жениями, устанавливающими ограничения на значения переменных в программе. Семантика конкретной синтаксической конструкции языка определяется как конечное множество аксиом, или правил вывода. Эти правила могут быть использованы для вывода результатов выполнения данной конструкции, а также для вывода ограничений на значения пе­ременных после выполнения каждого оператора программы.
3. Денотационная семантика. Основной идеей денотационной семантики является сопоставление каждой сущности языка некоторо­го математического объекта и некоторой функции, отображающей эк­земпляры этой сущности в экземпляры этого объекта. Другими слова­ми, выражениям, использованным в программе, ставятся в соответст­вие математические объекты, и, таким образом, выражения обознача­ют их величины.
85
ЛИТЕРАТУРА
1. Автоматное управление асинхронными процессами в ЭВМ и дискретных системах/под. ред. В. И. Варшавского. – М.: Наука,
1986.
2. Синтаксический анализ языков программирования: учебное пособие/сост. В.Н. Агафонов. – Новосибирск: Изд-во НГУ, 1981.
3. Алексеев, И.Г. Теория вычислительных процессов и систем: учебно-методическое пособие / И.Г. Алексеев, П.Ю. Бранцевич. – Мн.: БГУИР, 2004.
4. Алферова, З.В. Теория алгоритмов / З.В. Алферова. – М.: Статистика, 1973.
5. Ахо, А. Теория синтаксического анализа, перевода и компи­ляции: в 2 т. / А. Ахо, Дж. Ульман. – М.: Мир, 1978.
6. Ахо, А. Структуры данных и алгоритмы / А. Ахо, Дж. Уль­ман. – М.: Вильямс, 2003.
7. Ачасова, С.М. Корректность параллельных вычислительных процессов / С.М. Ачасова, О.Л. Бандман. – Новосибирск: Наука,
1990.
8. Бильгаева, Н.Ц. Теория алгоритмов, формальных языков,
грамматик и автоматов: учебное пособие / Н.Ц. Бильгаева. – Улан-Удэ: Изд-во ВСГТУ, 2000.
9. Гергель, В.П. Основы параллельных вычислений для много­процессорных вычислительных систем: учебное пособие/В.П. Гергель, Р.Г. Стронгин. – Нижний Новгород: Изд-во ННГУ им. Н.И. Лобачев­ского, 2003.
10. Гуренко, В.В. Введение в теорию автоматов/В.В. Гуренко. – М.: МГТУ, 2013.
11. Душин, В.К. Теоретические основы информационных про­цессов и систем: учебник / В.К. Душин – М.: Дашков и Ко, 2014.
12. Ершов, А.П. Теория программирования и вычислительные системы/А.П. Ершов. – М.: Знание, 1972.
13. Ершов, А.П. Введение в теоретическое программирование: беседы о методе / А.П. Ершов. – М.: Наука, 1977.
14. Ершов, А.П. Основы информатики и вычислительной тех­ники: учебное пособие: в 2 ч./А.П. Ершов, В.М. Монахов, С.А. Бешен­ков. – М.: Просвещение, 1985.
15. Калайда, В.Т. Теория вычислительных процессов/В. Калай­да. – Томск: Изд-во ТУСУР, 2012.
86
16. Карпов, В.Э. Теория компиляторов: учебное пособие /
В.Э. Карпов. – М.: Московский государственный институт электрони- ки и математики, 2010.
17. Кнут, Д. Искусство программирования для ЭВМ: в 3 т. / Д. Кнут. – М.: Мир, 1976–1977.
18. Компиляторы: принципы, технологии и инструментарий / А. Ахо [и др.]. – М.: Вильямс, 2008.
19. Котов, В.Е. Сети Петри / В.Е. Котов. – М.: Наука, 1984.
20. Котов, В.Е. Теория схем программ / В.Е. Котов, В.К. Са- бельфельд. – М.: Наука, 1991.
21. Мараховский, В.Б. Моделирование параллельных процес-
сов. Сети Петри / В.Б. Мараховский, Л.Я. Розенблюм, А.В. Яковлев. – СПб.: Профессиональная литература, 2014.
22. Мартыненко, Б.К. Языки и трансляции: учебное пособие / Б.К. Мартыненко. – СПб.: Изд-во СПУ, 2008.
23. Мезенцев, А.В. Теория вычислительных процессов и струк­тур: учебное пособие/А.В. Мезенцев. – Иркутск: Изд-во Иркутского гос. ун-та, 2010.
24. Миронов, А.М. Теория процессов / А.М. Миронов. – Пере­славль-Залесский: Изд-во ун-та г. Переславля им. А.К. Айламазяна,
2008.
25. Молдованова, О.В. Языки программирования и методы
трансляции: учебное пособие / О.В. Молдованова. – Новосибирск: Изд-во СибГУТИ, 2012.
26. Омаров, О.М. Теория вычислительных процессов и струк­тур: учебное пособие/О.М. Омаров. – Махачкала: Изд-во ДГТУ,
2005.
27. Опалева, Э.А. Языки программирования и методы трансля­ции/Э.А. Опалева, В.П. Самойленко. – СПб.: БХВ–Петербург, 2005.
28. Пратт, Т. Языки программирования: реализация и разра- ботка / Т. Пратт, М. Зелковиц. – СПб.: Питер, 2002.
29. Питерсон, Дж. Теория сетей Петри и моделирование сис-
тем/Дж. Питерсон. – М.: Мир, 1984.
30. Рейуорд-Смит, В.Дж. Теория формальных языков: вводный курс/В.Дж. Рейуорд-Смит. – М.: Радио и связь, 1988.
31. Савельев, А.Я. Основы информатики: учебник для вузов / А.Я. Савельев. – М.: Изд-во МГТУ им. Н.Э. Баумана, 2001.
32. Савельев А.Я. Прикладная теория цифровых автоматов / А.Я. Савельев. – М.: Высшая школа, 1987.
87
33. Себеста, Р.У. Основные концепции языков программирова-
ния / Р.У. Себеста. – М.: Вильямс, 2001.
34. Семантика языков программирования: сб. ст. / под ред. А.Н. Маслова, Э.Д. Стоцкого. – М.: Мир, 1980.
35. Филд, А. Функциональное программирование / А. Филд, П. Харрисон. – М.: Мир, 1993.
36. Фитиалов, С.Я. Формальные грамматики/С.Я. Фитиалов. – Л.: Изд-во ЛГУ, 1984.
37. Xoap, Ч. Взаимодействующие последовательные процессы / Ч. Xoap. – М.: Мир, 1989.
38. Хопкрофт, Д. Введение в теорию автоматов, языков и вы­числений / Д. Хопкрофт, Р. Мотвани, Дж. Ульман. – М.: Вильямс,
2002.
39. Цилькер, Б.Я. Организация ЭВМ и систем: учебник для ву- зов / Б.Я. Цилькер. – СПб.: Питер, 2006.
40. Шилов, Н.В. Языки программирования и методы трансля- ции / Н.В. Шилов. – Новосибирск: Изд-во НГУ, 2011.
88
СОДЕРЖАНИЕ
ВВЕДЕНИЕ ................................................................................................ 3
1. ВЫЧИСЛИТЕЛЬНЫЕ ПРОЦЕССЫ ............................................... 5
1.1. Вычислительная система и вычислительный процесс ..................... 5
1.2. Виды вычислительных процессов...................................................... 6
1.3. Проблема организации совместной работы процессов ................... 7
2. ОСНОВЫ ТЕОРИИ ФОРМАЛЬНЫХ ЯЗЫКОВ ........................... 9
2.1. Цепочки символов и их свойства ....................................................... 9
2.2. Формальные грамматики и формальные языки .............................. 13
2.3. Классификация языков Н. Хомского ............................................... 15
2.4. Пример построения формальной грамматики и порождения
цепочки ...................................................................................................... 16
3. АВТОМАТНЫЕ МОДЕЛИ............................................................... 19
3.1. Конечные автоматы ........................................................................... 19
3.2. Автоматы с магазинной памятью ..................................................... 23
3.3. Машина Тьюринга ............................................................................. 25
3.4. Линейно-ограниченные автоматы .................................................... 29
4. МОДЕЛЬ ЦИФРОВОГО АВТОМАТА .......................................... 30
4.1. Основные понятия теории автоматов .............................................. 30
4.2. Способы задания автоматов ............................................................. 33
4.2.1. Аналитический способ ................................................................... 33
4.2.2. Табличный способ .......................................................................... 33
4.2.3. Графический способ ....................................................................... 36
4.2.4. Примеры графического и табличного задания автоматов
Мили и Мура ............................................................................................. 37
5. СЕТИ ПЕТРИ ...................................................................................... 40
5.1. Концепция сети Петри ...................................................................... 40
5.2. Элементы сети Петри ........................................................................ 41
5.3. Теоретико-множественное определение сети Петри ..................... 42
5.4. Граф сети Петри ................................................................................. 44
5.5. Работа сети Петри .............................................................................. 44
5.6. Классификация сетей Петри ............................................................. 48
5.7. Анализ сетей Петри ........................................................................... 49
5.8. Задача достижимости ........................................................................ 51
5.9. Основы моделирования систем с помощью сетей Петри .............. 56
89
6. СХЕМЫ ПРОГРАММ ....................................................................... 64
6.1. Базис класса стандартных схем программ ...................................... 64
6.2. Способы представления стандартной схемы программы .............. 68
6.3. Интерпретированная стандартная схема программы ..................... 70
6.4. Протокол выполнения программы ................................................... 72
6.5. Свойства стандартных схем программ ............................................ 75
6.6. Цепочка стандартной схемы ............................................................. 76
6.7. Свободные интерпретации ............................................................... 77
7. ОПИСАНИЕ СИНТАКСИСА И СЕМАНТИКИ ЯЗЫКА
ПРОГРАММИРОВАНИЯ ..................................................................... 79
7.1. Проблема точного описания языка программирования ................. 79
7.2. Определение синтаксиса языка программирования ....................... 80
7.2.1. Форма Бэкуса–Наура ...................................................................... 80
7.2.2. Синтаксические диаграммы Вирта ............................................... 81
7.2.3. Контекстные условия ..................................................................... 82
7.3. Определение семантики языка программирования ........................ 82
7.3.1. Грамматические модели ................................................................. 83
7.3.2. Операционная, аксиоматическая и денотационная семантики .. 84
ЛИТЕРАТУРА......................................................................................... 86
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]