
3
Especificación formal
Define el significado de las sentencias de un programa y de los programas completos mediante
una formulación matemática:
Significado de un programa = comportamiento al ejecutarlo
Entonces se tiene que explicar cual es el resultado obtenido al ejecutar el programa, utilizando
símbolos y procedimientos matemáticos: definir signos, funciones, conjuntos, modelos, etc.
La especificación formal es necesaria para:
• Diseñar nuevos lenguajes de programación
• Estandarizar lenguajes mediante la publicación de su semántica
• Diseñar e implementar procesadores de nuevos lenguajes y generadores de
compiladores.
• Identificar posibles ambigüedades en las implementaciones de los procesadores de
lenguajes de programación o sus documentos
• Comprensión de los lenguajes por parte de programadores
• Verificación de propiedades de programas a través de pruebas de corrección.
La sintaxis se realiza usando notación BNF (Backus-Naur Form)
En cuanto a la semántica, no existe una notación estándar para especificar…
La especificación formal tiene además dos enfoques:
Metalenguajes de especificación semántica
Definen modelos (semántica operacional o denotacional) o propiedades (axiomáticos,
algebraicos, o de acciones)
Describe cómo interpretar un programa a través de pasos de calculo u
operaciones (asociando código a cada regla sintáctica). Usan reglas de
inferencia premisa (el resultado de evaluar una expresión produce un
valor) y conclusión (dado un estado, la asignación de una expresión a un
identificador, produce un nuevo resultado)). Se centra en el ¿Cómo?
Cercano a la implementación
Describe el significado de una sentencia por una función, que, actuando
sobre algún conjunto, produzca como salida el resultado que debería dar la
sentencia. Se centra en el resultado y no en el ¿Cómo?
Describe el lenguaje de programación como un sistema axiomático (términos
primitivos, axiomas, definiciones) que permita obtener el resultado del
programa como una deducción desde los datos de entrada (teorema). Se
centra en verificar propiedades y corregir.
Describe el significado de las sentencias como el resultado de aplicar
operaciones a la estructura de datos. No induce a implementación.
Operaciones habitualmente previstas en los lenguajes de programación.
Primitivas
operaciones que se hacen sobre los registros, directamente
sobre la BIOS (no se pueden modificar), con el fin de asignar y declarar
variables, y combinar instrucciones mediante el control de flujo secuencial,
condicional e iterativo. Induce a implementación.