Procesadores de lenguaje Tema 7 Generación de código intermedio

Documentos relacionados
Generación de Código Intermedio

Tema 7. Generación de código

GENERACIÓN DE CÓDIGO

Un. VI. Generador de código intermedio.

Procesadores de lenguaje Tema 6 La tabla de símbolos

Compiladores: Generación de Código. Pontificia Universidad Javeriana Cali Ingeniería de Sistemas y Computación Prof. María Constanza Pabón

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

Código Intermedio. Compiladores II 1

Tipos De Datos. Numéricos. Alfanuméricos (string) Arreglos (Vectores, Matrices) Estructurados Registros (Def. Por el Archivos Usuario) Apuntadores

2. Se puede aplicar a la representación intermedia un optimizador de código independiente de la máquina.

Lección 2 Introducción al lenguaje C

Generación de Código Intermedio

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

Informática. JavaScript: Lenguaje de programación. Fco J. Martín Mateos Carmen Graciani

Informática General 2016 Cátedra: Valeria Drelichman, Pedro Paleo, Leonardo Nadel, Norma Morales

Unidad II: Análisis semántico

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

PROGRAMACIÓN UNIDADES

Curso de Programación Avanzada en C

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

2. EXPRESIONES 3. OPERADORES Y OPERANDOS 4. INDENTIFICADORES COMO LOCALIDADES DE MEMORIA

El lenguaje C. 1. Identificadores, constantes y variables

Conceptos básicos sobre gramáticas

INSTITUTO POLITECNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA DE BIOTECNOLOGIA DEPARTAMENTO DE CIENCIAS BASICAS

PHP: Lenguaje de programación

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

4. Operadores Operador asignación

LENGUAJE. Tema 2 Elementos de un programa

OPTIMIZACIÓN DE CÓDIGO

Principios de Computadoras II

REPRESENTACIÓN DE DATOS

ANEXO XVII DE LA RESOLUCION N

Programación Estructurada

Programación Orientada a Objetos Sentencias Java Parte I Ing. Julio Ernesto Carreño Vargas MsC.

Introducción a PL/SQL

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

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

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

Tema 4. Operadores y Expresiones

Organización de Computadoras Apunte 3: Sistemas de Numeración: Operaciones Lógicas

Es toda la información que utiliza el computador. Según sea la información que guardemos en los datos, se clasifican en los siguientes tipos:

Expresiones Aritméticas. Programación digital I Escuela de Sistemas Facultad de Ingeniería Gilberto Diaz

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

Operadores y Expresiones

INICIACIÓN A LA PROGRAMACIÓN II

Tema: Análisis Sintáctico

PROGRAMA INSTRUCCIONAL INTRODUCCIÓN A LOS LENGUAJES DE PROGRAMACIÓN

1.1 Tipos de Datos Primitivos. 1.2 Tipos de datos estructurados. 1.3 Definición de estructura de datos

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

ALGORITMOS, ESTRUCTURAS Y PROGRAMACION

OPERADORES Y EXPRESIONES

Capítulo 7 OPERADORES Y EXPRESIONES. Presentación resumen del libro: "EMPEZAR DE CERO A PROGRAMAR EN lenguaje C"

Curso de Java Introducción a la Programación III

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

Estructuras de Control. Secuencia y Selección

Guía práctica de estudio 05: Diagramas de flujo

Área: INFORMÁTICA. Saber- Saber: Identificar DFD como herramienta para escribir los algoritmos de forma lógica.

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

ÍNDICE CAPÍTULO 1 FUNDAMENTOS DE LOS MICROCONTROLADORES

GUÍA BÁSICA DE SCHEME v.4

Tema 3. Tipos de datos simples

UNIVERSIDAD DE LOS ANDES NUCLEO UNIVERSITARIO RAFAEL RANGEL (NURR) DEPARTAMENTO DE FISICA Y MATEMATICA AREA COMPUTACION TRUJILLO EDO.

Fundamentos de Programación. Flujo de Control I: Estructuras selectivas

Ficha de Aprendizaje N 13

Tema 2. El lenguaje JAVA

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

PROGRAMA: COMPUTACION I

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

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

Elementos léxicos del lenguaje de programación C

PROGRAMA DE ASIGNATURA DE PROGRAMACIÓN I

Computación II. Introducción a Visual Basic

Sentencias de Procesamiento Iterativo: while y do-while

Manual de turbo pascal

Procesadores de Lenguaje

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

UNIVERSIDAD NACIONAL AUTÓNOMA DE MÉXICO FACULTAD DE ESTUDIOS SUPERIORES CUAUTITLÁN LICENCIATURA DE INGENIERÍA INDUSTRIAL

Programación n Orientada a Objetos Sentencias Java Parte I. Ing. Julio Ernesto Carreño o Vargas MsC.

$0 Representa al parámetro cero o nombre del programa $1 Representa al parámetro uno $2 Representa al parámetro dos

MASTER PROFESIONAL C# 5 Y ASP.NET MVC 5

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

INTRODUCCION AL PROCESAMIENTO DE DATOS

Procesadores de lenguaje Tema 4 Análisis semántico

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

Carlos Montenegro. Programación Orientada a Objetos Proyecto Curricular de Ingeniería de Sistemas

Cadena de caracteres Numéricas Fecha y hora Booleanas Tipo registro Tipo cursor

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

Tema: Tabla de Símbolos

Exterior del algoritmo. Entorno. Usuario. Procesador. Escribir. v1 v2 v3. Leer. <acción> {; <acción>}

Arquitectura del CPU. Organización del Computador 1 Verano 2016

Organización de Computadoras. Clase 7

Elementos de un programa en C

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

Programcaión Básica. Secuencias de Control y Repetición. Arturo Vega González.

16 Análisis sintáctico I

Fundamentos de Programación Visual Basic

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

Introducción rápida a la programación (estructurada ) con C++

Lenguaje de programación C. Introducción

DESCRIPCIÓN ESPECÍFICA NÚCLEO: Núcleo Sector Comercio y Servicios.

Transcripción:

Procesadores de lenguaje Tema 7 Generación de código intermedio Departamento de Ciencias de la Computación Universidad de Alcalá

Resumen Representaciones intermedias Código de 3 direcciones Cuádruplas Tripletas

Representaciones intermedias Una representación intermedia es una estructura de datos que representa al programa fuente durante el proceso de su traducción a código objeto. Debería reunir las siguientes características : 1. Parecerse al código objeto final. 2. Ser fácil de generar a partir del árbol sintáctico. 3. Ser independiente del entorno de ejecución.

Código de tres direcciones Las instrucciones utilizan tres direcciones de memoria o registros: dos para los operandos y una para el resultado. Normalmente las operaciones se representan de la manera siguiente: resultado = operando1 operador operando2 Es la representación intermedia más extendida.

Código de tres direcciones: Ejemplos (a + b) / (c + e) t1 := a + b t2 := c + e t3 := t1 / t2 z: = x + y + z / y t1 := x + y t2 := t1 + z t3 := t2 / y z := t3

Código de tres direcciones Instrucción Operaciones binarias Operaciones unarias Asignaciones Definir punto Ir al punto Saltos condicionales Ir y volver de un bloque Matrices (arrays) y tablas Registros Indirecciones Explicación x = y op z, en la que op es un operador binario (aritmético, lógico o relacional). x = op y, en la que op es un operador unario (negación lógica, menos unario, operadores de desplazamiento o conversión de tipos, etc.). x = y, operación de copia en la que el valor de y se asigna a x. label etiq, define una etiqueta. goto etiq, salto incondicional. Saltos condicionales como if false x goto etiq. call f, para llamar funciones o acciones, y return, para retornar valores. Asignaciones con índices de la forma x = y[i], en la que se asigna a x el valor de la posición de memoria situado i unidades más allá de la posición y. También x[i] = y. Registros Tratamiento de los campos con registro.camp, en los que el campo tiene el valor guardado a una determinada distancia del comienzo del registro. Asignaciones de direcciones y apuntadores de la forma x = &y, x = *y o *x = y. Ejemplo a = b and c a = c a = c label T2 goto T2 if x = 0 goto T2 call etiqueta x[3] = 5 x = y.dia *x = 6

Código de tres direcciones read x; if 0 < x then fact := 1; repeat fact := fact * x; x := x - 1; until x = 0; write fact; end; 01 read x 02 t1 = 0 < x 03 if false t1 goto L1 04 fact = 1 05 label L2 06 t2 = fact * x 07 fact = t2 08 t3 = x - 1 09 x = t3 10 t4 = x == 0 11 if false t4 goto L2 12 write fact 13 label L1 14 halt

Cuádruplas Una cuádrupla es una estructura de tipo registro con cuatro campos: op, result, arg1 y arg2. Por ejemplo, la proposición de tres direcciones x = y + z se representaría como: (suma, x, y, z). En general, las instrucciones que no requieren todos los campos dejan vacíos los que no utilizan: Ej: Las proposiciones con operadores unarios no utilizan arg2

Tripletas Como las cuádruplas pero utilizando sólo 3 campos: (op, arg1, arg2) Para evaluar una expresión compleja, hay que dividirla en una secuencia equivalente de expresiones simples. Ejemplo: evaluar x = y + 2 requiere dos instrucciones: (suma, y, 2) (asigna, x, <resultado_de_la_suma_anterior>)

Tripletas Para evitar introducir identificadores temporales en la tabla de símbolos, se hace referencia a un valor temporal según la posición (línea) de la proposición que lo calcula. Originalmente, el resultado de una tripleta anterior se asignaría a una variable temporal creada por el compilador: tmp1 = (suma, y, 2) (asigna, x, tmp1) Pero es posible evitar identificadores temporales, usando las propias instrucciones para representan el valor del nombre temporal, eliminando el campo tmp1 en el que se guardaba temporalmente el resultado (por innecesario): (1) (suma, y, 2) (2) (asigna, x, (1))

Comparación tripletas y cuádruplas La diferencia en la implementación es cuestión de mayor o menor indirección: La de tripletas necesita menos espacio y el compilador no genera identificadores temporales, pero cambiar de sitio una proposición que defina un valor temporal exige modificar todas las referencias a ella. Esto representa un inconveniente a la hora de optimizar el código, ya que en cada paso del proceso de optimización hay que cambiar constantemente las proposiciones de lugar. En la práctica se utiliza la notación de cuádruplas como implementación del código de 3 direcciones

Ejemplo - cuádruplas vs. tripletas read x; if 0 < x then fact := 1; repeat fact := fact * x; x := x - 1; until x = 0; write fact; end; (read,x,-,-) (isbigger,t1,x,0) (if_false,t1,l1,-) (assign,fact,1,-) (label,l2,-,) (mult,t2,fact,x) (assign,fact,t2,-) (sub,t3,x,1) (assign,x,t3,-) (isequal,t4,x,0) (if_false,t4,l2,-) (write,fact,-,-) (label,l1,-,-) (halt,-,-,-) (0) (read,x,-) (1) (isbigger,x,0) (2) (if_false,(1),(11)) (3) (assign,fact,1) (4) (mult,fact,x) (5) (assign, fact, (4)) (6) (sub,x,1) (7) (assign, x, (6)) (8) (isequal,x,0) (9) (if_false,(8),(4)) (10) (write,fact,-) (11) (halt,-,-)

Bibliografía Básica: Construcción de compiladores. Principios y práctica. Kenneth C. Louden. Thomson-Paraninfo. 2004. Compiladores: principios, técnicas y herramientas. A.V. Aho, R. Sethi, J.D. Ullman. Addison-Wesley Iberoamerica. 1990.