An abstract syntax tree is a tree representation of a source program. It abstracts more from the source program than a 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.
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 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")]) ] ) ] )