| | |
| | | #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++); |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | |
| | | |
| | | 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; |
| | | } |
| | | |
| | |
| | | |
| | | 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; |
| | | } |
| | | |