He estado estudiando compiladores durante un tiempo, y he estado buscando lo que se entiende por "contexto" en gramática y lo que significa que la gramática esté "libre de contexto", pero sin resultado.
Entonces, ¿alguien puede ayudar con esto?
He estado estudiando compiladores durante un tiempo, y he estado buscando lo que se entiende por "contexto" en gramática y lo que significa que la gramática esté "libre de contexto", pero sin resultado.
Entonces, ¿alguien puede ayudar con esto?
Respuestas:
El contexto puede explicarse con respecto a las reglas de producción permitidas para diferentes gramáticas en la jerarquía de Chomsky.
Si considera las gramáticas libres de contexto, sus reglas de producción tienen la siguiente forma:
Por lo tanto, puede observar que la parte izquierda de este tipo de reglas se compone de un solo símbolo no terminal; así, la sustitución del símbolo no terminal se lleva a cabo sin considerar su "contexto", es decir, los otros símbolos que lo rodean.
Por otro lado, si considera las reglas de producción de las gramáticas sensibles al contexto, tienen la siguiente forma:
Puede encontrar más detalles en esta respuesta sobre matemáticas y en esta respuesta sobre ingeniería de software.
x:=y+z
f(y+z)
return y+z
Hablando genéricamente, incluso los idiomas regulares pueden tener dependencias de contexto, lo que significa que puede determinar, hasta cierto punto, de qué manera pueden aparecer símbolos en la vecindad de otros símbolos en una cadena que pertenece a ese idioma.
Lo que es específico de las gramáticas libres de contexto es que cuando hay múltiples formas de sustituir un símbolo no terminal, aplicando diferentes reglas con el mismo no terminal en el lado derecho, la elección de qué regla aplicar nunca depende de qué está sucediendo alrededor de este símbolo durante el proceso de derivación.
Puede pensar en ellos como lenguajes de derivación sin contexto, lenguajes sin contexto para abreviar.