Synopsis - Cross-Reference
File: src/Synopsis/PTree/Display.hh1// 2// Copyright (C) 2004 Stefan Seefeld 3// All rights reserved. 4// Licensed to the public under the terms of the GNU LGPL (>= 2), 5// see the file COPYING for details. 6// 7#ifndef Synopsis_PTree_Display_hh_ 8#define Synopsis_PTree_Display_hh_ 9 10#include <Synopsis/PTree.hh> 11 12namespace Synopsis 13{ 14namespace PTree 15{ 16 17//. The Display class provides an annotated view of the ptree, 18//. for debugging purposes 19class Display : private Visitor 20{ 21public: 22 Display(std::ostream &os, bool encoded); 23 24 void display(Node const *); 25 26 virtual void visit(Atom *); 27 virtual void visit(List *); 28 // atoms... 29 virtual void visit(DupAtom *); 30 // ...lists... 31 virtual void visit(Brace *); 32 virtual void visit(Block *b) { visit(static_cast<Brace *>(b));} 33 virtual void visit(ClassBody *b) { visit(static_cast<Brace *>(b));} 34 virtual void visit(Declarator *l) { print_encoded(l);} 35 virtual void visit(Name *l) { print_encoded(l);} 36 virtual void visit(FstyleCastExpr *l) { print_encoded(l);} 37private: 38 void newline(); 39 bool too_deep(); 40 void print_encoded(List *); 41 42 std::ostream &my_os; 43 size_t my_indent; 44 bool my_encoded; 45}; 46 47class RTTIDisplay : private Visitor 48{ 49public: 50 RTTIDisplay(std::ostream &os, bool encoded); 51 52 void display(Node const *); 53 54 virtual void visit(Atom *); 55 virtual void visit(List *); 56 virtual void visit(DupAtom *); 57private: 58 void newline(); 59 60 std::ostream &my_os; 61 size_t my_indent; 62 bool my_encoded; 63}; 64 65class DotFileGenerator : public PTree::Visitor 66{ 67public: 68 DotFileGenerator(std::ostream &); 69 void write(PTree::Node const *ptree); 70private: 71 virtual void visit(PTree::Atom *a); 72 virtual void visit(PTree::List *l); 73 74 std::ostream &my_os; 75}; 76 77//. Display the given parse tree segment on the given output stream. 78//. If 'encoded' is set to 'true', print encoded names / types 79//. on appropriate nodes. If 'typeinfo' is set to 'true', print 80//. the class names of the nodes. 81inline void display(Node const *node, std::ostream &os, 82 bool encoded = false, bool typeinfo = false) 83{ 84 if (typeinfo) 85 { 86 RTTIDisplay d(os, encoded); 87 d.display(node); 88 } 89 else 90 { 91 Display d(os, encoded); 92 d.display(node); 93 } 94} 95 96//. Generate a dot file for the given parse tree segment. 97inline void generate_dot_file(Node const *node, std::ostream &os) 98{ 99 DotFileGenerator generator(os); 100 generator.write(node); 101} 102 103} 104} 105 106#endif
Generated on Tue May 13 02:39:09 2008 by
synopsis (version 0.10)
synopsis (version 0.10)