¿Qué es la semántica?

13

Hay muchos idiomas populares. Pero, los informáticos nos dicen que para comprender el comportamiento de los programas en esos lenguajes definitivamente y sin ambigüedades argumentan sobre el comportamiento del programa (por ejemplo, demostrar su identidad), necesitamos traducirlos a otro lenguaje bien entendido. A ese lenguaje lo llaman "semántica". Los autores proponen una de las muchas semánticas. Explican el significado de sus construcciones y cómo puedes traducir tu idioma a las suyas. Una vez que hagas eso, todos entenderán tu programa sin duda, dicen.

Se ve bien, sin embargo, no entiendo algo. ¿Nos dicen que introducen otro idioma para entender el primero? ¿Por qué lo entendemos mejor que el original? ¿Por qué esta semántica es mejor que eso? ¿Por qué no aprender la semántica de C de inmediato en lugar de inventar otro lenguaje para describir la semántica de C? Lo mismo se aplica a la sintaxis. ¿Por qué no hago la misma pregunta con respecto a la sintaxis?

PD: En los comentarios escuché que la semántica no significa otro idioma o traducción al mismo. Pero la semántica formal para VHDL dice que si entiendes algo de una sola manera, entonces no lo entiendes y se puede especificar el "significado del significado" si proporcionamos un idioma con un mecanismo que lo traduzca a otro idioma (conocido). Es decir, "la semántica es una relación entre sistemas formales". Hennessy, en Semántica de lenguajes de programación , dice que la semántica permite el procesamiento formal del "significado" del programa, cuando la semántica se suministra como BNF o Diagrama de sintaxis. ¿Qué es un sistema formal si no es un idioma?

PS2 ¿Puedo decir que la síntesis HW de un programa HDL dado en la interconexión de puertas es un proceso de extracción semántica? Traducimos la descripción (de alto nivel) al lenguaje (de bajo nivel) que luego entendemos.

Val
fuente
¿A qué tipo de diagramas te refieres? Trabajo con semántica, pero prácticamente nunca uso diagramas.
Dave Clarke
1
No llamaría a la semántica un "lenguaje". La semántica define el significado de los idiomas. Por ejemplo, la sintaxis de los números binarios es . Solo con el valor semántico ( w ) = | w | i = 1 w i 2 n - i + 1 ¿obtenemos números reales; Tenga en cuenta que esta no es la única semántica posible, también hay BCD, 2-complemento y muchos más. {0 0,1}+valor(w)=yo=1El |wEl |wyo2norte-yo+1
Raphael
@Dave Disculpe, creé mi pregunta bajo la impresión de Diagramas de decisión de asignación. También acabo de semántica formal para VHDL, un libro donde los autores proponen diferentes semánticas, muchos diagramas en cada una. Estaba pensando que este es un lenguaje al que asignamos.
Val
Esto suena mucho menos como semántica, y más como un paso intermedio en el camino hacia la compilación en hardware.
Dave Clarke el
Sí, pero extraen el "significado" de la descripción.
Val

Respuestas:

15

¿Por qué no aprender la semántica de C de inmediato en lugar de inventar otro lenguaje para describir la semántica de C?

Porque para definir la semántica de C necesitas algún tipo de lenguaje, por ejemplo inglés. El inglés puede ser ambiguo, y especialmente es la semántica C99.

La noción informática de semántica es generalmente una descripción matemática de un programa, y ​​esta descripción no es exactamente una traducción. Hay varios tipos de semántica, que pueden ser sobre diferentes cosas:

  1. sobre qué función matemática calcula el programa ( semántica denotacional ),
    lambda x: x + x =(X2X)
  2. sobre las propiedades que deben tener antes y después del programa ( semántica axiomática ),
    {un>0 0} x = a; y = 0; mientras que (1 <x) {x = x / 2; y ++; } {y=Iniciar sesión(un)}
  3. sobre cómo se reducirá el programa ( semántica operativa ). donde σ , σ representa su memoria antes y después. En este caso, σ = ( x a , y b ) y σ = ( x a + b , y 0 ) si x e y son las celdas de memoria para x
    (σ, while (x) {x -; y ++;})σ
    σ,σσ=(Xun,ysi)σ=(Xun+si,y0 0)XyXe , y si a .yun

Un poco triste por ahora, comprender universalmente un programa a través de su semántica no es fácil ni la intención de todo. No es lo primero porque, bueno, esas matemáticas pueden ser complicadas. No es lo último porque la semántica proporciona una descripción común e inequívoca, pero no se utiliza para comprender un programa.

Si la lectura de la semántica no es muy significativa, la lectura y el acuerdo sobre la semántica de los elementos básicos del lenguaje es muy importante, por ejemplo para explicar de forma inequívoca la forma de C las obras primitivas.Seguir

En conclusión:

¿Nos dicen que introducen otro idioma para entender el primero?

Técnicamente no, el lenguaje es matemático. También es básicamente lo mismo para todos los lenguajes de programación, por lo que incluso introducir un nuevo lenguaje, si es el mismo para todos, estaría bastante bien.

¿Por qué lo entendemos mejor que el original?

Debido a que es matemática, puede ser más difícil de entender, pero es mucho más precisa y completa.

Lo mismo se aplica a la sintaxis.

Hay trabajos sobre analizadores verificados, pero la cuestión de qué significaría una semántica de un analizador no es trivial.

jmad
fuente
2
"las matemáticas [...] son ​​mucho más precisas y completas". - lo que, por supuesto, plantea la cuestión de la sintaxis formal y la semántica de las matemáticas en sí. ;)
Raphael