Construye tu propio intérprete de Lisp
Construye un intérprete de Lisp desde cero. Escribe un tokenizador, parser y evaluador, y añade clausuras para descubrir cómo un lenguaje ejecuta tu código.
Python · JavaScript · TypeScript
Construye un compilador desde cero. Transforma código fuente en bytecode con análisis léxico, AST, análisis semántico, generación de código y una máquina virtual.
Constrúyelo en tu lenguaje
El tester trata tu programa como una caja negra: sirve cualquier lenguaje. Estos son los más cómodos para este proyecto.
Proyecto en preparación: estamos completando y verificando el recorrido de implementación y sus pruebas. Las capacidades descritas son el objetivo del proyecto; todavía no está habilitado para comenzar.
Es el reto más largo del catálogo y el que más cosas junta: un lenguaje propio, con su compilador y su máquina virtual, construidos de principio a fin.
Pasarás del texto a los tokens, de los tokens a un árbol, del árbol a una representación con tipos comprobados, de ahí a bytecode y, finalmente, a una máquina de pila que lo ejecuta. Terminarás corriendo programas escritos en un lenguaje que has diseñado tú.
16 etapas repartidas en 4 fases. Cada etapa trae su guía y sus tests: avanzas cuando pasan.
Lexer, parser con precedencia y árbol de sintaxis del lenguaje.
Resolución de nombres, ámbitos, comprobación de tipos y errores útiles.
Conjunto de instrucciones, constantes, saltos y compilación del árbol.
Máquina virtual de pila, marcos de llamada, funciones y optimizaciones.
Construye un intérprete de Lisp desde cero. Escribe un tokenizador, parser y evaluador, y añade clausuras para descubrir cómo un lenguaje ejecuta tu código.
Python · JavaScript · TypeScript
Construye un motor de expresiones regulares desde cero. Convierte expresiones en autómatas con retroceso, grupos y clases de caracteres sin bibliotecas regex.
TypeScript · Python · Rust
Construye un parser de JSON desde cero. Tokeniza la entrada, analiza la gramática, crea un árbol sintáctico y reporta errores útiles para JSON inválido.
TypeScript · Python · Go · Java