Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Высказывание.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
1.45 Mб
Скачать

Формальные грамматики

Определение. Грамматикой называется алгебраическая система , состоящая из непустых конечных множеств А,G и конечного бинарного отношения между словами из множества G+ и словами из множества (AG)* . Множество А называется алфавитом грамматики и множество V=AG полным словарем грамматики. Элементы множества G не принадлежат алфавиту А и называются грамматическими (или металингвистическими) символами грамматики. Элементы (u,v) отношения называются правилами грамматики и символически обозначаются uv . В этом случае говорят, что слово v получается из слова u по правилу .

Правила грамматики позволяют преобразовать слова ее полного словаря. Для любого g0G образуется некоторое множество слов .

Определение. Пусть у,z V*слова над полным словарем V грамматики . Будем говорить, что:

    • слово z непосредственно выводится из слова у и писать ,если z можно получить из у заменой некоторого его подслова u на слово w по некоторому правилу грамматики uw,;

    • слово z выводится из слова у и писать ,если z можно получить из слова у конечным числом замен некоторых подслов по некоторым правилам грамматики.

Определение. Для произвольно фиксированного грамматического символа g0G множество всех слов над алфавитом А, которые выводятся из g0, обозначается и называется языком, порождаемым грамматикой и начальным символом g0G.

Таким образом, по определению

.

Примеры.

  1. Пусть грамматика имеет однобуквенный алфавит А = {a}, один грамматический символ g0G, g0 а и два правила: g0а, g0аg0.

Схематически процесс построения языка можно изобразить на следующей диаграмме:

a

aa

aaa

aaaa

g0

ag0

aag0

aaag0

={a, aa, ааа, aaaa,…}=A+.

2. Пусть грамматика имеет двухбуквенный алфавит А={a,b}, один грамматический символ g0G, g0 а,b и три правила: g0а, g0аba, g0аg0a.

a

aaa

aaaaa

g0

ag0a

aag0aa

aaag0aaa

aba

aabaa

aaabaaa

={a,aba, а3, ,a5, ,…}.

В качестве еще одного применения грамматик рассмотрим общепринятый подход к языкам программирования на примере построения известного языка ALGOL 60.

Алфавит А такого языка состоит из букв, цифр, алгебраических символов и специальных зарезервированных слов, его грамматическими символами являются некоторые подмножества множества А* и, наконец, имеются определенные грамматические правила, по которым строятся программы этого языка.

Грамматика с алфавитом

А={А,В,...,Z,а,b,...,z,0,1,…,9,+,,*,/,,,=,,<,,>,,,,,;,,:,(,),[,], BEGIN, TRUE, FALSE, GOTO, FOR, STEP, UNTIL, END}

и множеством грамматических символов G, состоящим из множеств I,U,R,В,D,L,… подмножеств множества A*, которые обозначаются символами <идентификатор>, <целое без знака>, <вещественное>, <булево>, <цифра>, <буква>,… и неявно определяются последовательностью уравнений вида:

I = L IL ID, U = D UD и т.д.,

где IL,ID,UD – произведения подмножеств в полугруппе слов А*.

Эти уравнения определяются соответствующими правилами языка ALGOL:

<идентификатор> ::= <буква> | <идентификатор><буква> | <идентификатор><цифра>,

<число без знака> ::= <цифра>|<число без знака><цифра>, …

Пусть g0 – произвольный начальный символ, удовлетворяющий условию g0A и – множество правил грамматики вида: g0I, g0g0D, g0g07 и т. п. Языки, порождаемые такими грамматиками с произвольным конечным алфавитом А и определяемым уравнениями множеством грамматических символов GА*, называются языками типа ALGOL.

Определение. Язык LA+ называется языком, порожденным грамматикой (или языком типа 0), если для некоторой грамматики с начальным символом g0.

Теорема 1. Язык LA+ в том и только том случае порождается некоторой грамматикой, если он последовательно порождается некоторой эффективной процедурой (алгоритмом) P, т.е. , где каждый элемент является результатом применения процедуры P к последовательным значениям .

Такие языки называются рекурсивно перечислимыми.

Определение. Грамматика называется:

  • контекстно-зависимой (или типа 1), если любое ее правило имеет вид для некоторых , , ;

  • контекстно-свободной (или типа 2), если любое ее правило имеет вид для некоторых и ;

  • праволинейной (или рациональной, или типа 3), если любое ее правило имеет вид или для некоторых и .

Для каждого типа обозначим Ki класс всех языков, порожденных грамматиками типа i. Известно, что , причем все эти включения строгие.

Теорема 2. Язык LA+ в том и только том случае порождается некоторой контекстно-зависимой грамматикой, если найдется такая эффективная процедура (алгоритм), которая для любого слова wA+ позволяет определить, принадлежит ли это слово языку L или нет.

Такие языки называются рекурсивными.

Теорема 3. Язык LA+ в том и только том случае порождается некоторой контекстно-свободной грамматикой, если он является языком типа языка программирования ALGOL.

Теорема 4. Язык LA+ в том и только том случае порождается некоторой праволинейной грамматикой, если он получается из однобуквенных языков с помощью алгебраических операций сложение +, умножение  и итерация +.

Такие языки называются рациональными, поскольку они определяются формулами с постоянными символами и символами трех алгебраических операций +,  и +. Например, рациональный язык в примере 2 определяется формулой .

Так как конструктивные объекты можно кодировать словами конечного множества A (например, состоящего из двоичных символов 0 и 1), то алгоритм моделируется устройством, перерабатывающим слова алфавита A.

Пусть А – произвольное конечное множество, называемое алфавитом.

Элементы aА называются буквами.

Словом над алфавитом А называется конечная последовательность букв алфавита А.

Слово без букв называется пустым словом и обозначается символом .

Обозначим символом множество всех непустых слов над алфавитом и символом множество слов .

На этих множествах определена операция умножения слов по следующему правилу:

любым двум словам , ставится в соответствие слово

,

полученное в результате приписывания к первому слову второго слова .

Подмножества множества называются языками над алфавитом А. Для языков K,L определяются алгебраические операции:

  1. сложение K+L = { u : u K или u L };

  2. умножение и ;

итерация для всех nN}. Примеры.

  1. Для однобуквенного алфавита A={a} словами являются последовательности: a, aa, aaa, …

В этом случае множества слов и являются бесконечными множествами, которые позволяют кодировать сколь угодно большие конечные множества B с помощью отображений .

Языками над алфавитом A={a} являются всевозможные множества слов, образованных из одной буквы a.

2. Для двухэлементного алфавита A={a,b} словами являются последовательности: a, b, aa, ab, ba, bb,…

В этом случае множество слов и также бесконечны.

Языками над алфавитом A={a,b} являются всевозможные множества слов, образованных из двух букв a,b.