- •Е.И.Чигарина, м.А.Шамашов
- •Isbn 978-5-7883-0506-6
- •Глава 1. Языки и грамматики. Обозначения, определения и классификация 6
- •Глава 1. Языки и грамматики. Обозначения, определения и классификация
- •1.1 Понятие грамматики языка. Обозначения
- •1.2. Классификация грамматик по Хомскому
- •1.3. Техника построения кс - и а - грамматик
- •1.4. Синтаксические деревья вывода в кс-грамматиках. Представление а-грамматик в виде графа состояний. Неоднозначность грамматик
- •1.5. Синтаксический анализ а-языков
- •Упражнения к первой главе
- •Глава 2. Распознаватели и автоматы
- •Глава 3. Автоматные грамматики и конечные автоматы
- •3.1. Автоматные грамматики и конечные автоматы
- •3.2. Эквивалентность недетерминированных и детерминированных а-грамматик
- •Упражнения к третьей главе
- •Глава 4. Эквивалентные преобразования контекстно-свободных и автоматных грамматик
- •4.1. Декомпозиция правил грамматики
- •4.2. Исключение тупиковых правил из грамматик
- •4.3. Обобщенные кс-грамматики и приведение их к удлиняющей форме
- •4.4. Устранение левой рекурсии и левая факторизация
- •Упражнения к четвертой главе
- •Глава 5. Свойства автоматных и контекстно-свободных языков
- •5.1. Общий вид цепочек а-языков и кс-языков
- •5.2. Операции над языками
- •5.2.1. Операции над кс-языками
- •5.2.2 Операции над а-языками
- •5.2.3. Операции над контекстными языками
- •5.3. Выводы для практики
- •5.4. Неоднозначность кс-грамматик и языков
- •Упражнения к пятой главе
- •Глава 6. Синтаксический анализ кс-языков
- •6.1.Методы анализа кс-языков. Грамматики предшествования
- •6.2. Грамматики предшествования Вирта
- •6.3. Грамматика предшествования Флойда
- •6.4 Функции предшествования
- •Упражнения к шестой главе
- •Глава 7. Введение в семантику
- •7.1. Польская инверсная запись
- •7.2. Интерпретация полиЗа
- •7.3. Генерирование команд по полиЗу
- •7.4. Алгоритм Замельсона и Бауэра перевода выражений в полиз
- •7.5. Атрибутные грамматики
- •Упражнения к седьмой главе
- •Глава 8. Основные фазы компиляции
- •Заключение
- •Приложение
- •Список рекомендуемой литературы
- •Чигарина Елена Ивановна
6.3. Грамматика предшествования Флойда
Отношения предшествования в грамматиках по Флойду определяются только между терминальными символами и не допускаются в правилах вывода двух рядом стоящих нетерминалов: .
Алгоритм свертки по Флойду включает те же пункты, что и алгоритм свертки по Вирту.
В грамматике по Флойду множество левых и правых символов определяется следующим образом:
Отношения предшествования между любыми терминальными символами S1 и S2 определяются следующим образом:
Пример 6.2:
Матрица предшествования:
|
|
+ |
* |
a.z |
( |
) | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
<· |
<· |
<· |
<· |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
+ |
·> |
·> |
<· |
<· |
<· |
·> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
* |
·> |
·> |
·> |
<· |
<· |
·> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
a..z |
·> |
·> |
·> |
|
|
·> | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
( |
|
<· |
<· |
<· |
<· |
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) |
·> |
·> |
·> |
|
|
·> |
Рис. 6.4.
Выполним свертку по Флойду цепочки -
>
,,,
Рис. 6.5.
Таким образом, можно сделать вывод, что цепочка принадлежит языку.
По сравнению с грамматикой Вирта, в грамматиках по Флойду матрица предшествования гораздо меньше, но алгоритм свертки работает гораздо дольше из-за необходимости перебора всех правил вида A. Ошибки при свертке по Флойду возникают в следующих случаях:
1) Если между двумя символами, стоящими рядом на одном из шагов вывода цепочки, нет отношения предшествования;
2) Если для выделенной основы для свертки выполнены все переборы, а соответствующих правил для замены в грамматике нет.
Введение семантики в грамматику по Флойду осуществляется так же, как в грамматиках по Вирту.