build an AST rather than slapping strings together