Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции-ст.doc
Скачиваний:
155
Добавлен:
03.05.2015
Размер:
366.08 Кб
Скачать

2. Понятие грамматики

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

Грамматикой называется четверка G=<N, T, P, S>, где

  • N – конечное множество нетерминальных символов (их также называют вспомогательными символами, синтаксическими переменными или, коротко, нетерминалами);

  • T – не пересекающееся с N конечное множество терминальных символов (терминалов);

  • P – конечное подмножество декартова произведения , где пары, в которых содержит хотя бы 1 нетерминальный символ, называются правилами подстановки (или просто правилами, или продукцией) и записываются в виде ;

  • S – выделенный символ из N, называемый начальным (или исходным) символом (start symbol).

Соглашения.

1. Терминалы будем обозначать строчными буквами из начала латинского алфавита или цифрами, а нетерминалы – заглавными латинскими буквами. Цепочки, содержащие как терминалы, так и нетерминалы, будем обозначать строчными греческим буквами, а цепочки, состоящие только из терминалов, обозначим строчными буквами из конца латинского алфавита (от u до z).

2. Обычно в примерах будем задавать грамматику в виде списка правил, подразумевая, что алфавит N составляют все заглавные буквы, встречающиеся в правилах, а алфавит Т – все строчные буквы из этих правил. При этом правила грамматики записываются в таком порядке, что левая часть первого правила есть начальный символ S.

3. Для обозначения n правил с одинаковыми левыми частями , …,часто используют сокращенную запись.

Пример. Грамматикой является четверка G1=({A, S}, {0, 1}, P, S), где P состоит из правил: ,,(выписываются столбиком). Нетерминальными символами являютсяA и S, а терминальными – 0 и 1.

Грамматика определяет язык рекурсивным образом. Рекурсивность проявляется в задании особого рода цепочек, называемых выводимыми цепочками грамматики G=<N, T, P, S>:

  1. S – выводимая цепочка,

  2. Если для некоторых слов , , , из алфавита = – выводимая цепочка и содержится вР, то = – тоже выводимая цепочка. При этом пишут и говорят, что цепочка непосредственно выводима из цепочки .

Замечание. Когда из контекста ясно, о какой грамматике идет речь, вместо можно писать просто.

Пример. Пусть G=({S}, {a, b, c}, P, S), где . Тогда.

Если , то пишеми говорим, что цепочкавыводима из цепочки . При этом последовательность слов,, …,называетсявыводом слова изв грамматикеG. Число n называется длиной (количеством шагов) этого вывода. В частности, для всякого слова имеет место(так как возможен вывод длины 0).

Замечание. Бинарное отношение является рефлексивным и транзитивным замыканием бинарного отношения, определенного на множестве.

Пример. Пусть G=({S}, {a, b}, P, S), где . Тогда. Длина этого вывода равна 4.

Через будем обозначатьk-ую степень отношения . Иначе говоря, , если существует последовательность, …,, состоящая изk цепочек (не обязательно различных), для которых прии. Эта последовательность цепочекназывается выводом длины k цепочки из цепочки 0 в грамматике G.

Выводимая цепочка грамматики G, не содержащая нетерминальных символов, называется терминальной цепочкой, порождаемой грамматикой G. Язык, порождаемый грамматикой G, – это множество L(G)терминальных цепочек, порождаемый грамматикойG.

Замечание. Существенно, что в определение грамматики включены 2 алфавита – T и N. Это позволило нам в определении языка, порождаемого грамматикой, отсеять часть слов, получаемых из начального символа. А именно, отбрасывается каждое слово, содержащее хотя бы один символ, не принадлежащий алфавиту Т.

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

Примеры грамматик.

1. Пусть G1=({A, S}, {0, 1}, P, S), где P={,,}. Рассмотрим вывод. Теперь очевидно, что.

2. Пусть G0=({S, E, F}, {a, +, , (,)}, P, S), где

. Пример вывода в этой грамматике:

.

Язык L(G0) представляет собой множество арифметических выражений, построенных из символов а, +, , (и).