upd: first version of atom
This commit is contained in:
@ -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) {
|
||||
|
Reference in New Issue
Block a user