Is C++ context-free or context-sensitive?

A menudo escucho afirmaciones de que C ++ es un lenguaje sensible al contexto. Tomemos el siguiente ejemplo:

a b(c);

¿Es esta una definición de variable o una declaración de función? Eso depende del significado del símbolo.c. Sic es unvariable, entoncesa b(c); define una variable llamadab de tipoa. Se inicializa directamente conc. Pero sic es untipo, entoncesa b(c); declara una función llamadab que lleva unc y devuelve una.

Si busca la definición de idiomas libres de contexto, básicamente le dirá que todas las reglas gramaticales deben tener lados izquierdos que consistan exactamente en un símbolo no terminal. Las gramáticas sensibles al contexto, por otro lado, permiten cadenas arbitrarias de símbolos terminales y no terminales en el lado izquierdo.

Al buscar en el Apéndice A de "El lenguaje de programación C ++", no pude encontrar una sola regla gramatical que tuviera otra cosa además de un solo símbolo no terminal en su lado izquierdo. Eso implicaría que C ++ está libre de contexto. (Por supuesto, todo lenguaje libre de contexto también es sensible al contexto, en el sentido de que los lenguajes libres de contexto forman un subconjunto de los lenguajes sensibles al contexto, pero ese no es el punto).

Entonces, ¿es C ++ libre de contexto o sensible al contexto?

Respuestas a la pregunta(19)

Su respuesta a la pregunta