Eu estava lendo o artigo Conceitos Fundamentais em Linguagens de Programação, de C. Strachey outro dia, onde li algo que era bastante estranho para mim. Citando diretamente (com a parte estranha destacada por mim):
Confrontados com a situação, uma vez que existe hoje em dia, onde existe um método geralmente conhecido da descrição de uma determinada classe de gramáticas (conhecido como BNF ou livre de contexto), o primeiro impulso de estes matemáticos parece ser o de investigar os limites de BNF -O você pode se expressar em BNF mesmo ao custo de construções muito pesadas e artificiais? Isso pode ser uma questão de algum interesse matemático (seja lá o que isso significa), mas tem pouca relevância para linguagens de programação, onde é mais importante descobrir métodos melhores para descrever a sintaxe que o BNF (que já é inconveniente e inadequado para o ALGOL). do que examinar os possíveis limites do que já sabemos ser uma técnica insatisfatória .
Existe uma razão específica para o autor considerar o BNF uma técnica insatisfatória para descrever idiomas? Poderia ser porque você só pode descrever sintaxe e não semântica com uma única gramática BNF (porém, você pode estendê-la para descrever a semântica operacional, transformando-a em uma gramática de atributo)?
fonte
Respostas:
Você mencionou uma razão.
A outra razão é que a sintaxe das linguagens de programação não é livre de contexto, a menos que você defina a sintaxe como aquela que pode ser, ou é, descrita por uma gramática livre de contexto.
Quando o artigo de Strachey foi escrito, a sintaxe de uma nova linguagem, Algol 68, estava sendo definida em um novo formalismo, gramáticas de dois níveis, que era usado para descrever a validade sintática na íntegra, incluindo muitas coisas que, por lavagem cerebral, o "BNF é" the syntax "meme, muitos de nós não consideram parte da sintaxe, como todas as variáveis que precisam ser declaradas antes do uso.
Muitos de nós não vão tão longe, mas ainda concordam que existem recursos sintáticos não contextuais nas linguagens de programação.
fonte
Eu não acho que a semântica tenha um papel. Sua cotação pede "descubra melhores métodos de descrever a sintaxe que o BNF". Obviamente, coisas como nomes de funções e variáveis fazem parte da sintaxe. Com o BNF, você não pode, por exemplo, distinguir um idioma em que variáveis devem ser decalcadas antes do uso de um idioma em que você pode usar variáveis não declaradas. Geralmente, essas coisas devem ser explicadas no texto anexo, o que não é perfeito.
fonte