simple AST compiler