Por que o BNF é considerado uma técnica insatisfatória para descrever uma linguagem?

8

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)?

NlightNFotis
fonte

Respostas:

3

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.

reinierpost
fonte
3

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.

Peter Leupold
fonte
"Estas coisas devem ser explicadas no texto que o acompanha normalmente" - não são semântica formal, no entanto.
Raphael
1
A questão de saber se um programa com um determinado identificador em uma determinada posição é legal ou não para mim é sintaxe, não semântica. Semântica é o significado, sintaxe está descrevendo a linguagem formal dos programas legais. Portanto, acho que meu exemplo descreve uma parte da sintaxe geralmente descrita em forma de texto.
31416 Peter Leupold
1
À parte a terminologia da linguagem de programação, o ramo do TCS chamado semântica formal é o que você pode usar lá. Você pode chamar sua sintaxe posteriormente, se desejar (embora eu considere isso tolo); o ponto é que a linguagem natural não é a única alternativa para especificar essas coisas.
Raphael