Introducción. El proceso de traducción

Documentos relacionados
Las Etapas de la Compilación

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

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

Unidad II: Análisis semántico

Tema 7. Generación de código

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

Processadors de Llenguatge II. Compiladores

OPTIMIZACIÓN DE CÓDIGO

Un. VI. Generador de código intermedio.

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

Toda copia en PAPEL es un "Documento No Controlado" a excepción del original.

Unidad I: Análisis semántico

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

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

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

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

C1 INTRODUCCIÓN AL LENGUAJE C. Fundamentos de Informática Departamento de Ingeniería de Sistemas y Automática. EII. Universidad de Valladolid

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

Código Intermedio. Compiladores II 1

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

Enteros. Son los números que no contienen componentes fraccionarios y, por tanto, no contienen punto decimal.

Tema V Generación de Código

Estructuras de Datos Declaraciones Tipos de Datos

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

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

Introducción a compiladores. Universidad Autónoma de Aguascalientes Prof. Eduardo Serna-Pérez Correo-e: eduardo.serna@gmail.com

Tema: Autómata de Pila

Profs. Carlos Pérez y Ricardo Monascal

Sistema electrónico digital (binario) que procesa datos siguiendo unas instrucciones almacenadas en su memoria

Construcción de tablas de análisis sintáctico LL(1)

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

4 o Ingeniería Informática

SISTEMAS INFORMÁTICOS PROGRAMACION I - Contenidos Analíticos Ing. Alejandro Guzmán M. TEMA 2. Diseño de Algoritmos

GRAMATICAS LIBRES DEL CONTEXTO

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

Tema: Tabla de Símbolos

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

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

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

Algoritmos y Lenguajes de Programación

Procesadores de lenguaje Tema 2 Análisis léxico

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

GENERACIÓN DE CÓDIGO

Elementos de un programa en C

TEMA 3: El proceso de compilación, del código fuente al código máquina

1. Computadores y programación

Tema 3. Análisis sintáctico descendente

Procesadores de lenguaje Tema 6 La tabla de símbolos

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

Construyendo Programas más Complejos

LEX. Las definiciones y subrutinas son opcionales. El segundo %% es opcional pero el primer %% indica el comienzo de las reglas.

Procesadores de lenguaje Tema 1: Introducción a los compiladores

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

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

Tema: Generación de código intermedio

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

Introducción a la programación

Tema 1.3. Un lenguaje mínimo y su procesador: Restricciones contextuales

GENERACIÓN DE CÓDIGO INTERMEDIO

JavaCC Parte I. 1 Compiladores / Guía VII / Ciclo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores.

Generador de analizadores léxicos FLEX

INICIACIÓN A LA PROGRAMACIÓN 1ª parte

LA ESTRUCTURA DE DATOS PILA EN JAVA. CLASE STACK DEL API JAVA. EJEMPLO Y EJERCICIOS RESUELTOS. (CU00923C)

Universidad de Costa Rica. Escuela de Ciencias de la Computación e Informática CI-2700 TÓPICOS ESPECIALES - COMPILADORES.

Programación de Sistemas Depuradores (Debugger) MIS. Lizbeth Hdz. Glz.

Las optimizaciones pueden realizarse de diferentes formas. Las optimizaciones se realizan en base al alcance ofrecido por el compilador.

Lenguajes (gramáticas y autómatas)

DISEÑO DEL SISTEMA DE INFORMACION (DSI)

Técnicas de Programación

Síntesis arquitectónica y de alto nivel

TEMA 1: INTRODUCCIÓN

INTRODUCCIóN A LA PROGRAMACIóN APUNTES DE JAVA APUNTES DE JAVA

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

INSTITUTO POLITÉCNICO NACIONAL

Capítulo 5: Traducción Dirigida por Sintaxis

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.

LENGUAJE. Tema 2 Elementos de un programa

Introducción a la Computación. Capítulo 10 Repertorio de instrucciones: Características y Funciones

2.2 Nombres, Ligado y Ámbito

Curso de Programación Avanzada en C

Manual de turbo pascal

INDICE Parte I. Conceptos 1. El estudio de los lenguajes de programación 2. Cuestiones de diseño de lenguajes

Estructuras en LabVIEW.

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior. Trabajo Final

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

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

Estudiemos el siguiente problema, propuesto por Wirth y desarrollado por Dijkstra: Una lista de las primeras secuencias que cumplen es:

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

Fundamentos de Ciencias de la Computación Trabajo Práctico N 2 Lenguajes Libres del Contexto y Sensibles al Contexto Segundo Cuatrimestre de 2002

Anexo: Lenguajes de Scripting

Java para programadores

ESTRUCTURAS REPETITIVAS EN PHP

Capítulo 16. Diagrama de Clases UML

JAVA 7 Los fundamentos del lenguaje Java

TEMA 4. ARQUITECTURA IA-64

Unidad III: Lenguaje de presentación

Universidad de Cantabria. Facultad de Ciencias Ingeniería en Informática. Ingeniería del Software II

Variables. Una variable no es más que un nombre simbólico que identifica una dirección de memoria: vs.

Algoritmos y Programas

EL PROCESO DE DISEÑO DEL SOFTWARE

Transcripción:

Toda compilación es un proceso de transformación paulatina que convierte un programa escrito en un lenguaje fuente de alto nivel en otro programa escrito en un lenguaje objeto de bajo nivel. Ese proceso se articula Análisis léxico Análisis sintáctico Análisis Generación de código intermedio Generación de código final While ( a > b ) do e l i h w <WHILE, PR> S E > E S E > E BRZ t3 L1 0100 0001 0100 0000 0001 0010

I. Análisis léxico El analizador léxico (scanner) va leyendo caracteres del fichero hasta encontrar una entidad con significado léxico. Estas entidades se llaman tokens y son una estructura de datos que contiene información acerca del mismo (tipo, lexema, número de fila y columna, valor, etc.) La construcción de analizadores léxicos suele hacerse mediante herramientas que hay que configurar indicando el tipo de token que es necesario emitir para cada posible patrón léxico while : <WHILE, PR> do : <DO, PR> l (l d)* : <a, ID> While ( a > b ) do e l i h w <WHILE, PR>

II. Análisis sintáctico El analizador sintáctico (parser) va pidiendo tokens al analizador léxico y los va organizando en frases de acuerdo a las reglas de construcción gramatical del lenguaje. Como resultado genera un árbol de análisis sintáctico que representa todo el programa en memoria La construcción de analizadores sintácticos suele hacerse mediante herramientas que hay que configurar indicando la colección de reglas sintácticas que definen las construcciones del lenguaje gramaticalmente correctas S ::= SIf Swhlile SWhile ::= while PI E PD do S; E ::= E + E E ::= E * E E ::= E > E E ::= E < E E ::= id SWhile E > E <:=, ASIG> <a, ID> <DO, PR> <), PD> <b, ID> <>, GT> <a, ID> <(, PI> <WHILE, PR>

III. Análisis El analizador se encarga de gestionar la declaración de constantes, funciones, procedimientos y variables y de comprobar la corrección de tipos a lo largo de todo el programa. Como resultado se obtiene un árbol de análisis sintáctico anotado, con atributos en cada uno de sus nodos La implementación del analizado se realiza insertando acciones semánticas en las partes derechas de las reglas de producción gramatical S ::= SIf Swhlile SWhile ::= while PI E PD do S; {: if (E.tipo!= booleano) error (); :} SWhile E > E SWhile E > E

IV. Generación de código intermedio El generador de código intermedio traduce la representación arborescente del programa en una secuencia ordenada de instrucciones llamadas cuádruplas próximas al lenguaje máquina. Se trata de un lenguaje abstracto y genérico que aún mantiene las referencias simbólicas a los elementos declarados en el programa (variables, parámetros, funciones, etc.) La implementación del generador de código intermedio se realiza insertando acciones en las partes derechas de las reglas de producción que acumulan la traducción parcial del subárbol en cada nodo exp ::= exp:e1 > exp:e2 {: e.código = e1.código + e2.código + CMP e1.temp r2.temp e.temp :}; SWhile E > E BRZ t3 L1

V. Optimización de código intermedio En los compiladores comerciales es frecuente optimizar el resultado de la fase anterior para hacer el programa más compacto y más rápido. Suelen aplicarse estrategias de transformaciones heurísticas y elementales que ofrecen buenos resultados WHILE (A>B) AND (A<2*B-5) DO A:=A+B L1: IF A>B GOTO L2 GOTO L3 L2: T1 := 2*B T2 := T1 5 IF A< T2 GOTO L4 GOTO L3 L4: A := A + B GOTO L1 L3: Optimización L1: IF A<=B GOTO L2 T1 := 2*B T2 := T1 5 IF A>= T2 GOTO L2 A := A + B GOTO L1 L2: BRZ t3 L1 Optimización Código intermedio BRZ t3 L1

VI. Una vez que el código intermedio ha sido generado y optimizado pueden resolverse las referencias simbólicas a posiciones de memoria física y a recursos de la máquina (registros, pila, etc.). Además debe traducirse cada cuarteto a sus equivalentes instrucciones en código máquina La traducción a código final se encarga de hacerla una rutina de traducción ubicada en la acción semántica final ubicada al final de la regla de producción del axioma BRZ t3 L1 0100 0001 0100 0000 0001 0010

Etapas de compilación Etapa de análisis Etapa de síntesis While ( a > b ) do e l i h w <WHILE, PR> S E > E S E > E BRZ t3 L1 0100 0001 0100 0000 0001 0010 Expertos en lenguajes Independencia de arquitectura Dependencia de lenguaje Optimización de lenguajes Expertos en arquitecturas Dependencia de arquitectura Independencia de lenguaje Optimización de ejecución

Equipos de compilación Pascal While ( a > b ) do while ( a > b ) a++; C M Equipo de Lenguaje x Intel BRZ t3 L1 Solaris N Equipo de arquitectura Optimización Código intermedio Optimización Código intermedio

Artefactos de compilación A lo largo de todo el proceso de compilación se una colección de artefactos para dar soporte al mismo. A lo largo del curso los estudiaremos en detalle. Dos son de vital importancia I. Tabla de símbolos La tabla de símbolos se utiliza para gestionar todos los elementos declarados por programador (constantes, tipos, variables, funciones y procedimientos) Fase Descripción En compiladores antiguos utilizado para reconocer palabras clave Registra los elementos declarados por el programador y los consulta para efectuar la comprobación de tipos Se consulta para conocer el espacio de memoria que debe reservarse para gestionar la activación de subrutinas y para determinar el ámbito de declaración de los elementos Se utiliza para traducir las referencias simbólicas a posiciones de memorial Tabla de símbolos Optimización Código intermedio

Artefactos de compilación A lo largo de todo el proceso de compilación se una colección de artefactos para dar soporte al mismo. A lo largo del curso los estudiaremos en detalle. Dos son de vital importancia II. Gestor de errores Las tres primeras fases pueden generar errores durante el proceso de compilación. El gestor de errores se encarga de emitir mensajes de los mismos para informar al programador While ( a > b ) Whiñe ( a > b ) do While ( a > b ) do a := a + c ; Carácter ñ no válido SWhile ::= WHILE e DO s Gestor de errores Se esperaba un entero en expresión de suma