Az absztrakt szintaxisfa (AST), más néven quoted kifejezés, a kód adatként való ábrázolásának egy módja.
Az AST minden csomópontja egy háromelemű tuple.
# AST representation of:
# 2 + 3
{:+, [], [2, 3]}
Az első elem egy atom, ez jelöli a műveletet. A második elem egy kulcsszólista, ez a metaadat. A harmadik elem az argumentumok listája, amely további csomópontokat tartalmaz. A literál értékek, például az egészek, az atomok és a stringek, önmagukként jelennek meg az AST-ban, nem háromelemű tuple-ként.
Az Elixir-kód AST-vé alakítása, illetve az AST visszaalakítása kóddá a standard könyvtár része. Az AST-kkel való munkához szükséges függvényeket a Code (például hogy egy kódot tartalmazó stringet AST-vé alakíts) és a Macro (például hogy bejárd az AST-t, vagy stringgé alakítsd) modulokban találod.
Vedd figyelembe, hogy a standard könyvtár összes függvénye a „quoted” nevet használja az AST jelentésében (a quoted kifejezés rövidítéseként).
A kód AST-vé alakítására szolgáló speciális forma neve quote. Egy kódblokkot fogad, és visszaadja annak AST-jét.
quote do
2 + 3 - 1
end
# => {:-, [], [
# {:+, [], [2, 3]},
# 1
# ]}
Az Elixir metaprogramozásának a középpontjában az áll, hogy a kódot AST-ként lehet ábrázolni. A makrók (olyan Elixir-kód írásának a módja, amely Elixir-kódot állít elő) úgy működnek, hogy AST-t adnak vissza eredményként.
Az AST-k másik felhasználási esete a statikus kódelemzés, mint például az Exercism saját eszköze, az elemző, amelyet talán már ismersz arról a kis botról, amely megjegyzéseket fűz a megoldásaidhoz.