---++ Description
An abstract syntax tree is a tree representation of a source program. It abstracts more from the source program than a [[ParseTree][parse tree]]. Usually it doesn't contain layout information and comments.
In StrategoXT the [[ATerm]] format is used to exchange abstact syntax trees between transformation tools. [[Stratego signatures]] desribe the [[abstract syntax]] of a language.
---++ Example
The expression =1 + 2 * a= might be represented in an abstract syntax tree in the ATerm format as:
Plus(
Int("1")
, Mul(
Int("2")
, Var("a")
)
)
As a more interesting example consider the following Tiger program:
let function fact(n : int) : int =
if n < 1 then 1 else (n * fact(n - 1))
in printint(fact(10))
end
In the [[Tiger.WebHome][Tiger compiler]] this program is represented as:
Let(
[ FunDecs(
[ FunDec("fact", [FArg("n",Tp(Tid("int")))]
, Tp(Tid("int"))
, If(
Lt(Var("n"), Int("1"))
, Int("1")
, Seq([
Times(Var("n"), Call(Var("fact"),[Minus(Var("n"),Int("1"))]))
])
)
)
])
]
,[ Call(
Var("printint")
, [ Call(Var("fact"),[Int("10")]) ]
)
]
)