aboutsummaryrefslogtreecommitdiffstats
path: root/c_compiler/include
diff options
context:
space:
mode:
authorYann Herklotz <ymherklotz@gmail.com>2017-03-07 16:15:51 +0000
committerYann Herklotz <ymherklotz@gmail.com>2017-03-07 16:15:51 +0000
commitfed691abddc2b242a6bcb81d87e18797b95bbe80 (patch)
tree28cb4c0ea9facfa7cc8642c778708f4e038c2aef /c_compiler/include
parent15789d04e85806745c4c2e1cb3fdc891c34ab21f (diff)
downloadCompiler-fed691abddc2b242a6bcb81d87e18797b95bbe80.tar.gz
Compiler-fed691abddc2b242a6bcb81d87e18797b95bbe80.zip
Can compile simplest program
Diffstat (limited to 'c_compiler/include')
-rw-r--r--c_compiler/include/ast.hpp3
-rw-r--r--c_compiler/include/declaration.hpp2
-rw-r--r--c_compiler/include/expression.hpp24
-rw-r--r--c_compiler/include/initializer.hpp29
4 files changed, 24 insertions, 34 deletions
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<std::string, VarLocation> 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