diff options
Diffstat (limited to 'c_compiler/include')
-rw-r--r-- | c_compiler/include/ast.hpp | 4 | ||||
-rw-r--r-- | c_compiler/include/declaration.hpp | 9 | ||||
-rw-r--r-- | c_compiler/include/expression.hpp | 10 | ||||
-rw-r--r-- | c_compiler/include/function.hpp | 11 | ||||
-rw-r--r-- | c_compiler/include/node.hpp | 21 | ||||
-rw-r--r-- | c_compiler/include/statement.hpp | 17 | ||||
-rw-r--r-- | c_compiler/include/translation_unit.hpp | 10 | ||||
-rw-r--r-- | c_compiler/include/type.hpp | 4 |
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; }; |