Нормальная форма Хомского
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 → а