PROCESADOR DE LENGUAJE

Compiladores 1 Sección A

Procesador de Lenguaje
‡ Los procesadores de lenguaje son todos los programas que a través de una entrada escrita en un lenguaje de programación pueden manipular herramientas de software y hardware de un computador.

Interprète

‡Es más sencillo de implementar. ‡No es necesario tener en memoria todo el código fuente.

‡ Es un programa que simultáneamente analiza y ejecuta un programa escrito en lenguaje fuente. ‡ La primera fase de análisis es igual que el compilador.
Programa Fuente
Interprete

Resultados

Interprete Puro El proceso es a través del análisis de cada sentencia y su ejecución hasta finalizar todo el programa fuente. y Pensado para maquinas con limitaciones de memoria. y Si en cualquier momento se produce un error, se debe ejecutar desde el inicio. Interprete Incorporan un paso previo de análisis de todo el Avanzado programa fuente. y Generan posteriormente un lenguaje ejecutado por el parser. Interprete Dirigidos a lenguajes que no pueden compilarse. Incrementales y Se pueden crear objetos y funciones en tiempo de ejecución. y Se compilan las partes estaticas.

Aplicaciones de Interpretes
Interpretes de comandos: ‡ Tomando el lenguaje fuente y ejecuta sobre el sistema operativo (C-SHELL, KORN-SHELL, JCL). Entornos de programación: ‡ Lenguajes con características especiales y cuya compilación no es efectiva. [Python, Ruby, Perl]

Compilador
‡ Los compiladores son programas que reciben un lenguaje fuente y lo transforman a un programa objeto, que puede ser ensamblador o de código máquina.
Programa Fuente
Compilacion

Programa Objeto

Tipos de Compiladores
Compiladores Cruzados Compiladores Optimizadores Generan código para un sistema distinto del que están funcionando. Realizan cambios en el código para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original. Generan el código maquina a partir de una única lectura del código fuente. Necesitan leer el código fuente varias veces antes de poder producir el código maquina. Forman parte de un intérprete y compilan partes del código según se necesitan.

Compiladores de una sola pasada Compiladores de Varias Pasadas Compiladores JIT

Programa Fuente

Análisis Léxico

Análisis Sintáctico

Análisis Semántico

Tabla de Símbolos

Código Intermedio

Manejador de Errores

Optimizador de Código

Generador de Código

Programa Objeto

Análisis Léxico

Análisis Léxico
Lee los caracteres de entrada y elabora como salida una secuencia de componentes léxicos que son utilizadas en el análisis sintáctico Componentes Léxicos: Identificadores, palabras reservadas, operadores lógicos, símbolos especiales, constantes etc..

Análisis Sintáctico

Análisis Semántico

Código Intermedio

Optimizador de Código

Generador de Código

Análisis Léxico

Análisis Sintáctico

Análisis Léxico
Estas herramientas nos ayudara a la implementación del análisis léxico: Jlex , Flex, Jflex, Lex: ‡ Manejar el archivo fuente (abrirlo, leerlo, cerrarlo). ‡ Ignorar caracteres no relevantes ‡ Agrupar resto de los caracteres
‡ Rechazar agrupaciones inválidas y clasificar las válidas

Análisis Semántico

Código Intermedio

Optimizador de Código

Generador de Código

‡ Manejo y Recuperación de errores

Análisis Léxico

Análisis Sintáctico

Análisis Sintáctico
‡ Analiza el orden de un lenguaje con sus reglas que son prescritas por estructura bien definida. ‡ Una gramática da una especificación sintáctica precisa y fácil de entender de un lenguaje de programación.

Análisis Semántico

Código Intermedio

Optimizador de Código

Generador de Código

Análisis Léxico

Análisis Sintáctico

Análisis Sintáctico
Estas herramientas nos ayudara a la implementación del análisis Sintactico: Bison, Yacc, Happy, JavaCC, ANTLR y CUP ‡ Creación del Árbol del análisis sintáctico. ‡ Recuperación de errores. ‡ Comprobar que la secuencia de componentes léxicos cumple las reglas de la gramática.

Análisis Semántico

Código Intermedio

Optimizador de Código

Generador de Código

Análisis Léxico

Análisis Sintáctico

Análisis Semántico
‡ se encarga de detectar la validez semántica del árbol generado del análisis sintáctico: Ejemplo: ‡ Declaración de identicadores, comprobación: de tipos, del flujo de control, de unicidad.

Análisis Semántico

Código Intermedio

Optimizador de Código

Generador de Código

Análisis Léxico

Análisis Sintáctico

Generación de Código Intermedio
‡ El generador de código intermedio transforma un árbol semántico en una representación en un lenguaje intermedio cercano al código objeto. Código 3 direcciones: ‡ Es una secuencia de proposiciones de la forma general: ‡ x := y op z op representa cualquier operador

Análisis Semántico

Código Intermedio

Optimizador de Código

Generador de Código

Análisis Léxico

Análisis Sintáctico

Optimizador de Código
‡ La optimización de código es la verificación que se hace del código ya generado para mejora la velocidad al momento de la ejecución. ‡ Existen algunas reglas para optimizar: ‡ Elimina la reescritura de código ‡ Eliminación de código inalcanzable ‡ Optimización de temporales

Análisis Semántico

Código Intermedio

Optimizador de Código

Generador de Código

Análisis Léxico

Análisis Sintáctico

Generador de Código
‡ Traduce el código intermedio a código ensamblador. ‡ Las posiciones de memoria se seleccionan para cada una de las variables usadas en el programa.

Análisis Semántico

Código Intermedio

Optimizador de Código

Generador de Código

Tabla de Símbolos
‡ Almacena la estructura de datos: ‡ Variables, Constantes, Etiquetas, Tipos, Valores, Asignación de valores. ‡ Operaciones: ‡ Insertar símbolo. ‡ Consultar símbolo. ‡ Borrar símbolo.

Detección de Errores:
‡ El manejador de errores permite establecer si el programa fuente posee algún error ya sea de tipo: ‡ léxico (caracteres no definidos), ‡ sintáctico (estructura inadecuada) ‡ semántico (contexto no apropiado)