- •Глава 2. Способы задания языков
- •2.1. Грамматики.
- •2.1.1. Основные понятия и обозначения.
- •2.1.2. Классификация грамматик по Хомскому.
- •2.2. Распознаватели.
- •Глава 3. Регулярные языки
- •3.1. Праволинейные грамматики
- •3.2. Конечные автоматы
- •Глава 4. Контекстно-свободные языки
- •4.1. Деревья выводов
- •4.2. Нормальная форма Хомского
- •4.3. Нормальная форма Грейбах
- •Глава 5. Автоматы с магазинной памятью
- •5.1. Детерминированный магазинный автомат
- •6. Приемы построения грамматик
- •Sa b c.
Глава 2. Способы задания языков
Теория формальных языков (формальных грамматик) занимается описанием, распознаванием и переработкой языков. Описание любого языка должно быть конечным, хотя сам язык может содержать бесконечное множество цепочек. Полезно иметь возможность описания отдельных типов языков, имеющих те или иные свойства, т. е. иметь различные типы конечных описаний. Синтаксис языка можно задать с использованием синтаксических диаграмм или другим альтернативным способом, воспользовавшись нотацией Бэкуса-Наура (НБН). При использовании нотации Бэкуса-Наура нетерминальные символы (подлежащие дальнейшему определению) языка заключаются в угловые скобки вида < ... > .
Последовательность символов : : = означает «определяется как», а символ | означает "или". Пример описания в нотации Бэкуса-Наура арифметических выражений, содержащих переменные a, b,приведен ниже.
< выражение > : : = < терм > | < терм > + < выражение > | < терм > - < выражение >
< терм > : : = < множитель > | < множитель > * < терм > | < терм > / < множитель >
< множитель > : : = a|b| ( < выражение > )
Существуют два универсальных способа описания отдельных классов языков. Первый способ – грамматикикак механизмы, порождающие цепочки символов. Второй способ определяет язык в терминах множества цепочек, допускаемых некоторым распознающим устройством, называемымавтоматом.
2.1. Грамматики.
2.1.1. Основные понятия и обозначения.
Основными объектами грамматики являются базовые элементы языка или терминальные символы, а также цепочки, построенные из этих элементов.
При определении грамматики будем придерживаться следующих соглашений:
прописными буквами обозначаются нетерминальные символы языка;
строчными буквами латинского алфавита обозначаются терминальные символы языка;
цепочки обозначаются либо прописными буквами латинского алфавита, либо греческими буквами.
символ «→»используется для обозначения отношения "определяется как".
Введем в рассмотрение пустую цепочку ε, не содержащую ни одного символа.
Длинойцепочки будем называть число символов, входящих в эту цепочку, например:
B = abab, |B| = |abab| = 4,
| ε| = 0.
Конкатенациейдвух цепочекXиYназывается такая цепочкаZ, которая получается непосредственным слиянием цепочкиX, стоящей слева, и цепочкиY, стоящей справа. Например, еслиX = ffg,Y = ghh, то конкатенацияXиY– это цепочкаZ=ffgghh.
Будем обозначать через А*множество всех возможных цепочек конечного множества А базовых элементов (символов), включая пустую цепочкуε; Множество А называют такжеалфавитом. Любое множество цепочек LA*называетсяформальным языком, определенным на алфавите А.
2.1.2. Классификация грамматик по Хомскому.
Грамматика – это математическая система, определяющая язык. Будем рассматривать класс грамматик, называемых грамматиками Хомского или грамматиками составляющих. В грамматике, определяющей язык L, используется два типа конечных непересекающихся множества символов – множество нетерминальных символов, которое будет обозначаться буквой N, и множество терминальных символов, обозначаемое. Из терминальных символов образуются слова (цепочки) определяемого языка. Нетерминальные символы служат для задания слов языка L.
Основу грамматики составляет конечное непустое множество Pправил образования слов языка. Правило – это пара
(N )*N(N )* → (N )*.
Левая часть правила – это любая цепочка, содержащая хотя бы один нетерминальный символ, а правая – любая цепочка. Правило называют еще продукциями.
Язык, определяемый грамматикой, –это множество цепочек, состоящих из терминальных символов и выводимых из одного выделенного начального символа. Язык строится с помощью интерпретации каждой из его продукций как правила переписывания. Переписывание формулы означает замену в ней нетерминальных символов левой части продукции символами из правой ее части.
Формально грамматика задается четверкой
G = (N, , P, S),
где N– конечное множество нетерминальных символов;
– конечное множество терминальных символов, непересекающееся с N;
P– конечное множество правил вида,и– цепочки, причемсодержит хотя бы один нетерминальный символ, а на цепочкуне наложено никаких ограничений;
S– начальный или исходный символ.
Будем использовать следующее обозначение: если V– это множество, тоV*– это замыкание множестваVили, другими словами, множество всех конечных последовательностей (цепочек), составленных из множестваV.
На множестве (N )*вводятся отношенияи*. Если– продукция изP,и– цепочки из множества(N )*, тоТо есть продукцияприменяется к цепочкедля получения цепочкиили, другими словами, цепочканепосредственно получается (порождается, выводится) из цепочкипосле применения продукцииДве цепочки связаны отношением, если вторая цепочка получается из первой применением продукции изP.Пусть имеется
…m-1m
Здесь …m цепочки из(N )*.Последовательность приведенных выше отношений может быть записана так:m .
Язык L, порождаемый грамматикойG, – это множество цепочек, которые состоят только из терминальных символов и которые можно вывести из символаS.Формально это можно записать следующим образом:
L = *, S *}.
Грамматики классифицируются по виду их правил. Грамматика называется регулярной, если каждое правило имеет вид
A xB, A → Bx или A → x, где A, B N, x *.
Грамматика называется контекстно-свободной (бесконтекстной),если каждое правило имеет вид
A →, гдеA N, *.
Грамматика называется контекстно-зависимой (не укорачивающей),если каждое правило имеет вид
→, где
Грамматика, не удовлетворяющая ни одному из указанных ограничений, называется грамматикой общего видаилиграмматикой без ограничений.
Иерархии грамматик соответствует иерархия формальных языков, каждый из которых может быть порожден некоторой формальной грамматикой.