El árbol de sintaxis abstracta (AST, por sus siglas en inglés), también llamado expresión citada, es una forma de representar el código como datos.
Cada nodo del AST es una tupla de tres elementos.
# AST representation of:
# 2 + 3
{:+, [], [2, 3]}
El primer elemento, un átomo, es la operación. El segundo elemento, una lista de palabras clave, son los metadatos. El tercer elemento es una lista de argumentos, que contiene otros nodos. Los valores literales, como los enteros, los átomos y los strings, se representan en el AST como ellos mismos en lugar de como tuplas de tres elementos.
Convertir código Elixir en AST y AST de vuelta en código forma parte de la biblioteca estándar. Puedes encontrar funciones para trabajar con AST en los módulos Code (por ejemplo, para convertir un string con código en un AST) y Macro (por ejemplo, para recorrer el AST o convertirlo en un string).
Ten en cuenta que todas las funciones de la biblioteca estándar usan el nombre «quoted» para referirse al AST (abreviatura de expresión citada).
La forma especial para convertir código en un AST se llama quote. Acepta un bloque de código y devuelve su AST.
quote do
2 + 3 - 1
end
# => {:-, [], [
# {:+, [], [2, 3]},
# 1
# ]}
La capacidad de representar código como un AST está en el corazón de la metaprogramación en Elixir. Las macros, que son una forma de escribir código Elixir que produce código Elixir, funcionan devolviendo AST como salida.
Otro caso de uso de los AST es el análisis estático de código, como la propia herramienta de Exercism, el Analyzer, que quizá ya conozcas como el pequeño bot que deja comentarios en tus soluciones.