Escribir un analizador léxico que convierta texto fuente en una secuencia de tokens con posición.
Implementar un analizador sintáctico descendente recursivo con precedencia de operadores.
Construir el árbol de sintaxis abstracta y recorrerlo con el patrón visitante.
Resolver ámbitos y ligaduras de variables antes de la evaluación para detectar errores tempranos.
Evaluar el árbol con un intérprete que soporte funciones, cierres y control de flujo.
Emitir errores de compilación con línea, columna y mensaje útil para quien escribe el programa.
Compilar a una máquina de pila propia y comparar su rendimiento con el intérprete de árbol.
Contenido del curso
8 módulos · 40 clases en vídeo · práctica guiada en cada módulo
Módulo 1 · Anatomía de un compilador5 clases
Fases de compilación y qué produce cada una
Compilador, intérprete y máquina virtual
El lenguaje que vamos a construir: especificación
Entorno del proyecto y estrategia de pruebas
Primer recorrido completo con un ejemplo mínimo
Módulo 2 · Análisis léxico5 clases
De caracteres a tokens: diseño del analizador
Autómatas finitos aplicados al reconocimiento
Números, cadenas, identificadores y palabras reservadas
Comentarios, espacios y seguimiento de línea y columna
Errores léxicos con mensajes útiles
Módulo 3 · Gramática y análisis sintáctico5 clases
Gramáticas libres de contexto y notación BNF
Ambigüedad, precedencia y asociatividad
Análisis descendente recursivo paso a paso
Escalada de precedencia para expresiones
Recuperación tras un error de sintaxis
Módulo 4 · Árbol de sintaxis abstracta5 clases
Diseño de los nodos del árbol
Construcción del árbol durante el análisis
Patrón visitante para recorrerlo
Impresión del árbol para depurar
Pruebas sobre programas de ejemplo
Módulo 5 · Semántica y ámbitos5 clases
Tabla de símbolos y ámbitos anidados
Resolución de variables antes de ejecutar
Comprobaciones estáticas y errores tempranos
Funciones, parámetros y valores de retorno
Cierres y captura del entorno
Módulo 6 · Intérprete de árbol5 clases
Evaluar expresiones y sentencias
Control de flujo: condicionales y bucles
Llamadas a función y pila de entornos
Errores en tiempo de ejecución con traza
Extender el lenguaje con una característica nueva
Módulo 7 · Compilación a máquina de pila5 clases
Diseño del conjunto de instrucciones
Generar código a partir del árbol
Implementar la máquina virtual
Comparar rendimiento con el intérprete de árbol
Optimizaciones sencillas sobre el código generado
Módulo 8 · Cierre del proyecto5 clases
Añadir listas y funciones nativas al lenguaje
Construir un intérprete interactivo de línea de comandos
Batería de pruebas del lenguaje completo
Documentar la gramática final
Adaptar el método a un lenguaje de dominio específico
Requisitos
Python fluido, con soltura en clases, recursión y estructuras de datos.
Conocimiento previo de árboles y grafos, y de gramáticas al menos a nivel intuitivo.
Haber completado un curso de estructuras de datos o experiencia equivalente.
Basta con un navegador: el proyecto se desarrolla en cuadernos y ficheros de JupyterLab.
Descripción
Casi todo el software procesa lenguajes: ficheros de configuración, plantillas, consultas, reglas de negocio, formatos de intercambio. Quien no ha construido nunca un analizador acaba resolviendo esas necesidades con expresiones regulares encadenadas que se rompen en cuanto la entrada se anida. Entender el proceso de compilación cambia la forma de abordar cualquier problema de análisis de texto estructurado.
El curso construye un lenguaje completo pieza a pieza. Se empieza por el analizador léxico, se sigue con la gramática y el analizador descendente recursivo, se levanta el árbol de sintaxis abstracta y se implementa un intérprete con variables, funciones, cierres y control de flujo. Al final se compila a una máquina de pila propia y se comparan ambos enfoques con mediciones.
El resultado es un lenguaje funcionando y, sobre todo, un método reutilizable para cualquier analizador que haga falta escribir después: lenguajes de dominio específico, motores de reglas, formatos propios o herramientas de análisis de código. También aclara desde dentro el comportamiento de los lenguajes que se usan a diario, incluidos sus mensajes de error.
¿Para quién es este curso?
Desarrolladores que necesitan analizar formatos propios o construir un lenguaje de dominio específico.
Perfiles de desarrollo que trabajan con herramientas de análisis estático o transformación de código.
Programadores con experiencia que quieren entender desde dentro el lenguaje que usan a diario.
Próximamente
Curso en hoja de ruta. Se prioriza según la demanda recogida y los proyectos en cartera.
Este sitio web utiliza cookies propias y de terceros para recopilar información con finalidad técnica. No se recaban ni ceden datos de carácter personal sin tu consentimiento. Más información en la política de cookies.