diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..c7ee3e5 --- /dev/null +++ b/.clang-format @@ -0,0 +1,6 @@ +BasedOnStyle: Google +DerivePointerAlignment: false +PointerAlignment: Right +ColumnLimit: 80 +AllowCommentMovement: true +PenaltyBreakBeforeFirstCallParameter: 100 \ No newline at end of file diff --git a/CMakeLists.txt b/CMakeLists.txt index ef7596d..3d06c33 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,7 +18,6 @@ add_subdirectory(test) file(GLOB_RECURSE main_src src/*.cpp) include_directories(${PROJECT_SOURCE_DIR}/include) -link_directories(${PROJECT_SOURCE_DIR}/src) add_executable(code ${main_src}) # Add all *.cpp file after src/main.cpp, like src/Evalvisitor.cpp did target_include_directories(code PRIVATE ${PROJECT_SOURCE_DIR}/libs) diff --git a/include/Evalvisitor.h b/include/Evalvisitor.h index c92be3f..72983ff 100644 --- a/include/Evalvisitor.h +++ b/include/Evalvisitor.h @@ -2,18 +2,21 @@ #ifndef PYTHON_INTERPRETER_EVALVISITOR_H #define PYTHON_INTERPRETER_EVALVISITOR_H -#include "Python3ParserBaseVisitor.h" -#include "int2048/int2048.h" #include #include -class EvalVisitor : public Python3ParserBaseVisitor -{ +#include "Python3ParserBaseVisitor.h" +#include "int2048/int2048.h" +#include "namescope.h" +#include "utils.h" + +class EvalVisitor : public Python3ParserBaseVisitor { // TODO: override all methods of Python3ParserBaseVisitor std::any visitFile_input(Python3Parser::File_inputContext *ctx) override; std::any visitFuncdef(Python3Parser::FuncdefContext *ctx) override; std::any visitParameters(Python3Parser::ParametersContext *ctx) override; - std::any visitTypedargslist(Python3Parser::TypedargslistContext *ctx) override; + std::any visitTypedargslist( + Python3Parser::TypedargslistContext *ctx) override; std::any visitTfpdef(Python3Parser::TfpdefContext *ctx) override; std::any visitStmt(Python3Parser::StmtContext *ctx) override; std::any visitSimple_stmt(Python3Parser::Simple_stmtContext *ctx) override; @@ -22,9 +25,11 @@ class EvalVisitor : public Python3ParserBaseVisitor std::any visitAugassign(Python3Parser::AugassignContext *ctx) override; std::any visitFlow_stmt(Python3Parser::Flow_stmtContext *ctx) override; std::any visitBreak_stmt(Python3Parser::Break_stmtContext *ctx) override; - std::any visitContinue_stmt(Python3Parser::Continue_stmtContext *ctx) override; + std::any visitContinue_stmt( + Python3Parser::Continue_stmtContext *ctx) override; std::any visitReturn_stmt(Python3Parser::Return_stmtContext *ctx) override; - std::any visitCompound_stmt(Python3Parser::Compound_stmtContext *ctx) override; + std::any visitCompound_stmt( + Python3Parser::Compound_stmtContext *ctx) override; std::any visitIf_stmt(Python3Parser::If_stmtContext *ctx) override; std::any visitWhile_stmt(Python3Parser::While_stmtContext *ctx) override; std::any visitSuite(Python3Parser::SuiteContext *ctx) override; @@ -46,34 +51,26 @@ class EvalVisitor : public Python3ParserBaseVisitor std::any visitArglist(Python3Parser::ArglistContext *ctx) override; std::any visitArgument(Python3Parser::ArgumentContext *ctx) override; }; -class InterpretException : public std::exception -{ -public: +class InterpretException : public std::exception { + public: InterpretException() {} InterpretException(const char *message) : m_message(message) {} - const char *what() const noexcept override - { - return m_message; - } + const char *what() const noexcept override { return m_message; } ~InterpretException() noexcept override {} -private: + private: const char *m_message; }; -class FatalError : public std::exception -{ -public: +class FatalError : public std::exception { + public: FatalError(const char *message) : m_message(message) {} - const char *what() const noexcept override - { - return m_message; - } + const char *what() const noexcept override { return m_message; } -private: + private: const char *m_message; }; -#endif // PYTHON_INTERPRETER_EVALVISITOR_H +#endif // PYTHON_INTERPRETER_EVALVISITOR_H diff --git a/include/namescope.h b/include/namescope.h new file mode 100644 index 0000000..8f17398 --- /dev/null +++ b/include/namescope.h @@ -0,0 +1,12 @@ +#ifndef NAMESCOPE_H +#define NAMESCOPE_H + +#include +#include +#include +#include + +class NameScopeClass { + ; +}; +#endif \ No newline at end of file diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 0000000..e69de29 diff --git a/src/Evalvisitor.cpp b/src/Evalvisitor.cpp index 06de27e..9d73323 100644 --- a/src/Evalvisitor.cpp +++ b/src/Evalvisitor.cpp @@ -1,177 +1,150 @@ #include "Evalvisitor.h" + #include "int2048/int2048.h" +#include "namescope.h" +#include "utils.h" -std::any EvalVisitor::visitFile_input(Python3Parser::File_inputContext *ctx) -{ +std::any EvalVisitor::visitFile_input(Python3Parser::File_inputContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitFuncdef(Python3Parser::FuncdefContext *ctx) -{ +std::any EvalVisitor::visitFuncdef(Python3Parser::FuncdefContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitParameters(Python3Parser::ParametersContext *ctx) -{ +std::any EvalVisitor::visitParameters(Python3Parser::ParametersContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitTypedargslist(Python3Parser::TypedargslistContext *ctx) -{ +std::any EvalVisitor::visitTypedargslist( + Python3Parser::TypedargslistContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitTfpdef(Python3Parser::TfpdefContext *ctx) -{ +std::any EvalVisitor::visitTfpdef(Python3Parser::TfpdefContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitStmt(Python3Parser::StmtContext *ctx) -{ +std::any EvalVisitor::visitStmt(Python3Parser::StmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitSimple_stmt(Python3Parser::Simple_stmtContext *ctx) -{ +std::any EvalVisitor::visitSimple_stmt(Python3Parser::Simple_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitSmall_stmt(Python3Parser::Small_stmtContext *ctx) -{ +std::any EvalVisitor::visitSmall_stmt(Python3Parser::Small_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitExpr_stmt(Python3Parser::Expr_stmtContext *ctx) -{ +std::any EvalVisitor::visitExpr_stmt(Python3Parser::Expr_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitAugassign(Python3Parser::AugassignContext *ctx) -{ +std::any EvalVisitor::visitAugassign(Python3Parser::AugassignContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitFlow_stmt(Python3Parser::Flow_stmtContext *ctx) -{ +std::any EvalVisitor::visitFlow_stmt(Python3Parser::Flow_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitBreak_stmt(Python3Parser::Break_stmtContext *ctx) -{ +std::any EvalVisitor::visitBreak_stmt(Python3Parser::Break_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitContinue_stmt(Python3Parser::Continue_stmtContext *ctx) -{ +std::any EvalVisitor::visitContinue_stmt( + Python3Parser::Continue_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitReturn_stmt(Python3Parser::Return_stmtContext *ctx) -{ +std::any EvalVisitor::visitReturn_stmt(Python3Parser::Return_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitCompound_stmt(Python3Parser::Compound_stmtContext *ctx) -{ +std::any EvalVisitor::visitCompound_stmt( + Python3Parser::Compound_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitIf_stmt(Python3Parser::If_stmtContext *ctx) -{ +std::any EvalVisitor::visitIf_stmt(Python3Parser::If_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitWhile_stmt(Python3Parser::While_stmtContext *ctx) -{ +std::any EvalVisitor::visitWhile_stmt(Python3Parser::While_stmtContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitSuite(Python3Parser::SuiteContext *ctx) -{ +std::any EvalVisitor::visitSuite(Python3Parser::SuiteContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitTest(Python3Parser::TestContext *ctx) -{ +std::any EvalVisitor::visitTest(Python3Parser::TestContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitOr_test(Python3Parser::Or_testContext *ctx) -{ +std::any EvalVisitor::visitOr_test(Python3Parser::Or_testContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitAnd_test(Python3Parser::And_testContext *ctx) -{ +std::any EvalVisitor::visitAnd_test(Python3Parser::And_testContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitNot_test(Python3Parser::Not_testContext *ctx) -{ +std::any EvalVisitor::visitNot_test(Python3Parser::Not_testContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitComparison(Python3Parser::ComparisonContext *ctx) -{ +std::any EvalVisitor::visitComparison(Python3Parser::ComparisonContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitComp_op(Python3Parser::Comp_opContext *ctx) -{ +std::any EvalVisitor::visitComp_op(Python3Parser::Comp_opContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitArith_expr(Python3Parser::Arith_exprContext *ctx) -{ +std::any EvalVisitor::visitArith_expr(Python3Parser::Arith_exprContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitAddorsub_op(Python3Parser::Addorsub_opContext *ctx) -{ +std::any EvalVisitor::visitAddorsub_op(Python3Parser::Addorsub_opContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitTerm(Python3Parser::TermContext *ctx) -{ +std::any EvalVisitor::visitTerm(Python3Parser::TermContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitMuldivmod_op(Python3Parser::Muldivmod_opContext *ctx) -{ +std::any EvalVisitor::visitMuldivmod_op( + Python3Parser::Muldivmod_opContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitFactor(Python3Parser::FactorContext *ctx) -{ +std::any EvalVisitor::visitFactor(Python3Parser::FactorContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitAtom_expr(Python3Parser::Atom_exprContext *ctx) -{ +std::any EvalVisitor::visitAtom_expr(Python3Parser::Atom_exprContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitTrailer(Python3Parser::TrailerContext *ctx) -{ +std::any EvalVisitor::visitTrailer(Python3Parser::TrailerContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitAtom(Python3Parser::AtomContext *ctx) -{ +std::any EvalVisitor::visitAtom(Python3Parser::AtomContext *ctx) { + throw FatalError("Not implemented in function visitAtom"); return visitChildren(ctx); } -std::any EvalVisitor::visitTestlist(Python3Parser::TestlistContext *ctx) -{ +std::any EvalVisitor::visitTestlist(Python3Parser::TestlistContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitArglist(Python3Parser::ArglistContext *ctx) -{ +std::any EvalVisitor::visitArglist(Python3Parser::ArglistContext *ctx) { return visitChildren(ctx); } -std::any EvalVisitor::visitArgument(Python3Parser::ArgumentContext *ctx) -{ +std::any EvalVisitor::visitArgument(Python3Parser::ArgumentContext *ctx) { return visitChildren(ctx); } \ No newline at end of file diff --git a/src/utils.cpp b/src/utils.cpp new file mode 100644 index 0000000..e69de29