Unidad v analisis semantico
M.C. Juan Carlos Olivares Rojas
Agenda
5.1 Analizador semántico 5.2 Verificación de tipos en expresiones. 5.3 Conversión de tipos. 5.4 Acciones agregadas en un analizador sintáctico descendente (top-down). 5.5 Pila semántica en un analizador sintáctico ascendente (bottom-up). 5.6 Administración de la tabla de símbolos. 5.7 Manejo de errores semánticos.
5.1Analizador semántico
• Ajuste significativo • Comprobación de tipos: operandos-operadores • Comprobación del flujo de control: for(;;) { … break; w= a+2; }
Analizador semántico
• Comprobación de unicidad • int a; • char a; //una sola vez • Comprobación relacionadas con nombres
Analizador semántico
• 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
Analizador semántico
• 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
Analizador semántico
• Cadaanalizador 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”);
Analizador semántico
• Fuertemente tipificado • Débilmente tipificado Símbolo { nombre; tipo; ámbito; }
5.2 Verificación de tipos en expresiones
• La verificación de los tipos de datos se hace asignando el valor de tipo de cadauna 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.
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 elvalor sin una conversión de tipos; lo que se denomina conversión automática.
Conversión de tipos
• 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.Conversión de tipos
• 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 alpasar un valor flotante a un entero.
Conversión de tipos
• 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 se realiza poniendo delante un nombre de tipo entre paréntesis, por ejemplo, (tipo) valor. • byte a; int b; a=(byte) b;
Comprobación de tipos
• Existen dos tipos de comprobación: estática ydinámica. • La comprobación ayuda a evitar la mayoría de los errores de programación. Ejemplos: • Comprobación de tipos. Para saber si el operador aplicado a los operadores es correcto
Comprobación de tipos
• Comprobación de flujo de control. Se debe verificar que las instrucciones que cambia el flujo de un programa sean válidos. Ejemplo: break, goto. • Comprobación de unicidad: definir un objetouna sola vez. • Comprobación relacionadas con nombres. El mismo nombre debe aparecer dos veces. Variables que se declaran pero no utilizan
Comprobación de tipos
• La comprobación de tipos es la más complicada. Las demás comprobaciones son rutinarias. • El operador % ocupa que los dos operandos sean enteros. • + es una función suma(a,b) que está sobrecargada para distintos tipos de datos...
Regístrate para leer el documento completo.