sintaxis semántica semantica que programación programacion lenguaje elementos ejemplo denotacional datos basica compiler-construction theory

compiler construction - semantica - En términos de programación, ¿qué significa semántica?



sintaxis y semantica de un lenguaje de programacion (7)

¿Pero qué significa en términos de jerga informática?

Esencialmente lo mismo. Ejemplo:

x = 5;

Lo anterior es la sintaxis (representación). El significado (es decir, la semántica) de este término es asignar el valor 5 a un símbolo (variable, lo que sea) llamado x . Diferentes idiomas ofrecen diferentes sintaxis para proporcionar la misma semántica. Por ejemplo, la tarea anterior se escribiría como

x := 5;

en Pascal, y como

x <- 5

en varios otros idiomas. En todos los casos, el significado es esencialmente el mismo. Pero a veces, las mismas sintaxis también pueden tener diferentes significados, dependiendo del idioma y / o contexto. VB, por ejemplo, redefine el operador igual para significar dos cosas diferentes. En primer lugar, una tarea, tal como se indica arriba.

En segundo lugar, en el siguiente código de código, en lugar de asignar, toma el significado de comparar dos valores:

If x = 5 Then Console.WriteLine("x is 5")

Esta es una frase del blog de Eric Lippert :

Dada esa desafortunada situación, tiene sentido enfatizar primero el mecanismo de almacenamiento, y luego la semántica .

Es fácil obtener una definición de diccionario de lo que significa "semántico" pero ¿qué significa en términos de jerga informática?


Como lo entiendo, la semántica es "lo que significa todo para un humano". Es lo que hace parte, no cómo lo hace.


En otras palabras, dado el contexto del artículo, él dice que hubiera sido mejor para los desarrolladores de C# concentrarse en cómo almacenarían los datos internamente cuando se declarara una variable y no les importaría tanto especificar el método preciso de declarar la variable.

En otras palabras haciendo esto en C#

static int customerCount

le está diciendo al compilador que prepare el almacenamiento para un entero accesible desde el punto de vista estático y luego le dice que etiquete ese almacenamiento como customerCount

mientras que en VB usarías esta línea

dim shared customerCount as Integer

decirle al compilador, en teoría, que tienes una variable llamada customerCount que debería almacenar y hacer que esté disponible de forma estática, y por cierto, resulta que es un Integer.

Todo es realmente una distinción de líneas finas.


En términos de la jerga del lenguaje de programación, hay varias nociones de semántica:

  • La semántica estática le indica qué programas gramaticales también están bien formados. Muchos idiomas no tienen una semántica estática (Esquema, Ruby, Python, Icon, Lua, Perl) o tienen una semántica estática que trata principalmente de implementar un sistema de tipos (Java, C, C #, Haskell). "Declaración requerida antes del uso" es otra posible semántica estática. La semántica estática responde a la pregunta "¿ es este programa significativo? " Y lo hace en tiempo de compilación.

  • La semántica dinámica te dice una de dos cosas:

    • Dado que un programa es significativo, ¿cuál es su significado? El significado se ha definido matemáticamente de muchas, muchas formas diferentes. Una semántica dinámica clásica podría definir una función (o una relación) entre las entradas de un programa y las salidas del programa. Las funciones de significado ("semántica de denotación") fueron iniciadas por Dana Scott y Christopher Strachey; Las relaciones de significado ("semántica axiomática") fueron iniciadas por Tony Hoare. Scott y Hoare ganaron los premios Turing; Strachey probablemente lo habría hecho, pero murió joven. Una buena manera de introducirse sería leer el libro Ensayos en ciencias computacionales de Tony Hoare.
    • Dado que un programa es significativo, ¿cómo se comportará cuando se ejecute? . Este tipo de semántica se suele denominar "semántica operacional" y describe la ejecución del programa en algún tipo de máquina abstracta. Una vez más, hay muchas, muchas variedades. Hoy en día, la semántica operacional es la herramienta elegida porque existen poderosas técnicas de prueba, por lo que, por ejemplo, al usar la semántica operacional, puede probar que nunca hay un error de memoria en el código administrado. Robin Milner obtuvo su premio Turing en parte por las diferentes técnicas operativas utilizadas para describir programas concurrentes o de múltiples hilos (CCS y el cálculo pi). Su libro de 1999 sobre sistemas móviles y de comunicación también es una muy buena lectura si omite las pruebas :-)

Si lees la palabra "semántica" en un manual o artículo, y el contexto es un inglés informal en lugar de una descripción matemática precisa, el autor probablemente se esté refiriendo al comportamiento operacional dinámico; Este tipo de descripción informal puede ser muy útil para los escritores y programadores de compiladores.


La semántica es lo que queremos decir con el programa. Sytax es una restricción específica del lenguaje sobre cómo expresamos la semántica.

En teoría, siempre que la semántica de un programa sea correcta, no importa qué idioma se usó para escribirlo.


Se aplica la definición del diccionario.

La semántica es (son?) Todo sobre el significado de las palabras.

Por ejemplo, si utiliza el tipo de .NET KeyValuePair para representar algo OTRO que no sea una clave y un valor, tiene un problema semántico. Puede funcionar ... puede ser la mejor solución, pero no es semánticamente precisa.

Esto es exactamente de lo que habla en esa publicación del blog. Primero listamos los tipos de devolución en lenguajes tipo C, pero en realidad la devolución es la última. Eso es semánticamente inexacto.


Un poco más de contexto del blog:

Por lo tanto, en C, primero coloca los metadatos de almacenamiento (static int customerCount;) en lugar de la semántica (podría haber sido var customerCount: static int;).

Está diciendo que "estática int" aparece antes de "customerCount". Llamando metadatos de almacenamiento "static int" y semántica "customerCount". Los metadatos de almacenamiento son información acerca de lo que contiene la variable, implícita en cuántos bits ocupa, qué valores puede tener, si se comparte entre las instancias y su volatilidad.

La semántica , el nombre de la variable, es información para los lectores del código sobre lo que debe almacenarse en la variable. Lo que significa la variable. Podría llamarlo "x" y el programa funcionaría igual de bien, pero sería difícil para un programador entenderlo. Llamarlo "customerCount" proporciona la variable con significado, y eso es semántica.