Está en la página 1de 19

UNIVERSIDAD MARIANO GALVEZ DE GUATEMALA

FACULTAD DE INGENIERIA EN SISTEMAS DE INFORMACION

Curso: Compiladores Código: 090457


 
Pre-requisitos: 090454 Lenguajes Formales    

EVALUACIÓN
Parciales
Primer Parcial 10 puntos
Segundo Parcial 20 puntos
Laboratorios, tares y trabajos de 20 puntos
investigación
Examen Final
Examen Final 30 Puntos
Proyectos 20 Puntos
Nota Final 100 puntos

AHO ALFRED V., SEIT RAVI, ULLMAN JEFFREY D.; COMPILADORES


Principios, técnicas y herramientas; Editorial Addison Wesley Iberoamericana
S.A.; Wilmington, USA; 1990.
Historia
En 1946 se desarrolló la primera computadora digital. En un principio, estas
máquinas ejecutaban instrucciones consistentes en códigos numéricos que señalaban
a los circuitos de la máquina los estados correspondientes a cada operación, lo que se
denominó lenguaje máquina.

Pronto los primeros usuarios de estos ordenadores descubrieron la ventaja de escribir


sus programas mediante claves más fáciles de recordar que esos códigos; al final,
todas esas claves juntas se traducían manualmente a lenguaje máquina. Estas claves
constituyen los llamados lenguajes ensambladores.

Pese a todo, el lenguaje ensamblador seguía siendo el de una máquina, pero más fácil
de manejar. Los trabajos de investigación se orientaron hacia la creación de un
lenguaje que expresara las distintas acciones a realizar de una manera lo más sencilla
posible para una persona. El primer compilador fue escrito por Grace Hopper, en 1952
para el lenguaje de programación A-0. En 1950 John Backus dirigió una investigación
en IBM sobre un lenguaje algebraico. En 1954 se empezó a desarrollar un lenguaje que
permitía escribir fórmulas matemáticas de manera traducible por un ordenador; le
llamaron FORTRAN (FORmulae TRANslator). Fue el primer lenguaje de alto nivel y
se introdujo en 1957 para el uso de la computadora IBM modelo 704.
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 como piensa un ser humano, para
luego compilarlo a un programa más manejable por una
computadora.
Definición de 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.
Modelo de análisis y síntesis de la compilación:
En la compilación hay dos partes: análisis y síntesis. La parte del análisis divide al
programa fuente en sus elementos componentes y crea una representación
intermedia del programa fuente. La parte de la síntesis construye el programa objeto
deseado a partir de la representación intermedia. De las dos partes, la síntesis es la
que requiere las técnicas mas especializadas.

Durante el análisis, se determinan las operaciones que implica el programa fuente y


se registra en una estructura jerárquica llamada árbol. A menudo, se usa una clase
especial de árbol llamado árbol sintáctico, donde cada nodo representa una
operación y los hijos un nodo son los argumentos de operación.
Muchas herramienta de software que manipulan programas fuente realizan primero
algún tipo de análisis. Alguno ejemplos de tales herramientas son:

1. Editores de estructuras. Un editor de estructuras toma como entrada una


secuencia de ordenes para construir un programa fuente. El editor de estructuras
no solo realiza las funciones de creación y modificación de textos de un editor de
textos ordinario, sino que también analiza el texto del programa, imponiendo al
programa fuente una estructura jerárquica apropiada. Por ejemplo, puede
comprobar si la entrada esta formada correctamente, puede proporciona palabras
clave de manera automática (por ejemplo, cuando el usuario escribe while, el
editor proporciona el correspondiente do y le recuerda al usuario que entre las
dos palabras debe ir un condicional.

2. Impresoras estéticas: Una impresora estética analiza un programa y lo imprime


de forma que la estructura del programa resulte claramente visible. Por ejemplo,
los comentarios pueden aparecer con un tipo de letra especial, y las
proposiciones pueden aparecer con una indentación proporcional a la
profundidad de su anidamiento en la organización jerárquica de las
proposiciones.
3. Verificadores estáticos: Un verificador estático lee un programa, lo analiza e
intenta descubrir errores potenciales sin ejecutar el programa. La parte del análisis
es similar a la que se encuentra en los compiladores de optimación. Así un
verificador estático puede detectar si hay partes de un programa que nunca se
podrán ejecutar o si cierta variable se usa antes de ser definida. Además, puede
detectar errores de lógica como intentar utilizar una variable real como apuntador,
empleando las técnicas de verificación de tipos.

4. Intérpretes: En lugar de producir un programa objeto como resultado de una 


traducción, un interprete realiza las operaciones que implica el programa fuente.
Para una proposición de asignación, por ejemplo, un intérprete podría construir un
árbol como el de la figura 5, y después efectuar las operaciones de los nodos
conforme "recorre" el árbol. En la raíz descubriría que tiene que realizar una
asignación, y llamaría a una rutina para evaluar la expresión de la derecha y
después almacenaría el valor resultante en la localidad de memoria asignada con el
identificador posición. En el hijo derecho de la raíz, la rutina descubriría que tiene
que calcular la suma de dos expresiones. Se llamaría a si misma de manera
recursiva para calcular el valor de la variable de la expresión velocidad * 60.
después sumaria ese valor de la variable inicial.
Muchas veces los interpretes se usan para ejecutar lenguajes de
ordenes, pues cada operador que se ejecuta en un lenguaje de
ordenes suele ser una invocación de una rutina compleja. Como
un edito o un compilador. Del mismo modo, algunos lenguajes
de “muy alto nivel”, como APL, normalmente son
interpretados, porque hay muchas cosas sobre los datos, como
el tamaño y la forma de las matrices, que no se pueden deducir
en el momento de la compilación.

1. Formadores de textos. Un formador de texto toma como


entrada una cadena de caracteres, la mayor parte de la cual
es texto para componer.
2. Compiladores de circuitos de silicio. Tiene un lenguaje
fuente similar o idéntico a un lenguaje de programación
convencional.
3. Interpretes de consultas. Traduce un predicado que
contiene operadores relacionales y booleanos a ordenes.

El contexto de un compilador
Además de un compilador, se pueden necesitar otros
programas para crear un programa objeto ejecutable. Un
programa fuente se puede dividir en módulos almacenados en
archivos distintos. El preprocesador también puede expandir
abreviaturas.

La figura 1.3 muestra una compilación típica. El programa


objeto creado por el compilador puede requerir procesamiento
adicional antes de poderlo ejecutar.
1.2 análisis del programa fuente:
En la compilación el análisis consta de tres fases:

1. Análisis lineal, en el que la cadena de caracteres que


constituye el programa fuente se lee de izquierda a
derecha y se agrupa en componentes léxicos, que son
secuencias de caracteres que tienen un significado
colectivo.

2. Análisis jerárquico, en el que los caracteres o los


componentes léxicos se agrupan jerárquicamente en
colecciones anidadas con un significado colectivo.

3. Análisis semántico, en el que se realizan ciertas


revisiones para asegurar que los componentes de un
programa se ajustan de un modo significativo.
Análisis léxico:
En un compilador, el análisis lineal se llama análisis léxico o
exploración. Por ejemplo, en el análisis léxico los caracteres de la
proposición de asignación.

Posición := inicial + velocidad * 60


Se agruparían en los componente léxicos siguientes:
1. El identificador posición.
2. El símbolo de asignación :=.
3. El identificador inicial.
4. El signo de suma +.
5. El identificador velocidad.
6. El signo de multiplicación *.
7. El numero 60.

Los espacios en blanco que separan los caracteres de estos


componentes léxicos normalmente se eliminan durante el análisis
léxico.
Análisis sintáctico:
El análisis jerárquico se denomina análisis sintáctico. Este implica agrupar los
componente léxicos del programa fuente en frases gramaticales que el compilador
utiliza para sintetizar la salida. Por lo general, las frases gramaticales del programa
fuente se representan mediante un árbol de análisis sintáctico.
Tarea para el sábado 8 de febrero
• Tipos de compiladores
• Investigar que es APL.

RECORRIDO: con sus palabra decir que recorrido se


realiza en este árbol y generar el recorrido y cuales son
los otros recorridos que hay
 
Posición:= inicial + velocidad * 60
http://www.monografias.com/trabajos11/c
ompil/compil2.shtml

También podría gustarte