You are on page 1of 18

PROCESADOR DE LENGUAJE

Compiladores 1
Sección C

.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.

• 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 . •No es necesario tener en memoria todo el código fuente.Interprète •Es más sencillo de implementar.

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

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

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

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

Programa Fuente Flujo de caracteres Estructura de un Compilador Análisis Léxico Flujo de tokens Análisis Sintáctico Árbol sintáctico Análisis Semántico Tabla de Símbolos Árbol sintáctico Código Intermedio Optimizador de Código Generador de Código Programa Objeto Manejador de Errores .

palabras reservadas..Análisis Léxico Análisis Sintáctico Análisis Léxico Primera Fase de un compilador Análisis Semántico Código Intermedio Optimizador de Código Generador de Código 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. operadores lógicos. constantes etc. . símbolos especiales.

cerrarlo).Análisis Léxico Análisis Sintáctico Análisis Semántico Código Intermedio Optimizador de Código Generador de Código Análisis Léxico Estas herramientas nos ayudara a la implementación del análisis léxico: Jlex . Jflex. Lex: • Manejar el archivo fuente (abrirlo. Flex. • Ignorar caracteres no relevantes • Agrupar resto de los caracteres • Rechazar agrupaciones inválidas y clasificar las válidas • Manejo y Recuperación de errores . leerlo.

.Análisis Léxico Análisis Sintáctico Análisis Semántico Código Intermedio Optimizador de Código Generador de Código Análisis Sintáctico Segunda Fase • 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.

• Comprobar que la secuencia de componentes léxicos cumple las reglas de la gramática. • Recuperación de errores. ANTLR y CUP • Creación del Árbol del análisis sintáctico.Análisis Léxico Análisis Sintáctico Análisis Semántico Código Intermedio Optimizador de Código Generador de Código Análisis Sintáctico Estas herramientas nos ayudara a la implementación del análisis Sintactico: Bison. JavaCC. Happy. Yacc. .

del flujo de control. comprobación: de tipos. de unicidad.Análisis Léxico Análisis Sintáctico Análisis Semántico Código Intermedio Optimizador de Código Generador de Código Análisis Semántico • se encarga de detectar la validez semántica del árbol generado del análisis sintáctico: Ejemplo: • Declaración de identificadores. .

Análisis Léxico Análisis Sintáctico Análisis Semántico Código Intermedio Optimizador de Código Generador de Código 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 .

• Existen algunas reglas para optimizar: • Elimina la reescritura de código • Eliminación de código inalcanzable • Optimización de temporales .Análisis Léxico Análisis Sintáctico Análisis Semántico Código Intermedio Optimizador de Código Generador de Código 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.

• Las posiciones de memoria se seleccionan para cada una de las variables usadas en el programa.Análisis Léxico Análisis Sintáctico Generador de Código Análisis Semántico Código Intermedio Optimizador de Código Generador de Código • Traduce el código intermedio a código ensamblador. .

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

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) .