¿Por qué se considera que BNF es una técnica insatisfactoria para describir un idioma?

8

Estaba leyendo el artículo Conceptos fundamentales en lenguajes de programación de C. Strachey el otro día, en el que leía algo que me resultaba bastante extraño. Citando directamente (con la parte extraña resaltada por mí):

Frente a la situación tal como existe hoy, donde existe un método generalmente conocido para describir una cierta clase de gramáticas (conocidas como BNF o sin contexto), el primer instinto de estos matemáticos parece ser investigar los límites de BNF: qué ¿Se puede expresar en BNF incluso a costa de construcciones muy engorrosas y artificiales? Esta puede ser una cuestión de cierto interés matemático (lo que sea que eso signifique), pero tiene muy poca relevancia para los lenguajes de programación, donde es más importante descubrir mejores métodos para describir la sintaxis que BNF (que ya es inconveniente e inadecuado para ALGOL) de lo que es examinar los posibles límites de lo que ya sabemos que es una técnica insatisfactoria .

¿Hay alguna razón específica por la cual el autor considera que el BNF es una técnica insatisfactoria para describir idiomas? ¿Podría ser porque solo puede describir la sintaxis y no la semántica con una única gramática BNF (sin embargo, puede extenderla para describir la semántica operativa convirtiéndola en una gramática de atributos)?

NlightNFotis
fuente

Respuestas:

3

Mencionas una razón.

La otra razón es que la sintaxis de los lenguajes de programación no está libre de contexto, a menos que defina que la sintaxis es la que puede ser, o es, descrita por una gramática libre de contexto.

Cuando se escribió el artículo de Strachey, la sintaxis de un nuevo lenguaje, Algol 68, se estaba definiendo en un nuevo formalismo, gramáticas de dos niveles, que se usaban para describir la validez sintáctica en su totalidad, incluidas muchas cosas que el "BNF lavaba el cerebro" el meme "sintaxis", muchos de nosotros no consideramos parte de la sintaxis en absoluto, como todas las variables que deben declararse antes de su uso.

La mayoría de nosotros no llegaremos tan lejos, pero aún así aceptaremos que existen características sintácticas sin contexto en lenguajes de programación.

reinierpost
fuente
3

No creo que la semántica juegue un papel. Su cita pide "descubrir mejores métodos para describir la sintaxis que BNF". Por supuesto, cosas como nombres de funciones y variables forman parte de la sintaxis. Con BNF no puede, por ejemplo, distinguir un lenguaje donde las variables deben ser descalificadas antes del uso de uno en el que pueda usar variables no declaradas. Estas cosas deben explicarse generalmente en el texto adjunto, que no es perfecto.

Peter Leupold
fuente
"Estas cosas deben ser explicadas en el texto que acompaña por lo general" - no son la semántica formal, sin embargo.
Raphael
1
La pregunta de si un programa con cierto identificador en una determinada posición es legal o no para mí es la sintaxis, no la semántica. La semántica es el significado, la sintaxis describe el lenguaje formal de los programas legales. Por lo tanto, creo que mi ejemplo describe una parte de la sintaxis generalmente descrita en forma de texto.
Peter Leupold
1
Dejando a un lado la terminología del lenguaje de programación, la rama de TCS llamada semántica formal es lo que puede usar allí. Puede llamar es sintaxis después, si lo desea (aunque lo consideraría una tontería); El punto es que el lenguaje natural no es la única alternativa para especificar estas cosas.
Raphael