AST (Abstract Syntax Tree)، که به آن quoted expression هم میگویند، راهی برای نمایش کد بهصورت داده است.
هر گره در AST یک تاپل سهعنصری است.
# AST representation of:
# 2 + 3
{:+, [], [2, 3]}
عنصر اول، یک اتم، عملیات است. عنصر دوم، یک فهرست کلیدواژهها، فراداده است. عنصر سوم فهرستی از آرگومانهاست که گرههای دیگر را در خود دارد. مقادیر لیترال مانند اعداد صحیح، اتمها و رشتهها در AST به شکل خودشان نمایش داده میشوند، نه بهصورت تاپل سهعنصری.
تبدیل کد Elixir به 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»، که ممکن است آن را بهعنوان ربات کوچکی بشناسید که روی راهحلهای شما کامنت میگذارد.