Compiladores: Generación de Código Intermedio

Documentos relacionados
Tema 7. Generación de código

Un. VI. Generador de código intermedio.

Unidad II: Análisis semántico

Lección 2 Introducción al lenguaje C

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

Estatutos de Control C# Estatutos de Decisión (Selección)

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

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

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

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

Estructuras de Control. Secuencia y Selección

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

LENGUAJE. Tema 2 Elementos de un programa

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

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

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

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

TUTORIAL PSEINT. Ing. Ronald Rentería Ayquipa. Fundamentos de Programación

Computabilidad y Lenguajes Formales: Autómatas Finitos

Compiladores: Sesión 20. Análisis semántico, verificación e inferencia de tipos

Las Etapas de la Compilación

OPTIMIZACIÓN DE CÓDIGO

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

PHP: Lenguaje de programación

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

L A B O R A T O R I O T I C 2

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

Principios de Computadoras II

Comparaciones en lenguaje ensamblador

ESCUELA SUPERIOR POLITECNICA DEL LITORAL PROGRAMA DE ESTUDIOS

Tema 3.- Predicados y sentencias condicionales

Tema 2. El lenguaje JAVA

FUNDAMENTOS DE INFORMÁTICA

DESCRIPCIÓN ESPECÍFICA NÚCLEO: COMERCIO Y SERVICIOS SUBSECTOR: INFORMÁTICA

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

Código Intermedio. Compiladores II 1

Desde los programas más simples escritos en un lenguaje de programación suelen realizar tres tareas en forma secuencial.

El lenguaje C. 1. Identificadores, constantes y variables

UNIDAD ACADÉMICA PROFESIONAL TIANGUISTENCO

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

Métodos que devuelven valor Dado el siguiente triángulo rectángulo:

Control de Flujo. Estructuras de Control! Experiencia Educativa de Algorítmica CONTROL DE FLUJO

Tema 4. Operadores y Expresiones

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

Ejercicios del tema 4. El procesador

AREA A LA QUE PERTENECE: 103 Matemática Básica 2 34 créditos POST REQUISITO: CATEGORIA: Obligatorio SEMESTRE: Primer Semestre 2015

GENERALIDADES DEL LENGUAJE C

UNIVERSIDAD INTERAMERICANA DE PUERTO RICO RECINTO METROPOLITANO

PROGRAMACION EN INTERNET

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

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

POST REQUISITO: CATEGORIA: Obligatorio SEMESTRE: Primer Semestre 2015 HORAS POR SEMANA DEL LABORATORIO: DIAS QUE SE IMPARTE EL LABORATORIO:

INDICE 1. Operación del Computador 2. Sistemas Numéricos 3. Álgebra de Boole y Circuitos Lógicos

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

INICIACIÓN A LA PROGRAMACIÓN 1ª parte

Generación de Código Intermedio

Tema 3 - Modelado con HDL a nivel RTL

Estructuras de Control

Expresiones y sentencias

Algoritmos. Intro. Prof. Raquel Torres Peralta / Gerardo Sanchez S. Unison

MANUAL DE PRÁCTICAS DEL TALLER DE PROGRAMACIÒN PRACTICA NO.6

GUÍA BÁSICA DE SCHEME v.4

TEMA 2: Estructuras de Control: Condicionales

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

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

Apuntadores (Punteros)

Estructuras de control

Programación Estructurada

UNIVERSIDAD DE SAN CARLOS DE GUATEMALA FACULTAD DE INGENIERIA ESCUELA DE CIENCIAS Y SISTEMAS

Programación. Test Autoevaluación Tema 3

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

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

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

Estructura y Tecnología de Computadores. Módulo C. Arquitectura del procesador. Tema 4. Modos de direccionamiento y tipos de datos

TEMA 4. ESTRUCTURAS DE CONTROL

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

Tema V Generación de Código

Estructuras de Repetición (Hacer-Mientras)

FUNDAMENTOS DE INFORMÁTICA

Representación de la información

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

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

Universidad de Managua

Programación Estructurada

Conceptos de Arquitectura de Computadoras Curso 2015

Qué es un programa informático?

4. Operadores Operador asignación

TECNICO SUPERIOR EN INFORMÁTICA EMPRESARIAL MÓDULO INTRUCCIONAL

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

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

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

Computabilidad y Lenguajes Formales: Autómatas de Pila

ESTRUCTURAS CONDICIONALES EN PHP: SWITCH, CASE, BREAK. EJEMPLOS DE USO Y EJERCICIOS RESUELTOS. (CU00820B)

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

Principios de Programación en Java

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

Transcripción:

Compiladores: Generación de Código Intermedio Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Expresiones Booleanas Son usadas para: Calcular valores lógicos Como expresiones condicionales en instrucciones que alteran el control de flujo. Representación del Valor de una Expresión Booleana: Codificar verdadero y falso numéricamente (V =y F=; o V<>0 y F=0; o V>=0 y F<0), y evaluar las expresiones booleanas de manera similar a las aritméticas. Implementar las expresiones booleanas por control de flujo: permite optimizar la evaluación de expresiones booleanas, calculando solamente lo necesario para determinar su valor. Esto depende de la semántica del lenguaje (ej. Que sucede si una parte de la expresión ejecuta una función que cambia el valor de una variable global?) Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación Compiladores Prof. Ma. Constanza Pabón

Representación Numérica El código de tres direcciones soporta los operadores and, or, not. La expresion x > y and z < f se traduce: If x > y goto lab1 t1 := 0 goto lab2 lab1: t1 := 1 lab2: if z < f goto lab3 t2 := 0 goto lab4 lab3: t2 := 1 lab4: t3 := t1 and t2 Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación Compiladores Prof. Ma. Constanza Pabón

Short-circuit code No usa los operadores and, or, not en el codigo de tres direcciones Util en el contexto de instrucciones de control de flujo La expresion if x > y and z < f then <s1> se traduce: If x > y goto lab1 goto lab2 lab1: if z < f goto lab3 goto lab2 lab3: <s1> lab2: Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación Compiladores Prof. Ma. Constanza Pabón

Short-circuit code Para la traducción dirigida por sintaxis: Las expresiones booleanas heredan dos etiquetas como atributo: E.true y E.false, que corresponden a las etiquetas a las que deben saltar cuando la expresión es verdadera o falsa respectivamente. Las listas de instrucciones heredan el atributo S.next, que es la etiqueta que corresponde a la siguiente instrucción. Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación Compiladores Prof. Ma. Constanza Pabón

Reglas Semánticas [Aho p.402]

Exp. booleanas [Aho p. 404]

Ejemplo short-circuit [Aho p.405]

Backpatching Se usan dos fases para implementar las traducciones dirigidas por sintaxis que generan código para expresiones booleanas e instrucciones de control de flujo: 1a. Fase: Calcula las traducciones de la expresion dada. En esta fase no se conocen las etiquetas que controlan los saltos que son generados, entonces, se generan las instrucciones de salto dejando las etiquetas sin especificar, y se coloca la instrucción e una lista de instrucciones de salto por especificar. 2a. Fase: Backpatching: cuando se determinan las etiquetas, se llenan las instrucciones de salto Las dos fases se pueden ejecutar en una sola pasada. Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación Compiladores Prof. Ma. Constanza Pabón

Acciones semánticas backpatching [Aho p. 411]

Ejemplo backpatching [Aho p.412]

Backpatching [Aho p. 415]

Reusar Variables Temporales La generación de variables temporales que contienen valores intermedios requiere que se localice espacio de memoria (en tiempo de ejecución) para mantener estos valores, es entonces importante reusar las variables Una forma es crear una funcion que administre las temporales usando una pila Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación Compiladores Prof. Ma. Constanza Pabón

Direccionamiento de elementos de arreglos Si los elementos del arreglo son almacenados en posiciones de memoria consecutivas, pueden ser accesados rapidamente. Si cada elemento del arreglo ocupa w bytes, entonces, el i- esimo elemento del arreglo A inicia en la posición: Base + (i low) * w Donde low es el limite inferior del arreglo Base es la dirección relativa asignada al arreglo (es la dirección de A[low]) Si se expresa como i*w + (Base low*w), parte de la expresión puede ser evaluada en tiempo de compilación Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación Compiladores Prof. Ma. Constanza Pabón

Arreglos Multidimensionales Generalizando la expresión para un arreglo A de k dimensiones: La posición del elemento A[i1, i2, i3,...,ik] esta dada por: ((...((i 1 *n 2 + i 2 )*n 3 + i 3 )...)*n k + i k ) * w + base ((... ((low 1 *n 2 + low 2 )*n 3 + low 3 )...)*n k + low k )*w Donde, n j = high j - low j Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación Compiladores Prof. Ma. Constanza Pabón

Acciones para arreglos [Aho p.383]

Ejemplo arreglos [Aho p. 385]