NPDA por aceptar el lenguaje L = {aibjckdl | i==k o j==l,i>=1,j>=1}

Requisito previo: autómatas pushdown , aceptación de autómatas pushdown por estado final
Problema: diseñar un PDA no determinista para aceptar el lenguaje L = { a^i b^j c^k d^l: i==k o j==l, i>=1, j>=1}, es decir,

L = {abcd, aabccd, aaabcccd, abbcdd, aabbccdd, aabbbccddd, ......} 

En cada string, el número de a va seguido de cualquier número de b y el de b va seguido del número de c igual al número de a y el de c va seguido del número de d igual al número de b.

Explicación:
aquí, debemos mantener el orden de a, b, c y d. Es decir, todas las a vienen primero, luego todas las b, luego todas las c, luego todas las d. Por lo tanto, necesitamos una pila junto con el diagrama de estado. La pila mantiene el conteo de a y b. Tomaremos 2 alfabetos de pila:

\Gamma = { a, b, c, d, z } 

Donde,
\Gamma= conjunto de todo el alfabeto de pila
z = símbolo de inicio de pila

Enfoque utilizado en la construcción de PDA:
en el diseño de un NPDA, para cada voluntad a’, ‘b’, ‘c’ y ‘d’ se presenta en el orden correcto.

  • Para i==k: cada vez que aparezca ‘a’, empújelo en la pila y si ‘a’ vuelve a aparecer, también empújelo en la pila. Después de eso, si aparece ‘b’, no realice ninguna operación. Después de eso, cuando aparezca ‘c’, extraiga ‘a’ de la pila cada vez. Después de eso, si aparece ‘d’, no realice ninguna operación.
  • Para j==l: Cada vez que aparezca ‘a’, no realice ninguna operación. Después de eso, si aparece ‘b’, empújelo en la pila y si vuelve a aparecer ‘b’, también empújelo en la pila. Después de eso, cuando aparezca ‘c’, no realice ninguna operación. Después de eso, si aparece ‘d’, extraiga ‘b’ de la pila cada vez.

De modo que la pila se vacía. Si la pila está vacía, podemos decir que la PDA acepta la string.

Funciones de transición de pila –

\delta(q0, a, z) \vdash (q1, az)
\delta(q0, a, z) \vdash (q3, z)
\delta(q1, a, a) \vdash (q1, aa)
\delta(q1, b, a) \vdash (q1, a)
\delta(q1, c, a) \vdash (q2, \epsilon) 
\delta(q2, c, a) \vdash (q2, \epsilon) 
\delta(q2, d, \epsilon ) \vdash (q2, \epsilon) 
\delta(q2, \epsilon, z) \vdash (qf1, z)   
\delta(q3 a, z) \vdash (q3, z)
\delta(q3 b, z) \vdash (q3, bz)
\delta(q3 b, b) \vdash (q3, bb)
\delta(q3 c, b) \vdash (q3, b)
\delta(q3, d, b) \vdash (q4, \epsilon) 
\delta(q4, d, b) \vdash (q4, \epsilon) 
\delta(q4, \epsilon, z) \vdash (qf2, z)   

Donde, q0 = Estado inicial
qf1, qf2 = Estado final
\epsilon= indica operación emergente

Entonces, este es nuestro PDA no determinista requerido para aceptar el lenguaje L ={ a^i b^j c^k d^l: i==k o j==l, i>=1, j>=1}.

Publicación traducida automáticamente

Artículo escrito por SHUBHAMSINGH10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *