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

Muitas vezes ouço afirmações de que o C ++ é uma linguagem sensível ao contexto. Tome o seguinte exemplo:

a b(c);

Esta é uma definição de variável ou uma declaração de função? Isso depende do significado do símboloc. E sec é umvariável, entãoa b(c); define uma variável chamadab do tipoa. É inicializado diretamente comc. Mas sec é umtipo, entãoa b(c); declara uma função chamadab que leva umc e retorna uma.

Se você procurar a definição de linguagens livres de contexto, basicamente dirá a você que todas as regras gramaticais devem ter lados esquerdos que consistem em exatamente um símbolo não terminal. Por outro lado, as gramáticas sensíveis ao contexto permitem cadeias arbitrárias de símbolos terminais e não terminais no lado esquerdo.

Navegando pelo Apêndice A de "A Linguagem de Programação C ++", não consegui encontrar uma única regra gramatical que tivesse algo além de um único símbolo não terminal à sua esquerda. Isso implicaria que o C ++ é livre de contexto. (É claro que toda linguagem livre de contexto é também sensível ao contexto, no sentido de que as linguagens livres de contexto formam um subconjunto das linguagens sensíveis ao contexto, mas esse não é o ponto.)

Então, o C ++ é livre de contexto ou sensível ao contexto?

questionAnswers(19)

yourAnswerToTheQuestion