Procesador de Lenguaje
description
Transcript of Procesador de Lenguaje
Compiladores 1, Segundo Semestre 2010
Universidad De San Carlos de Guatemala
Sección A Página 1
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.
Intérprete [No genera código adicional]: 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.
• Es más sencillo de implementar.
• No es necesario tener en memoria todo el código fuente.
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.
• Si en cualquier momento se produce un error, se debe
ejecutar desde el inicio.
Interprete
Avanzado
Incorporan un paso previo de análisis de todo el programa fuente.
• Generan posteriormente un lenguaje ejecutado por el parser.
• Usan lenguajes mas avanzados ya permiten optimización de
código.
Interprete
Incrementales
Dirigidos a lenguajes que no pueden compilarse.
• Se pueden crear objetos y funciones en tiempo de ejecución.
• 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]
Interprete
Programa
Fuente Resultados
Compiladores 1, Segundo Semestre 2010
Universidad De San Carlos de Guatemala
Sección A Página 2
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.
Tipos de Compiladores:
Compiladores Cruzados Generan código para un sistema distinto del que están
funcionando.
Compiladores Optimizadores Realizan cambios en el código para mejorar su eficiencia, pero
manteniendo la funcionalidad del programa original.
Compiladores de una sola
pasada
Generan el código maquina a partir de una única lectura del
código fuente.
Compiladores de Varias
Pasadas
Necesitan leer el código fuente varias veces antes de poder
producir el código maquina.
Compiladores JIT Forman parte de un intérprete y compilan partes del código
según se necesitan.
Los Compiladores tienen 2 fases:
Fase de Análisis: Verifica el código fuente haciendo un análisis de los componentes léxicos, luego
agrupa los elementos en tokens y se verifica su estructura semántica y sintáctica.
Fase de Síntesis: Después de la fase de análisis algunos compiladores generan representación
intermedia del programa fuente que tiene como característica fácil de producir y fácil de traducir a
programa objeto. Luego se trata de mejorar el código intermedio de modo que ejecute un código
maquina más fácil de ejecutar.
Compilacion
Programa
Fuente
Programa
Objeto
FUENTE DESTINO
Análisis Síntesis
Compiladores 1, Segundo Semestre 2010
Universidad De San Carlos de Guatemala
Sección A Página 3
Programa Fuente
Programa Objeto
Análisis Léxico
Análisis Sintáctico
Análisis Semántico
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.
Analiza el orden de un lenguaje con sus reglas que son prescritas por
estructura bien definida(árbol sintáctico a partir de una gramática).
Una gramática da una especificación sintáctica precisa y fácil de
entender de un lenguaje de programación.
Verifica el contexto en el que se encuentra cada sentencia sintáctica.
Se verifican:
- Comprobación de Tipos
- Alcance y nombre de las variables
- Sobrecarga de operadores
Generación de
código intermedio La generación de código intermedio es una representación
intermedia, para una maquina abstracta.
Codigo de tres direcciones: Una secuencia de operaciones que tiene
como máximo 3 operadores.
Optimización de
código intermedio 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
Generación 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
Síntesis
Compiladores 1, Segundo Semestre 2010
Universidad De San Carlos de Guatemala
Sección A Página 4
Tabla de Simbolos:
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)
Compiladores Vs Intérpretes
Compilador Interprete
• Una única compilación.
• Mayor velocidad ejecución.
• Mayor detalle de errores.
• Mayor consumo de memoria.
• Interpretación en ejecución.
• Menor velocidad de ejecución.
• Menor detalle de errores.
• Menor consumo de memoria.