A Árvore de Sintaxe Abstrata (AST), também chamada de expressão citada, é uma forma de representar código como dados.
Cada nó na AST é uma tupla de três elementos.
# AST representation of:
# 2 + 3
{:+, [], [2, 3]}
O primeiro elemento, um átomo, é a operação. O segundo elemento é uma lista de palavras-chave: os metadados. O terceiro elemento é uma lista de argumentos, que contém outros nós. Valores literais, como inteiros, átomos e strings, aparecem na AST como eles mesmos, em vez de tuplas de três elementos.
Transformar código Elixir em ASTs e ASTs de volta em código faz parte da biblioteca padrão. Você encontra funções para trabalhar com ASTs nos módulos Code (por exemplo, para transformar uma string com código em uma AST) e Macro (por exemplo, para percorrer a AST ou transformá-la em uma string).
Repare que todas as funções da biblioteca padrão usam o nome "quoted" para se referir à AST (abreviação de expressão citada).
A forma especial para transformar código em uma AST é chamada de quote. Ela aceita um bloco de código e retorna sua AST.
quote do
2 + 3 - 1
end
# => {:-, [], [
# {:+, [], [2, 3]},
# 1
# ]}
A capacidade de representar código como uma AST está no cerne da metaprogramação em Elixir. As Macros, que são uma forma de escrever código Elixir que produz código Elixir, funcionam retornando ASTs como resultado.
Outro caso de uso das ASTs é a análise estática de código, como a ferramenta do próprio Exercism, o Analyzer, que você talvez já conheça como o botzinho que deixa comentários nas suas soluções.