miércoles, 1 de junio de 2016

Clase 3

INTRODUCION, CONCEPTOS, CARACTERISTICAS Y COMPONENTES DE LOS COMPILADORES


CLASIFICACI

ON DE LOS LENGUAJES DE PROGRAMACION

La programación de computadoras se realiza en los llamados lenguajes de programación, éstos posibilitan la comunicación entre el programador y la computadora, a través de un conjunto de instrucciones u órdenes especificadas por el lenguaje. Un lenguaje de programación puede definirse como: “Notación formal para describir algoritmos o funciones que serán ejecutados por una computadora”, o bien, un lenguaje para comunicar instrucciones al computador. 

Diferentes puntos de vista para clasificar los lenguajes de programación: 

1. Su grado de independencia con la máquina.
a) Lenguaje máquina (representación binaria o hexadecimal.): El lenguaje de máquina de una computadora consta de cadenas de números binarios (ceros y unos) y es el único que "entienden" directamente los procesadores. 

b) Lenguaje ensamblador o de bajo nivel (versión simbólica de un lenguaje máquina): La comunicación en lenguaje de máquina es particular de cada procesador que se usa, y programar en este lenguaje es muy difícil y tedioso, por lo que se empezó a buscar mejores medios de comunicación con ésta. 

c) Lenguaje de medio nivel (lenguaje C).
  
d) Lenguaje de alto nivel (FORTRAN, COBOL, Pascal): Los primeros programas ensambladores producían sólo una instrucción en lenguaje de máquina por cada instrucción del programa fuente. Para agilizar la codificación, se desarrollaron programas ensambladores que podían producir una cantidad variable de instrucciones en lenguaje de máquina por cada instrucción del programa fuente. Dicho de otra manera, una sola macroinstrucción podía producir varias líneas de código en lenguaje de máquina.

2. La forma de sus instrucciones y la forma de procesar el código fuente:

A) Lenguajes imperativos o procedimentales.
B)Lenguajes declarativos, funcionales o aplicativos.
C)Lenguajes orientados a objetos.

3. Por generaciones:

 Traductores (translators): Un traductor es un programa que procesa un texto fuente destino. 

 Compiladores (compilers): Un traductor que transforma textos fuente de lenguajes de alto nivel a lenguajes de bajo nivel se le denomina compilador. 

 Ensambladores (assemblers). 

 Interpretes (interpreters): Los intérpretes son programasque simplemente ejecutan las instrucciones que encuentran en el texto fuente. En muchos casos coexisten en memoria el programa fuente y el programa intérprete.

 Editores (editors).


               ARQUITECTURA DE LA COMPUTADORA 

En la disciplina de los procesadores de lenguajes, los compiladores son los más utilizados por los programadores para el desarrollo de aplicaciones. En el caso particular del desarrollo de compiladores, hay que tener bien definida la arquitectura de la computadora. 

¿Cómo se pueden ejecutar las aplicaciones desarrolladas para otras arquitecturas de computadoras en la nueva arquitectura? 

El problema planteado anteriormente no sólo es aplicable a la construcción de nuevas arquitecturas, sino también cuando es necesaria la compatibilidad de aplicaciones entre diferentes sistemas operativos y arquitecturas de computadoras.


Un intérprete software o emulador de software es un programa en código binario que lee una a una las instrucciones binarias de la arquitectura antigua de las computadoras, que se encuentran en un fichero ejecutable, y las interpreta. Los intérpretes no son muy rápidos, pero pueden construir y adaptar a distintas arquitecturas sin excesivos costos de desarrollo. 

Un emulador hardware trabaja de forma similar a un intérprete de software, pero está implementado en HW de forma que decodifica las instrucciones de la arquitectura antigua y las traduce a la nueva arquitectura.

Un traductor entre códigos binarios o ensambladores son conjuntos de instrucciones de la nueva arquitectura que reproducen el comportamiento de un programa en la arquitectura antigua (la información de la máquina antigua se almacena en registros de la nueva máquina).

Un compilador nativo es aquél que toma un programa fuente antiguo y lo vuelve a compilar (recompilar) con compiladores desarrollados para la nueva arquitectura.

GRAMATICAS DE LOS LENGUAJES DE PROGRAMACION 



FASES DE LOS COMPILADORES 



Fase de Análisis: 

En el llamado análisis lexicográfico o léxico, el compilador revisa y controla que las "palabras" estén bien escritas y pertenezcan a algún tipo de token (cadena) definido dentro del lenguaje, como por ejemplo que sea algún tipo de palabra reservada, o si es el nombre de una variable que este escrita de acuerdo a las pautas de definición del lenguaje.



En el análisis sintáctico como su nombre lo indica se encarga de revisar que los tokens estén ubicados y agrupados de acuerdo a la definición del lenguaje. Dicho de otra manera, que los tokens pertenezcan a frases gramaticales validas, que el compilador utiliza para sintetizar la salida.



El análisis semántico se encarga de revisar que cada agrupación o conjunto de token tenga sentido, y no sea un absurdo. 



Fase de Síntesis: 

Etapa de generación de código intermedio, aunque algunos compiladores no la tienen, es bueno saber de su existencia, en esta etapa se lleva el código del programa fuente a un código interno para poder trabajar más fácilmente sobre él.



En la etapa de optimización de código, se busca obtener el código más corto y rápido posible, utilizando distintos algoritmos de optimización. 



Etapa de generación de código, se lleva el código intermedio final a código maquina o código objeto, que por lo general consiste en un código maquina re localizable o código ensamblador.



La tabla de símbolos no es una etapa del proceso de compilación, sino que una tarea, una función que debe realizar el proceso de compilación.








martes, 31 de mayo de 2016

Clase 2

Clasificación de los interpretes

Concepto de Interprete:


Un intérprete es un programa que analiza y ejecuta simultáneamente el programa fuente, es decir no producen un código objeto, siendo su ejecución simultánea a la del programa fuente.


Comportamiento de un Interprete:

Un intérprete es como un compilador, solo que la salida es una ejecución. El programa de entrada se reconoce y ejecuta a la vez. No se produce un resultado físico (código máquina) sino lógico (una ejecución).

Resultado del Interprete:



Ventajas de los Interpretes:


Su principal ventaja es que permiten una fácil depuración. Permiten una mayor interactividad con el código en tiempo de desarrollo.
Puede ser interrumpido con facilidad. 
Facilita la búsqueda de errores. En algunos lenguajes está permitido añadir código según se ejecuta otro código.
Menor consumo de memoria.


Desventajas de los Interpretes:


Lentitud de ejecución, ya que al ejecutar a la vez que se traduce no puede aplicarse un alto grado de optimización. Cada instrucción debe ser traducida a código máquina tantas veces como sea ejecutada

Durante la ejecución, el intérprete debe residir en memoria ya que no genera código objeto.

Tamaño del programa objeto, que exige añadir el intérprete al programa propiamente dicho. 


Clasificación de Intérpretes:

•Intérpretes Puros: son los que analizan una sentencia y la ejecutan, y así sucesivamente todo el programa fuente. Fueron los intérpretes desarrollados en la primera generación de ordenadores, pues permitían la ejecución de largos programas con ordenadores de memoria muy reducida, ya que sólo debían contener en memoria el intérprete y la sentencia a analizar y ejecutar.



•Interpretes Avanzados: incorporan un paso previo de análisis de todo el programa fuente. Generando posteriormente un lenguaje intermedio que es ejecutado por ellos mismos.


•Interpretes Incrementales: tienen gran interés en los lenguajes que permiten no definir los problemas completamente en tiempo de compilación. En estos casos se  utilizan evaluadores parciales que toman como entrada el programa fuente junto con algunos datos (pero no todos), realizándose los cálculos que se pueden hacer con dicho subconjunto de datos, y produciendo una salida que contiene un residuo del programa fuente que se ha introducido.


Clase 1 - Introduccion

         TRADUCTORES

Existen dos tipos principales de traductores de los lenguajes de programación de alto nivel:
* Compiladores
* Interpretes

Los lenguajes de programación

Ocupan una posición intermedia entre los lenguajes naturales humanos y los precisos lenguajes de máquina.
Gracias a la progresiva complejidad de los lenguajes traductores que permiten convertir las instrucciones de un lenguaje de programación al lenguaje de máquina, la programación puede usar lenguajes de computación que se parecen cada vez más a los lenguajes naturales.
¨A los lenguajes máquina se les conoce como lenguajes de primera generación.
¨Los ensambladores son los lenguajes de segunda generación.
¨Los simbólicos de alto nivel de tipo procedural se les denomina de tercera generación y a los relacionales se considera que son de cuarta generación.
¨A la tercera generación pertenecen lenguajes conocidos como el FORTRAN, COBOL, RPG, BASIC, PL1, SIMULA, ALGOL, PASCAL, ADA, C, LISP, PROGOL.
¨SQL es un lenguaje convertido en estándar mundial como lenguaje de cuarta generación, una serie de lenguajes orientados a objetos. Entre estos destaca el Visual Basic de Microsoft. Además hay que prestar una seria atención al lenguaje de programación Java, desarrollado por SUN

Compilador:

Proceso de traducción que convierte un programa fuente escrito en un lenguaje de alto nivel a un programa objeto en código máquina y listo por tanto para ejecutarse en el ordenador, con poca o ninguna preparación adicional.


                                  INTERPRETES:

Analiza el programa fuente y lo ejecuta directamente, Ejemplo del traductor humano, éste sería un traductor humano que conforme a lo que está escuchando va ejecutando, sin generar ningún escrito, es decir que sobre la marcha va traduciendo.