Fases de un compilador - es una actividad de programacion PDF

Title Fases de un compilador - es una actividad de programacion
Author Julio A De La Cruz
Course Dinámica
Institution Instituto Tecnológico de Apizaco
Pages 17
File Size 350.6 KB
File Type PDF
Total Downloads 67
Total Views 131

Summary

es una actividad de programacion...


Description

INSTITUTO TECNOLOGICO DE VILLAHERMOSA Carrera INGENIERIA EN SISTEMA COMPUTACIONALES Asignatura LENG. AUTOMATAS I Práctica compilador y sus fundamentos teóricos

Nombre del profesor MANUEL ANTONIO RODRIGUES MAGAÑA Fecha de entrega 25/09/2020

pág. 1

Contenido INTRODUCCION ............................................................................................................................... 3 Fases de un compilador .................................................................................................................. 4 Análisis Léxico .......................................................................................................................... 9 Sintaxis Análisis ........................................................................................................................ 9 Análisis semántico.................................................................................................................... 9 Generación de código intermedio ........................................................................................ 10 Optimización de código ......................................................................................................... 10 Generación de código............................................................................................................ 10 Tabla de símbolos .................................................................................................................. 11 Generación de código intermedio .................................................................................................... 11 Generación De Código................................................................................................................ 11 Tabla de símbolos.............................................................................................................................. 12 Fases de un compilador ................................................................................................................ 12 Analizador léxico: .............................................................................................................................. 12 Generación y optimización de código intermedio: ........................................................................... 14 Tabla de Símbolos: ............................................................................................................................ 14 Administrador de la Tabla de Símbolos ............................................................................................ 15 Conclusión......................................................................................................................................... 16 Bibliografía ........................................................................................................................................ 17

pág. 2

INTRODUCCION

En

esta

actividad

encontraras

información

sobre

los

compiladores y algunas fotos igual se tocará tema sobre algunas generaciones de los códigos que va relacionados con los compiladores tabla de símbolos y fases de un compilador

pág. 3

Fases de un compilador

Los compiladores son programas de computadora que traducen de un lenguaje a otro. Un compilador toma como su entrada un programa escrito en lenguaje fuente y produce un programa equivalente escrito en lenguaje objeto. • Un compilador se compone internamente de varias etapas, o fases, que realizan operaciones lógicas. Es útil pensar en estas fases como piezas separadas dentro del compilador, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la práctica a menudo se integran: • Análisis Léxico • Análisis Sintáctico • Análisis Semántico •

Generación y Optimización de código intermedio



Generación de código objeto

pág. 4

cada una de las cuales transforma al programa fuente de una representación en otra. En La figura 1.9 se muestra una descomposición típica de un compilador. En la práctica, se pueden agrupar algunas

pág. 5

fases y las representaciones intermedias entre las fases agrupadas no necesitan ser construidas explícitamente. Las tres primeras fases, que forman la mayor parte de la porción del análisis de un compilador, se introdujeron en la sección anterior. Otras dos actividades, la administración de la tabla de símbolos y el manejo de errores, se muestran en interacción con las seis fases de análisis léxico, análisis sintáctico, análisis semántico, generación de código intermedio, optimación de código y generación de código. De modo informal, también se llamarán ‘fases” al administrador de la tabla de símbolos y al manejador de errores. A primera vista, la diversidad de compiladores puede parecer abrumadora. Hay miles de lenguajes fuente, desde los lenguajes de programación tradicionales, como FORTRAN o Pascal, hasta los lenguajes especializados que han surgido virtualmente en todas ias áreas de aplicación de la informática. Los lenguajes objeto son igualmente variados; un lenguaje objeto puede ser otro lenguaje de programación o el lenguaje de máquina de cualquier computador entre un microproccsador y un supercomputador. Los compiladores a menudo se clasifican como de una pasada, de múltiples pasadas, de carga y ejecución, de depuracion o de optimación, dependiendo de cómo hayan sido construidos o de que función se supone que realizan. A pesar de esta aparente complejidad, las tareas básicas que debe realizar cualquier compilador son esencialmente las mismas.

pág. 6

Al comprender tales tareas, se pueden construir compiladores para una gran diversidad de lenguajes fuente y máquinas objeto utilizando las mismas técnicas básicas, Nuestro conocimiento sobre cómo organizar y escribir compiladores ha aumentado mucho desde que comenzaron a aparecer los primeros compiladores a principios de los años cincuenta. Es dificil dar una fecha exacta de la aparición del primer compilador, porque en un principio gran parte del trabajo de experimentación y aplicación se realizó de manera independiente por varios grupos. Gran parte de los primeros trabajos de compilación estaba relacionada con la traducción de formulas aritméticas a código de máquina. En la década de 1950, se consideró a los compiladores como programas notablemente dificiles de escribir. El primer compilador de FORTRAN, por ejemplo, necesitó para su implantación 18 años de trabajo en grupo (Backus y otros [1975]). Desde entonces, se han descubierto técnicas sistemáticas para manejar muchas de las importantes tareas que surgen en la compilación. También se han desarrollado

buenos

lenguajes

de

implantación,

entornos

de

programación y herramientas de software. Con estos avances, puede hacerse un compilador real incluso como proyecto de estudio en un curso de un semestre sobre diseño de compiladores.

pág. 7

El proceso de compilación es una secuencia de varias fases. Cada fase dura entrada de su etapa anterior, tiene su propia representación del programa de origen, y alimenta su resultado a la siguiente fase del compilador. Nos permiten entender las fases de un compilador.

La principal ventaja del proceso de compilación frente al de interpretación es que los programas se ejecutan mucho más rápidamente una vez compilados; por el contrario, es más cómodo desarrollar un programa mediante un intérprete que mediante un compilador puesto que en el intérprete las fases de edición y ejecución pág. 8

están más integradas. La depuración de los programas suele ser más fácil en los intérpretes que en los compiladores puesto que el código fuente está presente durante la ejecución. Estas ventajas pueden incorporarse al compilador mediante la utilización de entornos de desarrollo y depuradores simbólicos en tiempo de ejecución.

Análisis Léxico La primera fase de escáner funciona como un texto escáner. Esta fase busca en el código fuente como una secuencia de caracteres y la convierte en un lexema resultante-. Analizador Léxico representa estos lexema resultante- en forma de fichas:

Sintaxis Análisis La siguiente fase se denomina la sintaxis análisis o análisis. Toma el token de análisis léxico como entrada y genera un árbol analizar (o árbol de sintaxis). En esta fase, token arreglos se contrastan con el código fuente gramática, es decir, el analizador comprueba si la expresión de los tokens es sintácticamente correcto. Análisis semántico

pág. 9

Análisis semántico comprueba si el análisis árbol construido sigue las reglas del idioma. Por ejemplo, la asignación de valores es entre tipos de datos compatibles, y añadiendo cadena en un número entero. Además, el analizador semántico realiza un seguimiento de los identificadores, sus tipos y expresiones; si los identificadores se declaran antes de su uso, o no, etc. El analizador semántico produce un árbol de sintaxis anotado como una salida. Generación de código intermedio Tras análisis semántico el compilador genera un código intermedio del código fuente para el equipo de destino. Es un programa para algunos la máquina abstracta. , Está entre el lenguaje de alto nivel y el lenguaje de máquina. Este código intermedio debe ser generado de tal manera que hace que sea más fácil de traducir en la máquina de destino. Optimización de código La siguiente fase de optimización de código es el código intermedio. La optimización puede ser asumida como algo que elimina código innecesario, y organiza la secuencia de declaraciones con el fin de acelerar la ejecución del programa sin desperdicio de recursos (CPU, memoria). Generación de código En esta fase, el generador de código optimizado la representación del código intermedio y la asigna a la máquina de destino. El generador de código se traduce el código intermedio en una secuencia de pág. 10

(generalmente)

reubicables

código

máquina.

Secuencia

de

instrucciones de código máquina realiza la tarea como el código intermedio. Tabla de símbolos Es una estructura de datos mantendrá en todas las fases de un compilador. Todos los nombres de identificador junto con sus tipos se almacenan aquí. La tabla de símbolos hace que sea más fácil para que el compilador pueda buscar con rapidez el registro de código y recuperarla. La tabla de símbolos se utiliza también para el campo.

Generación de código intermedio Después de haber conducido el análisis semántico el compilador genera un código intermedio entre el código fuente y el el código de la maquina objetivo (unos y ceros). Este representa un programa para una máquina abstracta. Esta en medio de un lenguaje de alto nivel y un lenguaje de máquina. Este código intermedio debe ser generado de tal manera que es fácilmente traducido a un lenguaje de máquina de bajo nivel.

Generación De Código En la fase de generación de código se toma la versión optimizada del código intermedio y se mapea a la lenguaje de máquina objetivo. La generación de código traduce entonces el código intermedio en una secuencia reubicable de código de máquina, mas tarde el enlazador

pág. 11

del sistema operativo tomara estas instrucciones y les asignara un espacio en la memoria para así poder funcionar.

Tabla de símbolos Es importante entender que la tabla de símbolos no es mas que una estructura de datos que denominamos matriz ortogonal, que es una tabla con posiciones de memoria dinámicas sobre las cuales se puede realizar búsquedas y editar los valores de cada una de sus celdas. El compilador se vale de esta estructura de datos para almacenar identificadores, tipos y valores de las variables a lo largo de todo el proceso de compilación, de forma que sea fácil y rápido obtener cualquiera de las propiedades de un símbolo. Fases de un compilador

Los compiladores son programas de computadora que traducen de un lenguaje a otro. Un compilador toma como su entrada un programa escrito en lenguaje fuente y produce un programa equivalente escrito en lenguaje objeto. • Un compilador se compone internamente de varias etapas, o fases, que realizan operaciones lógicas.

Analizador léxico: Lee la secuencia de caracteres de izquierda a derecha del programa pág. 12

fuente y agrupa las secuencias de caracteres en unidades con significado propio (componentes léxicos o “tokens” en ingles). • Las palabras clave, identificadores, operadores, constantes numéricas, signos de puntuación como separadores de sentencias, llaves, paréntesis, etc. , son diversas clasificaciones de componentes léxicos. Análisis sintáctico: Determina si la secuencia de componentes léxicos sigue la sintaxis del lenguaje y obtiene la estructura jerárquica del programa en forma de árbol, donde los nodos son las construcciones de alto nivel del lenguaje. • Se determinan las relaciones estructurales entre los componentes léxicos, esto es semejante a realizar el análisis gramatical sobre una frase en lenguaje natural. La estructura sintáctica la definiremos mediante las gramáticas independientes del contexto. Análisis semántico: Realiza las comprobaciones necesarias sobre el árbol sintáctico para determinar el correcto significado del programa. • Las tareas básicas a realizar son: La verificación e inferencia de tipos en asignaciones y expresiones, la declaración del tipo de variables y funciones antes de su uso, el correcto uso de operadores, el ámbito de las variables y la correcta llamada a funciones. • Nos limitaremos al análisis semántico estático (en tiempo de compilación), donde es necesario hacer uso de la Tabla de símbolos, como estructura de datos para almacenar información sobre los identificadores que van surgiendo a lo largo del programa. El análisis pág. 13

semántico suele agregar atributos (como tipos de datos) a la estructura del árbol semántico.

Generación y optimización de código intermedio: La optimización consiste en la calibración del árbol sintáctico donde ya no aparecen construcciones de alto nivel. Generando un código mejorado, ya no estructurado, más fácil de traducir directamente a código ensamblador o máquina, compuesto de un código de tres direcciones (cada instrucción tiene un operador, y la dirección de dos operándoos y un lugar donde guardar el resultado), también conocida como código intermedio.

Generador de código objeto: Toma como entrada la representación intermedia y genera el código objeto. La optimización depende de la máquina, es necesario conocer el conjunto de instrucciones, la representación de los datos (número de bytes), modos de direccionamiento, número y propósito de registros, jerarquía de memoria, encauzamientos, etc. • Suelen implementarse a mano, y son complejos porque la generación de un buen código objeto requiere la consideración de muchos casos particulares.

Tabla de Símbolos: Es una estructura tipo diccionario con operaciones de inserción, borrado y búsqueda, que almacena información sobre los símbolos pág. 14

que van apareciendo a lo largo del programa como son: – los identificadores (variables y funciones) – Etiquetas – tipos definidos por el usuario (arreglos, registros, etc.) Además almacena el tipo de dato, método de paso de parámetros, tipo de retorno y de argumentos de una función, el ámbito de referencia de identificadores y la dirección de memoria. Interacciona tanto con el analizador léxico, sintáctico y semántico que introducen información conforme se procesa la entrada. La fase de generación de código y optimización también la usan.

7.-Gestor de errores: Detecta e informa de errores que se produzcan durante la fase de análisis. Debe generar mensajes significativos y reanudar la traducción.

Administrador de la Tabla de Símbolos Una función esencial de un compilador es registrar los identificadores utilizados en el programa fuente y reunir información sobre los distintos atributos de cada identificador. Estos atributos pueden proporcionar información sobre la memoria asignada a un identificador, su tipo, su ámbito (la parte del programa donde tiene validez) y, en el caso de nombres de procedimientos, cosas como el número y tipo de sus argumentos, el método de pasar cada argumento (por ejemplo, por referencia) y el tipo que devuelve, si lo hay.

pág. 15

Conclusión En conclusión, Los compiladores son programas de computadora que traducen de un lenguaje a otro. Un compilador toma como su entrada un programa escrito en lenguaje fuente y produce un programa equivalente escrito en lenguaje objeto. Un compilador generalmente genera lenguaje ensamblador primero y luego traduce el lenguaje ensamblador al lenguaje máquina.

pág. 16

Bibliografía http://lenguajesyautomatasitsh.blogspot.com/2015/02/17-fases-de-uncompilador.html http://cidecame.uaeh.edu.mx/lcc/mapa/PROYECTO/libro32/13_fases_de_un_com pilador_y_sus_fundamentos_tericos.html https://ricardogeek.com/fases-del-compilador/ https://sites.google.com/site/teoriadelenguajesformaless/1-7-fases-de-uncompilador http://repositori.uji.es/xmlui/bitstream/10234/5876/1/estructura.apun.pdf

pág. 17...


Similar Free PDFs