Entre tu código fuente y el programa en ejecución vive un árbol. Cada nodo es una decisión. Cada rama es una relación entre partes de tu programa. El Árbol de Sintaxis Abstracta -- AST -- es la representación interna del compilador de lo que escribiste, despojada de todo el ruido sintáctico que los humanos necesitan para leer código pero las máquinas no.
Los paréntesis desaparecen. Los puntos y coma desaparecen. Los espacios en blanco desaparecen. Lo que queda es estructura pura.
El AST de FLIN tiene un desafío inusual. La mayoría de los lenguajes de programación tienen un tipo de cosa: código. FLIN tiene tres: código imperativo (variables, flujo de control, operaciones), datos declarativos (definiciones de entidades con campos tipados) y vistas reactivas (plantillas similares a HTML con expresiones embebidas). El AST debe representar los tres de forma suficientemente uniforme para que el verificador de tipos y el generador de código los procesen, mientras preserva suficiente estructura específica del dominio para que cada uno retenga su semántica.
El AST de FLIN tiene 9 variantes de sentencia, 17 variantes de expresión, 5 tipos de nodos de vista y 12 variantes de tipo -- todo en 250 líneas de definiciones de tipo en Rust.
Esta es la Parte 14 de la serie "Cómo construimos FLIN".