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)?
fuente
Respuestas:
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.
fuente
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.
fuente