Скачать презентацию Грамматики и языки Формальная грамматика или просто Скачать презентацию Грамматики и языки Формальная грамматика или просто

Грамматики и языки03.ppt

  • Количество слайдов: 18

Грамматики и языки Грамматики и языки

Формальная грамматика или просто грамматика в теории формальных языков — способ описания формального языка, Формальная грамматика или просто грамматика в теории формальных языков — способ описания формального языка, то есть выделения некоторого подмножества из множества всех слов некоторого конечного алфавитa(множества символов). Различают порождающие и распознающие грамматики — первые задают правила, с помощью которых можно построить любое слово языка, а вторые позволяют по данному слову определить, входит оно в язык или нет.

Терминал (терминальный символ) — объект, непосредственно присутствующий в словах языка, соответствующего грамматике, и имеющий Терминал (терминальный символ) — объект, непосредственно присутствующий в словах языка, соответствующего грамматике, и имеющий конкретное, неизменяемое значение (обобщение понятия «буквы» ). В формальных языках, используемых на компьютере, в качестве терминалов обычно берут все или часть стандартных символов ASCII — латинские буквы, цифры и спец. символы. Нетерминал (нетерминальный символ) — объект, обозначающий какую-либо сущность языка (например: формула, арифметическое выражение, команда) и не имеющий конкретного символьного значения.

Порождающие грамматики Словами языка, заданного грамматикой, являются все последовательности терминалов, выводимые (порождаемые) из начального Порождающие грамматики Словами языка, заданного грамматикой, являются все последовательности терминалов, выводимые (порождаемые) из начального нетерминала по правилам вывода. Чтобы задать грамматику, требуется задать алфавиты терминалов и нетерминалов, набор правил вывода, а также выделить в множестве нетерминалов начальный. Итак, грамматика определяется следующими характеристиками: Σ — набор (алфавит) терминальных символов N — набор (алфавит) нетерминальных символов P — набор правил вида: «левая часть» «правая часть» , где: «левая часть» — непустая последовательность терминалов и нетерминалов, содержащая хотя бы один нетерминал «правая часть» — любая последовательность терминалов и нетерминалов S — стартовый (начальный) символ из набора нетерминалов.

Выводом называется последовательность строк, состоящих из терминалов и нетерминалов, где первой идет строка, состоящая Выводом называется последовательность строк, состоящих из терминалов и нетерминалов, где первой идет строка, состоящая из одного стартового нетерминала, а каждая последующая строка получена из предыдущей путем замены некоторой подстроки по одному (любому) из правил. Конечной строкой является строка, полностью состоящая из терминалов, и следовательно являющаяся словом языка. Существование вывода для некоторого слова является критерием его принадлежности к языку, определяемому данной грамматикой.

Цепочка символов Цепочкой символов в алфавите называется любая конечная последовательность символов этого алфавита. Цепочка, Цепочка символов Цепочкой символов в алфавите называется любая конечная последовательность символов этого алфавита. Цепочка, которая не содержит ни одного символа, называется пустой цепочкой. Для ее обозначения будем использовать символ ε. Более формально цепочка символов в алфавите V определяется следующим образом: (1) ε - цепочка в алфавите V; (2) если α - цепочка в алфавите V и a - символ этого алфавита, то αa - цепочка в алфавите V; (3) β - цепочка в алфавите V тогда и только тогда, когда она является таковой в силу (1) и (2).

Типы грамматик По иерархии Хомского, грамматики делятся на 4 типа, каждый последующий является более Типы грамматик По иерархии Хомского, грамматики делятся на 4 типа, каждый последующий является более ограниченным подмножеством предыдущего (но и легче поддающимся анализу): • тип 0. неограниченные грамматики — возможны любые правила • тип 1. контекстно-зависимые грамматики — левая часть может содержать один нетерминал, окруженный «контекстом» (последовательности символов, в том же виде присутствующие в правой части); сам нетерминал заменяется непустой последовательностью символов в правой части. • тип 2. контекстно-свободные грамматики — левая часть состоит из одного нетерминала. • тип 3. регулярные грамматики — более простые, эквивалентны конечным автоматам.

Неограниченные грамматики Это — все без исключения формальные грамматики. Для грамматики G(VT, VN, P, Неограниченные грамматики Это — все без исключения формальные грамматики. Для грамматики G(VT, VN, P, S), V=VT∪VN все правила имеют вид: где α — любая цепочка, содержащая хотя бы один нетерминальный символ, а β — любая цепочка символов из алфавита. (VT — множество (словарь) терминальных символов, VN — множество (словарь) нетерминальных символов, P — множество продукций (правил) грамматики, S — начальный символ) Практического применения в силу своей сложности такие грамматики не имеют.

Контекстно-зависимые грамматики К этому типу относятся контекстно-зависимые (КЗ) грамматики и неукорачивающие грамматики. Для грамматики Контекстно-зависимые грамматики К этому типу относятся контекстно-зависимые (КЗ) грамматики и неукорачивающие грамматики. Для грамматики G(VT, VN, P, S), V=VT∪VN все правила имеют вид: αAβ→αγβ, где α, β∈V*, γ∈V+, A∈VN - такие грамматики относят к контекстнозависимым. α→β, где α, β∈V+, |α|≤|β|- такие грамматики относят к неукорачивающим. Эти классы грамматик эквивалентны. Могут использоваться при анализе текстов на естественных языках, однако при построении компиляторов практически не используются в силу своей сложности. Для контекстно-зависимых грамматик доказано утверждение: по некоторому алгоритму за конечное число шагов можно установить, принадлежит цепочка терминальных символов данному языку или нет.

Примеры Следующая грамматика задает контекстнозависимый язык : Примеры Следующая грамматика задает контекстнозависимый язык :

Примеры Так выглядит цепочка порождения aaa bbb ccc: Примеры Так выглядит цепочка порождения aaa bbb ccc:

Контекстно-свободная грамматика КС-грамматика, бесконтекстная грамматика) — частный случай формальной грамматики, у которой левые части Контекстно-свободная грамматика КС-грамматика, бесконтекстная грамматика) — частный случай формальной грамматики, у которой левые части всех продукций являются одиночными нетерминалами. Смысл термина «контекстно-свободная» заключается в том, что возможность применить продукцию к нетерминалу, в отличие от общего случая грамматики Хомского, не зависит от контекста этого нетерминала. Язык, который может быть задан КСграмматикой, называется контекстно-свободным языком или КС-языком.

Контекстно-свободные грамматики Для грамматики G(VT, VN, P, S), V=VT∪VN все правила имеют вид: A→β, Контекстно-свободные грамматики Для грамматики G(VT, VN, P, S), V=VT∪VN все правила имеют вид: A→β, где β∈V+ (для неукорачивающих КСграмматик, β∈V* для укорачивающих), A∈VN. То есть грамматика допускает появление в левой части правила только нетерминального символа. КС-грамматики находят большое применение в информатике. Ими задаётся грамматическая структура большинства языков программирования, структурированных данных и т. д.

Регулярные грамматики определяют в точности все регулярные языки, и поэтому эквивалентны конечным автоматам и Регулярные грамматики определяют в точности все регулярные языки, и поэтому эквивалентны конечным автоматам и регулярным выражениям. Регулярные грамматики являются подмножеством контекстно-свободных. Задание набором правил. Регулярная грамматика может быть задана набором правил как левая или правая регулярная грамматика. Правая регулярная грамматика - все правила могут быть в одной из следующих форм: A→a A → a. B A→ε левая регулярная грамматика - все правила могут быть в одной из следующих форм: A→a A → Ba A→ε Где заглавные буквы (A, B) обозначают нетерминалы из множества N строчные буквы (a, b) обозначают терминалы из множества Σ , ε - пустая строка, т. е. строка длины 0 и S является начальным символом.

Классы правых и левых регулярных грамматик эквивалентны - каждый в отдельности достаточен для задания Классы правых и левых регулярных грамматик эквивалентны - каждый в отдельности достаточен для задания всех регулярных языков. Любая регулярная грамматика может быть преобразована из левой в правую, и наоборот. Пример: Правая регулярная грамматика G, заданная N = {S, A}, Σ = {a, b, c}, P состоит из следующих правил: S → a. S S → b. A A→ε A → c. A и S является начальным символом. Регулярные грамматики применяются для описания простейших конструкций: идентификаторов, строк, констант, а также языков ассемблера, командных процессоров и др.

Аналитические грамматики Порождающие грамматики — не единственный вид грамматик, однако наиболее распространенный в приложениях Аналитические грамматики Порождающие грамматики — не единственный вид грамматик, однако наиболее распространенный в приложениях к программированию. В отличие от порождающих грамматик, аналитическая (распознающая) грамматика задает алгоритм, позволяющий определить, принадлежит ли данное слово языку. Например, любой регулярный язык может быть распознан при помощи грамматики, задаваемой конечным автоматом, а любая контекстно-свободная грамматика — с помощью автомата со стековой памятью. Если слово принадлежит языку, то такой автомат строит его вывод в явном виде, что позволяет анализировать семантику этого слова.

Пример — арифметические выражения Рассмотрим простой язык, определяющий ограниченное подмножество арифметических формул, состоящих из Пример — арифметические выражения Рассмотрим простой язык, определяющий ограниченное подмножество арифметических формул, состоящих из натуральных чисел, скобок и знаков арифметических действий. Стоит заметить, что здесь в каждом правиле с левой стороны от стрелки стоит только один нетерминальный символ. Такие грамматики называются контекстно-свободными. Терминальный алфавит:

Правила: Выведем формулу (12+5) с помощью перечисленных правил вывода. Для наглядности, стороны каждой замены Правила: Выведем формулу (12+5) с помощью перечисленных правил вывода. Для наглядности, стороны каждой замены показаны попарно, в каждой паре заменяемая часть подчеркнута.