Sei sulla pagina 1di 28
ANÁLISIS SEMÁNTICO

ANÁLISIS SEMÁNTICO

ANÁLISIS SEMÁNTICO
ANÁLISIS SEMÁNTICO
ANÁLISIS SEMÁNTICO
ANÁLISIS SEMÁNTICO

ANÁLISIS SEMÁNTICO EN PROCESADORES DE LENGUAJE

Es aquélla que computa la información adicional necesaria para el procesamiento de un lenguaje, una
Es aquélla que computa la información
adicional necesaria para el procesamiento de
un lenguaje, una vez que la estructura
sintáctica de un programa haya sido
obtenida.
estructura sintáctica de un programa haya sido obtenida. Es por tanto la fase posterior a la

Es por tanto la fase posterior a la de análisis sintáctico y la última dentro del proceso de síntesis de un lenguaje de programación

Dado el siguiente ejemplo de código en C: superficie = base * altura / 2;

Dado el siguiente ejemplo de código en C:

superficie = base * altura / 2;

− Que todos los identificadores que aparecen

en la expresión hayan sido declarados en el ámbito actual, o en alguno de sus ámbitos (bloques) previos.

− Que la subexpresión de la izquierda sea

semánticamente válida, es decir, que sea un lvalue.

− Que a los tipos de los identificadores base y

altura se les pueda aplicar el operador de multiplicación. Un registro en C, por ejemplo, no sería válido.

− Deberá inferirse el tipo resultante de la

división y comprobarse si éste es compatible con el tipo de superficie para llevar a cabo la asignación.

1.1 Árboles de expresiones.

1.1 Árboles de expresiones. ● Código de nivel del lenguaje en forma de datos. ● Estructura
● Código de nivel del lenguaje en forma de datos. ● Estructura con forma de
● Código de nivel
del lenguaje en
forma de datos.
● Estructura con
forma de árbol.
● Representa y
evalúa una
expresión.

1.1 Árboles de expresiones.

2 características importantes:

Cualquier hoja está etiquetada sólo con un operando.

Cualquier nodo interior n está etiquetado por un operador.

+

5
5

1.1 Árboles de expresiones.

Características a tomar en cuenta al momento de introducir la expresión:

Raíz y nodos intermedios Operador.

Hojas Operando.

Si un operador tiene mayor prioridad que la raíz se coloca como hijo.

Si un operador tiene igual o menor prioridad que un nodo se coloca como padre.

Nodo Subárbol (Hijo).

● Si un operador tiene igual o menor prioridad que un nodo se coloca como padre.

1.1 Árboles

de

expresiones.

1.1 Árboles de expresiones.

1.2 Acciones semánticas de un analizador sintáctico

1.2 Acciones semánticas de un analizador sintáctico Definición de un analizador sintáctico: es la fase del

Definición de un analizador sintáctico: es la fase del analizador que se encarga de chequear el texto de entrada en base a una gramática dada.

1.2 Acciones semánticas de un analizador sintáctico

1.2 Acciones semánticas de un analizador sintáctico ● Acceder a la tabla de símbolos (para hacer

Acceder a la tabla de símbolos (para hacer parte del trabajo del analizador semántico).

Chequeo de tipos (del analizador semántico).

Generar código intermedio.

Generar errores cuando se producen.

Realiza casi todas las operaciones de la compilación.

1.2 Acciones semánticas de un analizador sintáctico

La gramática que acepta el analizador sintáctico es una gramática de contexto libre:

Gramática: G (N, T, P, S)

N = No terminales.

T = Terminales.

P = Reglas de Producción.

S = Axioma Inicial

1.3 Comprobaciones de tipos en expresiones

Comprobaciones estáticas

1.3 Comprobaciones de tipos en expresiones Comprobaciones estáticas Comprobaciones dinámicas

Comprobaciones dinámicas

1.3 Comprobaciones de tipos en expresiones

Verificación de tipos

1.3 Comprobaciones de tipos en expresiones Verificación de tipos Inferencia de tipos
1.3 Comprobaciones de tipos en expresiones Verificación de tipos Inferencia de tipos
1.3 Comprobaciones de tipos en expresiones Verificación de tipos Inferencia de tipos
1.3 Comprobaciones de tipos en expresiones Verificación de tipos Inferencia de tipos

Inferencia de tipos

1.4 Pila semántica en un analizador sintáctico.

Las pilas son estructuras de datos que se utilizan generalmente para simplificar ciertas operaciones de programación.

para simplificar ciertas operaciones de programación. Dos operaciones básicas: ● Push (para introducir un

Dos operaciones básicas:

Push (para introducir un elemento).

Pop (para extraer un elemento).

1.4 Pila semántica en un analizador sintáctico.

Características:

LIFO.

Recursividad.

Información Semántica.

Un solo lenguaje.

Hace posible al analizador sintáctico acceder a la tabla de símbolos.

Semántica. ● Un solo lenguaje. ● Hace posible al analizador sintáctico acceder a la tabla de

1.4 Pila semántica en un analizador sintáctico.

Bottom up.

Principio de muchos años para realizar una pila semántica.

Elementos funcionales pequeños.

Puede llegar a encubrir errores como una ciudad encubre a fugitivos.

● Elementos funcionales pequeños. ● Puede llegar a encubrir errores como una ciudad encubre a fugitivos.

1.4 Pila semántica en un analizador sintáctico.

Top down.

Método que divide problemas en subproblemas.

Diseño descendente = método para resolver problema lenguaje para computadora.

problemas en subproblemas. ● Diseño descendente = método para resolver problema → lenguaje para computadora.

1.4 Pila semántica en un analizador sintáctico.

Reglas semánticas.

Conjunto de normas y especificaciones dadas por la sintaxis.

Asignan significado lógico a expresiones sintaxis del lenguaje.

Puede tener efectos colaterales.

● Asignan significado lógico a expresiones → sintaxis del lenguaje. ● Puede tener efectos colaterales.

1.4 Pila semántica en un analizador sintáctico.

Ventajas.

Detecta la validez semántica de las sentencias aceptadas.

Las rutinas semánticas realizan la evaluación de los atributos de las gramáticas.

Permite agilizar la fase del análisis sintáctico.

Las rutinas semánticas suelen hacer uso de una pila asociada a operadores.

Guardan el estado de las variables o tokens.

Su implementación suele ser relativamente fácil.

1.4 Pila semántica en un analizador sintáctico.

Desventajas.

Problemas de integración son sumamente costosos.

Necesidad de una memoria auxiliar que guarde los datos para comparar.

Tratar de eliminar un elemento de una pila semántica vacía.

El tamaño de la pila.

Avalancha de errores.

Tratar de eliminar un elemento de una pila semántica vacía. ● El tamaño de la pila.
1.5 Esquema de traducción
1.5 Esquema de traducción

1.6 Generación de la tabla de símbolo y tabla de direcciones.

Tablas de identificadores y tablas de nombres.

Estructura de datos relacionada a las fases de compilación.

Registra información que se comparte entre varias etapas.

Permite administrar los recursos asociados a las entidades.

Funciones principales:

Efectuar chequeos semánticos.

Generación de código.

asociados a las entidades. Funciones principales: ● Efectuar chequeos semánticos. ● Generación de código.

1.6 Generación de la tabla de símbolo y tabla de direcciones.

Se realizan insertando o recuperando:

Nombre.

Tipo.

Dirección de almacenamiento.

Dimensión de una variable.

insertando o recuperando: ● Nombre. ● Tipo. ● Dirección de almacenamiento. ● Dimensión de una variable.

1.6 Generación de la tabla de símbolo y tabla de direcciones.

Estructura.

Valor de atributo | Valor de atributo | Valor de atributo | Valor de atributo → Variable

Valor de atributo | Valor de atributo | Valor de atributo | Valor de atributo → Variable

Valor de atributo | Valor de atributo | Valor de atributo | Valor de atributo → Variable

Valor de atributo | Valor de atributo | Valor de atributo | Valor de atributo → Variable

Valor de atributo | Valor de atributo | Valor de atributo | Valor de atributo → Variable

Las clases de los atributos dependen del lenguaje.

1.6 Generación de la tabla de símbolo y tabla de direcciones.

La tabla de símbolos consume gran parte del tiempo de compilación.

de la tabla de símbolo y tabla de direcciones. La tabla de símbolos consume gran parte

1.6 Generación de la tabla de símbolo y tabla de direcciones.

Ejemplo.

El analizador realiza esta identificación de lexemas de la siguiente instrucción:

velocidad = distancia / tiempo

1. velocidad id1

2. = =

3. distancia id2

4. / /

5. tiempo id3

1.6 Generación de la tabla de símbolo y tabla de direcciones.

El código generado por el analizador léxico se representa como:

id1=id2/id3

por el analizador léxico se representa como: ⟨ id │ 1 ⟩ 〈 = 〉 ⟨

1.7 Manejo de errores semánticos

1.7 Manejo de errores semánticos
Hay, pues, dos criterios a seguir a la hora de manejar errores: Pararse al detectar

Hay, pues, dos criterios a seguir a la hora de manejar errores:

Pararse al detectar el primer error.
Pararse al detectar el primer
error.
Detectar todos los errores de una pasada.
Detectar todos los errores de una
pasada.