Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Теория вычислительных процессов и структур. Учебное пособие
.pdf
Например, множество натуральных чисел можно определить с
помощью следующих форм:
<натуральное число> ::= <число без знака> | +<число без знака>
<число без знака> ::= <цифра> | <число без знака> <цифра> |
| <цифра> <число без знака>
<цифра> ::= 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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
