Lenguajes de programacion tema 2_compiladores e interpretes

48

description

Compiladores e interpretes

Transcript of Lenguajes de programacion tema 2_compiladores e interpretes

Un compilador es un programa que

convierte o traduce el código fuente de

un programa hecho en lenguaje de alto

nivel, a un lenguaje de bajo nivel

(lenguaje de máquina).

En pocas palabras, es un software que

se encarga de traducir el programa

hecho en lenguaje de programación, a un

lenguaje de máquina que pueda ser

comprendido por el equipo y pueda ser

procesado o ejecutado por este.

Características principales de un

compilador

Para cada lenguaje de programación se requiere un

compilador separado.

• El compilador traduce todo el programa antes de

ejecutarlo.

• Los programas compilados se ejecutan más rápido que

los interpretados, debido a que han sido completamente

traducidos a lenguaje máquina.

• Informa al usuario de la presencia de errores en el

programa fuente.

• Poseen un editor integrado con un sistema de coloreado

para los comandos, funciones, variables y demás partes

de un programa.

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.

Intérprete

Es un programa informático capaz de analizar y ejecutar

otros programas, escritos en un lenguaje de alto nivel.

Los intérpretes sólo realizan la traducción a medida que

sea necesaria, típicamente, instrucción por instrucción, y

normalmente no guardan el resultado de dicha

traducción.

Se trata de traductores-ejecutores ya que con cada

instrucción realizan un proceso triple de lectura-

traducción-ejecución.

El funcionamiento de un intérprete se caracteriza por

traducir y ejecutar, de una en una, las instrucciones

del código fuente de un programa, pero, sin generar

como salida código objeto. El proceso que realiza un

intérprete es el siguiente: lee la primera instrucción del

código fuente, la traduce a código objeto y la ejecuta;

a continuación, hace lo mismo con la segunda

instrucción; y así sucesivamente, hasta llegar a la

última instrucción del programa, siempre y cuando, no

se produzca ningún error que detenga el proceso.

Características de un interprete

Son más fáciles de aprender que los lenguajescompilados.

Son sencillos de implementar y alta flexibilidad endepurar.

Facilita la búsqueda de errores.

El programa se puede ejecutar de inmediato, sinesperar a ser compilado.

Puede ser interrumpido con facilidad.

Puede ser rápidamente modificado y ejecutadonuevamente.

Suelen ser más lentos.

Estructura de un compilador

An

ális

is L

éxic

o

Gestíon de errores

Tabla de símbolos

An

ális

is S

emán

tico

An

ális

is S

intá

ctic

o

Gen

erac

ión

de

dig

o In

term

edio

Op

tim

izac

ión

de

dig

o in

term

edio

Gen

erac

ión

y

Op

tim

izac

ión

de

cód

igo

fin

al

Estructura de un compilador

Análisis sintáctico

• Comprueba los valores unitarios del programa (tokens):

• Palabras reservadas(do, while, if, …)

• Palabras no especificas(identificadores, constantes)

• Formados por tipo y lexema

Int contador

Identificador = tipo

“contador” = lexema

Estructura de un compilador

Análisis Sintáctico

• Recibe los tokens del analizador léxico y comprueba que están ordenados conforme a la gramática

Estructura de un compilador

Análisis Semántico

• Comprueba la validez del programa

• Comprobación de tipos en operadores

Estructura de un compilador

Generación de código intermedio

• Codifica el lenguaje fuente en un lenguaje intermedio entre el lenguaje objeto

• Permite la separación entre front-end y back-end

• Utilización de código de 3 direcciones (A=B+C)

• Instrucciones condicionales y saltos

Estructura de un compilador

Optimización de código intermedio

• Permite realizar mejoras en el código intermedio

• Eliminación de saltos consecutivos

• Factorizaciones

• Eliminar código inútil

• Optimización de bucles

Estructura de un compilador

Generación de código objeto

• Generar una secuencia de instrucciones en código ensamblador o máquina a partir del código intermedio

• A=B+C

• LOAD B

• ADD C

• STORE A

Estructura de un compilador

Tabla de símbolos

• Tabla donde se registran los identificadores, constantes, funciones y otros objetos especificados en el programa fuente

• El compilador desarrolla funciones comunes de acceso a ella

Estructura de un compilador

Manejo de errores• Mensajes de error que el compilador emite cuando encuentra una

inconsistencia en cualquiera de las fases de compilación

• Normalmente en una compilación no se muestran todos los errores producidos:

• Ocultación de otros errores

• Avalancha de errores

• Se puede

• Pararse al encontrar cualquier error

• Intentar recuperar todos los errores de una pasada

Estructura de un compilador

Análisis léxicoAnálisis sintácticoAnálisis semantico

Generación de código intermedio

Fuente

Optimización de código intermedioGeneración de código objeto

Optimización de código objeto

CódigoIntermedio

Código objeto

BACK-END

FRONT-END

Especificación de un compilador

Especificación léxica:

• Tokens mediante expresiones regulares

Especificación sintáctica:

• Gramáticas independientes del contexto

Especificación semántica:

• Lenguaje natural

/* Inclusión de archivos */#include <stdio.h>

/* Función principal */int main (int argc,char **argv){

/* Impresión por pantalla y salida del programa*/

printf("Hola mundo\n");return 0;

}

Código en C

A la hora de construir un intérprete es conveniente utilizaruna Representación Interna (RI) del lenguaje fuente aanalizar. De esta forma, la organización interna de lamayoría de los intérpretes se descompone en losmódulos:

1.

:

Toma como entrada el código del programa P en Lenguaje Fuente, lo analiza y lo transforma a la representación interna correspondiente a dicho programa P.

2.

La representación interna debe ser consistente con el programa original. Entre los tipos de representación interna, los árboles sintácticos son los más utilizados y, si las características del lenguaje lo permiten, pueden utilizarse estructuras de pila para una mayor eficiencia

3.

Durante el proceso de traducción, es conveniente ir creando una tabla con información relativa a los símbolos que aparecen. La información a almacenar en dicha tabla de símbolos depende de la complejidad del lenguaje fuente. Se pueden almacenar etiquetas para instrucciones de salto, información sobre identificadores (nombre, tipo, línea en la que aparecen, etc.) o cualquier otro tipo de información que se necesite en la etapa de evaluación.

4

A partir de la Representación Interna anterior y de los datos de entrada, se llevan a cabo las acciones indicadas para obtener los resultados. Durante el proceso de evaluación es necesario contemplar la aparición de errores.

5.

Durante el proceso de evaluación pueden aparecer diversos errores como desbordamiento de la pila, divisiones por cero, etc. que el intérprete debe contemplar.

>>> i=5

>>> if i>4:

... print "Mayor"

... elif i==4:

... print "Igual"

... else:

... print "Menor"

...

Mayor

Python

Nota: Programas escritos en lenguajes como C o Pascal prácticamente siempre se compilan, y otros como Perl o Python prácticamente siempre se interpretan.

Introducción a lenguajes scripting

Son lenguajes interpretados y pueden cumplir aspectos de cualquier paradigmas pueden acompañar un documento HTML o estar contenido en su interior. Las instrucciones del programa se ejecutan cuando se carga el documento, o cuando se produce alguna circunstancia tal como la activación de enlace por parte del usuario.

Estos lenguajes no necesitan ser compilados, una maquina es capaz de interpretar el código fuente y ejecutarlo, lo que hace de los lenguajes script la mejor solución para programación en entornos web

Ejemplos:

Awk

Phyton

Perl

Shell

etc

Todos los lenguajes tienen sus pros y sus contras por lo que no hay ninguno que sea mejor que el resto.

El nombre del lenguaje proviene de la afición de su

creador por los humoristas británicos MontyPython

Python permite dividir el programa en módulos reutilizables desde otros programas Python. También viene con una gran colección de módulos estándar que proporcionan E/S de ficheros, llamadas al sistema, sockets, interfaces GUI, etc.

Se trata de un lenguaje interpretado, lo que permite ahorrar el proceso de compilado.

Python es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible.

Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma.

Python fue creado a finales de los ochenta por Guido van Rossum en el Centro para las Matemáticas y la Informática (CWI, Centrum Wiskunde & Informática), en los Países Bajos como un sucesor del lenguaje de programación ABC, capaz de manejar excepciones e interactuar con el sistema operativo Amoeba.

Características generales de Python

- Lenguaje de programación de alto nivel del tipo scripting.

- Diseñado para ser fácil de leer y simple de implementar.

- Es código abierto (de libre uso).

- Puede ejecutarse en Mac, Windows y sistemas Unix; también ha sido portado a máquinas virtual JAVA y .NET.

- Es a menudo usado para desarrollar aplicaciones web y contenido web dinámico.

- Se utiliza para crear extensiones tipo plug-ins para programas de 2d y 3d como Autodesk Maya, Inkscape, etc.

- Los scripts de Python tienen la extensión de archivo .PY, que pueden ser parseados y ejecutados inmediatamente.

- Permite grabar programas compilados con extensión de archivo .PYC, los cuales suelen ser usados como módulo que pueden ser referenciados por otros programas Python.

Qué es PERL

Perl es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma características del lenguaje C, del lenguaje interpretado bourne shell(sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.

Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto y no tener ninguna de las limitaciones de los otros lenguajes de script.

Es un lenguaje interpretado que tiene varias utilidades, pero está principalmente orientado a la busqueda, extracción y formateado de ficheros de tipo texto. También es muy usado para manejo y gestión de procesos (estado de procesos, conteo y extracción de parámetros característicos, etc...).

Es una combinación de las características de los lenguajes más usados por los programadores de sistemas, como son los shell del sistema operativo UNIX, los utilidad ( que incluye un lenguaje interpretado propio) awk para formateo y tratamiento de texto e incluso caracteristicas de Pascal, aunque su potencia se basa en la similitud con las mejores características del lenguaje estructurado C.

Algunas de las ventajas del uso del lenguaje PERL son las siguientes:

oConstrucción de pequeños programas que pueden ser usados como filtros para obtener información de ficheros, realizar busquedas, ...

oSe puede utilizar en varios entornos, como puede ser Windows 95, OS/2, ..., sin realizar cambios de código, siendo unicamente necesario la introducción del interprete PERL correspondiente a cada sistema operativo.

oTambién es uno de los lenguajes mas utilizados en la programación de CGI scripts, que son guiones o scripts que utilizan el interface CGI (CommonGateway Interface), para intercambio de información entre aplicaciones externas y servicios de información. Como ejemplo de ello tenemos los programas de búsqueda usados por el browser Netscape.

oEl mantenimiento y depuración de un programa en PERL es mucho más sencillo que la de cualquier programa en C.

Una Shell de Unix o también shell, es el término usado en informática para referirse a un intérprete de comandos, el cual consiste en la interfaz de usuario tradicional de los sistemas operativos basados en Unix y similares como GNU/Linux.

Mediante las instrucciones que aporta el intérprete, el usuario puede comunicarse con el núcleo y por extensión, ejecutar dichas órdenes, así como herramientas que le permiten controlar el funcionamiento de la computadora.

Los comandos que aportan los intérpretes, pueden usarse a modo de guion si se escriben en ficheros ejecutables denominados shell-scripts, de este modo, cuando el usuario necesita hacer uso de varios comandos o combinados de comandos con herramientas, escribe en un fichero de texto marcado como ejecutable, las operaciones que posteriormente, línea por línea, el intérprete traducirá al núcleo para que las realice.

En el sentido más genérico del término, shell significa cualquier intérprete que los usuarios usen para escribir comandos. Su etimología proviene del uso natural de consolas en computadores funcionando bajo unix antaño, cuando los usuarios conectaban al computador central, lo hacían mediante consolas, (shells) por las cuales a través de un intérprete, hacían inicio de sesión y manejaban la computadora principal. Posteriormente, con la proliferación de los computadores personales y su filosofía monousuario, un computador por usuario (entiéndase lo contrario de la filosofía inicial de Unix, un computador, muchos usuarios conectados por terminales), se desarrolló un software que emulase las características principales de las consolas físicas, a modo de poder seguir usándolas como clientes en un computador o núcleo que comprendiera la convención estándar usada para configurar y llevar a cabo tareas de administración de emergencia con servidores basados en Unix.

Preguntas?

¿Qué es un interprete en programación?

Haber si entendieron.

Es un programa informático capaz de analizar y ejecutar otros programas en un lenguaje de alto nivel

Menciona 3 características de los interpretes.

• Son mas fáciles de aprender• Facilita búsqueda de errores• Puede ser interrumpido con facilidad

¿Qué es un compilador?

Es un programa que convierte o traduce el código fuentea un programa hecho de alto nivel

Menciona 3 características de un compilador

• Traduce todo un programa antes de ejecutarlo• informa al usuario de la presencia de errores en el

Programa fuente• Poseen un editor integrado con un sistema de

coloreado para los comandos.

¿Qué es un lenguaje scripting?

Son lenguajes interpretados

Es un lenguaje de programación cuya filosofía hace hincapié en una sintaxis

Python

Menciona 3 características de Python

• Es de código abierto• Lenguaje de programación de alto nivel• Se usa para desarrollar aplicaciones web y contenido web

dinámico

Lenguaje interpretado que tiene varias utilidades, pero eesta principalmente orientado a búsquedas

PERL

Menciona una ventaja del Lenguaje PERL

Construcción de pequeños programas que pueden ser usados como filtros para obtener información de ficheros

Lenguaje de programación que significa "cualquier interprete que los usuarios usen para escribir comandos"

SHELL