Skip to content
Back to the catalog
Project mini-compilerLanguagesExpertBeta

Mini-compilador a bytecode

De código fuente a bytecode ejecutable. Lexing, AST, análisis semántico, generación de código y una VM que lo corre.

Build it in your language

The tester treats your program as a black box: any language works. These are just the most convenient ones for this project.

Guide language

The stage guides read in this language. Only languages this project is fully translated into show up here; the interface language does not change.

What this project is about

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ú.

Roadmap

16 stages across 4 phases. Every stage comes with its guide and its tests: you move on when they pass.

  1. Phase 15 stages

    El frontend

    Lexer, parser con precedencia y árbol de sintaxis del lenguaje.

    1. 01Tokens
    2. 02Expresiones
    3. 03Sentencias
    4. 04Control de flujo
    5. 05Funciones en el AST
  2. Phase 24 stages

    Entender el programa

    Resolución de nombres, ámbitos, comprobación de tipos y errores útiles.

    1. 01Tabla de símbolos
    2. 02Comprobación de tipos
    3. 03Análisis de flujo
    4. 04Diagnósticos útiles
  3. Phase 34 stages

    Generar bytecode

    Conjunto de instrucciones, constantes, saltos y compilación del árbol.

    1. 01Conjunto de instrucciones
    2. 02Compilar expresiones
    3. 03Saltos y parches
    4. 04Compilar funciones
  4. Phase 43 stages

    Ejecutarlo

    Máquina virtual de pila, marcos de llamada, funciones y optimizaciones.

    1. 01Máquina virtual
    2. 02Marcos de llamada
    3. 03Optimizaciones

Before you start

Un compilador completo y su runtime: lexer, parser con precedencia de operadores, árbol de sintaxis, resolución de nombres y comprobación de tipos, generación de bytecode, una máquina virtual de pila con marcos de llamada, funciones de primera clase y un par de optimizaciones medibles.

  • lisp-interpreter
    Beta

    A Lisp interpreter

    Tokenizer, parser, evaluator and closures. Discover how a language runs your code, step by step.

    Advanced11 stages~16 hLanguages
    parsingastclosures+1

    Python · JavaScript · TypeScript

  • json-parser
    Beta

    A JSON parser

    Your first contact with lexers and grammars. Tokenize, build the tree and fail with useful errors.

    Beginner7 stages~6 hLanguages
    tokenizerparsingrecursión

    TypeScript · Python · Go · Java

  • regex-engine
    Beta

    A regular expression engine

    From the expression to the automaton. Backtracking, groups and character classes without your language's regex.

    Advanced8 stages~11 hLanguages
    autómatasparsingbacktracking

    TypeScript · Python · Rust