Saltar al contenido
Logotipo de Trainontech Trainontech

Lenguajes y Fundamentos de Programación · LNG-311

Compiladores e intérpretes: construye tu lenguaje

Análisis léxico, sintáctico, árbol de sintaxis y evaluación construyendo un lenguaje pequeño y completo.

Próximamente Especialización 8 módulos · 40 clases

Formato asíncrono Desarrollo Python, JupyterLab

Lo que aprenderás

  • 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 compilador 5 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éxico 5 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áctico 5 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 abstracta 5 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 ámbitos 5 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 árbol 5 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 pila 5 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 proyecto 5 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.

Código
LNG-311
Nivel
Especialización
Público
Desarrollo
Entorno
Python, JupyterLab

Este curso incluye

  • 40 clases en vídeo bajo demanda
  • Práctica íntegramente en JupyterLab, solo con un navegador
  • Tutorización en el campus
  • Acceso desde móvil, tableta y ordenador
  • Actualizaciones cuando cambia la versión de la herramienta
  • Certificado de finalización

Sigue aprendiendo

Cursos relacionados

Bajo demanda

LNG-152Lenguajes y Fundamentos de Programación

C++ avanzado: plantillas, memoria y STL

Metaprogramación con plantillas, punteros inteligentes, algoritmos de la STL y rendimiento medido.

C++

Especialización 39 clases

Bajo demanda

LNG-301Lenguajes y Fundamentos de Programación

Algoritmos avanzados y complejidad

Programación dinámica, algoritmos voraces, grafos ponderados y análisis asintótico con medición real.

PythonJupyterLab

Especialización 37 clases