- •V. Введение в теорию формальных языков
- •4. Грамматики с ограничениями на правила
- •4.1. Классы грамматик в соответствии с классификацией Хомского.
- •5. Способы записи синтаксиса языка
- •5.1. Метаязык Хомского.
- •Описание идентификатора на метаязыке Хомского показывает громоздкость метаязыка, поэтому его можно эффективно использовать только для описания небольших абстрактных языков.
- •5.2. Метаязык Хомского-Щутценберже.
- •Описание идентификатора на метаязыке Хомского-Щутценберже.
- •5.3. Бэкуса-Наура формы (бнф).
- •Описание идентификатора с использованием бнф.
- •5.4. Расширенные Бэкуса-Наура формы (рбнф).
- •Синтаксис идентификатора
- •5.5. Диаграммы Вирта.
- •Описание идентификатора с использованием диаграмм Вирта.
- •6. Распознаватели для различных классов грамматик
- •6.1. Компоненты распознавателя.
- •5. Обобщенная структура распознавателя
- •6.2. Конфигурация распознавателя.
- •6.3. Классы языков.
5. Способы записи синтаксиса языка
Существуют различные способы записи синтаксических правил, что в основном определяется условными обозначениями и ограничениями на структуру правил, принятых в используемых метаязыках.
Метаязыки используются для задания грамматики языков программирования со времен Алгола 60. Еще раньше они начали использоваться при описании небольших языков в статьях, посвященных формальным грамматикам.
5.1. Метаязык Хомского.
Метаязык Хомского вышел из математической логики; имеет следующую систему обозначений:
символ отделяет левую часть правила от правой; обозначает порождает или это есть;
нетерминалы обозначаются буквой А с индексом, указывающим на его номер;
терминалы – это символы, используемые в описываемом языке;
каждое правило определяет порождение одной новой цепочки;
один и тот же нетерминал может встречаться в нескольких правилах слева.
Описание идентификатора на метаязыке Хомского.
1. A1 A |
2. A1 B … |
26. A1 Z |
27. A1 a |
28. A1 b … |
52. A1 z |
53. A2 0 |
54. A2 1 … |
62. A2 9 |
63. A3 A1 |
64. A3 A3A1 |
65. A3 A3A2 |
Описание идентификатора на метаязыке Хомского показывает громоздкость метаязыка, поэтому его можно эффективно использовать только для описания небольших абстрактных языков.
5.2. Метаязык Хомского-Щутценберже.
Более компактное описание возможно с применением метаязыка Хомского-Щутценберже, использующего следующие обозначения метасимволов:
символ = отделяет левую часть правила от правой (вместо символа );
нетерминалы обозначаются буквой А с индексом, указывающим на его номер;
терминалы – это символы, используемые в описываемом языке;
каждое правило определяет порождение нескольких альтернативных цепочек, отделяемых друг от друга символом +, что позволяет использовать в левой части только разные нетерминалы.
Введение возможности альтернативного перечисления позволило сократить описание языков.
Описание идентификатора на метаязыке Хомского-Щутценберже.
A1=A+B+C+D+…+Y+Z+a+b+c+d+…+x+y+z
A2=0+1+2+4+5+6+7+8+9
A3=A1+A3A1+A3A2
5.3. Бэкуса-Наура формы (бнф).
Метаязыки Хомского и Хомского-Щутценберже использовались в математической литературе при описании простых абстрактных языков. Метаязык, предложенный Бэкусом и Науром, впервые использовался для описания синтаксиса реального языка программирования Алгол 60. Наряду с новыми обозначениями метасимволов, в нем использовались содержательные обозначения нетерминалов, что сделало описание языка нагляднее и позволило в дальнейшем использовать данную нотацию для описания реальных языков программирования. Были использованы следующие обозначения:
символ ::= отделяет левую часть правила от правой;
нетерминалы обозначаются произвольной символьной строкой, заключенной в угловые скобки < и >;
терминалы – это символы, используемые в описываемом языке;
каждое правило определяет порождение нескольких альтернативных цепочек, отделяемых друг от друга символом вертикальной черты |.