Convertir una gramatica de expresiones aritmeticas a forma normal de Chomsky
Fuente: Parcial 2 — SI2002-1 7309 (2025-1)
Enunciado
Convertir la siguiente gramatica a forma normal de Chomsky:
ETFI→E+T∣T∗F∣(E)∣a∣b∣Ia∣Ib∣I0∣I1→T∗F∣(E)∣a∣b∣Ia∣Ib∣I0∣I1→(E)∣a∣b∣Ia∣Ib∣I0∣I1→a∣b∣Ia∣Ib∣I0∣I1Convertir a Forma Normal de Chomsky significa que cada regla debe tener exactamente la forma A→BC (dos no terminales) o A→a (un terminal). La gramatica original de expresiones aritmeticas ya no tiene producciones epsilon ni unitarias, asi que solo necesitamos dos transformaciones.
Primero, en cualquier regla con dos o mas simbolos que mezcle terminales, reemplazamos cada terminal por un nuevo no terminal dedicado. Por ejemplo, + se reemplaza por C+ (con C+→+), ∗ por C∗, y asi con parentesis y letras. Esto nos da reglas como E→EC+T en vez de E→E+T. Las reglas que ya son un solo terminal (como E→a) se dejan como estan.
Segundo, las reglas con 3 simbolos en el lado derecho se parten en dos usando un no terminal auxiliar. Por ejemplo, E→EC+T se convierte en E→ED1 y D1→C+T. Aplicamos lo mismo a TC∗F (auxiliar D2) y C(EC) (auxiliar D3). El resultado final tiene solo reglas de dos no terminales o un terminal, que es exactamente CNF.
Paso 1. No hay producciones ε ni unitarias. ✓
Paso 2. No terminales para terminales en producciones con ∣α∣≥2:
Ca→a,Cb→b,C0→0,C1→1,C+→+,C∗→∗,C(→(,C)→)
Paso 3. Reemplazo de terminales en producciones largas:
ETFI→EC+T∣TC∗F∣C(EC)∣a∣b∣ICa∣ICb∣IC0∣IC1→TC∗F∣C(EC)∣a∣b∣ICa∣ICb∣IC0∣IC1→C(EC)∣a∣b∣ICa∣ICb∣IC0∣IC1→a∣b∣ICa∣ICb∣IC0∣IC1Paso 4. Binarizacion (D1→C+T, D2→C∗F, D3→EC)):
ETFID1CaC+→ED1∣TD2∣C(D3∣a∣b∣ICa∣ICb∣IC0∣IC1→TD2∣C(D3∣a∣b∣ICa∣ICb∣IC0∣IC1→C(D3∣a∣b∣ICa∣ICb∣IC0∣IC1→a∣b∣ICa∣ICb∣IC0∣IC1→C+TD2→C∗FD3→EC)→aCb→bC0→0C1→1→+C∗→∗C(→(C)→)■Gramatica
Solucion
Gramatica original
ETFI→E+T∣T∗F∣(E)∣a∣b∣Ia∣Ib∣I0∣I1→T∗F∣(E)∣a∣b∣Ia∣Ib∣I0∣I1→(E)∣a∣b∣Ia∣Ib∣I0∣I1→a∣b∣Ia∣Ib∣I0∣I1Paso 1: Verificar que no hay producciones epsilon ni producciones unitarias
La gramatica no tiene producciones ε ni producciones unitarias (de la forma A→B). Todas las producciones ya generan al menos un terminal o tienen al menos dos simbolos en el lado derecho.
Nota: Las producciones como E→a ya estan en forma CNF (un terminal). Las producciones como I→a tambien.
Paso 2: Introducir no terminales para terminales
En las producciones con longitud ≥2 en el lado derecho, cada terminal debe ser reemplazado por un nuevo no terminal. Introducimos:
CaCbC0C1C+C∗C(C)→a→b→0→1→+→∗→(→)Paso 3: Reemplazar terminales en producciones largas
Las producciones con terminales mezclados con no terminales se reescriben:
ETFI→EC+T∣TC∗F∣C(EC)∣a∣b∣ICa∣ICb∣IC0∣IC1→TC∗F∣C(EC)∣a∣b∣ICa∣ICb∣IC0∣IC1→C(EC)∣a∣b∣ICa∣ICb∣IC0∣IC1→a∣b∣ICa∣ICb∣IC0∣IC1Paso 4: Binarizar producciones con mas de 2 simbolos
Las producciones con 3 simbolos en el lado derecho deben descomponerse en pares. Introducimos no terminales auxiliares:
Para EC+T (longitud 3):
E→ED1dondeD1→C+T
Para TC∗F (longitud 3):
E→TD2,T→TD2dondeD2→C∗F
Para C(EC) (longitud 3):
E→C(D3,T→C(D3,F→C(D3dondeD3→EC)
Conversion paso a paso
Navega cada etapa de la conversion interactivamente:
Resultado: Gramatica en CNF
ETFID1D2D3CaCbC0C1C+C∗C(C)→ED1∣TD2∣C(D3∣a∣b∣ICa∣ICb∣IC0∣IC1→TD2∣C(D3∣a∣b∣ICa∣ICb∣IC0∣IC1→C(D3∣a∣b∣ICa∣ICb∣IC0∣IC1→a∣b∣ICa∣ICb∣IC0∣IC1→C+T→C∗F→EC)→a→b→0→1→+→∗→(→)Verificacion del formato CNF
Todas las producciones tienen una de las dos formas validas:
- A→BC (dos no terminales): ED1, TD2, C(D3, ICa, ICb, IC0, IC1, D1→C+T, D2→C∗F, D3→EC)
- A→a (un terminal): E→a, E→b, T→a, T→b, F→a, F→b, I→a, I→b, y todas las Cx→x
✓ La gramatica esta en forma normal de Chomsky.
Nota
La gramatica original representa expresiones aritmeticas con identificadores. Los identificadores (I) son secuencias de letras (a, b) y digitos (0, 1) que empiezan con una letra. La conversion a CNF preserva el lenguaje generado.