Semántica de los lenguajes de programación
La semántica
de un lenguaje de programación se refiere al significado que adoptan
las distintas sentencias, expresiones y enunciados de un programa. La
semántica engloba aspectos sensibles al contexto, a diferencia de la
sintaxis que considera aspectos libres de contexto.
Los principales elementos de la semántica son:
Variables: se refieren a locaciones de memoria ligadas a un nombre y a un tipo.
Valores y referencias: los valores son el estado de determinada celda o grupo de celdas de la memoria,
mientras que las referencias indican la posición de esa celda en
memoria. Estos 2 conceptos están muy involucrados con los punteros.
La mayoría de los lenguajes los soportan, aunque son una
conocida fuente de errores de programación.
Expresiones: Son construcciones sintácticas que permiten combinar valores
con operadores y producir nuevos valores. Son los elementos de los que
se componen los enunciados. Las expresiones pueden ser aritméticas (a
+b*c), relacionales (a a), lógicas (a && b || c)
o condicionales (if (a*b > 2)...). Cada una de estas tiene una
semántica especifica que la define. Por ejemplo en una expresión
aritmética el tipo esperado es numérico (esto es int, long, etc.), los
operadores deben ser +,-,*, /; y las funciones utilizadas dentro de ésta deben retornar valores numéricos.
Semántica estática.
Gramática de atributos: Las gramáticas de atributos son más
poderosas que las BNF porque permiten formalizar aspectos sensibles
al contexto.
Por ejemplo, el chequeo de tipos depende del contexto porque debemos
saber el tipo esperado y el actual y determinar si son compatibles. El
tipo esperado lo obtenemos del contexto analizando la definición de la
variable. Si la variable num1 está definida de tipo String, y más
adelante le queremos asignar el valor 1000, se producirá un error de tipo.
La gramática de atributos de compone de:
Atributos: o heredados: son los que se obtienen de un elemento
más general. Esquema de arriba hacia abajo. Por ejemplo, number y
float. En este caso float heredará los atributos de number e incorporará
nuevos atributos propios de su tipo.
Sintetizados: se conocen a partir de los sub- elementos, como
ser un subrango. Esquema de abajo hacia arriba, opuesto a los atributos
heredados.
Intrínsecos: Estos atributos se obtienen de tablas externas, fuera del árbol de derivación.
condiciones: Son hechos que se evalúan si suceden o no.
Por ejemplo, if(num>=20) ...
reglas: A partir de un conjunto de condiciones se forman las reglas. por ejemplo
La gramática de atributos de compone de:
ResponderEliminaresta es la semantica que usa el lenguaje de psint