diff options
author | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-27 16:47:29 +0100 |
---|---|---|
committer | Yann Herklotz <ymherklotz@gmail.com> | 2017-03-27 16:47:29 +0100 |
commit | 77559b13dc6200a83808e5a592a67463b0e89598 (patch) | |
tree | 2f603993b63a184fe795d69d96ed559ab658cac2 /c_compiler/include | |
parent | d860de923abeac05182e736cb67bb3615f5a71b4 (diff) | |
download | Compiler-77559b13dc6200a83808e5a592a67463b0e89598.tar.gz Compiler-77559b13dc6200a83808e5a592a67463b0e89598.zip |
Changing declarations
Diffstat (limited to 'c_compiler/include')
-rw-r--r-- | c_compiler/include/declaration.hpp | 61 |
1 files changed, 38 insertions, 23 deletions
diff --git a/c_compiler/include/declaration.hpp b/c_compiler/include/declaration.hpp index 5c8771b..b91835e 100644 --- a/c_compiler/include/declaration.hpp +++ b/c_compiler/include/declaration.hpp @@ -1,5 +1,5 @@ -#ifndef AST_DECLARATION_HPP -#define AST_DECLARATION_HPP +#ifndef DECLARATION_HPP +#define DECLARATION_HPP #include "node.hpp" #include "type.hpp" @@ -8,31 +8,28 @@ #include <memory> class Declaration; - typedef std::shared_ptr<Declaration> DeclarationPtr; - class Declaration : public Node { protected: - TypePtr type_; - std::string id_; - ExpressionPtr initializer_; DeclarationPtr next_declaration_; - DeclarationPtr next_list_declaration_; - bool extern_declaration_; + DeclarationPtr next_list_declaration_; + ExpressionPtr initializer_; + TypePtr type_; + bool extern_declaration_; public: - Declaration(const std::string &id = "", Expression *initializer = nullptr); - Declaration(const std::string &id, ExpressionPtr initializer); - - virtual void print() const; - virtual void printXml() const; - virtual Bindings printAsm(Bindings bindings, int &label_count) const; - virtual Bindings localAsm(Bindings bindings, int &label_count) const; - virtual void countDeclarations(int &declaration_count) const; + Declaration(Expression *initializer); + Declaration(ExpressionPtr initializer); + + virtual void print() const = 0; + virtual void printXml() const = 0; + virtual Bindings printAsm(Bindings bindings, int &label_count) const = 0; + virtual Bindings localAsm(Bindings bindings, int &label_count) const = 0; + virtual void countDeclarations(int &declaration_count) const = 0; + virtual std::string getId() const = 0; - void linkDeclaration(Declaration *next_declaration); + void linkDeclaration(Declaration *next_declaration); void linkListDeclaration(Declaration *next_list_declaration); - void setType(TypePtr type); void setInitializer(Expression *initializer); void setExternDeclaration(bool is_extern); @@ -40,20 +37,38 @@ public: DeclarationPtr getNext() const; DeclarationPtr getNextListItem() const; ExpressionPtr getInitializer() const; - std::string getId() const; TypePtr getType() const; }; +class IdentifierDeclaration : public Declaration { +private: + std::string id_; +public: + IdentifierDeclaration(const std::string &id="", Expression *initializer=nullptr); + IdentifierDeclaration(const std::string &id, ExpressionPtr initializer); + + virtual void print() const; + virtual void printXml() const; + virtual Bindings printAsm(Bindings bindings, int &label_count) const; + virtual Bindings localAsm(Bindings bindings, int &label_count) const; + virtual void countDeclarations(int &declaration_count) const; + virtual std::string getId() const; +}; + class ArrayDeclaration : public Declaration { private: int size_; + DeclarationPtr declarator_; public: - ArrayDeclaration(const std::string &id = "", ExpressionPtr initializer = nullptr, const int &size = 0); - + ArrayDeclaration(Declaration *declarator, ExpressionPtr initializer, const int &size=0); + + virtual void print() const; + virtual void printXml() const {} virtual Bindings printAsm(Bindings bindings, int &label_count) const; virtual Bindings localAsm(Bindings bindings, int &label_count) const; - virtual void countDeclarations(int &declaration_count) const; + virtual void countDeclarations(int &declaration_count) const; + virtual std::string getId() const; }; #endif |