Tema: Generación de código intermedio

Documentos relacionados
Tema: Autómata de Pila

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

Tema: Tabla de Símbolos

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

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

Tema: INTÉRPRETE ENSAMPOCO/3

GUIA 2: Repaso sobre uso de C#. Funciones, métodos y arreglos.

Tema: Configuración de red AD-HOC

Tema: Clases y Objetos en C#. Parte II.

Electrónica II. Guía 4

Tema: Fuente de Alimentación de Rayos X

Procesos de Fabricación I. Guía 1 SISTEMAS DE CONTROL HIDRÁULICO Y NEUMÁTICO

Tema: Herramientas UML, Análisis y diseño UML

Pontificia Universidad Católica del Ecuador

Tema: Herramientas UML, Análisis y diseño UML

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

Unidad II: Análisis semántico

Un. VI. Generador de código intermedio.

Procesos de Fabricación I. Guía 1 1 SISTEMAS DE CONTROL HIDRÁULICO Y NEUMÁTICO

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

UNIVERSIDAD DE GUADALAJARA

Tema V Generación de Código

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

Java Avanzado Facultad de Ingeniería. Escuela de computación.

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

Procesos de Fabricación I. Guía 1 1 ESTUDIO DEL TRABAJO INDUSTRIAL

Objetivo. Introducción. Tema: GENERACION DE CODIGO. Compiladores, Guía 11 1

PROGRAMA ANALÍTICO DE ASIGNATURA

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

: Algorítmica y Estructura de Datos I

Tema: Excel Formulas, Funciones y Macros

Java Avanzado. Guía 1. Java Avanzado Facultad de Ingeniería. Escuela de computación.

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

Tema: S7-1200, Valores Analógicos.

Procesos de Fabricación I. Guía 1 1 SISTEMAS HIDRÁULICOS Y NEUMÁTICOS.

Tema: Punteros a Objetos. Puntero this.

ARQUITECTURA DE COMPUTADORAS II. Propósito del curso : Ingeniería Ingeniería en Sistemas. Hardware. Clave de la materia: 413

Caracteres y Cadenas Conversión de Datos Funciones y procedimientos Archivos cabecera. Fundamentos de programación

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

FACULTAD DE INGENIERÍAS INGENIERIA DE SISTEMAS ARQUITECTURA DEL COMPUTADOR TECNICO

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

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

Laboratorio de Diseño de Robots Móviles Practica No. 2 Sistema mínimo del microcontrolador PIC16F877

PROCESADORES DE LENGUAJE EXAMEN FINAL 8-JUNIO-07

Construyendo Programas más Complejos

Procesos de Fabricación I. Guía 1 MOTORES DE COMBUSTION INTERNA I

Tema: Perdidas en Cableado Coaxial

Nombre de la asignatura: Programación Básica. Créditos: Objetivo de aprendizaje

Tema: Repaso sobre el uso del IDE de Microsoft Visual C#.

Práctica 3. Paso de parámetros entre subrutinas. 3. Consideraciones sobre el paso de parámetros

Funciones como Subprogramas en C++

Tema: S7-200, Escalado de Valores analógicos

CARRERA DE INGENIERÍA EN SISTEMAS COMPUTACIONALES SYLLABUS ARQUITECTURA DE COMPUTADORES

Tema: Materiales y equipos para la manipulación de fibra óptica.

Tema: Entorno a C# y Estructuras Secuenciales.

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

Curso de Programación en C. Licenciatura, FCQeI. APUNTADORES.

La última versión disponible cuando se redactó este manual era la 5 Beta (versión ), y sobre ella versa este manual.

UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS TÉCNICO EN CONTROL DE LA CALIDAD

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

Tema: CREACIÓN DE DIAGRAMAS ESQUEMATICOS CON MICROSOFT VISIO

Sistemas. POSTREQUISITO: CATEGORÍA: Obligatorio SECCION: A HORAS POR SEMANA

Tema 7. Generación de código

Universidad Católica de Santiago del Estero Facultad de Matemática Aplicada Carrera de Ingeniería en Electrónica

Manual de turbo pascal

1 Fuente Trifásica ST M. 1 Motor asíncrono de jaula de ardilla 1 Variador de velocidad G110 de Siemens 1 Alambre, tenazas.

Jesús Manuel Carrera Velueta José Juan Almeida García Fecha de elaboración: Mayo 6 de 2010 Fecha de última actualización:

SILABO DE ADMINISTRACION DE LA PRODUCCION

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

Sistemas Operativos Practica 1: procesos y concurrencia.

ENTORNO DE DESARROLLO Y COMPILACIÓN DE PELLES C

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

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

Procesadores de lenguaje Tema 6 La tabla de símbolos

Tema: Introducción al IDE de Microsoft Visual C#.

Qué es un programa informático?

Computadora y Sistema Operativo

Procesos de Fabricación I. Guía 1 MOTORES DE COMBUSTION INTERNA I

Unidad I: Organización del Computador. Ing. Marglorie Colina

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

TEMA 2. EL LENGUAJE C. ELEMENTOS BÁSICOS

Sobre cómo dividir un programa ensamblador x86 (modo Real) en módulos compilables por separado.

Código Intermedio. Compiladores II 1

Amplificador inversor y no inversor

TEMA 4. ARQUITECTURA IA-64

Técnicas de Programación

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

MINISTERIO DE SALUD Y PROTECCIÓN SOCIAL BOGOTÁ, AGOSTO DE 2015

P L A N I F I C A C I O N

Tema: Configuración de Redes PAN

Elementos de un programa en C

TAREA 1 ARITMETICA PARA BCD Y ASCII.

GUÍA DOCENTE Fundamentos de Computadores

Guía 3 1. Objetivo General Conocer las actividades básicas de gestión de un servidor SCADA.

Introducción a la arquitectura de computadores

Tema II: Metodología para la construcción de programas. Profesora: Nelly García Mora

Programación Estructurada

Transcripción:

Compiladores. Guía 10 1 Tema: Generación de código intermedio Objetivos Específicos Conocer las características y principal función de un generador de código. Analizar el funcionamiento, entrada y salida de un generador de código de un compilador. Implementar un generador de código para el lenguaje MUSIM. Material y Equipo Facultad: Ingeniería Escuela: Computación Asignatura: Compiladores Guía de Laboratorio Nº 10. Computadora con programa Dev C++ Introducción Teórica En esta guía se abordarán los conceptos pertenecientes al componente de generación de código, se implementara un generador de código en lenguaje C++ para el compilador del lenguaje MUSIM. Generación de código. La entrada para el generador de código consta de la representación intermedia del programa fuente producida por la etapa inicial junto con la información de la tabla de símbolos que se utilizan para determinar las direcciones de los objetos de datos durante la ejecución denotados por los hombres de la representación intermedia. Representaciones lineales: Tercetos Cuartetos Máquinas a pila Representaciones arborescentes: Árboles de análisis sintácticos Grafos dirigidos a cíclicos

2 Compiladores. Guía 10 Programas objeto: La salida del generador de código es un código preparado y adaptado para ser ejecutado, directa, o indirectamente, en una arquitectura específica. La adaptación consiste en aprovechar al máximo las características de la máquina para optimizar la ejecución en tiempo y en memoria. Lenguaje de máquina absoluto: El programa se coloca en una posición fija de memoria y se ejecuta inmediatamente. Un programa pequeño se puede compilar y ejecutar rápidamente pero demanda ubicaciones específicas de memoria. Lenguaje de máquina reubicable: Un programa reubicable permite que los subprogramas se compilen por separado. Los módulos se cargan y enlazan mediante un montador o enlazador. Se gana flexibilidad al poder compilar subrutinas por separado y llamarlas desde otros módulos. Si la máquina objeto no maneja reubicación automática el compilador debe proporcionar al montador información para que enlace los segmentos del programa. Lenguaje Ensamblador: El lenguaje ensamblador facilita el proceso de generación de código (se utilizan instrucciones simbólicas y macros). A cambio debe producirse un ensamblado tras la generación de código. Esto es útil en arquitecturas con poca memoria. Administración de la Memoria: Uno de los propósitos de la generación de código final es la traducir la representación simbólica en código intermedio de etiquetas y objetos de datos (variables, temporales, parámetros, etc.) a direcciones reales en el mapa físico de memoria.

Compiladores. Guía 10 3 Asignación de Registros: Las instrucciones que operan con registros son más cortas y rápidas. Realizar un uso eficiente de los registros es fundamental para generar buen código. Selección de instrucciones: La generación de código intermedio debe tener en cuenta el juego de instrucciones de la máquina destino. Las traducciones a código objeto debe ser, además de correcta, eficiente. Procedimiento En esta guía vamos a implementar el generador de código para nuestro mini proyecto del compilador MUSIM a ENSAMPOCO, para ello crearemos dos archivos en C++, uno de cabecera o extensión.h y uno de desarrollo extensión.cpp. Primero debe buscar su proyecto de este compilador creado en la guía 6 de analizador sintáctico. Abra el programa Dev C++ y abra el respectivo archivo de proyecto que tiene creado previamente (poseerá una extensión de archivo.dev ).

4 Compiladores. Guía 10 Posteriormente, añada al proyecto digite el siguiente código: un archivo fuente. Luego genera.h #ifndef GENERA_H #define GENERA_H #include <stdio.h> #include <iostream.h> #include <stdlib.h> class GeneraCodigo char *nombrefichero; // Nombre del fichero objeto de salida FILE *salida; // Fichero objeto de salida public: GeneraCodigo(char *unnombrefichero); ~GeneraCodigo(); void code(); void pushc(char constante); void pusha(char direccion); void load(); void store(); void neg(); void add(); void mul(); void div(); void mod(); void input(char direccion); void output(char direccion); void end(); ; #endif Al terminar deberá guardar el archivo con el nombre genera.h. A continuación agregara al proyecto otro archivo fuente. Dentro de este escribirá las definiciones de la clase declarada en el archivo anterior. Digite el siguiente codigo:

Compiladores. Guía 10 5 genera.cpp #include "genera.h" GeneraCodigo::GeneraCodigo(char *unnombrefichero) if ((salida=fopen(unnombrefichero,"w"))==null) cout<<"no se puede crear el fichero"<<unnombrefichero<<endl; exit(-3); GeneraCodigo::~GeneraCodigo(void) fclose(salida); void GeneraCodigo::code() cout<<".code"<<endl; fputs(".code\n",salida); void GeneraCodigo::pushc(char constante) cout<<"pushc "<<constante<<endl; fputs("pushc ",salida); fputc(constante,salida); fputc('\n',salida); void GeneraCodigo::pusha(char direccion) cout<<"pusha "<<direccion<<endl; fputs("pusha ",salida); fputc(direccion,salida); fputc('\n',salida); void GeneraCodigo::load() cout<<"load"<<endl; fputs("load\n",salida); void GeneraCodigo::store() cout<<"store"<<endl; fputs("store\n",salida);

6 Compiladores. Guía 10 void GeneraCodigo::neg() cout<<"neg"<<endl; fputs("neg\n",salida); void GeneraCodigo::add() cout<<"add"<<endl; fputs("add\n",salida); void GeneraCodigo::mul() cout<<"mul"<<endl; fputs("mul\n",salida); void GeneraCodigo::div() cout<<"div"<<endl; fputs("div\n",salida); void GeneraCodigo::mod() cout<<"mod"<<endl; fputs("mod\n",salida); void GeneraCodigo::input(char direccion) cout<<"input "<<direccion<<endl; fputs("input ",salida); fputc(direccion,salida); fputc('\n',salida); void GeneraCodigo::output(char direccion) cout<<"output "<<direccion<<endl; fputs("output ",salida); fputc(direccion,salida); fputc('\n',salida); void GeneraCodigo::end() cout<<"end"<<endl; fputs("end\n",salida); Posteriormente, guarde el archivo con el nombre genera.cpp. Luego proceda a compilar el proyecto.

Compiladores. Guía 10 7 Análisis de resultados Vamos a integrar el generador de código al analizador sintáctico de la guía 6. Para ello dentro del analizador sintáctico, cree un objeto de la clase de generación de código y en los procedimientos que corresponda, llamar a las operaciones del generador de código que genere el código adecuado. Ahora coloque el siguiente archivo de texto en la misma carpeta para compilarlo. Corresponde a un pequeño programa en MUSIM/0. prueba.txt M R a; R b; c = a + b; W c; Pruebe su compilador sobre el archivo indicado. Investigación complementaria Investigue la generación de código ensamblador (asm) INTEL con Dev C++. Investigue las características y ventajas de los compiladores de una y varias pasadas. Bibliografía http://en.wikipedia.org/wiki/code_generation_%28compiler %29 Cuadernos didácticos. Conceptos básicos de procesadores de lenguaje. Juan Manuel Cueva Lovelle. Oviedo, Diciembre 1998.

8 Compiladores. Guía 10 Guía 10: Generación de código Hoja de cotejo: 10 Alumno: Máquina No: Docente: GL: Fecha: EVALUACION CONOCIMIENTO Del 20 al 30% % 1-4 5-7 8-10 Nota Conocimie nto deficient e de los fundament os teóricos Conocimiento y explicación incompleta de los fundamentos teóricos Conocimiento completo y explicación clara de los fundamentos teóricos APLICACIÓN DEL CONOCIMIENTO Del 40% al 60% ACTITUD Del 15% al 30% TOTAL 100% No tiene actitud proactiva. Actitud propositiva y con propuestas no aplicables al contenido de la guía. Tiene actitud proactiva y sus propuestas son concretas.