Un enfoque práctico que en muchos ejemplos funciona [pero no siempre lo sé] está tratando de encontrar la estructura de anidación de las cadenas en el lenguaje. Las "dependencias anidadas" deben generarse al mismo tiempo en diferentes partes de la cadena.
También tenemos la caja de herramientas básica :
concatenación: si puedes dividir el idioma en dos partes consecutivas usa esta producciónS→ S1S2
unión: dividido en partes disjuntasS→ S1∣ S2
iteración: S→ S1S∣ ε
Ejemplo 1
Aquí un ejemplo para la anidación (gracias Raphael).
L={bkal(bc)manbo∣k,l,m,n,o∈N,k≠o,2l=n,m≥2}
Reemplace por 2 l . Ahora podemos soltar n en condiciones.n2ln
Reemplace por k > o o k < o (¿confundido? O es 'oh' no 'cero'). Aplicar herramientas para la unión. Trabajamos con k > o aquí. También k > o iff k = s + o y s > 0 donde s es una nueva variable. Reemplace k por s + o .k≠ok>o or k<ook>ok>ok=s+os>0sks+o
L1={bs+oal(bc)ma2lbo∣l,m,o,s∈N,s>0,m≥2}
Algunas reescrituras simples.
L1={bbsboalbcbc(bc)m(aa)lbo∣l,m,o,s∈N}
Ahora vemos la estructura de anidación y comenzamos a construir una gramática.
, T → b U , U → b U ∣ ε (ver: concatenación e iteración aquí)S1→TVT→bUU→bU∣ε
(generamos o b 's en ambos lados)V→bVb∣Wo b
W→aWaa∣X
, Y → b c b c , Z → b c Z ∣ εX→YZY→bcbcZ→bcZ∣ε
Ejemplo 2
K={akblcm∣l=m+k}
Una primera reescritura "obvia".
K={akbm+kcm∣m,k≥0}={akbmbkcm∣m,k≥0}
En lingüística, esto se denomina "dependencia de serie cruzada": el entrelazado (generalmente) indica fuertemente la ausencia de contexto. Por supuesto, m + k = k + my estamos salvados.k,m,k,mm+k=k+m
K= { aksik + mdometro∣m,k≥0}={akbkbmcm∣m,k≥0}
con producciones , X → a X b ∣ ε , Y → b Y c ∣ εS→XYX→aXb∣εY→bYc∣ε
De manera similar, K′= { aksildometro∣m=k+l}={akblclck∣k,l≥0}
con producciones , X → b X c ∣ εS→aSc∣XX→bXc∣ε
Comentario final: estas técnicas lo ayudan a encontrar una gramática libre de contexto que, con suerte, reconocerá su idioma. Es posible que aún se necesite una prueba de corrección para garantizar que la gramática realmente funcione para reconocer su idioma (nada más y nada menos).