diff --git a/src/Binder/Binder.cpp b/src/Binder/Binder.cpp new file mode 100644 index 0000000..5b57469 --- /dev/null +++ b/src/Binder/Binder.cpp @@ -0,0 +1,6 @@ + +#include "Binder.hpp" + +BoundScriptStatement *Binder::Bind(ParsedScriptStatement *s) { + return nullptr; +} diff --git a/src/Binder/Binder.hpp b/src/Binder/Binder.hpp new file mode 100644 index 0000000..9b88292 --- /dev/null +++ b/src/Binder/Binder.hpp @@ -0,0 +1,14 @@ + +#ifndef PORYGONLANG_BINDER_HPP +#define PORYGONLANG_BINDER_HPP + +#include "../Parser/ParsedStatements/ParsedScriptStatement.hpp" +#include "BoundStatements/BoundStatement.hpp" + +class Binder { +public: + static BoundScriptStatement* Bind(ParsedScriptStatement* s); +}; + + +#endif //PORYGONLANG_BINDER_HPP diff --git a/src/Binder/BoundStatements/BoundStatement.hpp b/src/Binder/BoundStatements/BoundStatement.hpp new file mode 100644 index 0000000..ba617c7 --- /dev/null +++ b/src/Binder/BoundStatements/BoundStatement.hpp @@ -0,0 +1,49 @@ +#include + + +#ifndef PORYGONLANG_BOUNDSTATEMENT_HPP +#define PORYGONLANG_BOUNDSTATEMENT_HPP + +#include +using namespace std; + +enum class BoundStatementKind{ + Script, + Block, +}; + +class BoundStatement{ +public: + virtual BoundStatementKind GetKind() = 0; + virtual ~BoundStatement() = default; +}; + +class BoundBlockStatement : public BoundStatement{ + vector _statements; +public: + explicit BoundBlockStatement(vector statements){ + _statements = std::move(statements); + } + ~BoundBlockStatement() override { + for (auto s : _statements){ + delete s; + } + _statements.clear(); + } + + BoundStatementKind GetKind() override{ + return BoundStatementKind ::Block; + } +}; + +class BoundScriptStatement : public BoundBlockStatement{ +public: + explicit BoundScriptStatement(vector statements) : BoundBlockStatement(std::move(statements)){ + } + + BoundStatementKind GetKind() final{ + return BoundStatementKind ::Script; + } +}; + +#endif //PORYGONLANG_BOUNDSTATEMENT_HPP diff --git a/src/Parser/ParsedStatements/ParsedScriptStatement.hpp b/src/Parser/ParsedStatements/ParsedScriptStatement.hpp new file mode 100644 index 0000000..ee94888 --- /dev/null +++ b/src/Parser/ParsedStatements/ParsedScriptStatement.hpp @@ -0,0 +1,16 @@ + +#ifndef PORYGONLANG_PARSEDSCRIPTSTATEMENT_HPP +#define PORYGONLANG_PARSEDSCRIPTSTATEMENT_HPP + +#include "ParsedStatement.hpp" + +class ParsedScriptStatement : public ParsedBlockStatement{ +public: + explicit ParsedScriptStatement(vector statements) : ParsedBlockStatement(move(statements)){} + + ParsedStatementKind GetKind() final{ + return ParsedStatementKind ::Script; + } +}; + +#endif //PORYGONLANG_PARSEDSCRIPTSTATEMENT_HPP diff --git a/src/Parser/ParsedStatements/ParsedStatement.hpp b/src/Parser/ParsedStatements/ParsedStatement.hpp index ca44e2d..7f0c043 100644 --- a/src/Parser/ParsedStatements/ParsedStatement.hpp +++ b/src/Parser/ParsedStatements/ParsedStatement.hpp @@ -1,5 +1,7 @@ #include +#include + #ifndef PORYGONLANG_PARSEDSTATEMENT_HPP #define PORYGONLANG_PARSEDSTATEMENT_HPP @@ -49,15 +51,6 @@ public: } }; -class ParsedScriptStatement : public ParsedBlockStatement{ -public: - explicit ParsedScriptStatement(std::vector statements) : ParsedBlockStatement(statements){} - - ParsedStatementKind GetKind() final{ - return ParsedStatementKind ::Script; - } -}; - class ParsedExpressionStatement : public ParsedStatement{ ParsedExpression* _expression; public: diff --git a/src/Parser/Parser.cpp b/src/Parser/Parser.cpp index 0c138f8..2456467 100644 --- a/src/Parser/Parser.cpp +++ b/src/Parser/Parser.cpp @@ -2,6 +2,7 @@ #include "Parser.hpp" #include "UnaryOperatorKind.hpp" #include "BinaryOperatorKind.hpp" +#include "ParsedScriptStatement.hpp" ParsedScriptStatement* Parser::Parse() { diff --git a/src/Parser/Parser.hpp b/src/Parser/Parser.hpp index 282a71e..aa19751 100644 --- a/src/Parser/Parser.hpp +++ b/src/Parser/Parser.hpp @@ -6,6 +6,7 @@ #include "ParsedStatements/ParsedStatement.hpp" #include "../Script.hpp" +#include "ParsedScriptStatement.hpp" enum class OperatorPrecedence { No,