From fed691abddc2b242a6bcb81d87e18797b95bbe80 Mon Sep 17 00:00:00 2001 From: Yann Herklotz Date: Tue, 7 Mar 2017 16:15:51 +0000 Subject: Can compile simplest program --- c_compiler/include/ast.hpp | 3 +-- c_compiler/include/declaration.hpp | 2 +- c_compiler/include/expression.hpp | 24 ++++++++++++++++++++++-- c_compiler/include/initializer.hpp | 29 ----------------------------- 4 files changed, 24 insertions(+), 34 deletions(-) delete mode 100644 c_compiler/include/initializer.hpp (limited to 'c_compiler/include') diff --git a/c_compiler/include/ast.hpp b/c_compiler/include/ast.hpp index cea7e82..4bcd523 100644 --- a/c_compiler/include/ast.hpp +++ b/c_compiler/include/ast.hpp @@ -12,9 +12,8 @@ struct VarLocation; typedef std::map VariableStack; #include "node.hpp" -#include "expression.hpp" #include "type.hpp" -#include "initializer.hpp" +#include "expression.hpp" #include "declaration.hpp" #include "statement.hpp" #include "function.hpp" diff --git a/c_compiler/include/declaration.hpp b/c_compiler/include/declaration.hpp index c46aca2..7f862a5 100644 --- a/c_compiler/include/declaration.hpp +++ b/c_compiler/include/declaration.hpp @@ -9,7 +9,7 @@ class Declaration : public Node { protected: Type* type; std::string id; - Initializer* init; + Expression* init; Declaration* next_decl; Declaration* list_next_decl; diff --git a/c_compiler/include/expression.hpp b/c_compiler/include/expression.hpp index 9e57fd4..71d993f 100644 --- a/c_compiler/include/expression.hpp +++ b/c_compiler/include/expression.hpp @@ -5,11 +5,31 @@ class Expression : public Node { public: - Expression(const Node* expr = nullptr); - + virtual void printasm() const = 0; + virtual void print() const; virtual void printxml() const; +}; + + +class Identifier : public Expression { +private: + std::string m_id; +public: + Identifier(const std::string& id); + virtual void printasm() const; }; + +class Constant : public Expression { +private: + int32_t m_constant; +public: + Constant(const int32_t& constant); + + virtual void printasm() const; +}; + + #endif diff --git a/c_compiler/include/initializer.hpp b/c_compiler/include/initializer.hpp deleted file mode 100644 index f7c0dab..0000000 --- a/c_compiler/include/initializer.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef INITIALIZER_HPP -#define INITIALIZER_HPP - -#include "ast.hpp" - - -class Initializer : public Node { -public: - Initializer(); - - virtual void print() const; - virtual void printxml() const; - virtual void printasm() const; -}; - - -class Integer : public Initializer { -public: - Integer(); -}; - - -class StringLiteral : public Initializer { -public: - StringLiteral(); -}; - - -#endif -- cgit