Нормальная форма Хомского

CFG находится в нормальной форме Хомского, если продукция находится в следующих формах:

  • А → а
  • А → ВС
  • S → ε

где A, B и C нетерминалы и a является терминальным.

Алгоритм преобразования в нормальную форму Хомского -

Step 1 - Если стартовый символ S происходит с правой стороны, создайте новый начальный символ S’ и новое производство S’→ S.

Step 2- Удалить пустые постановки. (Использование алгоритма удаления нулевого продукта, описанного ранее)

Step 3- Удалите единичные производства. (Используя описанный ранее алгоритм удаления продукции Unit)

Step 4 - Заменить каждое производство A → B1…Bn где n > 2 с участием A → B1C где C → B2 …Bn. Повторите этот шаг для всех производств, имеющих два или более символов справа.

Step 5 - Если правая сторона какой-либо продукции находится в форме A → aB где a - терминал и A, B нетерминальные, то производство заменяется на A → XB а также X → a. Повторите этот шаг для каждой продукции, которая находится в формеA → aB.

Проблема

Преобразуйте следующий CFG в CNF

S → ASA | aB, A → B | S, B → b | ε

Решение

(1) поскольку S появляется в RHS, мы добавляем новое состояние S0 а также S0→S добавляется в производственный набор и становится -

S 0 → S, S → ASA | aB, A → B | S, B → b | ∈

(2) Теперь мы удалим нулевые постановки -

B → ∈ и A → ∈

После удаления B → ε производственный набор становится -

S 0 → S, S → ASA | aB | a, A → B | S | ∈, B → b

После удаления A → ∈ производственный набор становится -

S 0 → S, S → ASA | aB | а | AS | SA | S, A → B | S, B → b

(3) Теперь удалим единичные производства.

После удаления S → S производственный набор становится -

S 0 → S, S → ASA | aB | а | AS | SA, A → B | S, B → b

После удаления S 0 → S производственный набор становится -

S 0 → ASA | aB | а | AS | SA, S → ASA | aB | а | AS | SA

A → B | S, B → b

После удаления A → B производственный набор становится -

S 0 → ASA | aB | а | AS | SA, S → ASA | aB | а | AS | SA

A → S | б

B → b

После удаления A → S производственный набор становится -

S 0 → ASA | aB | а | AS | SA, S → ASA | aB | а | AS | SA

A → b | ASA | aB | а | AS | SA, B → b

(4) Теперь мы выясним более двух переменных в RHS.

Здесь S 0 → ASA, S → ASA, A → ASA нарушает два нетерминала в RHS

Следовательно, мы применим шаг 4 и шаг 5, чтобы получить следующий окончательный производственный набор, который находится в CNF -

S 0 → AX | aB | а | AS | SA

S → AX | aB | а | AS | SA

A → b | AX | aB | а | AS | SA

B → b

X → SA

(5)Мы должны изменить продукций S 0 → aB, S → aB, A → aB

И окончательная постановка становится -

S 0 → AX | YB | а | AS | SA

S → AX | YB | а | AS | SA

A → b A → b | AX | YB | а | AS | SA

B → b

X → SA

Y → а