diff options
Diffstat (limited to 'c_parser/include')
-rw-r--r-- | c_parser/include/ast.hpp | 1 | ||||
-rw-r--r-- | c_parser/include/ast_base.hpp | 1 | ||||
-rw-r--r-- | c_parser/include/ast_declaration.hpp | 26 | ||||
-rw-r--r-- | c_parser/include/ast_primitives.hpp | 4 | ||||
-rw-r--r-- | c_parser/include/ast_top.hpp | 3 |
5 files changed, 26 insertions, 9 deletions
diff --git a/c_parser/include/ast.hpp b/c_parser/include/ast.hpp index a0889ae..e17ab49 100644 --- a/c_parser/include/ast.hpp +++ b/c_parser/include/ast.hpp @@ -3,6 +3,7 @@ #include "ast_base.hpp" #include "ast_declaration.hpp" +#include "ast_primitives.hpp" #include "ast_top.hpp" ast_Top *parseAST(); diff --git a/c_parser/include/ast_base.hpp b/c_parser/include/ast_base.hpp index 432a54b..c4293a8 100644 --- a/c_parser/include/ast_base.hpp +++ b/c_parser/include/ast_base.hpp @@ -10,6 +10,7 @@ public: virtual ~ast_Base() {} virtual void print() const = 0; + virtual void push(const ast_Base* var) const = 0; }; #endif diff --git a/c_parser/include/ast_declaration.hpp b/c_parser/include/ast_declaration.hpp index 98fe255..50cff2a 100644 --- a/c_parser/include/ast_declaration.hpp +++ b/c_parser/include/ast_declaration.hpp @@ -3,23 +3,35 @@ #include "ast.hpp" +#include <vector> + +// Declaration that holds a list of declarations + class ast_Declaration : public ast_Base { private: public: - virtual void print() const override = 0; + virtual void print() const = 0; }; -class ast_VariableDeclaration : public ast_Declartaion { +class ast_VariableDeclaration : public ast_Declaration { private: - const std::string id; - const std::string type; + mutable std::vector<const ast_Base*> var_list; public: - ast_VariableDeclaration(const std::string& _id, const std::string& _type) : - id(_id), type(_type) {} + ast_VariableDeclaration(const ast_Base* _var) { + var_list.push_back(_var); + } + + virtual void print() const { + for(int i = 0; i < var_list.size(); ++i) { + var_list[i]->print(); + } + } - virtual void print() const override {} + virtual void push(const ast_Base* var) const { + var_list.push_back(var); + } }; #endif diff --git a/c_parser/include/ast_primitives.hpp b/c_parser/include/ast_primitives.hpp index fbcb1b4..21629e7 100644 --- a/c_parser/include/ast_primitives.hpp +++ b/c_parser/include/ast_primitives.hpp @@ -11,9 +11,11 @@ private: public: ast_Variable(const std::string& _id) : id(_id) {} - virtual void print() const override { + virtual void print() const { std::cout << "<Variable id=\"" << id << "\" />" << std::endl; } + + virtual void push(const ast_Base* var) const {} }; #endif diff --git a/c_parser/include/ast_top.hpp b/c_parser/include/ast_top.hpp index ff1cffa..142dfb8 100644 --- a/c_parser/include/ast_top.hpp +++ b/c_parser/include/ast_top.hpp @@ -12,10 +12,11 @@ public: ast_vec[i]->print(); } } - + void push(const ast_Base *stmnt) { ast_vec.push_back(stmnt); } + private: std::vector<const ast_Base *> ast_vec; }; |