public abstract void Accept(Visitor visitor); }
// Extension method: Call via "ast.Print(writer)". public static void Print(this Element ast, TextWriter writer) { // Create a new printer that wraps the writer. var printer = new Printer(writer); // Visit the AST recursively. ast.Accept(printer); }