1 #ifndef AST_GEN_VISITOR1_H_ 2 #define AST_GEN_VISITOR1_H_ 3 4 #include "visitor.h" 5 #include <fstream> 6 #include <string> 7 #include <vector> 8 #include <map> 9 10 class astgenvisitor1 : public visitor 11 { 12 public: 13 astgenvisitor1(const char* filename, const char* visitorFilename); 14 virtual ~astgenvisitor1(); 15 16 virtual void visit_lhs_IDENT_SEPARATOR(const lhs_IDENT_SEPARATOR *plhs_IDENT_SEPARATOR) ; 17 virtual void visit_grammar_grammar_production(const grammar_grammar_production *pgrammar_grammar_production) ; 18 virtual void visit_grammar_grammar_COMMENT(const grammar_grammar_COMMENT *pgrammar_grammar_COMMENT) ; 19 virtual void visit_expression_base_OPT(const expression_base_OPT *pexpression_base_OPT) ; 20 virtual void visit_production_lhs_expressionListList_TERMINATOR(const production_lhs_expressionListList_TERMINATOR *pproduction_lhs_expressionListList_TERMINATOR) ; 21 virtual void visit_expression_base_PLUS(const expression_base_PLUS *pexpression_base_PLUS) ; 22 virtual void visit_expression_base(const expression_base *pexpression_base) ; 23 virtual void visit_base_LITERAL(const base_LITERAL *pbase_LITERAL) ; 24 virtual void visit_expression_base_STAR(const expression_base_STAR *pexpression_base_STAR) ; 25 virtual void visit_base_LPAREN_expressionList_RPAREN(const base_LPAREN_expressionList_RPAREN *pbase_LPAREN_expressionList_RPAREN) ; 26 virtual void visit_expression_COMMENT(const expression_COMMENT *pexpression_COMMENT) ; 27 virtual void visit_alternation_expression_OR_expression(const alternation_expression_OR_expression *palternation_expression_OR_expression) ; 28 virtual void visit_base_IDENT(const base_IDENT *pbase_IDENT) ; 29 virtual void visit_base_LPAREN_alternation_RPAREN(const base_LPAREN_alternation_RPAREN *pbase_LPAREN_alternation_RPAREN) ; 30 virtual void visit_alternation_alternation_OR_expression(const alternation_alternation_OR_expression *palternation_alternation_OR_expression) ; 31 32 private: 33 bool m_doDestructors; 34 std::ofstream m_out; 35 std::string m_filename; 36 std::string m_visitorFilename; 37 std::string m_rulename; 38 std::string m_literal; 39 std::string m_ident; 40 std::map<std::string, std::string> m_listTypes; 41 getListType(const std::string & rule)42 std::string getListType(const std::string& rule) 43 { 44 return m_listTypes[rule]; 45 } 46 addListType(const std::string & rule,const std::string & type)47 void addListType(const std::string& rule, const std::string& type) 48 { 49 m_listTypes[rule] = type; 50 } 51 52 void write_class(const std::vector<std::vector<expression*>*>::const_iterator i, const std::string& baseclass); 53 std::string create_class_name(const std::vector<std::vector<expression*>*>::const_iterator i, std::vector<std::string>& idents); 54 void write_argument(const std::vector<std::string>::const_iterator& i, int arg_num); 55 }; 56 57 58 #endif 59 60