Proceso de Compilación Flashcards
8
¿Qué es un compilador?
Un compilador es un complejo programa que lee un programa escrito en lenguaje fuente, y lo traduce a un programa equivalente en lenguaje objeto, normalmente mas cercano al lenguaje de maquina.
programa fuente => programa objeto.
¿Cómo está dividido el proceso de compilación?
Está dividido en dos partes:
1. Análisis: a partir del programa fuente se crea una representación del mismo.
2. Síntesis: a partir de la representación intermedia, construye el programa objeto.
¿Cómo esta formado el Análisis?
El Análisis está formado por tres fases:
1. Análisis Léxico.
2. Análisis Sintáctico.
3. Análisis Semántico.
¿Qué es el Análisis Léxico?
Realizado por el Scanner, es el proceso que consiste en recorrer el flujo de caracteres que forman el Programa Fuente, detectar los lexemas que componen ese programa, y traducir la secuencia de estos lexemas en una secuencia de tokens cuya representación es mas útil para el resto del compilador.
¿Cuáles son las dos formas de implementar un Scanner?
- A través de un programa auxiliar tipo lex.
- Mediante la construcción de una rutina basada en el diseño de un AFD (reconoce los LRs que forman los tokens).
¿Qué es el Análisis Sintáctico?
Realizado por el Parser, verifica si los tokens que recibe del Scanner, forman secuencias o construcciones válidas e invoca a las rutinas semánticas que correspondan, según la gramática sintáctica del LP.
¿Qué es el Parser?
Es un grupo de rutinas que convierte el flujo de tokens en un árbol de análisis sintáctico (AAS), generalmente implicito.
¿En qué consiste el Análisis Semántico?
Consiste en la realización de tareas de verificación y de conversión que no puede realizar el Análisis Sintáctico.
Debe verificar que se cumplan todas las reglas sensibles al contexto.
¿Cuáles son las funciones que lleva a cabo el Análisis Semántico?
- Chequear la semántica estática de cada construcción (que sea legal y tenga significado).
- Si la construcción es semánticamente correcta, la rutina hace la traducción (genera código para una maquina virtual que implementa la construcción).
¿Qué gramáticas se utilizan para cada fase del análisis?
- Análisis Léxico: GR.
- Análisis Sintáctico: GIC.
- Análisis Semántico: GSC.
¿Por quién es detectado un error léxico?
Es detectado por el Scanner en el Análisis Léxico, si un caracter no es válido para ningun lexema en el LP, se produce el error lexico y le informa al Parser.
La reparación mas sencilla es ignorar el caracter y seguir con el siguiente.
¿Qué derivación implementa el PAS?
Procedimiento de Análisis Sintáctico.
Implementa el Análisis Sintáctico Descendente Recursivo (ASDR)
¿Qué derivación utiliza el Análisis Sintáctico Descendente (top-down)?
Utiliza una derivación por izquierda que comienza desde el axioma.
¿Qué derivación utiliza el Análisis Sintáctico Ascendente (bottom-up)?
Utiliza una derivación por derecha desde las hojas hacia el axioma.
¿Qué es un Parser LL(1) o Parser Predictivo?
Es un Parser capaz de elegir entre los distintos lados derechos de un determinado noterminal con solo conocer el proximo token.