Resumen de Traducción Definición: Un traductor es un algoritmo que convierte un código fuente en un programa objeto equivalente.
Definición: Un compilador es un traductor donde el lenguaje objeto está un nivel “más bajo” que el lenguaje del código fuente.
(Gp:) Traductor (Gp:) Codigo Fuente (Gp:) Programa Objeto
Resumen de Traducción (cont.)? ¿ Cuándo es el nivel de un lenguaje menor que otro ?
Definición: Un interpretador es un algoritmo que simula la ejecución de programas escritos en un determinado lenguaje fuente.
Interpretador Fuente entrada salida
Resumen de Traducción (cont.)? Definición: La implementación de un lenguaje de programacion consiste de un traductor (o compilador) para ese lenguaje, y un interpretador para el correspondiente lenguaje objeto. Interpretador Objeto entrada salida Compilador Fuente
Traducción Un programa fuente puede ser traducido un número arbitrario de veces antes que el programa objeto sea generado.
Traductor1 Fuente Traductor2 TraductorN Objeto …
Traducción (cont.)? Cada una de estas traducciones es llamada una fase, no se debe confundir con una pasada, i.e. una escritura al disco.
P: ¿ Cómo debiera ser divido en fases un compilador?
R: De manera que cada fase pueda ser descrita por un modelo formal de computación, y realizar la fase eficientemente.
Traducción (cont.)? P: ¿ Cómo se divide usualmente un compilador?
R: En 2 fases principales, con varias posibilidades de subdivisión. Fase 1: Análisis (determina correctitud)? Fase 2: Síntesis (produce código objeto)? Otros criterios: Fase 1: Sintaxis (forma). Fase 2: Semántica (significado).
División tipica de un compilador Scanning (Análisis lexico). Objetivo: Agrupar secuencia de caracteres que ocurren en la fuente, en unidades lógicas atómicas llamadas tokens. Ejemplos de tokens: Identificadores, palabras reservadas, enteros, hileras, signos de puntuación, “espacios en blanco”, caracteres de fin de línea, comentarios, etc., … Scanner (Analizador Léxico)? Fuente Secuenica de Tokens
Análisis Léxico Se debe tratar con carateres fin de línea y fin de archivo (end-of-file). Se hace una clasificación preliminar de tokens. Por ejemplo, ‘program’ y ‘Ex’ son clasificados como identificadores. Se tiene que dar reglas no-ambiguas para la formación de tokens.
Ejemplo:
Filtraje (Screening) Objetivo: Remover los tokens no deseados. Clasificar las palabras reservadas. Unir/simplificar tokens. (Gp:) Screener (Gp:) Secuencia de Tokens (Gp:) Secuencia de Tokens
Filtraje (Screening)? Reconoce (y reclasifica) palabras reservadas.
Descarta espacios en blanco (y comentarios).
Actua como una interfaz entre el “scanner” y la siguiente fase, el “parser” (analizador sintáctico).
Ejemplo:
Análisis sintactico (Parsing) Objetivos:
Determinar si la secuencia de tokens es sintácticamente correcta.
Agrupar los tokens, en una estructura sintáctica correcta (árbol), de ser posible.
Análisis sintáctico (cont.)? Estructura sintáctica de programas:
Expresiones Declaraciones Procedimientos Funciones Módulos
Metodología: Usar “reglas de reescritura” (a.k.a. BNF).
Página siguiente |