Files
BH-Python-Interpreter-2023/src/Evalvisitor.cpp

181 lines
4.6 KiB
C++

#include "Evalvisitor.h"
#include <any>
#include <iostream>
#include "Python3ParserBaseVisitor.h"
#include "int2048/int2048.h"
#include "names.h"
#include "utils.h"
VariableContainer Variables;
FucntionContainer Functions;
std::any EvalVisitor::visitFile_input(Python3Parser::File_inputContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitFuncdef(Python3Parser::FuncdefContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitParameters(Python3Parser::ParametersContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitTypedargslist(
Python3Parser::TypedargslistContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitTfpdef(Python3Parser::TfpdefContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitStmt(Python3Parser::StmtContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitSimple_stmt(Python3Parser::Simple_stmtContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitSmall_stmt(Python3Parser::Small_stmtContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitExpr_stmt(Python3Parser::Expr_stmtContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitAugassign(Python3Parser::AugassignContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitFlow_stmt(Python3Parser::Flow_stmtContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitBreak_stmt(Python3Parser::Break_stmtContext *ctx) {
return FlowType(BREAK);
}
std::any EvalVisitor::visitContinue_stmt(
Python3Parser::Continue_stmtContext *ctx) {
return FlowType(CONTINUE);
}
std::any EvalVisitor::visitReturn_stmt(Python3Parser::Return_stmtContext *ctx) {
throw FatalError("Not implemented in function visitReturn_stmt");
return visitChildren(ctx);
}
std::any EvalVisitor::visitCompound_stmt(
Python3Parser::Compound_stmtContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitIf_stmt(Python3Parser::If_stmtContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitWhile_stmt(Python3Parser::While_stmtContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitSuite(Python3Parser::SuiteContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitTest(Python3Parser::TestContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitOr_test(Python3Parser::Or_testContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitAnd_test(Python3Parser::And_testContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitNot_test(Python3Parser::Not_testContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitComparison(Python3Parser::ComparisonContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitComp_op(Python3Parser::Comp_opContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitArith_expr(Python3Parser::Arith_exprContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitAddorsub_op(Python3Parser::Addorsub_opContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitTerm(Python3Parser::TermContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitMuldivmod_op(
Python3Parser::Muldivmod_opContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitFactor(Python3Parser::FactorContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitAtom_expr(Python3Parser::Atom_exprContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitTrailer(Python3Parser::TrailerContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitAtom(Python3Parser::AtomContext *ctx) {
if (ctx->NONE())
return NoneType();
else if (ctx->TRUE())
return true;
else if (ctx->FALSE())
return false;
else if (ctx->NUMBER()) {
std::string num = ctx->getText();
if (num.find('.') == std::string::npos)
return std::move(ZYM::int2048(num));
else
return std::stod(num);
} else if (ctx->test())
return visitTest(ctx->test());
else if (ctx->NAME()) {
return RawVarible(ctx->getText());
} else {
auto string_lists = ctx->STRING();
std::string res;
for (auto item : string_lists) {
const std::string &tmp = item->getText();
res.append(tmp, 1, tmp.size() - 2);
}
return res;
}
}
std::any EvalVisitor::visitTestlist(Python3Parser::TestlistContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitArglist(Python3Parser::ArglistContext *ctx) {
return visitChildren(ctx);
}
std::any EvalVisitor::visitArgument(Python3Parser::ArgumentContext *ctx) {
return visitChildren(ctx);
}