অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি (AST), যাকে quoted expression নামেও ডাকা হয়, হলো কোডকে ডেটা হিসেবে উপস্থাপন করার একটি উপায়।
AST-এর প্রতিটি নোড একটি তিন এলিমেন্টের টাপল।
# AST representation of:
# 2 + 3
{:+, [], [2, 3]}
প্রথম এলিমেন্টটি, একটি অ্যাটম, হলো অপারেশন। দ্বিতীয় এলিমেন্টটি, একটি কিওয়ার্ড লিস্ট, হলো মেটাডেটা। তৃতীয় এলিমেন্টটি আর্গুমেন্টের একটি অ্যারে, যার মধ্যে অন্য নোডগুলো থাকে। ইন্টিজার, অ্যাটম আর স্ট্রিংয়ের মতো লিটারাল মানগুলো AST-এ তিন এলিমেন্টের টাপলের বদলে নিজেদের রূপেই উপস্থাপিত হয়।
Elixir কোডকে AST-এ এবং AST-কে আবার কোডে বদলানো স্ট্যান্ডার্ড লাইব্রেরির অংশ। AST নিয়ে কাজ করার ফাংশন আপনি পাবেন Code মডিউলে (যেমন কোডসহ একটি স্ট্রিংকে AST-এ বদলাতে) এবং Macro মডিউলে (যেমন AST ঘুরে দেখতে বা এটিকে স্ট্রিংয়ে বদলাতে)।
মনে রাখবেন, স্ট্যান্ডার্ড লাইব্রেরির সব ফাংশনই AST বোঝাতে "quoted" নামটি ব্যবহার করে (সংক্ষেপে quoted expression)।
কোডকে AST-এ বদলানোর স্পেশাল ফর্মটির নাম quote। এটি একটি কোড ব্লক নেয় এবং তার AST রিটার্ন করে।
quote do
2 + 3 - 1
end
# => {:-, [], [
# {:+, [], [2, 3]},
# 1
# ]}
কোডকে AST হিসেবে উপস্থাপন করার ক্ষমতাই Elixir-এ মেটাপ্রোগ্রামিংয়ের মূল ভিত্তি। ম্যাক্রো, অর্থাৎ Elixir কোড লেখার এমন একটি উপায় যা Elixir কোড তৈরি করে, আউটপুট হিসেবে AST রিটার্ন করে কাজ করে।
AST-এর আরেকটি ব্যবহার হচ্ছে স্ট্যাটিক কোড অ্যানালাইসিস, যেমন Exercism-এর নিজস্ব টুল Analyzer, যাকে আপনি হয়তো ছোট্ট বট হিসেবে চেনেন, যে আপনার সলুশনগুলোতে কমেন্ট করে।