AS

AST em Elixir

2 exercícios

Sobre AST

A árvore de sintaxe abstrata (AST), também chamada expressão citada, é uma forma de representar código como dados.

Cada nó da AST é um tuplo 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, que contém os metadados. O terceiro elemento é uma lista de argumentos, que contém outros nós. Valores literais como números inteiros, átomos e strings são representados na AST tal como são, e não como tuplos de três elementos.

Converter código em ASTs

Converter código Elixir em ASTs e ASTs de volta em código faz parte da biblioteca padrão. Encontras funções para trabalhar com ASTs nos módulos Code (por exemplo, para converter uma string com código numa AST) e Macro (por exemplo, para percorrer a AST ou convertê-la numa string).

Repara que todas as funções da biblioteca padrão usam o nome "quoted" para designar a AST (abreviatura de expressão citada).

A forma especial para converter código numa AST chama-se quote. Aceita um bloco de código e devolve a sua AST.

quote do
  2 + 3 - 1
end

# => {:-, [], [
#      {:+, [], [2, 3]},
#      1
#    ]}

Casos de uso

A capacidade de representar código como uma AST está no coração da metaprogramação em Elixir. As macros, que são uma forma de escrever código Elixir que produz código Elixir, funcionam devolvendo 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 talvez já conheças como o pequeno bot que deixa comentários nas tuas soluções.

Editar via GitHub A ligação abre numa nova janela ou separador

Aprende AST

A prática está bloqueada

Desbloqueia mais 1 exercício para praticares AST