diff options
Diffstat (limited to 'c_parser/include')
-rw-r--r-- | c_parser/include/ast_declaration.hpp | 21 | ||||
-rw-r--r-- | c_parser/include/ast_function.hpp | 7 | ||||
-rw-r--r-- | c_parser/include/ast_primitives.hpp | 10 | ||||
-rw-r--r-- | c_parser/include/ast_statement.hpp | 29 |
4 files changed, 60 insertions, 7 deletions
diff --git a/c_parser/include/ast_declaration.hpp b/c_parser/include/ast_declaration.hpp index 01b1498..72bd375 100644 --- a/c_parser/include/ast_declaration.hpp +++ b/c_parser/include/ast_declaration.hpp @@ -7,14 +7,27 @@ // Declaration that holds a list of declarations -class ast_Declaration : public ast_Base { +class ast_DeclarationList : public ast_Base { private: + mutable std::vector<const ast_Base*> dec_list; public: - virtual void print() const = 0; + ast_DeclarationList(const ast_Base* _dec) { + dec_list.push_back(_dec); + } + + virtual void print() const { + for(size_t i = 0; i < dec_list.size(); ++i) { + dec_list[i]->print(); + } + } + + virtual void push(const ast_Base* _dec) const { + dec_list.push_back(_dec); + } }; -class ast_VariableDeclaration : public ast_Declaration { +class ast_VariableDeclaration : public ast_Base { private: mutable std::vector<const ast_Base*> var_list; @@ -24,7 +37,7 @@ public: } virtual void print() const { - for(int i = 0; i < var_list.size(); ++i) { + for(size_t i = 0; i < var_list.size(); ++i) { var_list[i]->print(); } } diff --git a/c_parser/include/ast_function.hpp b/c_parser/include/ast_function.hpp index 86230d1..085957c 100644 --- a/c_parser/include/ast_function.hpp +++ b/c_parser/include/ast_function.hpp @@ -22,7 +22,10 @@ public: std::cout << "</Function>" << std::endl; } - virtual void push(const ast_Base* var) const {} + virtual void push(const ast_Base* var) const { + std::cerr << "Error: Can't call this function on this class" << std::endl; + (void)var; + } }; class ast_ParamList : public ast_Base { @@ -30,6 +33,8 @@ private: mutable std::vector<const ast_Base*> param_list; public: + ast_ParamList() {} + ast_ParamList(const ast_Base* param) { param_list.push_back(param); } diff --git a/c_parser/include/ast_primitives.hpp b/c_parser/include/ast_primitives.hpp index d878780..5ae6d12 100644 --- a/c_parser/include/ast_primitives.hpp +++ b/c_parser/include/ast_primitives.hpp @@ -15,7 +15,10 @@ public: std::cout << "<Variable id=\"" << id << "\" />" << std::endl; } - virtual void push(const ast_Base* var) const {} + virtual void push(const ast_Base* var) const { + std::cerr << "Error: Can't call this function on this class" << std::endl; + (void)var; + } }; class ast_Parameter : public ast_Base { @@ -28,7 +31,10 @@ public: std::cout << "<Parameter id=\"" << id << "\" />" << std::endl; } - virtual void push(const ast_Base* var) const {} + virtual void push(const ast_Base* var) const { + std::cerr << "Error: Can't call this function on this class" << std::endl; + (void)var; + } }; #endif diff --git a/c_parser/include/ast_statement.hpp b/c_parser/include/ast_statement.hpp index 725308b..d3f6e96 100644 --- a/c_parser/include/ast_statement.hpp +++ b/c_parser/include/ast_statement.hpp @@ -1,15 +1,41 @@ #ifndef AST_STATEMENT_HPP #define AST_STATEMENT_HPP +class ast_StatementList : public ast_Base { +protected: + mutable std::vector<const ast_Base*> statement_list; + +public: + ast_StatementList(const ast_Base* _statement) { + statement_list.push_back(_statement); + } + + virtual void print() const { + for(size_t i = 0; i < statement_list.size(); ++i) { + statement_list[i]->print(); + } + } + + virtual void push(const ast_Base* _statement) const { + statement_list.push_back(_statement); + } +}; + class ast_Statement : public ast_Base { protected: mutable std::vector<const ast_Base*> ast_list; public: + ast_Statement() {} + ast_Statement(const ast_Base* _el) { ast_list.push_back(_el); } + ast_Statement(const ast_Base* _dec, const ast_Base* _statement) { + ast_list.push_back(_dec); + ast_list.push_back(_statement); + } virtual void print() const { for(size_t i = 0; i < ast_list.size(); ++i) { ast_list[i]->print(); @@ -23,7 +49,10 @@ public: class ast_CompoundStatement : public ast_Statement { public: + ast_CompoundStatement() : ast_Statement() {} ast_CompoundStatement(const ast_Base* _el) : ast_Statement(_el) {} + ast_CompoundStatement(const ast_Base* _dec, const ast_Base* _statement) : + ast_Statement(_dec, _statement) {} virtual void print() const override { std::cout << "<Scope>" << std::endl; |