Нормальная форма Грейбаха
CFG находится в нормальной форме Грейбаха, если продукция находится в следующих формах:
А → б
A → bD 1 … D n
S → ε
где A, D 1 , ...., D n - нетерминалы, а b - терминал.
Алгоритм преобразования CFG в нормальную форму Грейбаха
Step 1 - Если стартовый символ S происходит с правой стороны, создайте новый начальный символ S’ и новое производство S’ → S.
Step 2- Удалить пустые постановки. (Использование алгоритма удаления нулевого продукта, описанного ранее)
Step 3- Удалите единичные производства. (Используя описанный ранее алгоритм удаления продукции Unit)
Step 4 - Убрать всю прямую и косвенную левую рекурсию.
Step 5 - Сделайте правильную замену продукции, чтобы преобразовать ее в надлежащую форму GNF.
Проблема
Преобразуйте следующий CFG в CNF
S → XY | Xn | п
X → mX | м
Y → Xn | о
Решение
Вот, Sне отображается справа от любого производства, и в наборе производственных правил нет единичных или нулевых производств. Итак, мы можем пропустить Шаг 1 к Шагу 3.
Step 4
Теперь после замены
X в S → XY | Xo | п
с участием
mX | м
мы получаем
S → mXY | МЫ | mXo | мес | п.
И после замены
X в Y → X n | о
с правой стороны
X → mX | м
мы получаем
Y → mXn | мин | о.
К производственному набору добавлены две новые постановки O → o и P → p, а затем мы пришли к окончательному GNF следующим образом:
S → mXY | МЫ | mXC | mC | п
X → mX | м
Y → mXD | мД | о
О → о
P → p