Compiladores: Fases, Herramientas y Componentes Clave

1. Definición de un compilador

1.1. Un compilador es un programa que lee otro programa escrito en un lenguaje (fuente) y lo traduce a otro programa parecido en otro lenguaje (objeto).

2. Partes constitutivas del compilador

2.1. Fase de análisis: Divide el programa fuente en sus elementos o componentes y crea una representación intermedia.

2.2. Fase de síntesis: Construye el programa objeto a partir de la representación intermedia.

3. Editores de estructuras

3.1. Analiza el texto del programa fuente, asignándole una estructura jerárquica apropiada.

3.2. También puede proporcionar:

3.2.1. Palabras clave de forma automática.

3.2.2. Saltos desde un paréntesis, llave o corchete que abre hasta su correspondiente que cierra.

3.2.3. Ayuda en la edición de las estructuras propias del lenguaje.

4. Visualizadores estéticos

4.1. Imprime el programa fuente de tal forma que quede visiblemente claro.

4.1.1. Por ejemplo: Los comentarios pueden aparecer con un tipo de letra especial, al igual que las palabras clave.

5. Verificadores estáticos

5.1. Lee el programa fuente y lo analiza para intentar descubrir errores potenciales sin ejecutar el programa.

5.2. Por ejemplo:

5.2.1. Partes del programa que nunca se podrán ejecutar.

5.2.2. Si una variable se utiliza antes de ser definida.

5.2.3. Intentar utilizar una variable de tipo real como apuntador.

6. Intérpretes

6.1. Realiza las operaciones que envuelve el programa fuente.

6.2. En la mayoría de los casos, son utilizados para ejecutar órdenes (por ejemplo: el intérprete de comandos).

7. Fases del análisis de una compilación

7.1. Análisis lineal: La secuencia de caracteres que forma el programa fuente se lee de izquierda a derecha y se agrupa en componentes léxicos, que son secuencias de caracteres que tienen un significado colectivo.

7.2. Análisis jerárquico: Los componentes léxicos se agrupan jerárquicamente en colecciones anidadas con un significado colectivo.

7.3. Análisis semántico: Se realizan ciertas revisiones para asegurar que los componentes de un programa se ajustan de un modo significativo.

8. Etapas inicial y final de un compilador

8.1. Etapa inicial:

8.1.1. Comprende aquellas fases que dependen principalmente del código fuente.

8.1.2. Normalmente incluye el análisis léxico, sintáctico y semántico, la creación de la tabla de símbolos, la generación de código intermedio y cierta optimización de éste.

8.1.3. También incluye el manejo de errores correspondientes a cada etapa.

8.2. Etapa final:

8.2.1. Comprende aquellas partes del compilador que dependen de la máquina objeto.

8.2.2. En general, estas partes dependen del lenguaje intermedio, más que del lenguaje fuente.

8.2.3. Comprende aspectos de optimización y generación de código, junto con el manejo de errores necesario y las operaciones con la tabla de símbolos.

9. Herramientas para la construcción de compiladores

9.1. Generadores de analizadores léxicos:

9.1.1. Trabajan a partir de una especificación basada en expresiones regulares.

9.1.2. La organización básica del analizador léxico resultante es un autómata finito.

9.2. Generadores de analizadores sintácticos:

9.2.1. Trabajan a partir de una gramática independiente del contexto.

9.2.2. El generador hace de esta fase una de las más fáciles de aplicar.

9.2.3. Se utilizan poderosos y complejos algoritmos para realizar el análisis.

9.3. Dispositivos de traducción dirigida por la sintaxis:

9.3.1. Producen grupos de rutinas que recorren el árbol de análisis sintáctico generando código intermedio.

9.4. Generadores automáticos de código:

9.4.1. Toman un conjunto de reglas que definen la traducción de cada operación del lenguaje intermedio al lenguaje de máquina objeto.

9.4.2. La técnica fundamental es la concordancia de plantillas.

10. Compilador de compiladores

10.1. Un compilador de compiladores o generador de *parsers* es una utilidad para generar el código fuente de un *parser*, intérprete o compilador a partir de una descripción de lenguaje anotado en la forma de gramática (usualmente BNF).

11. Análisis léxico: definición y ejemplo

11.1. Toma una cadena de caracteres que forman la entrada y produce una cadena de nombres o identificadores, palabras clave o reservadas (PC), signos o marcas de puntuación.

Ejemplo:

TIPO EJEMPLOS

ID foo n14 last

NUM 73 0 00 515

REAL 66.1 .5 10. 1e67

IF if

COMMA ,

NOTEQ !=

LPAREN (

12. Manejo de buffer

12.1. El analizador léxico (*scanner*) y el analizador sintáctico (*parser*) forman un dúo “productor-consumidor”. El *scanner* produce *tokens* y el *parser* los consume.

13. Análisis sintáctico

13.1. El *parser* es el programa que funciona como núcleo del compilador. Alrededor del *parser* funcionan los demás programas como el *scanner*, el analizador semántico y el generador de código intermedio.

14. Razones para realizar un análisis sintáctico

14.1. Se puede tener una definición precisa y fácil de entender.

14.2. Una gramática apropiada reparte estructura a un lenguaje de programación.

14.3. Podemos construir automáticamente un *parser* que determine si el programa es sintácticamente correcto.

14.4. Ayuda en el proceso de traducción.

14.5. Es fácil modificar/añadir al lenguaje.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.