“Conocimiento Programación>Lenguajes De Programación

¿Cómo se puede demostrar que un lenguaje no está libre de contexto?

2013/7/25
Hay varias formas de demostrar que un lenguaje no es libre de contexto. Los métodos más comunes se basan en probar que el idioma viola las propiedades inherentes a los idiomas libres de contexto (CFL):

1. Bombeo de lema para idiomas sin contexto: Esta es la técnica más utilizada. El lema de bombeo establece que para cualquier cfl l, existe una constante * p * (la longitud de bombeo) de modo que cualquier cadena * w * en l con longitud | w | ≥ *p *puede escribirse como *uvxyz *, donde:

* | vxy | ≤ *p *

* | Vy | ≥ 1

* * UV i xy i z* ∈ L para todos* i* ≥ 0

Para demostrar que un lenguaje es * no * sin contexto usando el lema de bombeo:

1. Asumir: Suponga, en aras de la contradicción, que el lenguaje * l * no contiene contexto.

2. Elija una cadena: Seleccione una cadena *W *in *L *con longitud al menos la longitud de bombeo *P *(a menudo necesitará elegir estratégicamente *W *).

3. Bomba la cadena: Intente descomponer * w * en * uvxyz * satisfaciendo las condiciones del lema.

4. Encuentra una contradicción: Demuestre que para algunos *i *, *uv i xy i Z*es*no*en*l*. Esto contradice el lema de bombeo, lo que demuestra que la suposición original (que * l * está libre de contexto) debe ser falsa.

Ejemplo: Consideremos el lenguaje l ={a n b n c n | n ≥ 0}. Usando el lema de bombeo:

1. Asumir: L no tiene contexto.

2. Elija una cadena: Sea * w * =a p B P c p (donde * p * es la longitud de bombeo).

3. Bomba la cadena: No importa cómo se descomponga *w *en *uvxyz *, el bombeo inevitablemente violará el a n b n c n estructura. Por ejemplo, si * vxy * contiene solo 'A, el bombeo aumentará el número de' A sin aumentar el número de 'B y' C. Surgen problemas similares si * vxy * contiene solo 'B o' C, o una mezcla que no mantiene la relación igual.

4. Contradicción: Por lo tanto, existe un *i *tal que *uv i xy i Z* ∉ L, contradiciendo el lema de bombeo. Por lo tanto, L no es libre de contexto.

2. Propiedades de cierre: Los idiomas sin contexto están cerrados bajo ciertas operaciones (Union, Concatenation, Kleene Star, intersección con un idioma regular). Si puede demostrar que un lenguaje está * no * cerrado bajo una de estas operaciones, no puede estar libre de contexto. Este método se usa con menos frecuencia para la prueba directa que el lema de bombeo, pero puede ser útil en combinación con otras técnicas.

3. Lema de Ogden: Esta es una versión más poderosa del lema de bombeo, lo que le permite elegir posiciones marcadas dentro de la cadena *W *. Es útil para idiomas donde el lema de bombeo simple es difícil de aplicar.

4. Teorema de Parikh: Este teorema se relaciona con el número de ocurrencias de cada símbolo en las cuerdas de un idioma. Si bien no se usa directamente para probar un lenguaje * no es * libre de contexto, a veces puede ayudar a demostrar que la estructura de un lenguaje es incompatible con las limitaciones impuestas por CFL. A menudo se usa junto con otras técnicas.

En resumen, el lema de bombeo es el método más común y generalmente efectivo para demostrar que un lenguaje no es libre de contexto. Sin embargo, la elección del método depende de la estructura del lenguaje específico y la facilidad con la que se puede aplicar cada técnica. El lema de Ogden ofrece más potencia cuando es necesario, y las propiedades de cierre pueden proporcionar evidencia complementaria.

Lenguajes De Programación
Cómo compilar un archivo de clases
Cómo crear estructuras implícitas en ColdFusion
Cómo convertir hexadecimal a BCD
Lógica booleana le permite
¿Cómo pueden los sobrecostos y Formato errores de cadena alteran el flujo del de su programa
Tipos de técnicas de análisis sintáctico
Protocolos Eyecatcher
¿Qué significa la jerga informática ARM?
Conocimiento de la computadora © http://www.ordenador.online