Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы построения трансляторов(лекции).doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
2.79 Mб
Скачать

2.3.2. Классификация грамматик и языков по Хомскому

Рассмотрим классификацию грамматик, предложенную Н.Хомским, основанную на виде их правил.

Тип 0.

Грамматика G = (VT, VN, P, S) называется грамматикой типа 0 (или грамматикой без ограничений), если на правила вывода не накладывается никаких ограничений (кроме тех, которые указаны в определении грамматики).

Тип 1.

Грамматика G = (VT, VN, P, S) называется неукорачивающей грамматикой, если для каждого правила вывода    (кроме S  ) выполняется соотношение |  |  |  |. В том случае, когда S  P, символ S не встречается в правых частях правил вывода.

Грамматика G = (VT, VN, P, S) называется контекстно-зависимой (КЗ), если каждое правило из P имеет вид   ,

где  = 1A2;  = 12; A  VN;   (VT  VN)+; 1,2  (VT  VN)*.

Грамматику типа 1 можно определить как неукорачивающую либо как контекстно-зависимую.

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

Тип 2.

Грамматика G = (VT, VN, P, S) называется контекстно-свободной (КС), если каждое правило из Р имеет вид A  , где A  VN,   (VT  VN)+.

Грамматика G = (VT, VN, P, S) называется укорачивающей контекстно-свободной (УКС), если каждое правило из Р имеет вид A  , где A  VN,

  (VT  VN)*.

Грамматику типа 2 можно определить как контекстно-свободную либо как укорачивающую контекстно-свободную.

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

ТИП 3.

Грамматика G = (VT, VN, P, S) называется праволинейной, если каждое правило из Р имеет вид A  tB либо A  t, где A  VN, B  VN, t  VT.

Грамматика G = (VT, VN, P, S) называется леволинейной, если каждое правило из Р имеет вид A  Bt либо A  t, где A  VN, B  VN, t  VT.

Грамматику типа 3 (регулярную, Р-грамматику) можно определить как праволинейную либо как леволинейную.

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

Очевидно, что в примере 2.3 грамматика G2 является неукорачивающей, грамматика G3 - контекстно-свободной, грамматика G4 - праволинейной.

Соотношения между типами грамматик:

  • любая регулярная грамматика является КС-грамматикой;

  • любая регулярная грамматика является УКС-грамматикой;

  • любая КС-грамматика является КЗ-грамматикой;

  • любая КС-грамматика является неукорачивающей грамматикой;

  • любая КЗ-грамматика является грамматикой типа 0;

  • любая неукорачивающая грамматика является грамматикой типа 0.

Замечание: УКС-грамматика, содержащая правила вида A  , не является КЗ-грамматикой и не является неукорачивающей грамматикой.

Язык L(G) называется языком типа k, если его можно описать грамматикой типа k.

Соотношения между типами языков:

  • каждый регулярный язык является КС-языком, но существуют КС-языки, которые не являются регулярными (например, L = {anbn | n>0});

  • каждый КС-язык является КЗ-языком, но существуют КЗ-языки, которые не являются КС-языками (например, L = {anbncn | n>0});

  • каждый КЗ-язык является языком типа 0.

Замечание: УКС-язык, содержащий пустую цепочку, не является КЗ-языком.

Следует отметить, что если язык задан грамматикой типа k, то это не значит, что не существует грамматики типа k’ (k’>k), описывающей тот же язык. Поэтому, когда говорят о языке типа k, обычно имеют в виду максимально возможный номер k.

Пример 2.6

КЗ-грамматика G1 = ({0,1}, {A,S}, P1, S) и

КС-грамматика G2 = ({0,1}, {S}, P2, S), где

P1={ S  0A1, 0A  00A1, A   P2={S  0S1 | 01},

описывают один и тот же язык L = L(G1) = L(G2) = { 0n1n | n>0}.

Язык L является КС-языком, так как существует КС-грамматика, его описывающая. Но он не является регулярным языком, потому что не существует регулярной грамматики, описывающей этот язык [3].

Пример 2.7

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

1) Грамматика G1=({a, b},{A, B, C, D, F, S}, P1, S), где

P1={ S  aaCFD, F  AFB | AB, AB  bBA, Ab  bA, AD  D, Cb  bC,

CB  C, bCD  };

L1(G1) = {a2 b | n  1} – это язык типа 0.

2) Грамматика G2=({0, 1}, {А, В, S}, P2 , S), где

Р2={S  ASB | AB, AB  BA, A  0, B  1}

L2(G2)={цепочки из 0 и 1 с одинаковым числом 0 и 1} – это язык типа 1.

3) Грамматика G3=({a, b, c}, {Q, S}, { S  aQb | accb, Q  cSc}, S);

L3(G3) = {(ac)n (cb)n | n > 0} - это язык типа 2.

4) Грамматика G4=({a, b, }, {А, В, S}, P4, S);

P4={ S  A| B, A  a | Ba, B  b | Bb | Ab }

L4(G4) = {|   {a,b}+, где нет двух рядом стоящих а} - язык типа 3.