aboutsummaryrefslogtreecommitdiffstats
path: root/c_parser/include
diff options
context:
space:
mode:
Diffstat (limited to 'c_parser/include')
-rw-r--r--c_parser/include/ast_declaration.hpp21
-rw-r--r--c_parser/include/ast_function.hpp7
-rw-r--r--c_parser/include/ast_primitives.hpp10
-rw-r--r--c_parser/include/ast_statement.hpp29
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;