Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
тяп_сборка.docx
Скачиваний:
13
Добавлен:
22.04.2019
Размер:
243.44 Кб
Скачать

Исключение бесполезных символов

Алгоритм 3.7.1.1. Определение множества производящих нетерминальных символов КС-грамматики.

Вход. КС-грамматика G = (, , P, S).

Выход. Множество производящих нетерминальных символов p = {A | A + x, A  , x  +}.

Описание алгоритма.

Построить рекурсивно множества производящих нетерминалов 0p, 1p, … , ip, … следующим образом:

  1. Положить 0p = , i = 1.

  2. Положить ip = i-1p  {A | A    P,   (i-1p  )+}

  3. Если ip  i-1p, положить i = i + 1 и перейти к шагу 2.

  4. Положить p = ip.

Конец алгоритма

Алгоритм 3.7.1.2. Определение множества достижимых символов КС-грамматики.

Вход. КС-грамматика G = (, , P, S).

Выход. Множество достижимых символов r = {X | S * X, X  (S È N), ,   (  )*}.

Описание алгоритма.

Построить рекурсивно множества достижимых символов 0r, 1r, … , ir, … , следующим образом:

  1. Положить 0r = {S}, i = 1.

  2. Положить ir = i-1r   { | A  X  R и A  i-1r }.

  3. Если ir  i-1r, положить i = i + 1 и перейти к шагу 2.

  4. Положить r = ir.

Конец алгоритма

Алгоритм 3.7.1.3. Устранение бесполезных символов.

Вход. КС-грамматика G = (, , P, S), для которой L(G)  .

Выход. КС-грамматика G = (¢, ¢, P¢, S), у которой L(G)   и в ¢  ¢ нет бесполезных символов.

Описание алгоритма.

  1. Построить множество p производящих нетерминалов грамматики G.

  2. Положить G1 = (p, , P1, S,), где P1 состоит из правил множества P, содержащих только символы из   p.

  3. Построить множество r достижимых символов грамматики G1.

  4. Положить G¢ = (¢, ¢, P¢, S,) , где ¢ =   r, ¢ = r  , а P¢ состоит из правил множества P1 , содержащих только символы из множества r.

Конец алгоритма

Пример 3.7

Исключить из грамматики G = (, , P, S), где  = {А, В. С. S},  = {a, b, c}, P = {S  аС, SА, АсАВ, Вb, Са}, бесполезные символы.

После выполнения шага 1 алгоритма 3.7.1.3 множество p = {В, С, S}.

После исключения непроизводящих нетерминалов получим новую грамматику G1 = ({ВСS}, {abс}, P, S), где P = { S  аС, В  b, С  а}.

Множество достижимых символов грамматики G1r = {a, C, S}.

После исключения множества недостижимых символов из грамматики G1 получим грамматику G¢ = ({СS}, {a}, {S  аС, С  а}, S), L(G¢) = {aa}.

Если применить к исходной грамматике сначала алгоритм 3.7.1.2, то получим, что все символы достижимы. Множество производящих символов грамматики G1 = {ВСS }. После исключения непроизводящих символов из грамматики G1 имеем G¢ = ({ВСS}, {abс}, P¢, S ), где P¢ = {S  аС, В  b, С  а}, L(G¢) = L(G) = {aa}, но грамматика G¢ содержит бесполезные символы B и b.

Исключение бесполезных символов

Задание.   

2.2.1.3.   T = { a, b, c, d, e, f }, N = { A, B, C, S }, R = { S  b, S  C, S cCB, A  e, A Ab, B  Bb, B cB, C Ca, C  Bf, C  d };

Решение:

  1. Построим множество  NPпроизводящих нетерминалов грамматики G.

  1. Определим множество достижимых символов.

Новая грамматика, эквивалентная исходной имеет следующий вид:

G’ = <T’, N’, S, R’>

T’= { a, b, c, d, f}; N’ = { S, B, C}; R’= {S  b, S  C, S cCB, B  Bb, B cB, C Ca, C  Bf, C  d }

Исключение бесполезных символов

Преобразовать КС-грамматику G = < T, N, S, R > в эквивалентную грамматику, не содержащую бесполезных символов:

2.2.1.3.   T = { a, b, c, d, e, f }, N = { A, B, C, S }, R = { S  b, S  C, S  cCB, A  e, A  Ab, B  Bb, B  cB, C  Ca, C  Bf, C  d };

  1. множество производящих нетерминалов Np={C,A,S}

- N0 = 0

  • A  e, C  d , S  b -> значит N1={S,A,C}

  • N2 = {S,A,C}, т.к. больше нет правил вывода X,{ a, b, c, d, e, f ,S,A,C}

  • Np={C,A,S}