Sintesis Compiladores

Universidad Nacional de Trujillo Facultad de Ciencias Físicas y Matemáticas Escuela de Informática LOS COMPILADORES Int

Views 54 Downloads 0 File size 288KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Universidad Nacional de Trujillo Facultad de Ciencias Físicas y Matemáticas Escuela de Informática

LOS COMPILADORES Integrantes: Álvarez Carhuajulca Pedro Pozo Vera Oscar Eduardo Rodríguez Zavaleta Kevin Sánchez Pedro Edwin Villanueva Arrestegui Anthony

Trujillo – Perú 2016

INDICE INTRODUCCION...................................................................................................................................4 DESARROLLO.......................................................................................................................................5 1. CONCEPTOS IMPORTANTES PARA LA CONTRUCCION DE COMPILADORES EN INTÉRPRETES.......................................................................................................................................5 1.1.

¿QUE ES UN COMPILADOR?...............................................................................................5

1.2.

PROGRAMA FUENTE EN LEGUANJE FUENTE..............................................................5

1.3.

PROGRAMA OBJETO EN LENGUAJE OBJETO..............................................................6

1.4.

ESTRUCTURA DE UN COMPILADOR................................................................................7

1.4.1.

ANALISIS LEXICO..................................................................................................................7

1.4.2.

ANALISIS SINTACTICO.........................................................................................................7

1.4.3.

ANALISIS SEMANTICO.........................................................................................................7

1.4.4.

GENERADOR DE CÓDIGO INTERMEDIO........................................................................7

1.4.5.

GENERADOR DE CÓDIGO....................................................................................................7

1.4.6.

OPTIMIZADOR DE CÓDIGO................................................................................................7

2. 2.1. 3.

COMPILADORES DEL LENGUAJE ENSAMBLADOR.........................................................7 VENTAJAS.................................................................................................................................8 COMPILADOR SOURCE TO SOURCE....................................................................................9

3.1. VENTAJAS........................................................................................................................................9 4.

TAREAS DE UN ENSAMBLADOR..........................................................................................10

5.

CONCLUSIONES........................................................................................................................11

6.

REFERENCIAS BIBLIOGRAFICAS........................................................................................11

INTRODUCCION La teoría de compiladores es un área de conocimientos fundamental para la formación de los estudiantes de Informática. Posee una relevancia práctica y teórica en la formación del futuro profesional, tanto en el aspecto de la programación de computadoras como también, en la construcción de la base teórica de conocimientos del mismo. Es de vital importancia, que un profesional de informática tenga una sólida formación en este tema, debido a que, aunque durante su vida profesional no se dedique al diseño de compiladores, sus aplicaciones podrán ser mucho más eficientes, si aplica mencionados conocimientos adquiridos. En el Perú no se tratan tópicos de Compiladores como: optimización de código intermedio, soporte para programación orientada a objetos o modificación dinámica de código. Esto debido a que por ser temas complicados, requiere del tiempo adecuado para su aprendizaje y de un nivel de abstracción muy alto. Por lo tanto, es necesario realizar proyectos que permitan difundir el tema de lenguajes de programación y Compiladores, específicamente la construcción de un compilador o intérprete con características no tratadas anteriormente. Asimismo, herramientas de software que logren facilitar el uso de las funcionalidades del intérprete y que puedan llamar más fácil la atención de los estudiantes. Además que concreticen conceptos involucrados con compiladores, desde los más simples hasta los más complejos (como por ejemplo la modificación dinámica de código y la optimización de código). Por tal razón, en el presente ensayo, se abarcaran temas referentes a los compiladores, programas fuente y destino, diferenciando las semejanzas entre ellos, para de esta manera poder distinguirlos con claridad; de igual manera se mencionan las ventajas que existen para que un sistema de procesamiento de lenguajes en el cual el compilador produce un lenguaje ensamblador en vez de un lenguaje máquina y que ventajas hay en cuanto al uso de “C” como lenguaje destino para un compilador. Finalmente, se describieron algunas tareas que necesita realizar un ensamblador.

3

DESARROLLO 1. CONCEPTOS IMPORTANTES PARA LA CONTRUCCION DE COMPILADORES EN INTÉRPRETES Hoy en día alrededor de todo el mundo se utilizan los llamados “programas”, pero nunca se ha llegado a preguntar, ¿Qué son? o ¿De dónde vienen?. Todo el software que se utiliza del día de hoy, es un derivado de un lenguaje fuente (código fuente), que pasa por un proceso a través de un compilador, el cual permite que sea más sencilla la interacción con la computadora y sus componentes electrónicos.

1.1.

¿QUE ES UN COMPILADOR? Un compilador es aquel traductor que tiene como entrada una sentencia en lenguaje formal y como salida tiene un fichero ejecutable, es decir, realiza una traducción de un lenguaje de alto nivel a código máquina, (también se entiende por compilador aquel programa que proporciona un fichero objeto en lugar del ejecutable final). Ahora bien, para entender qué diferencia hay entre uno y otro, principalmente se debe de conocer que son cada uno por separado.

1.2.

PROGRAMA FUENTE EN LEGUANJE FUENTE El lenguaje fuente (código fuente) de un programa informático (o software) es un conjunto de líneas de texto que son las instrucciones que debe seguir la computadora para ejecutar dicho programa. Por tanto, en el código fuente de un programa esta descrito por completo su funcionamiento. El lenguaje fuente de un programa está escrito por un programador en algún lenguaje de programación, pero en este primer estado no es directamente ejecutable por la computadora, sino que debe ser traducido a otro lenguaje (el lenguaje maquina o código objeto) que si pueda ser ejecutado por el hardware de la computadora. Para esta traducción se usan los llamados compiladores, ensambladores, intérpretes y otros sistemas de traducción.

1.3.

PROGRAMA OBJETO EN LENGUAJE OBJETO

4

Mientras que el código objeto es el código que resulta de la compilación del código fuente. Consiste en lenguaje maquina o bytecode y se distribuye en varios archivos que corresponden a cada código fuente compilado. Para obtener un programa ejecutable se han de enlazar todos los archivos de código objeto con un programa llamado enlazador. De esta manera, la gran diferencia que existe entre uno del otro, es que el lenguaje fuente es la base para que pueda existir el programa destino (programa objeto). A continuación se presenta un cuadro comparativo detallando estos aspectos:

PROGRAMA DESTINO Se le conoce como código fuente.

PROGRAMA FUENTE Se le conoce como código fuente.

Código que resulta de la compilación del Conjunto de líneas de texto, que son las programa fuente. instrucciones que debe de seguir la computadora para ejecutar mencionado programa. Para tener el programa ejecutable, es Principio fundamental de todo programa necesario enlazar todos los archivos de destino, siendo lavase que los crea. código objeto, con su respectivo programa denominado enlazador. Caracteres traducidos compiladores, ensambladores, y otros traducción.

por los Escrito por un programador, en un intérpretes, lenguaje de programación. sistemas de

Es ejecutable por la computadora, en su No es directamente ejecutable por la primer estado, ya que su estado básico es computadora, en su primer estado. funcional siempre para el hardware.

5

1.4.

ESTRUCTURA DE UN COMPILADOR

1.4.1. ANALISIS LEXICO Es la primera fase del compilador que se encarga de leer el código fuente y procesarlo, también es conocido como escaneo por su nombre en inglés (Scanner). Durante este proceso se realizan operaciones básicas del manejo de cadenas de acuerdo a ciertas reglas del lenguaje, estas reglas las conocemos en teoría computacional como expresiones regulares.

1.4.2. ANALISIS SINTACTICO Es la segunda fase de compilación, donde se analiza la estructura gramatical del lenguaje fuente, estas reglas son representadas por las gramáticas libres del contexto y su escaneo con los arboles sintácticos.

1.4.3. ANALISIS SEMANTICO En la tercera etapa aún se analiza el código fuente para verificar las reglas semánticas, estas reglas están representadas por la correspondencia de los tipos de datos que se manejan en el lenguaje.

1.4.4. GENERADOR DE CÓDIGO INTERMEDIO Una vez analizado el código fuente y sin haber encontrado algún error durante las fases anteriores el compilador genera un código intermedio para prepararlo al código destino.

1.4.5. GENERADOR DE CÓDIGO La quinta etapa del compilador también conocida como generador de código o back-end, es el proceso encargado de traducir el lenguaje intermedio a un código máquina, el cual dependerá de la arquitectura de la misma.

1.4.6. OPTIMIZADOR DE CÓDIGO El último proceso de un compilador es opcional, ya que la optimización de código depende de la arquitectura de la máquina, si esta acepta paralelismo y que tipo de paralelismo, además de que no es posible saber a ciencia cierta si un código optimizado es mejor que el código ingresado por el programador.

2. COMPILADORES DEL LENGUAJE ENSAMBLADOR Como se sabe, la computadora no entiende directamente al Lenguaje Ensamblador; es necesario traducirlo a Lenguaje Maquina. Siendo de esta manera, como nacieron los compiladores del Lenguaje Ensamblador, que son traductores que convierten el código fuente (en Lenguaje Ensamblador) a código objeto (es decir, a Lenguaje Maquina). Surge como una necesidad de facilitar al programador la tarea de trabajar con lenguaje maquina sin perder el control directo con el hardware.

6

2.1.

VENTAJAS

Entendiendo este punto, se mencionan las ventajas principales de este tipo de compiladores:

 VELOCIDAD: El proceso de traducción que realizan los intérpretes, implica un proceso de cómputo adicional al que el programador quiere realizar. Por ello, nos encontraremos con que un intérprete es siempre más lento que realizar la misma acción en Lenguaje Ensamblador, simplemente porque tiene el costo adicional de estar traduciendo el programa, cada vez que lo ejecutamos. De ahí nacieron los compiladores, que son mucho más rápidos que los intérpretes, pues hacen la traducción una vez y dejan el código objeto, que ya es Lenguaje de Maquina, y se puede ejecutar muy rápidamente. Aunque el proceso de traducción es más complejo y costoso que el de ensamblar un programa, normalmente podemos despreciarlo, contra las ventajas de codificar el programa más rápidamente.  TAMAÑO: Los compiladores e intérpretes generan más código máquina del necesario; por ello, el programa ejecutable crece. Así, cuando es importante reducir el tamaño del ejecutable, puede convenir usar el lenguaje Ensamblador. Entre los programas que es crítico el uso mínimo de memoria, tenemos a los virus y manejadores de dispositivos (drivers). Muchos de ellos, por supuesto, están escritos en lenguaje Ensamblador.  FLEXIBILIDAD: Las razones anteriores son cuestión de grado: podemos hacer las cosas en otro lenguaje, pero queremos hacerlas más eficientemente. Pero todos los lenguajes de alto nivel tienen limitantes en el control; al hacer abstracciones, limitan su propia capacidad. Es decir, existen tareas que la maquina puede hacer, pero que un lenguaje de alto nivel no permite. Por ejemplo, en Visual Basic no es posible cambiar la resolución de monitor a medio programa; es una limitante, impuesta por la abstracción del GUI Windows. En cambio, en ensamblador es sumamente sencillo, pues tenemos el acceso directo al hardware del monitor.

7

3. COMPILADOR SOURCE TO SOURCE Un compilador Source To Source o transcompiler es un tipo de compilador que toma el código fuente de un lenguaje de programación como su entrada que toma el código fuente de un lenguaje de programación como su entrada y salida del código fuente en otro lenguaje de programación. Por ejemplo, se puede realizar una traducción de un programa de Pascal a C. Otro propósito del compilador Source To Source es la traducción de código heredado de usar la próxima versión del lenguaje de programación subyacente o una API que rompe la compatibilidad hacia atrás.

3.1. VENTAJAS Dicho esto, ya que se entiende la definición de lo que es un compilador Source To Source, las ventajas de que C sea su lenguaje destino son las siguientes:  Es un lenguaje muy eficiente puesto que es posible utilizar sus características de bajo nivel para realizar implementaciones óptimas.  Proporciona facilidades para realizar programas modulares y/o utilizar código o bibliotecas existentes.  A pesar de su bajo nivel es el lenguaje más portado en existencia, habiendo compiladores para casi todos los sistemas conocidos.  Es el código está formado.  Posee más rapidez al ejecutarlo.  Se modifica fácilmente.

8

4. TAREAS DE UN ENSAMBLADOR La tarea fundamental de un ensamblador es traducir un programa en lenguaje de ensamblador al código correspondiente en lenguaje de máquina. En esencia, al ser el ensamblador un lenguaje de bajo nivel, las tareas que debe realizar son las siguientes:  Convertir los códigos (“opcode” o mnemónicos: ejemplo LDA, STX) a su código equivalente en lenguaje de máquina.  Convertir los operandos simbólicos (las etiquetas o variables) en las direcciones correspondientes de los operandos.  Construir las instrucciones en lenguaje de maquina en el formato apropiado.  Convertir las constantes definidas en el programa en su verdadera representación.  Escribir el “listing” en lenguaje de ensamblador con el código en lenguaje de maquina correspondiente.  Procesar las directrices al ensamblador (las directrices son instrucciones o comandos dirigidos al ensamblador, estas directrices no se traducen a lenguaje de máquina, si no que el ensamblador ejecuta alguna acción, como reservar memoria para variables, entre otras.) En general, la mayoría de las tareas se puede realizar si se recorre el programa línea por línea. Pero surge una dificultad si se trata de traducir una instrucción cuyo operando está definido más abajo en el programa. Si esto ocurre, el ensamblador desconoce la dirección del operando y la instrucción no se podría ensamblar.

9

5. CONCLUSIONES  Muchas veces hemos escuchado el termino compilador, sobre todo dentro de los campos d estudio que se especializan en la informática, gracias a la realización de este trabajo, se conoció su significado y su marcada importancia de estos pequeños programas, los cuales son los responsables de que existan todas las aplicaciones que utilizaremos en nuestros ordenadores a diario.  La importancia de los compiladores radica en que sin estos programas, no existiría ninguna aplicación informática, ya que son la base de la programación en cualquier plataforma.

6. REFERENCIAS BIBLIOGRAFICAS  http://computacion.cs.cinvestav.mx/~mruiz/publicaciones/tesis/tesisIngMic helRuizTejeida.pdf  http://tesis.pucp.edu.pe/repositorio/bitstream/handle/123456789/1503/GOM EZ_RENZO_Y_SALAMANCA_JUAN_LENGUAJE_PROGRAMACION _CODIGO.pdf?sequence=1  http://eprints.sim.ucm.es/9460/1/Memoria.pdf

10