summaryrefslogtreecommitdiff
path: root/graphs/cpp/visitor/print_visitor.cc
diff options
context:
space:
mode:
Diffstat (limited to 'graphs/cpp/visitor/print_visitor.cc')
-rw-r--r--graphs/cpp/visitor/print_visitor.cc58
1 files changed, 58 insertions, 0 deletions
diff --git a/graphs/cpp/visitor/print_visitor.cc b/graphs/cpp/visitor/print_visitor.cc
new file mode 100644
index 0000000..bcfd565
--- /dev/null
+++ b/graphs/cpp/visitor/print_visitor.cc
@@ -0,0 +1,58 @@
+//
+// Created by martial.simon on 2/27/25.
+//
+
+#include "print_visitor.hh"
+
+#include <iostream>
+
+#include "add.hh"
+#include "div.hh"
+#include "leaf.hh"
+#include "mul.hh"
+#include "sub.hh"
+void visitor::PrintVisitor::visit(const tree::Tree& e)
+{
+ Visitor::visit(e);
+}
+void visitor::PrintVisitor::visit(const tree::Node& e)
+{
+ visit(*e.get_lhs());
+ visit(*e.get_rhs());
+}
+void visitor::PrintVisitor::visit(const tree::AddNode& e)
+{
+ std::cout << "(";
+ visit(*e.get_lhs());
+ std::cout << " + ";
+ visit(*e.get_rhs());
+ std::cout << ")";
+}
+void visitor::PrintVisitor::visit(const tree::SubNode& e)
+{
+ std::cout << "(";
+ visit(*e.get_lhs());
+ std::cout << " - ";
+ visit(*e.get_rhs());
+ std::cout << ")";
+}
+void visitor::PrintVisitor::visit(const tree::MulNode& e)
+{
+ std::cout << "(";
+ visit(*e.get_lhs());
+ std::cout << " * ";
+ visit(*e.get_rhs());
+ std::cout << ")";
+}
+void visitor::PrintVisitor::visit(const tree::DivNode& e)
+{
+ std::cout << "(";
+ visit(*e.get_lhs());
+ std::cout << " / ";
+ visit(*e.get_rhs());
+ std::cout << ")";
+}
+void visitor::PrintVisitor::visit(const tree::Leaf& e)
+{
+ std::cout << e.get_value();
+} \ No newline at end of file