aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include
diff options
context:
space:
mode:
Diffstat (limited to 'c_compiler/include')
-rw-r--r--c_compiler/include/ast.hpp4
-rw-r--r--c_compiler/include/declaration.hpp9
-rw-r--r--c_compiler/include/expression.hpp10
-rw-r--r--c_compiler/include/function.hpp11
-rw-r--r--c_compiler/include/node.hpp21
-rw-r--r--c_compiler/include/statement.hpp17
-rw-r--r--c_compiler/include/translation_unit.hpp10
-rw-r--r--c_compiler/include/type.hpp4
8 files changed, 51 insertions, 35 deletions
diff --git a/c_compiler/include/ast.hpp b/c_compiler/include/ast.hpp
index 4bcd523..88ef36b 100644
--- a/c_compiler/include/ast.hpp
+++ b/c_compiler/include/ast.hpp
@@ -9,7 +9,7 @@
struct VarLocation;
-typedef std::map<std::string, VarLocation> VariableStack;
+typedef std::map<std::string, VarLocation> VariableStackBindings;
#include "node.hpp"
#include "type.hpp"
@@ -19,6 +19,6 @@ typedef std::map<std::string, VarLocation> VariableStack;
#include "function.hpp"
#include "translation_unit.hpp"
-TranslationUnit* parseAST();
+Node* parseAST();
#endif
diff --git a/c_compiler/include/declaration.hpp b/c_compiler/include/declaration.hpp
index 7f862a5..8226090 100644
--- a/c_compiler/include/declaration.hpp
+++ b/c_compiler/include/declaration.hpp
@@ -1,12 +1,13 @@
#ifndef AST_DECLARATION_HPP
#define AST_DECLARATION_HPP
-#include "ast.hpp"
+#include "node.hpp"
+
+class Expression;
-// Declaration that holds a list of declarations
class Declaration : public Node {
-protected:
+private:
Type* type;
std::string id;
Expression* init;
@@ -18,7 +19,7 @@ public:
virtual void print() const;
virtual void printxml() const;
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
void addDeclaration(Declaration* _next_decl);
void addList(Declaration* _next_decl);
diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp
index 71d993f..d446972 100644
--- a/c_compiler/include/expression.hpp
+++ b/c_compiler/include/expression.hpp
@@ -1,14 +1,14 @@
#ifndef AST_EXPRESSION_HPP
#define AST_EXPRESSION_HPP
-#include "ast.hpp"
+#include "node.hpp"
+
class Expression : public Node {
public:
- virtual void printasm() const = 0;
-
virtual void print() const;
virtual void printxml() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const = 0;
};
@@ -18,7 +18,7 @@ private:
public:
Identifier(const std::string& id);
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
};
@@ -28,7 +28,7 @@ private:
public:
Constant(const int32_t& constant);
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
};
diff --git a/c_compiler/include/function.hpp b/c_compiler/include/function.hpp
index d608531..77d1372 100644
--- a/c_compiler/include/function.hpp
+++ b/c_compiler/include/function.hpp
@@ -1,13 +1,10 @@
#ifndef AST_FUNCTION_HPP
#define AST_FUNCTION_HPP
-#include "ast.hpp"
+#include "node.hpp"
-
-struct VarLocation {
- Type* type;
- int32_t stack_position;
-};
+class Declaration;
+class Statement;
class Function : public Node {
@@ -22,7 +19,7 @@ public:
virtual void print() const;
virtual void printxml() const;
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
};
diff --git a/c_compiler/include/node.hpp b/c_compiler/include/node.hpp
index 940a948..584ed32 100644
--- a/c_compiler/include/node.hpp
+++ b/c_compiler/include/node.hpp
@@ -1,7 +1,20 @@
-#ifndef AST_BASE_HPP
-#define AST_BASE_HPP
+#ifndef NODE_HPP
+#define NODE_HPP
-#include "ast.hpp"
+#include <cstdint>
+#include <map>
+#include <string>
+
+struct VarLocation;
+class Type;
+
+typedef std::map<std::string, VarLocation> VariableStackBindings;
+
+
+struct VarLocation {
+ Type* type;
+ int32_t stack_position;
+};
class Node {
@@ -10,7 +23,7 @@ public:
virtual void print() const = 0;
virtual void printxml() const = 0;
- virtual void printasm() const = 0;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const = 0;
};
diff --git a/c_compiler/include/statement.hpp b/c_compiler/include/statement.hpp
index 17a5153..b5f7e9c 100644
--- a/c_compiler/include/statement.hpp
+++ b/c_compiler/include/statement.hpp
@@ -1,7 +1,10 @@
#ifndef AST_STATEMENT_HPP
#define AST_STATEMENT_HPP
-#include "ast.hpp"
+#include "node.hpp"
+
+class Declaration;
+class Expression;
class Statement : public Node {
@@ -13,7 +16,7 @@ public:
virtual void print() const = 0;
virtual void printxml() const = 0;
- virtual void printasm() const = 0;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const = 0;
virtual void count_variables(int32_t& var_count) const = 0;
@@ -32,7 +35,7 @@ public:
virtual void print() const;
virtual void printxml() const;
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
virtual void count_variables(int32_t& var_count) const;
};
@@ -47,7 +50,7 @@ public:
virtual void print() const;
virtual void printxml() const;
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
virtual void count_variables(int32_t& var_count) const;
};
@@ -61,7 +64,7 @@ public:
virtual void print() const;
virtual void printxml() const;
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
virtual void count_variables(int32_t& var_count) const;
};
@@ -75,7 +78,7 @@ public:
virtual void print() const;
virtual void printxml() const;
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
virtual void count_variables(int32_t& var_count) const;
};
@@ -89,7 +92,7 @@ public:
virtual void print() const;
virtual void printxml() const;
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
virtual void count_variables(int32_t& var_count) const;
};
diff --git a/c_compiler/include/translation_unit.hpp b/c_compiler/include/translation_unit.hpp
index 42822f9..c290163 100644
--- a/c_compiler/include/translation_unit.hpp
+++ b/c_compiler/include/translation_unit.hpp
@@ -1,7 +1,9 @@
-#ifndef EXTERNAL_HPP
-#define EXTERNAL_HPP
+#ifndef TRANSLATION_UNIT_HPP
+#define TRANSLATION_UNIT_HPP
-#include "ast.hpp"
+#include "node.hpp"
+
+#include <vector>
class TranslationUnit : public Node {
@@ -13,7 +15,7 @@ public:
virtual void print() const;
virtual void printxml() const;
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
void push(Node* decl);
};
diff --git a/c_compiler/include/type.hpp b/c_compiler/include/type.hpp
index 8727ee0..3deca58 100644
--- a/c_compiler/include/type.hpp
+++ b/c_compiler/include/type.hpp
@@ -1,14 +1,14 @@
#ifndef TYPE_HPP
#define TYPE_HPP
-#include "ast.hpp"
+#include "node.hpp"
class Type : public Node {
public:
virtual void print() const;
virtual void printxml() const;
- virtual void printasm() const;
+ virtual VariableStackBindings printasm(VariableStackBindings bindings) const;
virtual std::string getType() const = 0;
};