aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/include')
-rw-r--r--c_compiler/include/ast.hpp14
-rw-r--r--c_compiler/include/declaration.hpp18
-rw-r--r--c_compiler/include/function.hpp21
-rw-r--r--c_compiler/include/initializer.hpp13
-rw-r--r--c_compiler/include/statement.hpp11
-rw-r--r--c_compiler/include/translation_unit.hpp18
-rw-r--r--c_compiler/include/type.hpp4
7 files changed, 69 insertions, 30 deletions
diff --git a/c_compiler/include/ast.hpp b/c_compiler/include/ast.hpp
index 4a57282..5a31fca 100644
--- a/c_compiler/include/ast.hpp
+++ b/c_compiler/include/ast.hpp
@@ -6,16 +6,16 @@
#include <iostream>
#include "node.hpp"
-#include "statement.hpp"
-#include "function.hpp"
-#include "declaration.hpp"
-#include "expression.hpp"
-#include "primitives.hpp"
+//#include "expression.hpp"
+//#include "primitives.hpp"
#include "type.hpp"
#include "initializer.hpp"
+#include "declaration.hpp"
+#include "statement.hpp"
+#include "function.hpp"
#include "translation_unit.hpp"
-#include "ast_top.hpp"
+//#include "ast_top.hpp"
-const BaseList* parseAST();
+TranslationUnit* parseAST();
#endif
diff --git a/c_compiler/include/declaration.hpp b/c_compiler/include/declaration.hpp
index 7fdee1c..82bf157 100644
--- a/c_compiler/include/declaration.hpp
+++ b/c_compiler/include/declaration.hpp
@@ -13,15 +13,19 @@ protected:
Declaration* decl;
public:
- Declaration(const Type* _type = nullptr,
- const std::string _id = "",
- const Initializer* _init = nullptr);
+ Declaration(const std::string& _id = "") : id(_id) {}
- virtual void print() const;
- virtual void printxml() const;
- virtual void printasm() const;
+ virtual void print() const {
+ std::cout << id << std::endl;
+ if(decl != nullptr)
+ decl->print();
+ }
+ virtual void printxml() const {}
+ virtual void printasm() const {}
-
+ void addDeclaration(Declaration* _decl) {
+ decl = _decl;
+ }
};
#endif
diff --git a/c_compiler/include/function.hpp b/c_compiler/include/function.hpp
index c58699c..a6d44f0 100644
--- a/c_compiler/include/function.hpp
+++ b/c_compiler/include/function.hpp
@@ -6,20 +6,21 @@
class Function : public Node {
protected:
- const Type* type;
+ Type* type;
std::string id;
- const DeclarationList* parameter_list;
- const Statement* statement;
+ Declaration* parameter_list;
+ Statement* statement;
public:
- Function(const std::string& _id, const Statement* _comp_statement);
+ Function(const std::string& _id, Declaration* _parameter_list) : id(_id), parameter_list(_parameter_list) {}
- virtual ~Function();
-
- virtual void printxml() const override;
- virtual void printasm() const override;
-
- void push_parameter(const Declaration* declaration) const;
+ virtual void print() const {
+ std::cout << id << std::endl;
+ parameter_list->print();
+ }
+
+ virtual void printxml() const {}
+ virtual void printasm() const {}
};
diff --git a/c_compiler/include/initializer.hpp b/c_compiler/include/initializer.hpp
index 723f7aa..f28fbcc 100644
--- a/c_compiler/include/initializer.hpp
+++ b/c_compiler/include/initializer.hpp
@@ -5,17 +5,24 @@
class Initializer : public Node {
-
+public:
+ Initializer() {}
+
+ virtual void print() const {}
+ virtual void printxml() const {}
+ virtual void printasm() const {}
};
class Integer : public Initializer {
-
+public:
+ Integer() : Initializer() {}
};
class StringLiteral : public Initializer {
-
+public:
+ StringLiteral() : Initializer() {}
};
diff --git a/c_compiler/include/statement.hpp b/c_compiler/include/statement.hpp
index e715937..ee4887a 100644
--- a/c_compiler/include/statement.hpp
+++ b/c_compiler/include/statement.hpp
@@ -6,9 +6,16 @@
class Statement : public Node {
public:
- Statement(const Node* _left = new EmptyNode, const Node* _right = new EmptyNode);
+ //Statement(const Node* _left = new EmptyNode, const Node* _right = new EmptyNode);
+ Statement() {}
+
+ virtual void print() const {}
+ virtual void printxml() const {}
+ virtual void printasm() const {}
};
+/*
+
class CompoundStatement : public Statement {
public:
CompoundStatement(const Node* _dec = new EmptyNode, const Node* _statement = new EmptyNode);
@@ -38,4 +45,6 @@ public:
IterationStatement(const Node* _el);
};
+*/
+
#endif
diff --git a/c_compiler/include/translation_unit.hpp b/c_compiler/include/translation_unit.hpp
index 6601994..dd8ff03 100644
--- a/c_compiler/include/translation_unit.hpp
+++ b/c_compiler/include/translation_unit.hpp
@@ -6,9 +6,23 @@
class TranslationUnit : public Node {
protected:
- // TODO includes all the variable declarations and function definitions
+ std::vector<Node* > m_transUnit;
public:
- TranslationUnit() {}
+ TranslationUnit(Node* decl) {
+ m_transUnit.push_back(decl);
+ }
+
+ virtual void print() const {
+ for(auto& i : m_transUnit) {
+ i->print();
+ }
+ }
+ virtual void printxml() const {}
+ virtual void printasm() const {}
+
+ void push(Node* decl) {
+ m_transUnit.push_back(decl);
+ }
};
diff --git a/c_compiler/include/type.hpp b/c_compiler/include/type.hpp
index 8b24b30..6e8eefa 100644
--- a/c_compiler/include/type.hpp
+++ b/c_compiler/include/type.hpp
@@ -7,6 +7,10 @@
class Type : public Node {
public:
Type();
+
+ virtual void print() const {}
+ virtual void printxml() const {}
+ virtual void printasm() const {}
};