Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Все_пособие_редактир.doc
Скачиваний:
175
Добавлен:
31.10.2018
Размер:
2.51 Mб
Скачать

4.12.3 Примеры классификации языков и грамматик

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

Примеры некоторых языков указанных типов.

Грамматика для целых десятичных чисел со знаком

G({0,1,2,3,4,5,6,7,8,9,-,+},{S,T,F},P,S):

P:

ST +T |-T

TF | TF

F 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

По структуре своих правил данная грамматика G относится к контекстно-свободным грамматикам (тип 2). Ее можно отнести и к типу 0, и к типу 1, но максимально возможным является именно тип 2. К типу 3 эту грамматику отнести нельзя, т.к. строка T→F│TF содержит правило T→TF, которое недопустимо для типа 3, и, хотя все остальные правила этому типу соответствует, одного несоответствия достаточно.

Для того же самого языка (целых десятичных чисел со знаком) можно построить и другую грамматику G’({0,1,2,3,4,5,6,7,8,9,-,+},{S,T},P,S):

P:

ST |+T |-T

T0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 0T | 1T | 2T | 3T | 4T | 5T | 6T | 7T | 8T | 9T

По структуре своих правил грамматика G’является праволинейной и может быть отнесена к регулярным грамматикам (тип3).

Для этого же языка можно построить эквивалентную леволинейную грамматику (тип3) G”({0,1,2,3,4,5,6,7,8,9,-,+},{S,T},P,S):

P:

T+|-|

S T0 | T1| T2 | T3| 4 | T5 | T6 | T7 | T8 | T9 | S0 | S1 | S2 | S3 | S4 | S5 | S6 |S7 | S8 | S9

Следовательно, язык целых десятичных чисел со знаком, заданный грамматиками G,G’и G”, относится к регулярным языкам (тип3).

Для произвольного языка, заданного некоторой грамматикой, в общем случае довольно сложно определить его тип. Не всегда можно построить грамматику максимально возможного типа для произвольного языка. К тому же при строгом определении типа требуется еще доказать, что две грамматики (первоначально имеющаяся и вновь построенная) эквивалентны, а также то, что не существует для того же языка грамматики с большим по номеру типом. Это нетривиальная задача, которую не так легко решить.

4.13 Цепочки вывода. Сентенциальная форма. Вывод. Цепочки вывода

Вывод - это процесс порождения предложения языка на основе правил определяющих язык грамматики.

Цепочка =12 называется непосредственно выводимой из цепочки =1ω2 в грамматике G(T,N,P,S), V=TN, 1,,2V*,ωV+ , если в грамматике G существует правило:ω  P. Непосредственная выводимость цепочки  из цепочки  обозначается так:. То есть, цепочка  выводима из цепочки , если можно взять несколько символов в цепочке , заменить их на другие символы по некоторому правилу грамматики и получить цепочку . В формальном определении непосредственной выводимости любая из цепочек 1 или 2 (или обе эти цепочки) может быть пустой. В предельном случае вся цепочка  может быть заменена на цепочку , тогда в грамматике G должно существовать правило: P.

Цепочка  называется выводимой из цепочки  (обозначается *) в том случае, если выполняется одно из двух условий:

●  непосредственно выводима из  ();

●  , такая, что:  выводима из  и  непосредственно выводима из  (* и ).

Это рекурсивное определение выводимости цепочки. Суть его заключается в том, что цепочка  выводима из цепочки , если  или же если можно построить последовательность непосредственно выводимых цепочек от  к  следующего вида: 1…i…n, n  1. В этой последовательности каждая последующая цепочка i непосредственно выводима из предыдущей цепочки i-1.

Такая последовательность непосредственно выводимых цепочек называется выводом или цепочкой вывода. Каждый переход от одной непосредственно выводимой цепочки к следующей в цепочке вывода называется шагом вывода. Очевидно, что шагов вывода в цепочке вывода всегда на один больше, чем промежуточных цепочек. Если цепочка  непосредственно выводима из цепочки : , то имеется всего один шаг вывода.

Пример грамматики для целых десятичных чисел со знаком

G ({0,1,2,3,4,5,6,7,8,9,-,+},{S,T,F},P,S):

P:

ST | +T | -T

TF | TF

F0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |9

Построим в ней несколько произвольных цепочек вывода:

1. S-T-TF-TFF-FFF-4FF-47F-479

2. STTFT8F818

3. TTFT0TF0T50F50350

Получили следующие выводы:

1. S*-479 или S+-479 или S7479

2. S* 18 или S+18 или S518

3. T* 350 или T +350 или T6350

Все эти выводы построены на основе грамматики G. В принципе в этой грамматике можно построить сколь угодно много цепочек вывода.