Articulo de referencia

Semántica (lenguajes de programación)

En la teoría de los lenguajes de programación , la semántica es el estudio lógico matemático riguroso del significado de los lenguajes de programación . [ 1 ] La semántica asign...

En la teoría de los lenguajes de programación , la semántica es el estudio lógico matemático riguroso del significado de los lenguajes de programación . [ 1 ] La semántica asigna significado computacional a cadenas válidas en la sintaxis de un lenguaje de programación . Está estrechamente relacionada con la semántica de las demostraciones matemáticas y, a menudo, se solapa con ella .

La semántica describe los procesos que sigue un ordenador al ejecutar un programa en un lenguaje específico. Esto se puede lograr describiendo la relación entre la entrada y la salida del programa, o explicando cómo se ejecutará en una plataforma determinada , creando así un modelo de computación .

Historia

En 1967, Robert W. Floyd publicó el artículo Asignación de significados a los programas ; su principal objetivo era "un estándar riguroso para las pruebas sobre programas informáticos, incluidas las pruebas de corrección , equivalencia y terminación". [ 2 ] [ 3 ] Floyd escribió además: [ 2 ]

En nuestro enfoque, la definición semántica de un lenguaje de programación se basa en una definición sintáctica . Esta debe especificar cuáles de las frases de un programa sintácticamente correcto representan comandos y qué condiciones deben imponerse a la interpretación en el entorno de cada comando.

En 1969, Tony Hoare publicó un artículo sobre la lógica de Hoare, basada en las ideas de Floyd, ahora a veces denominada colectivamente semántica axiomática . [ 4 ] [ 5 ]

En la década de 1970 surgieron los términos semántica operacional y semántica denotacional . [ 5 ]

Descripción general

El campo de la semántica formal abarca todo lo siguiente:

Tiene estrechos vínculos con otras áreas de la informática, como el diseño de lenguajes de programación , la teoría de tipos , los compiladores e intérpretes , la verificación de programas y la comprobación de modelos .

Aproches

Existen muchos enfoques para la semántica formal; estos pertenecen a tres clases principales:

  • La semántica denotacional [ 6 ] implica que cada frase del lenguaje se interpreta como una denotación , es decir, un significado conceptual que puede pensarse de forma abstracta. Estas denotaciones suelen ser objetos matemáticos que habitan un espacio matemático, pero no es un requisito que así sea. Por necesidad práctica, las denotaciones se describen mediante alguna forma de notación matemática, que a su vez puede formalizarse como un metalenguaje denotacional. Por ejemplo, la semántica denotacional de los lenguajes funcionales suele traducir el lenguaje a la teoría de dominios . Las descripciones semánticas denotacionales también pueden servir como traducciones compositivas de un lenguaje de programación al metalenguaje denotacional y utilizarse como base para el diseño de compiladores .
  • Semántica operacional , [ 7 ] mediante la cual la ejecución del lenguaje se describe directamente (en lugar de por traducción). La semántica operacional se corresponde vagamente con la interpretación , aunque nuevamente el "lenguaje de implementación" del intérprete es generalmente un formalismo matemático. La semántica operacional puede definir una máquina abstracta (como la máquina SECD ) y dar significado a las frases al describir las transiciones que inducen en los estados de la máquina. Alternativamente, como con el cálculo lambda puro , la semántica operacional puede definirse mediante transformaciones sintácticas en frases del propio lenguaje;
  • La semántica axiomática [ 8 ] otorga significado a las frases describiendo los axiomas que les son aplicables. La semántica axiomática no distingue entre el significado de una frase y las fórmulas lógicas que la describen; su significado es precisamente lo que se puede demostrar sobre ella mediante alguna lógica. El ejemplo canónico de semántica axiomática es la lógica de Hoare .

Aparte de la elección entre enfoques denotacionales, operacionales o axiomáticos, la mayoría de las variaciones en los sistemas semánticos formales surgen de la elección del formalismo matemático de apoyo.

Variaciones

Algunas variantes de la semántica formal incluyen las siguientes:

Describiendo relaciones

Por diversas razones, uno podría desear describir las relaciones entre diferentes semánticas formales. Por ejemplo:

  • Demostrar que una semántica operacional particular para un lenguaje satisface las fórmulas lógicas de una semántica axiomática para ese lenguaje. Dicha demostración prueba que es "correcto" razonar sobre una estrategia de interpretación (operacional) particular utilizando un sistema de prueba (axiomático) particular .
  • Para demostrar que la semántica operacional sobre una máquina de alto nivel se relaciona mediante una simulación con la semántica sobre una máquina de bajo nivel, donde la máquina abstracta de bajo nivel contiene más operaciones primitivas que la definición de un lenguaje dado en la máquina abstracta de alto nivel, dicha demostración prueba que la máquina de bajo nivel implementa fielmente la máquina de alto nivel.

También es posible relacionar múltiples semánticas a través de abstracciones mediante la teoría de la interpretación abstracta .

Véase también

Referencias

  1. Goguen, Joseph A. (1975). «Semántica de la computación». Teoría de categorías aplicada a la computación y el control . Notas de clase en ciencias de la computación. Vol.  25. Springer . págs. 151–163 . doi : 10.1007/3-540-07142-3_75 . ISBN  978-3-540-07142-6.
  2. 1 2 Floyd, Robert W. (1967). "Asignación de significados a los programas" (PDF) . En Schwartz, JT (ed.). Aspectos matemáticos de la informática . Actas del Simposio sobre Matemáticas Aplicadas. Vol. 19. Sociedad Matemática Americana. págs. 19–32 . ISBN   0821867288.
  3. Knuth, Donald E. "Resolución conmemorativa: Robert W. Floyd (1936–2001)" (PDF) . Monumentos conmemorativos de la facultad de la Universidad de Stanford . Sociedad Histórica de Stanford.
  4. Hoare, CAR (octubre de 1969). "Una base axiomática para la programación de computadoras" . Communications of the ACM . 12 (10): 576– 580. doi : 10.1145/363235.363259 . S2CID 207726175 . 
  5. 1 2 Winskel, Glynn (1993). La semántica formal de los lenguajes de programación : una introducción . Cambridge, Mass.: MIT Press. pág. xv . ISBN   978-0-262-23169-5.
  6. Schmidt, David A. (1986). Semántica denotacional: una metodología para el desarrollo del lenguaje . William C. Brown Publishers. ISBN 9780205104505.
  7. Plotkin, Gordon D. (1981). Un enfoque estructural de la semántica operacional (Informe). Informe técnico DAIMI FN-19. Departamento de Ciencias de la Computación, Universidad de Aarhus .
  8. 1 2 Goguen, Joseph A. ; Thatcher, James W.; Wagner, Eric G.; Wright, Jesse B. (1977). "Semántica de álgebra inicial y álgebras continuas" . Journal of the ACM . 24 (1): 68– 95. doi : 10.1145/321992.321997 . S2CID 11060837 . 
  9. Mosses, Peter D. (1996). Teoría y práctica de la semántica de la acción (Informe). Informe BRICS RS9653. Universidad de Aarhus .
  10. Deransart, Pierre; Jourdan, Martin; Lorho, Bernard (1988). «Gramáticas de atributos: definiciones, sistemas y bibliografía ». Lecture Notes in Computer Science 323. Springer-Verlag . ISBN 9780387500560.
  11. Lawvere, F. William (1963). "Semántica funcional de las teorías algebraicas" . Actas de la Academia Nacional de Ciencias de los Estados Unidos de América . 50 ( 5): 869– 872. Bibcode : 1963PNAS...50..869L . doi : 10.1073/pnas.50.5.869 . PMC 221940. PMID 16591125 .  
  12. Andrzej Tarlecki; Rod M. Burstall ; Joseph A. Goguen (1991). "Algunas herramientas algebraicas fundamentales para la semántica de la computación: Parte 3. Categorías indexadas" . Theoretical Computer Science . 91 (2): 239– 264. doi : 10.1016/0304-3975(91)90085-G .
  13. Batty, Mark; Memarian, Kayvan; Nienhuis, Kyndylan; Pichon-Pharabod, Jean; Sewell, Peter (2015). "El problema de la semántica de concurrencia de los lenguajes de programación" (PDF) . Actas del Simposio Europeo sobre Lenguajes y Sistemas de Programación . Springer . págs. 283–307 . doi : 10.1007/978-3-662-46669-8_12 . 
  14. Abramsky, Samson (2009). «Semántica de la interacción: Una introducción a la semántica de juegos». En Andrew M. Pitts; P. Dybjer (eds.). Semántica y lógica de la computación . Cambridge University Press. pp. 1–32 . doi : 10.1017/CBO9780511526619.002 . ISBN  9780521580571.
  15. Dijkstra, Edsger W. (1975). "Comandos protegidos, indeterminación y derivación formal de programas" . Communications of the ACM . 18 (8): 453– 457. doi : 10.1145/360933.360975 . S2CID 1679242 . 

Lecturas adicionales

Libros de texto
  • Floyd, Robert W. (1967). «Asignación de significados a los programas» (PDF) . En Schwartz, JT (ed.). Aspectos matemáticos de la informática . Actas del Simposio sobre Matemáticas Aplicadas. Vol.  19. Sociedad Matemática Americana. pp. 19–32 . ISBN  0821867288.
  • Hennessy, M. (1990). La semántica de los lenguajes de programación: una introducción elemental mediante la semántica operacional estructural . Wiley. ISBN 978-0-471-92772-3.
  • Tennent, Robert D. (1991). Semántica de los lenguajes de programación . Prentice Hall. ISBN 978-0-13-805599-8.
  • Gunter, Carl (1992). Semántica de los lenguajes de programación . MIT Press. ISBN 0-262-07143-6.
  • Nielson, HR; Nielson, Flemming (1992). Semántica con aplicaciones: Una introducción formal (PDF) . Wiley. ISBN 978-0-471-92980-2Archivado del original (PDF) el 17 de abril de 2012. Consultado el 27 de mayo de 2011 .
  • Winskel, Glynn (1993). La semántica formal de los lenguajes de programación: una introducción . MIT Press. ISBN 0-262-73103-7.
  • Mitchell, John C. (1995). Fundamentos de los lenguajes de programación (Postscript) .
  • Slonneger, Kenneth ; Kurtz, Barry L. (1995). Sintaxis formal y semántica de los lenguajes de programación . Addison-Wesley. ISBN 0-201-65697-3.
  • Reynolds, John C. (1998). Teorías de los lenguajes de programación . Cambridge University Press. ISBN 0-521-59414-6.
  • Harper, Robert (2006). Fundamentos prácticos de los lenguajes de programación (PDF) . Archivado del original (PDF) el 27 de junio de 2007.(Borrador de trabajo)
  • Nielson, HR; Nielson, Flemming (2007). Semántica con aplicaciones: Un aperitivo . Springer. ISBN 978-1-84628-692-6.
  • Stump, Aaron (2014). Fundamentos de los lenguajes de programación . Wiley. ISBN 978-1-118-00747-1.
  • Krishnamurthi, Shriram (2012). "Lenguajes de programación: aplicación e interpretación" (2.ª  ed.).
Apuntes de clase
  • Winskel, Glynn. "Semántica Denotacional" (PDF) . Universidad de Cambridge.
  • Aaby, Anthony (2004). Introducción a los lenguajes de programación . Archivado del original el 19 de junio de 2015.Semántica.