use a simple and elegant way to represent the AST