Forma normal de Greibach
Un CFG está en la forma normal de Greibach si las producciones están en las siguientes formas:
A → b
A → bD 1 … D n
S → ε
donde A, D 1 , ...., D n no son terminales y b es un terminal.
Algoritmo para convertir un CFG en forma normal de Greibach
Step 1 - Si el símbolo de inicio S ocurre en algún lado derecho, crea un nuevo símbolo de inicio S’ y una nueva producción S’ → S.
Step 2- Eliminar producciones nulas. (Usando el algoritmo de eliminación de producción nula que se discutió anteriormente)
Step 3- Eliminar producciones unitarias. (Usando el algoritmo de eliminación de producción de unidades discutido anteriormente)
Step 4 - Eliminar todas las recursiones por la izquierda directas e indirectas.
Step 5 - Hacer sustituciones adecuadas de producciones para convertirlo en la forma adecuada de GNF.
Problema
Convierta el siguiente CFG en CNF
S → XY | Xn | pag
X → mX | metro
Y → Xn | o
Solución
Aquí, Sno aparece en el lado derecho de ninguna producción y no hay producciones unitarias o nulas en el conjunto de reglas de producción. Entonces, podemos saltarnos del Paso 1 al Paso 3.
Step 4
Ahora, después de reemplazar
X en S → XY | Xo | pag
con
mX | metro
obtenemos
S → mXY | mY | mXo | mo | pag.
Y después de reemplazar
X en Y → X n | o
con el lado derecho de
X → mX | metro
obtenemos
Y → mXn | mn | o.
Se agregan dos nuevas producciones O → o y P → p al conjunto de producción y luego llegamos al GNF final de la siguiente manera:
S → mXY | mY | mXC | mC | pag
X → mX | metro
Y → mXD | mD | o
O → o
P → p