analizador semantico
2. Agenda5.1 Analizador semántico5.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.
3. 5.1Analizador semántico• Ajuste significativo• Comprobación de tipos: operandos-operadores• Comprobación del flujo de control:for(;;){ … break; w= a+2;}
4. Analizador semántico• Comprobación de unicidad• int a;• char a; //una sola vez• Comprobación relacionadas con nombres
5. Analizador semántico• Tabla de símbolos: – Estructura en memoria – Almacena información sobre los tipos• Sistemas de tipo:• Tipobásico: entero, carácter, real, lógico• Nombres de tipo
6. 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
7. Analizador semántico• Cada analizador semántico implementa un sistemade tipos• Comprobación dinámica y estática• Estática: compilación• Dinámica: Ejecuciónchar a[5]; strcpy(a, “abcdefghijk”);
8. Analizador semántico• Fuertemente tipificado• Débilmente tipificadoSímbolo{ nombre; tipo; ámbito;}
9. 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 valoresse comparan para verificar que los tipos de datos coincidan y sean congruentes, de lo contrario no se pueden realizar los cálculos.
10. 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 sedenomina conversión automática.
11. 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.
12. Conversión de tipos• A esto se le llamaensanchamiento 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.
13. Conversión detipos• 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;
14. Comprobación de tipos• Existen dos tipos de comprobación: estática y dinámica.• La comprobación ayuda a evitar la mayoría de loserrores de programación. Ejemplos:• Comprobación de tipos. Para saber si el operador aplicado a los operadores es correcto
15. 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 objeto una sola vez.• Comprobación relacionadas con nombres. El mismonombre debe aparecer dos veces. Variables que se declaran pero no utilizan
16. 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
17. Comprobación de tipos• Siempre se diseñan reglas de tipos como...
Regístrate para leer el documento completo.