Convertir una CFG a un NPDA de estado unico que acepte por pila vacia
Fuente: Parcial 2 — SI2002-1 7309 (2025-1)
Enunciado
Convertir la siguiente gramatica a un automata NPDA de estado unico q que acepte por pila vacia:
SA→0S1∣A→1A0∣S∣εLa intuicion: el PDA simula la derivacion izquierda en la pila
La conversion de una CFG a un NPDA de un solo estado es una receta mecanica. La idea es que la pila del PDA simula la derivacion izquierda de la gramatica. El simbolo inicial de la pila es S (la variable inicial de la gramatica), y el PDA tiene dos tipos de movimientos: si el tope de la pila es una variable, elige no deterministicamente una produccion y la reemplaza; si el tope es un terminal, lo empareja con el siguiente simbolo de la entrada y lo desapila.
En este problema, la gramatica tiene producciones S→0S1∣A y A→1A0∣S∣ε. Cada una se convierte en una ε-transicion que reemplaza la variable del tope por el lado derecho de la produccion. Ademas, agregamos transiciones para emparejar los terminales 0 y 1. El PDA acepta cuando la pila queda vacia (lo que corresponde a que la derivacion genero exactamente la cadena de entrada).
Lo elegante es que con un unico estado y las transiciones correctas, el no determinismo del PDA explora todas las derivaciones posibles. Si alguna genera la cadena de entrada, el PDA la encuentra.
Gramatica
SA→0S1∣A→1A0∣S∣εNPDA de estado unico — Pila vacia
M=({q},{0,1},{S,A,0,1},δ,q,S)
Transiciones
Producciones:
δ(q,ε,S)δ(q,ε,A)={(q,0S1),(q,A)}={(q,1A0),(q,S),(q,ε)}Emparejamiento de terminales:
δ(q,0,0)δ(q,1,1)={(q,ε)}={(q,ε)}Traza: 01
(q,01,S)⊢(q,01,0S1)⊢(q,1,S1)⊢(q,1,A1)⊢(q,1,1)⊢(q,ε,ε)S→0S1emparejar 0S→AA→εemparejar 1✓Traza: ε
(q,ε,S)⊢(q,ε,A)⊢(q,ε,ε)S→AA→ε✓Automata
Solucion
Metodo: Conversion estandar de CFG a NPDA
La conversion estandar de una CFG G=(N,Σ,P,S) a un NPDA de un solo estado q que acepta por pila vacia funciona asi:
- El NPDA tiene un unico estado q.
- El alfabeto de pila es Γ=N∪Σ.
- El simbolo inicial de pila es S.
- Para cada produccion A→α en la gramatica, anadimos la transicion: δ(q,ε,A)∋(q,α) (si α=ε, se desapila A).
- Para cada terminal a∈Σ, anadimos: δ(q,a,a)={(q,ε)} (emparejar terminal).
Gramatica dada
SA→0S1∣A→1A0∣S∣εNPDA resultante
M=({q},{0,1},{S,A,0,1},δ,q,S)
Acepta por pila vacia.
Transiciones
Producciones de la gramatica (reemplazo en la pila):
δ(q,ε,S)δ(q,ε,A)={(q,0S1),(q,A)}={(q,1A0),(q,S),(q,ε)}(de S→0S1∣A)(de A→1A0∣S∣ε)Emparejamiento de terminales:
δ(q,0,0)δ(q,1,1)={(q,ε)}={(q,ε)}Nota sobre la notacion de la pila
Cuando escribimos δ(q,ε,S)∋(q,0S1), el tope de la pila es el simbolo mas a la izquierda del reemplazo. Es decir, se desapila S y se apila 1, luego S, luego 0 (quedando 0 en el tope).
Tabla completa de transiciones
| Estado | Entrada | Tope pila | Estado siguiente | Reemplazo pila | Regla |
|---|---|---|---|---|---|
| q | ε | S | q | 0S1 | S→0S1 |
| q | ε | S | q | A | S→A |
| q | ε | A | q | 1A0 | A→1A0 |
| q | ε | A | q | S | A→S |
| q | ε | A | q | ε | A→ε |
| q | 0 | 0 | q | ε | emparejar 0 |
| q | 1 | 1 | q | ε | emparejar 1 |
Verificacion interactiva
Traza para la cadena 01:
Verificacion: cadena 01
La cadena 01 se deriva en la gramatica como:
S⇒0S1⇒0A1⇒0ε1=01
Traza del NPDA para la cadena 01:
| Paso | Configuracion (q,entrada,pila) | Regla |
|---|---|---|
| 0 | (q,01,S) | Inicio |
| 1 | (q,01,0S1) | S→0S1 |
| 2 | (q,1,S1) | emparejar 0 |
| 3 | (q,1,A1) | S→A |
| 4 | (q,1,1) | A→ε |
| 5 | (q,ε,ε) | emparejar 1 |
Pila vacia, entrada consumida: acepta ✓
Traza para la cadena vacia ε
| Paso | Configuracion | Regla |
|---|---|---|
| 0 | (q,ε,S) | Inicio |
| 1 | (q,ε,A) | S→A |
| 2 | (q,ε,ε) | A→ε |
Pila vacia: acepta ✓ (ya que ε esta en el lenguaje generado por la gramatica)