design abstract syntax tree