Prog de sistemas u ii y u iv
Se compone de un conjunto de rutinas independientes, llamadas por los analizadores morfológico y sintáctico.
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.
En compiladores de un solo paso, las llamadasa las rutinas semánticas se realizan directamente desde el analizador sintáctico y son dichas rutinas las que llaman al generador de código. El instrumento más utilizado para conseguirlo es la gramática de atributos.
En compiladores de dos o más pasos, el análisis semántico se realiza independientemente de la generación de código, pasándose información a través de un archivo intermedio, quenormalmente contiene información sobre el árbol sintáctico en forma linealizada (para facilitar su manejo y hacer posible su almacenamiento en memoria auxiliar).
En cualquier caso, las rutinas semánticas suelen hacer uso de una pila (la pila semántica) que contiene la información semántica asociada a los operandos (y a veces a los operadores) en forma de registros semánticos.
Por qué haceranálisis semántico?
* Asegurarnos que el programa cumple con la definición del lenguaje de programación
* Proveer mensajes de error útiles al usuario
Chequeo Semántico
* Chequeos estáticos
Chequeos de Control de Flujo
* El control de flujo del programa es sensitivo al contexto
* Ejemplos:
* Declaración de una variable debe ser visible al usarla (en scope)
*Declaración de una variable debe estar ántes de usarla
* Cada camino de salida (exit path) retorna un valor del tipo correcto
Chequeos de Unicidad
* Uso (y mal uso) de identificadores
* No se puede representar en una CFG (mismo token)
* Ejemplos:
* Ningún identificador puede ser usado para dos definiciones diferentes en el mismo scope
Chequeos de Tipo
* Loschequeos semánticos más extensos
* Ejemplos:
* Que el número de argumentos haga match con el número de parámetros formales y que los tipos correspondientes sean equivalentes
* Si se llama como expresión, debe retornar un tipo
* Cada acceso a una variable debe hacer match con la declaración (arreglo, estructura, etc.)
* Los identificadores en una expresión deben ser“evaluables”
* LHS de una asignación debe ser “asignable”
* En una expresión los tipos de las variables, tipos de retorno de métodos y de operadores deben ser “compatibles
Chequeos Dinámicos
* Chequeos de límites de arreglos
* Chequeo de dereferencia del Null Pointer
Sistemas de Tipos
* Un sistema de tipos es usado para el chequeo de tipos
* Un sistema de tiposincorpora
* Construcciones estáticas del lenguaje
* Noción de tipos
* Reglas para asignar tipos a construcciones del lenguaje
Expresiones de Tipos
* Un tipo compuesto es denotado por una expresión de tipo
* Una expresión de tipo es
* Un tipo básico
* La aplicación de un constructor de tipo a otras expresiones de tipo
Tipos Básicos
* Tipos atómicosdefinidos por el lenguaje
* Ejemplos:
* Enteros
* Booleanos
* floats
* caracteres
* type_error
* Tipo especial que produce un error
* void
* Tipo básico que denota “la ausencia de un valor”
Expresiones de Tipo: Nombres
* Ya que las expresiones de tipos pueden ser nombradas, un nombre de tipo es una expresión de tipo
Equivalenciade Tipos
* ¿Cómo sabemos si dos tipos son iguales?
* Mismo entrada de tipo
* Ejemplo:
int A[128];
foo(A);
foo(int B[128]) { … }
* Dos entradas de tipo distintas en dos tablas de símbolos distintas
* Pero deberían ser iguales
Equivalencia Estructural
* Si la expresión de tipo de dos tipos tiene la misma construcción, entonces son equivalentes
*...
Regístrate para leer el documento completo.