Compiladores trabajo numero 4

15
1 TRABAJODE COMPILADORES PRESENTADO POR: LEONARDO ALEXANDER PEÑARANDA ANGARITA Código: 10937655556 PRESENTADO A MILIA YANETH CARDENAS GALVIS CORPORACION UNIVERSITARIA REMINGTON INGENIERIA DE SISTEMAS IV CUCUTA/ NORTE DE SANTANDER 2014

description

compiladores trabajo por leonardo peñaranda presentado a ingeniera janeth cardenas

Transcript of Compiladores trabajo numero 4

Page 1: Compiladores trabajo numero 4

1

TRABAJODE COMPILADORES

PRESENTADO POR:

LEONARDO ALEXANDER PEÑARANDA ANGARITA

Código: 10937655556

PRESENTADO A MILIA YANETH CARDENAS GALVIS

CORPORACION UNIVERSITARIA REMINGTON

INGENIERIA DE SISTEMAS IV

CUCUTA/ NORTE DE SANTANDER

2014

Page 2: Compiladores trabajo numero 4

2

TABLA DE CONTENIDO

COMPILADOR

1. ¿Qué es y para qué sirve un compilador?

2. ¿Cuáles son las fases de un compilador y establezca sus funciones?

3. ¿Qué es analizador léxico?

4. ¿Qué es un autómata finito?

5. ¿Qué es un autómata de pila?

6. ¿Qué es un diagrama de estados?

7. ¿Qué es una máquina de pila?

Page 3: Compiladores trabajo numero 4

3

INTRODUCCION

Historia de los Compiladores

•A finales de la década de 1940, comenzaron a construirse las primeras computadoras

digitales y fue necesario implementar un lenguaje capas de realizar los cálculos, es

aquí donde aparece el lenguaje de maquina que representaba secuencias de códigos

uméricos: C7 06 0000 0002 (instrucción que mueve el número dos a la ubicación 0000)

•Desafortunadamente este lenguaje era tedioso de seguir y complicado de mantener,

por lo que esta forma de codificación fue reemplazada por el lenguaje ensamblador, en

el cual las instrucciones y las localidades de memoria son formas simbólicas. Un

ensamblador traduce de los códigos simbólicos a lenguaje de maquina. Aún con esta

mejora, el lenguaje ensamblador sigue siendo demasiado difícil de mantener:

MOV X, 2 (instrucción en ensamblador equivalente a la anterior)

• En este punto se presenta la necesidad de lenguajes que permitan escribir los

programas de forma concisa, similar a una notación matemática, y que se pudieran

traducir a código ejecutable para una máquina dada: X = 2

• En 1950, G. M. Hooperacuña el término compiladory aparecen los primeros trabajos

sobre compiladores relacionados con la traducción de fórmulasaritméticas código de

máquina.

• John Backuslideró un grupo de trabajo en IBM para realizar de un traductor de código

máquina a fórmulas matemáticas. Resultando con gran éxito: la especificación de un

Page 4: Compiladores trabajo numero 4

4

lenguaje de alto nivel (FORTRAN, FORMULE TRANSLATION) Trabajaron 18 personas

durante más de un año en el proyecto.

• Fúe un compilador hecho ad-hoc(a puro corazón), pues no existía una teoría

formal,sino que se iban resolviendo las construcciones una a una, para cada situación

particular.

•Noam Chomsky comienza sus estudios sobre la estructura del lenguaje natural. Sus

estudios lo condujeron a la clasificación de los lenguajes de acuerdo a una jerarquía de

sus gramáticas, además sus estudios sobre los algoritmos de reconocimiento derivaron

en una automatización del proceso de traducción mas eficiente.

• 1960, se diseña el lenguaje LISP. En un principio, el código LISP se traducía

manualmente a código máquina. Se escribió en LISP un programa capaz de interpretar

programas LISP, que se tradujo manualmente a código de máquina, construyendo de

este modo un intérprete ejecutable de LISP.

• Knuth desarrolla la mayoría de las técnicas de análisis sintáctico.

• 1970, se presentan los mayores avances en el área de lenguajes de programación.

• Aparecen los primeros programas que automatizan los procesos de análisis léxico y

sintáctico. Surgiendo la llamada Torre de Babel debido a la proliferación de la teoría

para la construcción de compiladores.

• NiklausWirth, diseña Pascal, pensado para la enseñanza.

Page 5: Compiladores trabajo numero 4

5

• Wirth propone el concepto de representación intermedia de código, separando el

proceso de traducción en dos fases: el front-end encargada de analizar el programa

fuente (operaciones dependientes sólo del lenguaje fuente) y el back-end encargada de

generar el código para la máquina objeto.

• 1980, comienzan a proliferar las técnicas de mejoramiento de código (optimización),

se consolida y prolifera el concepto de asignación y liberación de memoria dinámica. La

programación orientada a objetos es extensamente utilizada y madura.

• 1990, los lenguajes de programación y compiladores son muy similares a lo que

enemos actualmente, surgen los ambientes de desarrollo, los lenguajes interpretados

comienza a ganar terreno en aplicaciones de Internet y el código intermedio se vuelve a

poner de moda.

Page 6: Compiladores trabajo numero 4

6

JUSTIFICACION

El siguiente trabajo se realizó con el objetivo de mostrar que es un compilador su uso

su historia y su método de implementación en el medio de la ingeniería y como una

gran herramienta en el momento de traducir de un lenguaje de alto nivel a uno de mas

bajo.

Page 7: Compiladores trabajo numero 4

7

OBJETIVOS

1. Generales.

Mostrar que es un compilador, y sus funciones principales.

2. Específicos.

Mostrar que hay detrás de un compilador, su uso, sus funciones y su forma de utilizar.

Page 8: Compiladores trabajo numero 4

8

1. ¿Para qué es y para qué sirve un compilador?

Un compilador es un programa informático que traduce un programa escrito en

un lenguaje de programación a otro lenguaje de programación, generando un programa

equivalente que la máquina será capaz de interpretar. Usualmente el segundo lenguaje

es lenguaje de máquina, pero también puede ser un código intermedio (bytecode), o

simplemente texto. Este proceso de traducción se conoce como compilación.

Un compilador es un programa que permite traducir el código fuente de un programa

en lenguaje de alto nivel, a otro lenguaje de nivel inferior (típicamente lenguaje de

máquina). De esta manera un programador puede diseñar un programa en un lenguaje

mucho más cercano a cómo piensa un ser humano, para luego compilarlo a un

programa más manejable por una computadora.

Como parte importante de este proceso de traducción, el compilador informa a su

usuario de la presencia de errores en el programa fuente.

2. Fases de un compilador.

Análisis Léxico: Esta fase se encarga de verificar si todas las cadenas pertenecen o no

al lenguaje. Es decir realiza un análisis símbolo por símbolo indicando el token por

cada uno de los elementos reconocidos o el error en caso de no reconocer. Este

análisis no logra detectar muchos errores por su característica.

Análisis Sintáctico: En esta fase se analiza la estructura de las expresiones en base a

gramáticas. Aquí ya se puede determinar si una estructura por ejemplo una expresión

Page 9: Compiladores trabajo numero 4

9

matemática mal formada. El análisis que se realiza es jerárquico es decir en base a

árboles de derivación que se obtienen de las mismas gramáticas.

Análisis Semántico: Este análisis es más difícil de formalizar, determina el tipo de los

resultados intermedios, comprobar que los argumentos que tienen un operador

pertenecen al conjunto de operadores posible, y si son compatibles entre sí.

Generación de Código Intermedió: El código intermedio es una representación en base

a elementos de 3 y 4 direcciones. Lo que nos permite llegar a la fase de optimización

de código.

Optimización de Código: Consiste en realizar una mejora en el código intermedio, para

reducir el número de líneas y hacer que la ejecución sea más rápida.

Generación de Código: Llegamos a la generación de código ensamblador o código

máquina del procesador que nos interese.

3. ¿Qué es un autómata Finito?

Un autómata finito (AF) o máquina de estado finito es un modelo computacional que

realiza cómputos en forma automática sobre una entrada para producir una salida.

Page 10: Compiladores trabajo numero 4

10

Este modelo está conformado por un alfabeto, un conjunto de estados y un conjunto de

transiciones entre dichos estados. Su funcionamiento se basa en una función de

transición, que recibe a partir de un estado inicial una cadena de

caracterespertenecientes al alfabeto (la entrada), y que va leyendo dicha cadena a

medida que el autómata se desplaza de un estado a otro, para finalmente detenerse en

un estado final o de aceptación, que representa la salida.

La finalidad de los autómatas finitos es la de reconocer lenguajes regulares, que

corresponden a los lenguajes formales más simples según la Jerarquía de Chomsky.

4. ¿Qué es un autómata de pila?

Un autómata con pila, autómata a pila o autómata de pila es un modelo matemático de

un sistema que recibe una cadenaconstituida por símbolos de un alfabeto y determina

si esa cadena pertenece al lenguaje que el autómata reconoce. El lenguaje que

reconoce un autómata con pila pertenece al grupo de los lenguajes libres de

contexto en la clasificación de laJerarquía de Chomsky.

5. ¿Qué es un autómata finito?

Un autómata finito (AF) o máquina de estado finito es un modelo computacional que

realiza cómputos en forma automática sobre una entrada para producir una salida.

Este modelo está conformado por un alfabeto, un conjunto de estados y un conjunto de

transiciones entre dichos estados. Su funcionamiento se basa en una función de

Page 11: Compiladores trabajo numero 4

11

transición, que recibe a partir de un estado inicial una cadena de

caracterespertenecientes al alfabeto (la entrada), y que va leyendo dicha cadena a

medida que el autómata se desplaza de un estado a otro, para finalmente detenerse en

un estado final o de aceptación, que representa la salida.

La finalidad de los autómatas finitos es la de reconocer lenguajes regulares, que

corresponden a los lenguajes formales más simples según la Jerarquía de Chomsky.

6. ¿Qué es un diagrama de estados?

Los diagramas de estado muestran el conjunto de estados por los cuales pasa un

objeto durante su vida en una aplicación en respuesta a eventos (por ejemplo,

mensajes recibidos, tiempo rebasado o errores), junto con sus respuestas y acciones.

También ilustran qué eventos pueden cambiar el estado de los objetos de la clase.

Normalmente contienen: estados y transiciones. Como los estados y las transiciones

incluyen, a su vez, eventos, acciones y actividades, vamos a ver primero sus

definiciones.

Al igual que otros diagramas, en los diagramas de estado pueden aparecer notas

explicativas y restricciones.

7. Que es una maquina de pila?

Page 12: Compiladores trabajo numero 4

12

Una máquina de pila es un modelo computacional en el cual la memoria de la

computadora toma la forma de una o más pilas. El término también se refiere a un

computador real implementando o simulando una máquina de pila idealizada.

Adicionalmente, una máquina de pila también puede referirse a una máquina verdadera

o simulada con un conjunto de instrucciones de "0 operandos". En tal máquina, la

mayoría de las instrucciones implícitamente operan en valores en el tope de la pila y

reemplazan esos valores por el resultado. Típicamente tales máquinas también tienen

una instrucción "load" y una instrucción "store" que leen y escriben a posiciones

arbitrarias de la RAM. (Como el resto de las instrucciones, las instrucciones "load" y

"store" no necesitan ningún operando en una máquina de pila típica - ellas siempre

toman la dirección de la RAM que se quiere leer o escribir desde el tope de la pila).

La ventaja de las máquinas de pila ("conjunto de instrucciones de 0 operandos") sobre

las máquinas de acumulador ("conjunto de instrucciones de 1 operando") y

las máquinas de registro ("conjunto de instrucciones de 2 operandos" o un "conjunto de

instrucciones de 3 operandos") es que los programas escritos para un conjunto de

instrucciones de "0 operandos" generalmente tienen una densidad de código más alta

que los programas equivalentes escritos para otros conjuntos de instrucciones.

Page 13: Compiladores trabajo numero 4

13

CONCLUSIONES

Un compilador es más que un traductor multilenguaje, es también un intérprete que

muestra una traducción de un código o lengaje.

Page 14: Compiladores trabajo numero 4

14

BIBLIOGRAFIA

http://es.wikipedia.org/wiki/Compilador

http://es.wikipedia.org/wiki/Analizador_l%C3%A9xico

http://es.wikipedia.org/wiki/Aut%C3%B3mata_finito

http://es.wikipedia.org/wiki/Aut%C3%B3mata_de_pila

http://es.wikipedia.org/wiki/Diagrama_de_estado

http://es.wikipedia.org/wiki/M%C3%A1quina_de_pila

Page 15: Compiladores trabajo numero 4

15