Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas

Documentos relacionados
Generación de Código Intermedio

Tema 5 Tabla de Símbolos

2.2 Nombres, Ligado y Ámbito

Procesadores de Lenguaje

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

Las Etapas de la Compilación

16 Análisis sintáctico I

Unidad II: Análisis semántico

Agradecimientos. Nota de los autores. 1 Problemas, algoritmos y programas 1

Nombres, Ligaduras, Chequeo de Tipos y Alcance. Luis Garreta (Basados en el libro de Robert Sebesta)

Diseño de compiladores. Organización de memoria. Organización de memoria. Organización de memoria. Zona de código 04/05/2014 ORGANIZACIÓN DE MEMORIA

Unidad I Introducción a la programación de Sistemas. M.C. Juan Carlos Olivares Rojas

Unidad I: Análisis semántico

Unidad V Análisis Semántico. M.C. Juan Carlos Olivares Rojas

Un. VI. Generador de código intermedio.

Contenido. Capítulo 1. Teoría de conjuntos. 1. Capítulo 2. Lenguaje. 39. Capítulo 3. Lenguajes formales. 55

Lenguaje de programación. COMPILADORES Unidad I: Introducción al proceso de compilación

Conceptos básicos sobre gramáticas

Lenguajes y Compiladores Análisis Sintáctico Parte I. Teoría Lenguajes 1

PROGRAMA DE LABORATORIO SECCIÓN: ÁREA A LA QUE PERTENECE: POS-REQUISITO: AUXILIAR:

ALGORÍTMICA. Dpto. Ingeniería de Sistemas y Automática Facultad de Ciencias Universidad de Valladolid.

Tema 7. Generación de código

Base de Datos Oracle 10g: Programación con PL/SQL Código: D Duración: 5 días (40 horas)

Tema 8 Gestión de la memoria en tiempo de ejecución.

PHP 7 Desarrollar un sitio web dinámico e interactivo

Compiladores: Análisis Sintáctico. Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

OPTIMIZACIÓN DE CÓDIGO

Tema 4: Gramáticas independientes del contexto. Teoría de autómatas y lenguajes formales I

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tema V Generación de Código

Tema 6 Organización y gestión de la memoria

APUNTADORES. Un apuntador es un objeto que apunta a otro objeto. Es decir, una variable cuyo valor es la dirección de memoria de otra variable.

Introducción a Java LSUB. 30 de enero de 2013 GSYC

CUP. Diseño de compiladores. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP. Estructura del archivo CUP 20/04/2014

Introducción a PL/SQL

Desarrollo del Programa Docente de Procesadores del Lenguaje

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES TRABAJO DE PRÁCTICAS. Convocatoria de junio de 2013

Estructuras de Datos Declaraciones Tipos de Datos

Lenguajes de Programación. Juan Zamora O. Semestre II Nombres, Ambitos y Ligados

Procesadores de lenguaje Tema 6 La tabla de símbolos

Processadors de Llenguatge II. Compiladores

Tabla de Símbolos. Programación II Margarita Álvarez

ANEXO XVII DE LA RESOLUCION N

Compiladores e intérpretes Análisis Léxico I. Análisis Léxico I

Tabla de Símbolos. Programación II Margarita Álvarez

ASIGNATURA: ESTRUCTURA DE DATOS II

Algoritmos y programas. Algoritmos y Estructuras de Datos I

Tema 5. Estructura de datos Pila

Tema 8: Tipos de datos. Sesión 24: Tipos de datos (1)

Programación Estructurada

2. Codificar de forma sistemática la secuencia de instrucciones en un lenguaje.

TEMA 3. CONCEPTOS FUNDAMENTALES DEL NIVEL DEL SISTEMA OPERATIVO. Definición y objetivos de un S.O

Algoritmos y Lenguajes de Programación

1. Computadores y programación

Elementos de un programa en C

Tema 3: Lenguaje ensamblador. La primera abstracción de la máquina para el programador

UML Unifield Modeling Languaje

PROCESADORES DE LENGUAJES I PRÁCTICA DE LABORATORIO 4

1

Código Intermedio. Compiladores II 1

Tema 2 Introducción a la Programación en C.

UNIVERSIDAD NACIONAL DE EDUCACIÓN A DISTANCIA Escuela Técnica Superior de Ingeniería Informática Procesadores de Lenguajes. Tema 3.

Lección 2 Introducción al lenguaje C

Sistemas operativos. Tema 10: Sistemas de ficheros

Construyendo Programas más Complejos

INDICE Prologo Capitulo 1. Algoritmos y programas Capitulo 2. La resolución de los problemas con computadoras y las herramientas de programación

Es un conjunto de palabras y símbolos que permiten al usuario generar comandos e instrucciones para que la computadora los ejecute.

TEMA 2 Introducción a C# ANÁLISIS Y DESARROLLO DE APLICACIONES INFORMÁTICAS Curso 2010/2011

Tema: Tabla de Símbolos

Todo programa en 'C' consta de una o más funciones, una de las cuales se llama main.

Unidad Didáctica 2. Elementos básicos del lenguaje Java Tipos, declaraciones, expresiones y asignaciones

MASTER PROFESIONAL C# 5 Y ASP.NET MVC 5

Programación estructurada (Lenguajes de programación)

Asignatura: Entornos de programación Entornos orientados a estructura

Programación con Visual C#

Elementos Diagramas de Clases Clase:

GENERACIÓN DE CÓDIGO INTERMEDIO

Unidad 4. Autómatas de Pila

Pruebas de escritorio

UNIDAD V. Analisis Semantico. 5.1 Introduccion. Analizador Semántico. Verifica que el significado de las construcciones del lenguaje tengan sentido.

TEMA 5: Subprogramas, programación modular

Normas de estilo para la codificación de programas

LABORATORIO DE PROCESADORES DE LENGUAJE Curso: Práctica 2: Analizador léxico/sintáctico/semántico con Flex y Bison

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

UNIVERSIDAD DE GUADALAJARA

Tema I: Introducción a las bases de datos. Curso Introducción a las bases de datos.

Seminario de introducción a Flex

INTRODUCCIÓN A LA PROGRAMACIÓN EN FORTRAN. Métodos Numéricos Carlos Zotelo

Tema 5 - Lenguajes de programación 15/03/2011. Lenguajes de programación. Tipología y evolución. Compilación y depuración.

INTRODUCCIÓN...9 CAPÍTULO 1. ELEMENTOS DE UN PROGRAMA INFORMÁTICO...11

Manual de turbo pascal

INICIACIÓN A LA PROGRAMACIÓN 1ª parte

Capítulo 9. Introducción a los lenguajes formales. Continuar

LENGUAJE. Tema 2 Elementos de un programa

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.

Colección de Tesis Digitales Universidad de las Américas Puebla. Romero Martínez, Modesto

LENGUAJES JÓVENES PROGRAMADORES

Capítulo 5: Traducción Dirigida por Sintaxis

Procesos y Memoria. Administración de Memoria 26/10/2010 SISTEMAS OPERATIVOS


Transcripción:

Análisis semántico Tabla de símbolos, chequeo de tipos y representaciones internas Análisis semático c 2001 José Fortes Gálvez p.1

Análisis?... semántico? La semántica corresponde al significado asociado a las estructuras formales (sintaxis) del lenguaje. Análisis semático c 2001 José Fortes Gálvez p.2

Análisis?... semántico? La semántica corresponde al significado asociado a las estructuras formales (sintaxis) del lenguaje. Como las gramáticas (E)BNF además normalmente limitadas a LR o LL no pueden describir todos los elementos sintácticos del lenguaje, se hace preciso algún análisis adicional... Análisis semático c 2001 José Fortes Gálvez p.2

Análisis?... semántico? La semántica corresponde al significado asociado a las estructuras formales (sintaxis) del lenguaje. Como las gramáticas (E)BNF además normalmente limitadas a LR o LL no pueden describir todos los elementos sintácticos del lenguaje, se hace preciso algún análisis adicional... Así, se denomina tradicionalmente análisis semántico a todo aquello que forma parte del front end más allá de lo que la gramática utilizada nos permite: Tabla de símbolos Chequeos de tipos (y otros) Generación de representaciones internas Análisis semático c 2001 José Fortes Gálvez p.2

Ejemplo de extensión del análisis sintáctico La tabla de símbolos permite que el analizador léxico devuelva un token distinto según la categoría del identificador en ese contexto. Con esta técnica: En el fondo, estamos introduciendo dependencia del contexto sobre una gramática independiente del contexto. Por tanto, aumentamos la potencia del análisis sintáctico Podemos resolver algunos conflictos y así evitar modificar la gramática o el lenguaje Análisis semático c 2001 José Fortes Gálvez p.3

Tabla de símbolos Va conteniendo un registro por cada identificador definido por el programador (o predefinidos), añadiéndose información asociada: Ristra del identificador ( mayúsculas y minúsculas?) Categoría: variable, constante, tipo, campo, procedimiento, función, parámetro, clase, etiqueta, módulo, macro, etc. A qué ámbito pertenece (número) Cuál es su tipo (enlace) Otra información: tamaño, ubicación, valor, parámetros o campos (enlaces), refencia adelante o no, ámbito que define, etc. Análisis semático c 2001 José Fortes Gálvez p.4

Estructura de la tabla de símbolos Su estructura lógica viene determinada por: El tipo de ámbito (estático o dinámico) Los mecanismos de ámbito del lenguaje: procedimientos, bloques, herencia, módulos, espacios de nombres, registros, with,... Si se da más de una pasada. Compilación separada: ficheros con tablas Su implementación física más eficiente suele ser la de una tabla hash, asociada a pila de ámbitos activos. Truco: mover (insertar, al menos) el elemento actual a la cabeza de la lista Las ristras (identificadores, constantes) pueden ir en lista(s) aparte. Análisis semático c 2001 José Fortes Gálvez p.5

Una buena función hash Si llamamos a los códigos de los caracteres y longitud de la ristra: la Pueden usarse valores de (más rápido pero peor distribución) (preferentemente) o Análisis semático c 2001 José Fortes Gálvez p.6

Chequeos de tipos (y otros) Un compilador debe realizar una serie de chequeos estáticos, como chequeos de tipos: Consistencia: unicidad, existencia, no-ciclicidad,... Equivalencia y compatibilidad de tipos Conversión explícita [cast] o forzada [coercion] Inferencia de tipos (en valores) Sobrecarga de funciones y operadores Funciones polimórficas, u otros (p.e., consistencia de instrucciones de control). En otros casos, debe generar código para realizar chequeos dinámicos (p.e., valor dentro de rango). Análisis semático c 2001 José Fortes Gálvez p.7

Definiciones de tipos También llamadas expresiones de tipos, en las que el programador desarrolla los componentes de la estructura. Cuestiones: Puede ser conveniente construir un árbol/grafo: En caso de equivalencia estructural Para comprobación de no-ciclicidad: type a=b; b=a; (Descomponer en) subtipos anónimos Referencias adelante o declaraciones de tipos, necesarias para definiciones recursivas: entrada en tabla provisionalmente vacía para tipo base. Análisis semático c 2001 José Fortes Gálvez p.8

El árbol sintáctico abstracto (1/2) En inglés (abstract) syntax tree, AST, para distinguirlo del árbol del análisis según la gramática [parse tree]. if(a<3) if-then b=2*a; ; < := a 3 b * 2 a Análisis semático c 2001 José Fortes Gálvez p.9

El árbol sintáctico abstracto (2/2) Representación compacta correspondiente a una gramática sin limitaciones de método de análisis, caracterizada por que los nodos interiores son operadores, en sentido amplio. Útil para ser anotado o decorado con atributos en recorridos ulteriores, y a partir de ahí: Realizar chequeos Generar código (intermedio) Con frecuencia se puede simular su recorrido (sin construirlo) durante el análisis sintáctico. Análisis semático c 2001 José Fortes Gálvez p.10

Representaciones intermedias (1/2) Constituye la frontera entre front-ends y back-ends, y permite desacoplar los diseños de unos y otros. Orientadas a: 1. Su optimización (instruccines claras y simples) 2. Generar código de distintas máquinas objeto El diseño debe permitir su fácil generación por el analizador semático. Análisis semático c 2001 José Fortes Gálvez p.11

Representaciones intermedias (2/2) Podemos clasificarlas por su nivel de abstracción (distancia a la máquina objeto real): Alto: próxima al árbol abstracto, con correspondencia con las estructuras del lenguaje Medio: instrucciones de máquina virtual (a veces realmente implementada: P-code, bytecode), tales como tuplas de tres direcciones Bajo: máquina próxima al ensamblador, con un amplio número de registros Algunos compiladores pasan por varias representaciones de distintos niveles de abstracción. Análisis semático c 2001 José Fortes Gálvez p.12

!!! " # "!! ( ' & ( ' & % $ ) -, Cuádruplas Operaciones con hasta tres direcciones, que pueden ser variables del programa o temporales: Ó ó,..., + ) )* ó # ó + ) )*,..0/ Podemos entenderlas como una linealización de un cierto tipo de árbol abstracto. Análisis semático c 2001 José Fortes Gálvez p.13

Ejemplo de cuádruplas for i in a..b do... endfor;... := i a := t8 b if > goto i t8 L5 L4:... if = goto i t8 L5 := + i i 1 goto L4 L5:... Análisis semático c 2001 José Fortes Gálvez p.14

C/C++ como lenguaje objeto Generar cuádruplas en C/C++ aporta ventajas: Nos ahorramos programar (al menos inicialmente) la generación de código objeto real Permite descargar en C/C++ la mayor parte de la gestión de pila, heap, E/S,... Permite aprovechar la optimización de un buen compilador de C/C++ Independencia de la máquina objeto (o casi: tamaños de referencias, p.e.) y del s.o. con los inconvenientes de que la eficiencia de los ejecutables no será óptima y de estar sujetos a las limitaciones del compilador de C/C++. Análisis semático c 2001 José Fortes Gálvez p.15

Cuádruplas en C/C++ Sólo instrucciones elementales de hasta 3 direcciones. Posible implementación para lenguajes imperativos: Una función void C/C++ por cada rutina del lenguaje fuente Se crean localmente variables temporales conforme se necesitan (C++ más práctico); el optimizador las podrá eliminar en su caso Una union de vectores de tipos básicos contendrá las variables de cada ámbito, incluyendo las auxiliares como enlaces, parámetros,... Si áreas locales englobadas: gestionar pila de punteros usando enlaces estáticos o display Análisis semático c 2001 José Fortes Gálvez p.16

Conclusión Elementos mínimos para la práctica de análisis semántico: Implementar una tabla de símbolos (no es necesario que sea hash) Implementar al menos parte del chequeo de tipos del lenguaje Como mínimo, para la prática de generación de código, cuádruplas en C/C++. Se valorarán especialmente aportaciones adicionales. Análisis semático c 2001 José Fortes Gálvez p.17