diff options
Diffstat (limited to 'c_compiler/include')
-rw-r--r-- | c_compiler/include/ast.hpp | 14 | ||||
-rw-r--r-- | c_compiler/include/declaration.hpp | 18 | ||||
-rw-r--r-- | c_compiler/include/function.hpp | 21 | ||||
-rw-r--r-- | c_compiler/include/initializer.hpp | 13 | ||||
-rw-r--r-- | c_compiler/include/statement.hpp | 11 | ||||
-rw-r--r-- | c_compiler/include/translation_unit.hpp | 18 | ||||
-rw-r--r-- | c_compiler/include/type.hpp | 4 |
7 files changed, 69 insertions, 30 deletions
diff --git a/c_compiler/include/ast.hpp b/c_compiler/include/ast.hpp index 4a57282..5a31fca 100644 --- a/c_compiler/include/ast.hpp +++ b/c_compiler/include/ast.hpp @@ -6,16 +6,16 @@ #include <iostream> #include "node.hpp" -#include "statement.hpp" -#include "function.hpp" -#include "declaration.hpp" -#include "expression.hpp" -#include "primitives.hpp" +//#include "expression.hpp" +//#include "primitives.hpp" #include "type.hpp" #include "initializer.hpp" +#include "declaration.hpp" +#include "statement.hpp" +#include "function.hpp" #include "translation_unit.hpp" -#include "ast_top.hpp" +//#include "ast_top.hpp" -const BaseList* parseAST(); +TranslationUnit* parseAST(); #endif diff --git a/c_compiler/include/declaration.hpp b/c_compiler/include/declaration.hpp index 7fdee1c..82bf157 100644 --- a/c_compiler/include/declaration.hpp +++ b/c_compiler/include/declaration.hpp @@ -13,15 +13,19 @@ protected: Declaration* decl; public: - Declaration(const Type* _type = nullptr, - const std::string _id = "", - const Initializer* _init = nullptr); + Declaration(const std::string& _id = "") : id(_id) {} - virtual void print() const; - virtual void printxml() const; - virtual void printasm() const; + virtual void print() const { + std::cout << id << std::endl; + if(decl != nullptr) + decl->print(); + } + virtual void printxml() const {} + virtual void printasm() const {} - + void addDeclaration(Declaration* _decl) { + decl = _decl; + } }; #endif diff --git a/c_compiler/include/function.hpp b/c_compiler/include/function.hpp index c58699c..a6d44f0 100644 --- a/c_compiler/include/function.hpp +++ b/c_compiler/include/function.hpp @@ -6,20 +6,21 @@ class Function : public Node { protected: - const Type* type; + Type* type; std::string id; - const DeclarationList* parameter_list; - const Statement* statement; + Declaration* parameter_list; + Statement* statement; public: - Function(const std::string& _id, const Statement* _comp_statement); + Function(const std::string& _id, Declaration* _parameter_list) : id(_id), parameter_list(_parameter_list) {} - virtual ~Function(); - - virtual void printxml() const override; - virtual void printasm() const override; - - void push_parameter(const Declaration* declaration) const; + virtual void print() const { + std::cout << id << std::endl; + parameter_list->print(); + } + + virtual void printxml() const {} + virtual void printasm() const {} }; diff --git a/c_compiler/include/initializer.hpp b/c_compiler/include/initializer.hpp index 723f7aa..f28fbcc 100644 --- a/c_compiler/include/initializer.hpp +++ b/c_compiler/include/initializer.hpp @@ -5,17 +5,24 @@ class Initializer : public Node { - +public: + Initializer() {} + + virtual void print() const {} + virtual void printxml() const {} + virtual void printasm() const {} }; class Integer : public Initializer { - +public: + Integer() : Initializer() {} }; class StringLiteral : public Initializer { - +public: + StringLiteral() : Initializer() {} }; diff --git a/c_compiler/include/statement.hpp b/c_compiler/include/statement.hpp index e715937..ee4887a 100644 --- a/c_compiler/include/statement.hpp +++ b/c_compiler/include/statement.hpp @@ -6,9 +6,16 @@ class Statement : public Node { public: - Statement(const Node* _left = new EmptyNode, const Node* _right = new EmptyNode); + //Statement(const Node* _left = new EmptyNode, const Node* _right = new EmptyNode); + Statement() {} + + virtual void print() const {} + virtual void printxml() const {} + virtual void printasm() const {} }; +/* + class CompoundStatement : public Statement { public: CompoundStatement(const Node* _dec = new EmptyNode, const Node* _statement = new EmptyNode); @@ -38,4 +45,6 @@ public: IterationStatement(const Node* _el); }; +*/ + #endif diff --git a/c_compiler/include/translation_unit.hpp b/c_compiler/include/translation_unit.hpp index 6601994..dd8ff03 100644 --- a/c_compiler/include/translation_unit.hpp +++ b/c_compiler/include/translation_unit.hpp @@ -6,9 +6,23 @@ class TranslationUnit : public Node { protected: - // TODO includes all the variable declarations and function definitions + std::vector<Node* > m_transUnit; public: - TranslationUnit() {} + TranslationUnit(Node* decl) { + m_transUnit.push_back(decl); + } + + virtual void print() const { + for(auto& i : m_transUnit) { + i->print(); + } + } + virtual void printxml() const {} + virtual void printasm() const {} + + void push(Node* decl) { + m_transUnit.push_back(decl); + } }; diff --git a/c_compiler/include/type.hpp b/c_compiler/include/type.hpp index 8b24b30..6e8eefa 100644 --- a/c_compiler/include/type.hpp +++ b/c_compiler/include/type.hpp @@ -7,6 +7,10 @@ class Type : public Node { public: Type(); + + virtual void print() const {} + virtual void printxml() const {} + virtual void printasm() const {} }; |