- •V. Введение в теорию формальных языков
- •4. Грамматики с ограничениями на правила
- •4.1. Классы грамматик в соответствии с классификацией Хомского.
- •5. Способы записи синтаксиса языка
- •5.1. Метаязык Хомского.
- •Описание идентификатора на метаязыке Хомского показывает громоздкость метаязыка, поэтому его можно эффективно использовать только для описания небольших абстрактных языков.
- •5.2. Метаязык Хомского-Щутценберже.
- •Описание идентификатора на метаязыке Хомского-Щутценберже.
- •5.3. Бэкуса-Наура формы (бнф).
- •Описание идентификатора с использованием бнф.
- •5.4. Расширенные Бэкуса-Наура формы (рбнф).
- •Синтаксис идентификатора
- •5.5. Диаграммы Вирта.
- •Описание идентификатора с использованием диаграмм Вирта.
- •6. Распознаватели для различных классов грамматик
- •6.1. Компоненты распознавателя.
- •5. Обобщенная структура распознавателя
- •6.2. Конфигурация распознавателя.
- •6.3. Классы языков.
V. Введение в теорию формальных языков
4. Грамматики с ограничениями на правила
Несмотря на большое разнообразие грамматик, при построении трансляторов применяются только некоторые из них, имеющие ограничения, что связано с практической целесообразностью использования определенных типов правил, так как сложность их построения непосредственно влияет на сложность построения трансляторов. По виду правил выделяют несколько классов грамматик.
4.1. Классы грамматик в соответствии с классификацией Хомского.
1. Праволинейной (выровненной вправо) грамматикой называется грамматика G, если каждое правило из Р имеет вид
A xB или A x
где A, B – нетерминалы, x – цепочка, состоящая из терминалов
Например, грамматика G2 = ({0,1}, {S}, S, P)
где P: S 0S;
S 1S;
S ,
определяет язык {0, 1}.
2. Контекстно-свободной (бесконтекстной) грамматикой (КС-грамматикой) называется грамматика G, если каждое правило из Р имеет вид:
A
где A N, (T N)*, то есть является цепочкой, состоящей из множества терминалов и нетерминалов и может быть пустой.
Например, грамматика G3 = ({E, T, F}, {a, +, *, (,)}, P, E)
где P: E T
E E + T
T F
T T * F
F (E)
F a.
порождает простейшие арифметические выражения.
Согласно определению, каждая праволинейная грамматика является контекстно- свободной.
Нетерминал А контекстно-свободной грамматики G = (T, N, S, P) для некоторых и , если =ε, называется леворекурсивным, а если =ε, называется праворекурсивным.
Грамматика G называется леворекурсивной (соответственно праворекурсивной), если в G имеется хотя бы один леворекурсивный (соответственно праворекурсивный) нетерминал.
Грамматика, в которой рекурсивны все нетерминалы (возможно, кроме, начального символа) называется рекурсивной.
3. Контекстно-зависимой (неукорачивающей) грамматикой (КЗ-грамматикой) называется грамматика G, если каждое правило из P имеет вид:
где | || |, то есть вновь порождаемые цепочки не могут быть короче, чем исходные, а также пустыми (другие ограничения отсутствуют).
Например, грамматика G = ({a, b, c}, {B, C, S}, S, P)
где P: S aSBC;
S abc;
CB BC;
bB bb;
bC bc;
cC сc,
порождает язык { a n b n c n }, n ≥ 1 (n >0).
По определению КЗ-грамматика не допускает правил А , где – пустая цепочка, т. е. КС-грамматика с пустыми цепочками в правой части правил не является контекстно-зависимой.
Запрещение в контекстно-зависимой грамматике использования правил вида A→ε сделано для того, чтобы алгоритм, определяющий принадлежность цепочки языку, не зацикливается.
Наличие пустых цепочек ведет к грамматике без ограничений.
4. Грамматикой свободного (общего) вида (без ограничений) называется грамматика G, если в ней отсутствуют выше упомянутые ограничения.
Если язык L порождается грамматикой типа G, то L называется языком типа G.
Например, L(G) – КС-язык типа G.
Наиболее широкое применение при разработке трансляторов нашли КС-грамматики и порождаемые ими КС-языки.
Эта классификация называется включающей, т. е. все контекстно-свободные грамматики являются контекстно-зависимыми, а все контекстно-зависимые грамматики являются грамматиками общего вида и т. д.
Существуют языки, принадлежащие к типу i, но не к типу i+1: например, язык грамматики Gi является контекстно-зависимым, но не контекстно-свободным, т. е. не существует контекстно-свободной грамматики, порождающий этот язык.