ANÁLISIS SEMANTICO
Enviado por Sonia17 • 8 de Abril de 2014 • 1.659 Palabras (7 Páginas) • 1.312 Visitas
INGENIERÍA EN SISTEMAS COMPUTACIONALES
PROGRAMACIÓN DE SISTEMAS
UNIDAD V
ANÁLISIS SEMÁNTICO
Contenido
INTRODUCCIÓN 2
OBJETIVOS 2
5.1 ANALIZADOR SEMÁNTICO. 2
5.2 VERIFICACIÓN DE TIPOS EN EXPRESIONES. 5
5.3 CONVERSIÓN DE TIPOS. 5
5.4 ACCIONES AGREGADAS EN UN ANALIZADOR SINTÁCTICO DESCENDENTE (TOP-DOWN). 7
5.5 PILA SEMÁNTICA EN UN ANALIZADOR SINTÁCTICO ASCENDENTE (BOTTOM-UP). 8
5.6 ADMINISTRACIÓN DE LA TABLA DE SÍMBOLOS. 8
5.7 MANEJO DE ERRORES SEMÁNTICOS. 9
CONCLUSIÓN 10
BIBLIOGRAFÍA 10
INTRODUCCIÓN
El análisis semántico se realiza después del sintáctico y es mucho más difícil de formalizar que éste. Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre sí, etc. En definitiva, comprobará que el significado de lo que se va leyendo es válido.
El análisis semántico utiliza como entrada el árbol sintáctico detectado por el análisis sintáctico para comprobar restricciones de tipo y otras limitaciones semánticas y preparar la generación de código.
OBJETIVOS
* Desarrollará software de base, tales como compiladores o interpretes.
* Conocer el funcionamiento del analizador semántico.
* Identificar los tipos de datos, así como las conversiones que se pueden hacer en el.
* Conocer los tipos de conversiones que se realizan en un programa.
* Identificar los tipos de errores semánticos.
5.1 ANALIZADOR SEMÁNTICO.
El análisis semántico es posterior al sintáctico y mucho más difícil de formalizar que éste. Se trata de determinar el tipo de los resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre sí, etc. En definitiva, comprobará que el significado de lo que se va leyendo es válido.
La salida “teórica” de la fase de análisis semántico sería un árbol semántico. Consiste en un árbol sintáctico en el que cada una de sus ramas ha adquirido el significado que debe tener. En el caso de los operadores polimórficos (un único símbolo con varios significados), el análisis semántico determina cuál es el aplicable. Por ejemplo, consideremos la siguiente sentencia de asignación:
A := B + C
En Pascal, el signo “+” sirve para sumar enteros y reales, concatenar cadenas de caracteres y unir conjuntos. El análisis semántico debe comprobar que B y C sean de un tipo común o compatible y que se les pueda aplicar dicho operador. Si B y C son enteros o reales los sumará, si son cadenas las concatenará y si son conjuntos calculará su unión.
Se encarga de analizar y comprobar
* Ajuste significativo
* Comprobación de tipos: operandos-operadores
* Comprobación del flujo de control ejemplo :
for(;;)
{
…
break;
w= a+2;
}
*
Comprobación de unicidad:
* int a;
* char a; //una sola vez
* Comprobación relacionadas con nombres
* Tabla de símbolos:
* Estructura en memoria
* Almacena información sobre los tipos
* Sistemas de tipo:
* Tipo básico: entero, carácter, real, lógico
* Nombres de tipo
* Constructores de tipo: estructuras, uniones, objetos.
* Apuntadores: referencias a tipos.
* Funciones a=suma();.
* Sistema de tipos: conjunto de reglas que determinan el criterio para asignar expresiones de tipo a las diferentes partes del código fuente.
* Cada analizador semántico implementa un sistema de tipos
* Comprobación dinámica y estática
* Estática: compilación
* Dinámica: Ejecución char a[5]; strcpy(a, “abcdefghijk”);
Este tipo de analizador puede ser:
* Fuertemente tipificado
* Débilmente tipificado
5.2 VERIFICACIÓN DE TIPOS EN EXPRESIONES.
La verificación de los tipos de datos se hace asignando el valor de tipo de cada una de los componentes léxicos. Estos valores se comparan para verificar que los tipos de datos coincidan y sean congruentes, de lo contrario no se pueden realizar los cálculos. Es el proceso que permite asegurar que un programa obedece a las reglas en el sistema de compatibilidad especificada en el sistema de tipos del lenguaje. Esto quiere decir que por medio de la verificación de tipos podemos determinar que los operadores a los que estamos accediendo sean los correctos y si no está nos marcara las expresiones que no sean aceptadas dentro del lenguaje.
5.3 CONVERSIÓN DE TIPOS.
Hay situaciones en las cuales se tiene un valor de un tipo dado y se desea almacenar ese valor en una variable de un tipo diferente. En algunos tipos es posible almacenar simplemente el valor sin una conversión de
tipos; lo que se denomina conversión automática.
Esto sólo es posible en algún lenguaje de programación, si el compilador reconoce que la variable destino tiene la suficiente precisión para contener el valor origen. En Java se puede almacenar un valor byte en una variable int, dado que este tipo de datos es de mayor precisión que el primero.
A esto se le llama ensanchamiento o promoción, dado que el tipo más pequeño se ensancha o promociona al tipo compatible más grande. Si por el contrario, se desea asignar un valor de variable int a una variable byte se necesita realizar una
conversión de tipos explícita. En algunos casos se puede realizar la conversión pero se pueden perder datos, como por ejemplo al pasar un valor flotante a un entero.
A esto se le llama estrechamiento, dado que se estrecha explícitamente el valor para que quepa en el destino. La conversión de un tipo
...