Prog de sistemas u ii y u iv

Solo disponible en BuenasTareas
  • Páginas : 9 (2171 palabras )
  • Descarga(s) : 0
  • Publicado : 17 de mayo de 2011
Leer documento completo
Vista previa del texto
Unidad V. Análisis semántico
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
*...
tracking img