aboutsummaryrefslogtreecommitdiffstats
path: root/c_parser/include
diff options
context:
space:
mode:
Diffstat (limited to 'c_parser/include')
-rw-r--r--c_parser/include/ast.hpp1
-rw-r--r--c_parser/include/ast_base.hpp1
-rw-r--r--c_parser/include/ast_declaration.hpp26
-rw-r--r--c_parser/include/ast_primitives.hpp4
-rw-r--r--c_parser/include/ast_top.hpp3
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;
};