jueves, 13 de septiembre de 2012

AUTOMATAS

https://docs.google.com/file/d/0B1zWyaP2Sib2Vkx2dThaY2s3djQ/edit
ANALISIS LEXICO

https://docs.google.com/file/d/0B1zWyaP2Sib2Ym5iYWx6LTFOZVE/edit

VENTAJAS DE LA UTILIZACION DE INTÉRPRETES

Ø  Realizan la fase de análisis y ejecución a la vez, lo cual imposibilita tales optimizaciones. Los sistemas interpretados suelen ser menos eficientes que los compilados.

Ø  Son más sencillos de implementar. Lo cual facilita el estudio de la corrección del intérprete y proporciona nuevas líneas de investigación como la generación automática de intérpretes a partir de las especificaciones semánticas del lenguaje.

Ø  Proporcionan una mayor flexibilidad que permite modificar y ampliar características del lenguaje fuente.

Ø  Facilitan la meta-programación. Un programa puede manipular su propio código fuente a medida que se ejecuta. Esto facilita la implementación de sistemas de aprendizaje automatizado y reflectividad.

Ø  Portabilidad del lenguaje: Para que el lenguaje interpretado funcione en otra  máquina sólo es necesario que su intérprete funcione en dicha máquina.

Ø  Facilitan el desarrollo rápido de prototipos, potencian la utilización de sistemas interactivos y facilitan las tareas de depuración.

APLICACIONES DE LOS SISTEMAS BASADOS EN INTÉRPRETES

Ø  Intérpretes de Comandos: Los sistemas operativos cuentan con intérpretes de comandos, toman un lenguaje fuente que puede incluir sentencias de control (bucles, condiciones, asignaciones, etc.) y ejecutan los diferentes comandos a medida que aparecen en el lenguaje.

Ø  Lenguajes basados en Escritos: diseñados como herramientas que sirvan de enlace entre diferentes sistemas o aplicaciones. Suelen ser interpretados con el fin de admitir una mayor flexibilidad a la hora de afrontar las peculiaridades de cada sistema.

Ø  Entornos de Programación: suelen disponer de un complejo entorno de desarrollo interactivo con facilidades para la depuración de programas. Entre estos sistemas pueden destacarse los entornos de desarrollo para Lisp, Visual Basic, Smalltalk, etc.

Ø  Lenguajes de Propósito Específico: Ciertos lenguajes incluyen sentencias que realizan tareas complejas en contextos específicos. Existe una gran variedad de aplicaciones en las que se utilizan este tipo de lenguajes como consultas de Bases de Datos, simulación, descripción de hardware, robótica, CAD/CAM, música, etc.

Ø  Sistemas en Tiempo Real: Entornos que permiten modificar el código de una aplicación en tiempo de ejecución de forma interactiva.

Ø  Intérprete de Código Intermedio: Una tendencia tradicional en el diseño de compiladores es la generación de un código intermedio para una máquina abstracta, El siguiente paso puede ser: generación del código objeto a partir del código intermedio para una máquina concreta, finalizando el proceso de compilación o interpretar dicho código intermedio en una máquina concreta.

TIPOS DE INTÉRPRETES

Ø  Intérpretes puros son los que analizan y ejecutan sentencia a sentencia todo el programa fuente. Siguen el modelo de interpretación iterativa y, por tanto, se utilizan principalmente para lenguajes sencillos.

Ø  Intérpretes avanzados o normales incorporan un paso previo de análisis de todo el programa fuente. Generando posteriormente un lenguaje intermedio que es ejecutado por ellos mismos. Permiten realizar un análisis más detallado del programa fuente (comprobación de tipos, optimización de instrucciones, etc.)

Ø  Interpretes incrementales: Existen ciertos lenguajes que, por sus características, no se pueden compilar directamente. La razón es que pueden manejar objetos o funciones que no son conocidos en tiempo de compilación, ya que se crean dinámicamente en tiempo en ejecución. La idea es compilar aquellas partes estáticas del programa en lenguaje fuente, marcando como dinámicas las que no puedan compilarse. Posteriormente, en tiempo de ejecución, el sistema podrá compilar algunas partes dinámicas o recompilar partes dinámicas que hayan sido modificadas.

Ø  Evaluadores parciales: La utilización de evaluadores parciales o especializadores surge al considerar que muchos programas contienen dos tipos de datos de entrada.