Joel Grunbaum
2021-07-21 af8179dab78fe661ccf3e212caedcfa8d9d768ba
gens/dot.cpp
@@ -3,15 +3,16 @@
#include <string>
#include "../ast.h"
#include "../gens.h"
dot_gen::dot_gen(std::string fname) {
   out.open(fname);
}
#include "dot.h"
dot_gen::~dot_gen() {
   out.close();
}
void dot_gen::set_file(std::string file_name) {
   out.open(file_name);
}
std::string* dot_gen::new_node() {
   std::string *o = new std::string();
   *o = "Node"+std::to_string(node_cnt++);
@@ -36,13 +37,26 @@
void* dot_gen::visit_Block_Table(Block_Table *bt) {
   std::string *b_id = new_node();
   std::vector<std::vector<Line_Word*>*> *t = bt->get_table();
   out << *b_id << " [label=\"Block Table\"];" << std::endl;
   for (std::vector<std::vector<Line_Word*>*>::size_type i = 0; i < t->size(); i++) {
      std::string *row_id = new_node();
      out << *row_id << " [label=\"Row(" << i << ")\"];" << std::endl;
      out << *b_id << "->" << *row_id << ";" << std::endl;
      std::vector<Line_Word*> *r = (*t)[i];
      for (std::vector<Line_Word*>::size_type j = 0; j < r->size(); j++) {
         std::string *ret_id = (std::string*)(*r)[j]->visit(this);
         out << *row_id << "->" << *ret_id << ";" << std::endl;
         delete ret_id;
      }
      delete row_id;
   }
   return b_id;
}
void* dot_gen::visit_Block_Code(Block_Code *bc) {
   std::string *c_id = new_node();
   out << *c_id << " [label=\"Block Code(" << *(bc->get_lang()) << ")];" << std::endl;
   out << *c_id << " [label=\"Block Code(" << bc->get_lang() << ")\"];" << std::endl;
   return c_id;
}
@@ -60,31 +74,27 @@
void* dot_gen::visit_Heading(Heading *h) {
   std::string *h_id = new_node();
   std::vector<Word*> *w = h->get_words();
   Line_Word *w = h->get_words();
   out << *h_id << " [label=\"Heading\"];" << std::endl;
   for (std::vector<Word*>::size_type i = 0; i < w->size(); i++) {
      std::string *ret_id = (std::string*)(*w)[i]->visit(this);
      out << *h_id << "->" << *ret_id << ";" << std::endl;
      delete ret_id;
   }
   std::string *ret_id = (std::string*)w->visit(this);
   out << *h_id << "->" << *ret_id << ";" << std::endl;
   delete ret_id;
   return h_id;
}
void* dot_gen::visit_List(List *l) {
   std::string *l_id = new_node();
   std::vector<Word*> *w = l->get_words();
   out << *l_id << " [label=\"List(l: " << l->get_level() << ", n:" << l->get_number() << "\"];" << std::endl;
   for (std::vector<Word*>::size_type i = 0; i < w->size(); i++) {
      std::string *ret_id = (std::string*)(*w)[i]->visit(this);
      out << *l_id << "->" << *ret_id << ";" << std::endl;
      delete ret_id;
   }
   Line_Word *w = l->get_words();
   out << *l_id << " [label=\"List(l: " << l->get_level() << ", n:" << l->get_number() << ")\"];" << std::endl;
   std::string *ret_id = (std::string*)w->visit(this);
   out << *l_id << "->" << *ret_id << ";" << std::endl;
   delete ret_id;
   return l_id;
}
void* dot_gen::visit_MathDisp(MathDisp *md) {
   std::string *md_id = new_node();
   out << *md_id << " [label=\"MathDisp(" << *(md->get_expr()) << ")\"];" << std::endl;
   out << *md_id << " [label=\"MathDisp(" << md->get_expr() << ")\"];" << std::endl;
   return md_id;
}
@@ -102,7 +112,7 @@
void* dot_gen::visit_MathInline(MathInline *mi) {
   std::string *mi_id = new_node();
   out << *mi_id << " [label=\"Math Inline(" << *(mi->get_expr()) << ")];" << std::endl;
   out << *mi_id << " [label=\"Math Inline(" << mi->get_expr() << ")\"];" << std::endl;
   return mi_id;
}
@@ -114,7 +124,7 @@
void* dot_gen::visit_Text(Text *t) {
   std::string *t_id = new_node();
   out << *t_id << " [label=\"Text(" << *(t->get_text()) << ")\"];" << std::endl;
   out << *t_id << " [label=\"Text(" << t->get_text() << ")\"];" << std::endl;
   return t_id;
}