Elaboración de la estructura del ADN y ARN en papel.pdf
Compiladores trabajo numero 4
1. 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
2. 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?
3. 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
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.
5. 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.
6. 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.
7. 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.
8. 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
9. 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.
10. 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
11. 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?
12. 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.
13. 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.