- •Предисловие
- •Введение
- •Глава 1. Множества
- •§ 1. Множества н их спецификация
- •§ 2. Простейшие операции над множествами
- •X ∉ ø при любом х.
- •§ 3. Диаграммы Венна
- •§ 4. Подмножества и доказательства
- •§ 5. Произведения множеств
- •Глава 2. Отношения
- •§ 1. Основные понятия
- •§ 2. Графические представления
- •§ 3. Свойства отношений
- •§ 4. Разбиения и отношения эквивалентности
- •§ 5. Отношения порядка
- •§ 6. Отношения на базах данных и структурах данных
- •§ 7. Составные отношения
- •§ 8. Замыкание отношений
- •Глава 3. Функции
- •§ 1. Функции и отображения
- •§ 2. Обратные функции и отображения
- •§ 3. Мощность множеств и счетность
- •§ 4. Некоторые специальные классы функций
- •§ 5. Аналитические свойства вещественных функций
- •§ 6. Операции
- •Глава 4. Основные понятия арифметики
- •§ 1. «Малая» конечная арифметика
- •§ 2. «Большая» конечная арифметика
- •§ 3. Двоичная арифметика
- •§ 4. Логическая арифметика
- •Глава 5. Алгебраические структуры
- •§ 1. Алгебраические структуры и подструктуры
- •§ 2. Простейшие операционные структуры
- •§ 3. Кольца и поля
- •§ 4. Линейная алгебра
- •4.1. Векторные пространства о линейные преобразования.
- •§ 5. Решетка и булевы алгебры
- •§ 6. Замкнутые полукольца
- •Глава 6. Матрицы
- •§ 1. Матрицы и бинарные отношения на конечных множествах
- •§ 2. Матрицы над другими алгебраическими структурами
- •§ 3. Матрицы и векторные пространства
- •Глава 7. Теория графов
- •§ 1. Вводные понятия
- •§ 2. Маршруты, циклы и связанность.
- •§ 3. Планарные графы
- •3.1. Теоремы Эйлера и Куратовского.
- •3.2. Раскраска карт и графов.
- •§ 4. Структуры данных для представления графа
- •§ 5. Обход графа
- •5.2. Обход графа по глубине.
- •5.4. Остовные леса обходов по глубине и ширине.
- •§ 6. Ориентированные графы
- •6.2. Маршруты и связность в орграфах.
- •Глава 8. Языки и грамматики
- •§ 1. Основные понятия
- •§ 2. Грамматики с фразовой структурой
- •2.1. Основные определения.
- •§ 3. Контекстно-свободные языки
- •§ 4. Понятия грамматического разбора и грамматических модификаций
- •§ 5. Грамматики операторного предшествования
- •Глава 9. Конечные автоматы
- •§ 1. Общие понятия
- •§ 2. Конечные автоматы
- •§ 3. Регулярная алгебра
- •Глава 10.Компьютерная геометрия
- •§ 1. Системы координат для подмножеств r3
- •§ 2. Преобразования
- •§ 3. Кривые и поверхности
§ 5. Грамматики операторного предшествования
Важное
подмножество КСГ содержит к себе так
называемые операторные грамматики.
Это грамматики, в которых все продукции
такие, что никакие два нетерминала
не являются смежными в любой правой
части, и, следовательно, лежащий между
ними терминал можно представить как
оператор (хотя не обязательно в
арифметическом смысле). Попытаемся
определить отношения предшествования
на множестве
,
где├ и ┤ суть новые символы, которых
нет в
и которые ограничивают «предложение».
Правила определим следующим образом:
,
если
;
здесь
,
и
если
;
здесь
и
.
если
;
здесь
и
,
если
,
,
если
,
Символы
,
и
обозначают
отношения предшествования (читается
как «имеет меньшее старшинство, чем»,
«имеет такое же старшинство, как»,
«имеет большее старшинство, чем»);
при условии но не более одного такого
отношения справедливо между двумя
произвольными операторами из
,
соответствующую
операторную грамматику называют
грамматикой операторного
предшествования.
Хотя она и является гораздо более сложной, чем другие виды грамматик, встречавшихся до сих пор, понятие предшествования может быть введено так, что будет совпадать с обычным старшинством арифметических операторов и будет расширено до операторов, действия которых важны с точки зрения вычислений, однако обычно считаются само собой разумеющимися при вычислениях «на бумаге».
П р и м е р 5.1.
Для этой грамматики отношения предшествования приведены в виде таблицы на рис. 8.13. //
Р
ис.
8.13
Для
того чтобы увидеть, что происходит в
действительности, рассмотрим этап
внутри вывода предложения
.
Из правила 2 определений предшествования
видно, что для символов
и
( имеем
,
Таким образом,
выполняется отношение
(,
и поэтому
поддерево
должно быть вычислено перед вычислением
;
следовательно, действие, связанное с
«(»,
которым
является удаление этой и парной к пей
закрывающей скобки, выполняется
перед действием, обозначенным «
».
(Графически
ситуацию можно представить так, как
это сделано на
рис. 8.14. Здесь
для правила 2 имеем
,
,
,
,
,
b
≡ ( и
.
Отсюда видно,
что основная структура грамматик
операторного предшествования является
простой и естественной, однако
выглядит сложной при записи из-за
общности правил.) Заменяя
целыми числами 2, 3
и 4,
получаем
Записывая
отношения предшествования под этим
выражением, видим, как определяется
порядок вычислений
;
:
а) выберем число 2 и сохраним его в стеке:
б) аналогично удалим 3 из выражения и поместим в стек:
в) с 4 поступим подобным образом:
г) выполним сложение двух верхних элементов в стеке и результат оставим там же; удалим символ +:
д) отбросим скобки:
е) произведем умножение двух верхних элементов стека, оставляя результат в стеке; удалим символ
;
ж) останов из-за отсутствия отношений предшествования; ответ находится в стеке.
Конечно, вместо выполнения арифметических операций мы могли бы породить код и после этого вычислить выражение — это как раз то, что сделал бы компилятор.
У п р а ж н е н и е 8.5.
1. В проведенном ранее обсуждении привлекаемая семантика принималась само собой разумеющейся, однако она была тесно переплетена с грамматической структурой. Показать, что каждая из следующих грамматик является грамматикой операторного предшествования, и исследовать, как ее внутренняя семантика отличается от обычных соглашений:
.
