Buena pregunta. Aunque como se menciona en los comentarios, muchos lenguajes de programación son sensibles al contexto, esa sensibilidad al contexto a menudo no se resuelve en la fase de análisis sino en fases posteriores, es decir, un superconjunto del lenguaje se analiza utilizando una gramática libre de contexto, y algunos de esos árboles de análisis luego se filtran
Sin embargo, eso no significa que esos idiomas no sean sensibles al contexto , así que aquí hay algunos ejemplos:
Haskell le permite definir funciones que se utilizan como operadores, y también definir la precedencia y asociatividad de esos operadores. En otras palabras, no puede construir el árbol de análisis correcto para una expresión de operador como:
a @@ b @@ c ## d ## e
a menos que ya haya analizado las declaraciones de precedencia / asociatividad para @@
y ##
:
infixr 8 @@
infixr 6 ##
Un segundo ejemplo es Bencode , un lenguaje de datos que antepone el contenido con su longitud:
<length>:<contents>
El problema con este formato es que es prácticamente imposible analizar sin algo sensible al contexto, porque la única forma de averiguar los tamaños de "campo" es ... analizando la cadena.
Un tercer ejemplo es XML, suponiendo que se permitan nombres de etiquetas arbitrarios: los nombres de etiquetas de apertura deben tener etiquetas de cierre coincidentes:
<hi>
<bye>
the closing tag has to match bye
</bye>
</hi> <!-- has to match "hi" -->