upd: first version of atom

This commit is contained in:
2023-11-09 09:40:43 +08:00
parent a2a8c45af1
commit cfdc5e5a1c
5 changed files with 169 additions and 14 deletions

View File

@ -8,7 +8,7 @@
#include "names.h"
#include "utils.h"
NameScopeClass GlobalScope, StackScope;
VariableContainer Variables;
FucntionContainer Functions;
std::any EvalVisitor::visitFile_input(Python3Parser::File_inputContext *ctx) {
@ -141,8 +141,31 @@ std::any EvalVisitor::visitTrailer(Python3Parser::TrailerContext *ctx) {
}
std::any EvalVisitor::visitAtom(Python3Parser::AtomContext *ctx) {
// throw FatalError("Not implemented in function visitAtom");
return visitChildren(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) {