Siempre he pensado que referirse a la sintaxis de un lenguaje es lo mismo que referirse a la semántica de un lenguaje. Pero me han informado que aparentemente ese no es el caso. ¿Cuál es la diferencia?
Siempre he pensado que referirse a la sintaxis de un lenguaje es lo mismo que referirse a la semántica de un lenguaje. Pero me han informado que aparentemente ese no es el caso. ¿Cuál es la diferencia?
Semántica ~ significado
Sintaxis ~ Representación simbólica
Entonces, dos programas escritos en diferentes idiomas podrían hacer lo mismo (semántica) pero los símbolos utilizados para escribir el programa serían diferentes (sintaxis).
Un compilador verificará su sintaxis por usted (errores en tiempo de compilación), y derivará la semántica de las reglas del idioma (asigne la sintaxis a las instrucciones de la máquina), pero no encontrará todos los errores semánticos (errores en tiempo de ejecución , por ejemplo, calcular el resultado incorrecto porque el código dice agregar 1 en lugar de agregar 2).
En realidad no hay dos niveles sino tres:
i
y f
producen if
) if
, (
, 42
, ==
, answer
y )
produce una declaración condicional) Te lo explicaré con un ejemplo sencillo en el idioma ENGLISH
:
The glass drank Ben
Es una declaración sintácticamente correcta. Tiene un sustantivo, un verbo, etc.
Pero semánticamente está mal, porque esta afirmación no tiene un significado concebible o correcto.
Semántica describe las entidades lógicas de un lenguaje de programación y sus interacciones. Sintaxis define cómo se expresan en caracteres.
Por ejemplo, el concepto de aritmética de punteros es parte de la semántica de C; la forma en que los operadores +
y -
se pueden usar para expresar operaciones de puntero son parte de su sintaxis.
A veces, dos idiomas comparten parte de su semántica, pero la sintaxis difiere enormemente (por ejemplo, C # y VB.NET, ambos usan tipos de valores y tipos de referencia, pero los caracteres que escribe para definirlos son diferentes); en otros casos, dos idiomas son sintácticamente similares, pero la semántica no coincide (considere Java contra JavaScript, donde las similitudes a menudo confunden a los principiantes).
Sintaxis es cómo se organizan los tokens de un idioma. Semántica es lo que significan esos tokens (por lo general, lo que significa un arreglo particular de tokens).
No especificó si solo se refiere a los lenguajes de programación o a los lenguajes generales utilizados en la programación, por lo que mi respuesta es sobre lenguajes de datos (como XML, RDF, sistemas de tipo de datos, etc.):
Brian L. Meek en sus siete reglas de oro para producir estándares independientes del lenguaje (1995) escribe que "la sintaxis de un idioma puede ser la semántica de otro" . Se refiere a las palabras "sintaxis" y "semántica" utilizadas en la descripción de los datos: por lo tanto, si se topa con estas palabras en una especificación de algún formato de datos, debería reemplazar ambas palabras con "Potrzebie" para deja claro que debes averiguar el significado para ti mismo.
La relación entre sintaxis y semántica, al menos en datos exactamente especificados, puede describirse mejor con el término "codificación" . La semántica está codificada en sintaxis. Como las grabaciones se pueden anidar, la sintaxis de un idioma es la semántica de otro. Si uno va más allá del ámbito de los datos, este anidamiento puede ser virtualmente infinito, como lo describe Umberto Eco como "semiosis ilimitada".
Para dar un ejemplo:
Las personas generalmente se detienen en algún nivel y lo toman como semántico, pero al final no hay una semántica final a menos que algún ser humano interprete los datos en su mente. Tan pronto como uno intenta expresar semántica en forma de datos, se convierte en sintaxis.
Si se puede describir en BNF (Backus-Naur Form) o algo similar, es sintaxis Si no puede, no lo es.
La semántica, por otro lado, se trata del significado de un programa (u otra parte del código fuente).
Y a veces la línea entre los dos puede ser borrosa.
Una forma de entender la distinción es observar los tipos de errores que se producen cuando la sintaxis o semántica de su programa es incorrecta.
Un error de sintaxis es una falla del código fuente para que coincida con la gramática del idioma, por ejemplo, no tener un punto y coma donde se requiere uno.
Un error semántico es una falla en satisfacer otros requisitos de lenguaje (lo que C, por ejemplo, llama "restricciones"); un ejemplo podría estar escribiendo x + y
donde x
y y
son de tipos incompatibles. La gramática del lenguaje le dice que una adición parece something + something
, pero no es lo suficientemente potente como para expresar los requisitos de los tipos de los operandos de izquierda y derecha.
(los errores lógicos, como el uso de 1 donde 2 sería correcto, generalmente no son detectables por el compilador, aunque en algunos casos un compilador puede advertir sobre un código cuestionable).
La sintaxis es lo que dicen los símbolos (léxicos). Semántica es lo que significan.
Considera:
C #: condition ? true_value : false_value
VB.NET: If(condition, true_value, false_value)
- Diferente sintaxis, la misma semántica.
C #: left_value / right_value
VB.NET: left_value / right_value
- La misma sintaxis, semántica diferente (para enteros).
Sintaxis es la disposición gramatical de las palabras en una oración, es decir, el orden de las palabras.
(inglés) " cat dog boy " y (programación) " hi.5 " no es not sintácticamente correcto.
(inglés) " cat hugs boy " y (programación) "* 3.2 * 5 * 'es sintácticamente válido.
Semántica estática es si las afirmaciones sintácticamente válidas tienen algún significado.
(Inglés) ' I are big ' (programación) (python) ' 3 +' hi '' es sintácticamente correcto pero tiene un error semántico estático.
Semántica es el significado asociado con una serie de símbolos sintácticamente correcta sin error semántico estático, es decir, la oración es sintáctica y semánticamente correcta, pero su significado puede no ser lo que se pretendía.
(Inglés) ' Los aviones pueden ser peligrosos ' pueden tener dos significados, es decir, volar de aviones puede ser peligroso o los aviones que vuelan pueden ser peligrosos.
(Programación) ‘la computadora no generará ningún mensaje de error, pero no hará lo que le dijiste que hiciera; hará otra cosa ".
Source : MIT 6.00.1
La sintaxis se refiere a las reglas formales que rigen la construcción de declaraciones válidas en un idioma. La semántica se refiere al conjunto de reglas que dan el significado de una declaración.
Los errores debidos a la sintaxis se producen en un programa cuando se violan o se utilizan de forma indebida los lenguajes del lenguaje de programación. Los errores debidos a la semántica ocurren en un programa cuando las declaraciones no son significativas.
El orden de las palabras es el principio básico de la sintaxis, aquellos que intentan entender lo que está escrito, usar las señales sintácticas del orden de las palabras para Ayudar a darle a la oración estructura y significado. La semántica es una interpretación individual del significado de un "frase" basada en su conocimiento previo. Por lo tanto una frase que Aparentemente no tiene sentido sintáctico, puede tener un significado cuando se usa señales semánticas.
La sintaxis solo se ocupa de lo que es lingüística y gramaticalmente correcto. La semántica requiere todos los conocimientos previos, y está mucho más allá de cualquier cosa que sea específica del lenguaje.
La frase "Bebidas de leche para bebés" no tiene un significado sintáctico, pero a través de la semántica, la mayoría de las personas lo interpretarían como "Bebe leche para bebés", ya que nuestro conocimiento previo nos dice que un bebé toma leche, y por lo tanto Puede encontrar un significado a partir de las palabras clave.
Sintaxis y semántica es como estrategia y táctica o izquierda y derecha .
No son realmente conceptos universales independientes, sino un par de palabras relacionadas que, cuando estás en un contexto particular, indican direcciones opuestas. Pero lo mismo que la estrategia en una escala es la táctica en otra.
Entonces, si está escribiendo código en un idioma, la sintaxis es el idioma que está utilizando y el comportamiento deseado es la semántica. Pero si está implementando, o discutiendo, el compilador para ese lenguaje, entonces la sintaxis es la gramática y quizás el sistema de tipos y la semántica todo se basa en eso. Y así sucesivamente.
La sintaxis es lo que la computadora entiende, la semántica es lo que el humano entiende.
A un compilador / intérprete no le importa ni un ápice su diseño, y en cualquier código compilado a nivel de máquina le costaría mucho deducir el diseño. Los desarrolladores se preocupan por el diseño porque un buen diseño tiene que ver con reducir la complejidad al abstraer comportamientos e interacciones complejos, y diferentes tipos de problemas se prestan a diferentes semánticas. La elección del idioma se basa en gran medida en la facilidad y eficiencia con la que se puede expresar la semántica que desea utilizar en su sintaxis.
Ejemplo muy corto con "plain c":
void main()
{
int a = 10;
int x = a - 1;
int y = - 1;
printf("x = %i", x);
printf("y = %i", y);
getch();
}
En este ejemplo, la sintaxis para el token "-" es la misma, pero tiene un significado diferente ("semántico), dependiendo de dónde se use.
En la "x" assignament, "-" significa la operación "substraction", En la asignación "y", "-" significa la operación de "signo negativo".
El vocabulario y la semántica, los amplios y desafiantes comandos disponibles, no son mutuamente excluyentes. Sin embargo, pueden superponerse y, en algunos casos, provocarán que los comandos basados en vocabulario se sincronicen sobre la sintaxis (por ejemplo, al ordenar relaciones). Por ejemplo: los idiomas altamente especializados en formas verbales solo permiten minúsculas en los verbos (palabras incompletas como títere, piquete, fije o déjelos jugar). Entonces estos no son comandos semánticos. Estos verbos... Lee mas