Абстрактне синтаксичне дерево (AST), яке також називають quoted expression, це спосіб подати код як дані.
Кожен вузол в AST - це кортеж із трьох елементів.
# AST representation of:
# 2 + 3
{:+, [], [2, 3]}
Перший елемент, атом, - це операція. Другий елемент, список ключових слів, - це метадані. Третій елемент - це список аргументів, який містить інші вузли. Літеральні значення, як-от цілі числа, атоми та рядки тексту (англ. string), представлені в AST самі собою, а не як кортежі з трьох елементів.
Перетворення коду Elixir на AST і AST назад на код входить до стандартної бібліотеки. Функції для роботи з AST можна знайти в модулях Code (наприклад, щоб перетворити рядок тексту з кодом на AST) та Macro (наприклад, щоб обійти AST або перетворити його на рядок тексту).
Зауважмо, що всі функції зі стандартної бібліотеки використовують назву «quoted» на позначення AST (скорочення від quoted expression).
Спеціальна форма для перетворення коду на AST називається quote. Вона приймає блок коду і повертає його AST.
quote do
2 + 3 - 1
end
# => {:-, [], [
# {:+, [], [2, 3]},
# 1
# ]}
Можливість подавати код як AST лежить в основі метапрограмування в Elixir. Макроси, тобто спосіб писати код Elixir, який породжує код Elixir, працюють так: повертають AST як вихідні дані.
Ще один варіант використання AST - статичний аналіз коду, як-от власний інструмент Exercism під назвою Analyzer, який ми, можливо, вже знаємо як маленького бота, що залишає коментарі до наших рішень.