La primera semana del curso se abordaron temas introductorios al ámbito de Compiladores y Autómatas, se habló de conceptos como el modelo de análisis, asimismo se revisó a grosso modo el proceso completo según el cual se genera un ejecutable a partir de código fuente, y luego se enfatizó en las etapas propias y únicas del compilador. Se trataron temas referentes al front-end del proceso de compilación.
Un compilador es un programa que se encarga de crear código objeto (ensamblador, o código máquina) a partir del código fuente para un lenguaje de programación específico. El compilador se encarga también de la detección y reporte de errores sintáticos en el código fuente que impidan la generación correcta de código objeto. (Cabe destacar que la compilación no se usa únicamente el contexto informático para la generación de código objeto, sino que también se utiliza para compilar consultas SQL, o para compilar circuitos digitales y crear mapeados eléctricos)
El proceso de compilación se subdivide en dos principales partes:
La primera es la parte de análisis donde el código fuente se descompone en los elementos que lo forman (no es tampoco una descomposición exhaustiva y total) y se crea una representación intermedia del programa.
La segunda es la parte de síntesis donde esta representación intermedia se procesa/optimiza/altera para generar el programa deseado final en código objeto.
Además del compilador hay otros importantes etapas del proceso de creación de un programa, ambos son importantes cuando se trabaja con el código disperso en muchos archivos. Para esto sirven el preprocesador (C++) y el Linker, el primero permite hacer llamados y generar un estructura de código con referencias a funciones en otros archivos de código. Estos "vacíos" en el código serán rellenados por el linker, una vez que se tengan disponibles todos los archivos de código objeto generados por el compilador. (El uso de DLLs, y lenguajes más modernos como Java no utilizan el linker)
La compilación se puede resumir en seis etapas, agrupadas en dos etapas:
En el front-end existirán diferencias entre lenguajes de programación, dado que estos tienen diferencias de léxico en cuanto a las palabras reservadas que utilicen, tipos de datos, etc. Al finalizar la generación intermedia de código, se debería contar con árbol independiente del lenguaje. Y dado que este árbol es insumo para la etapa del back-end, este es común para todos los lenguajes.
La detección de errores y la tabla de símbolos son componentes y funciones disponibles para todas las etapas de la compilación de código
El Front - End se constituye por las etapas: