Description

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.

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 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")]) ]
     )
    ]
  )

Revision: r1.1 - 17 May 2003 - 13:35 - MartinBravenboer
Stratego > ParseTree? > AbstractSyntaxTree
Copyright © 1999-2020 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback