a groovy AST DSL