19 std::pair<bool, std::string> get_init_error();
20 const std::string &get_code()
const;
21 std::pair<bool, std::string> set_code(
const std::string &s);
23 std::pair<bool, std::string> run(
const ParameterSet &pset = {});
25 static bool stack_pop(std::deque<int64_t> &stack,
int64_t &va);
30 enum class Type { INT, CMD, STR,
UUID };
31 Token(Type ty) : type(ty)
41 virtual std::unique_ptr<Token> clone()
const = 0;
52 std::unique_ptr<Token> clone()
const override
54 return std::make_unique<TokenInt>(*
this);
66 std::transform(other.arguments.begin(), other.arguments.end(), std::back_inserter(arguments),
67 [](
auto &x) {
return x->clone(); });
70 const std::string command;
71 std::deque<std::unique_ptr<Token>> arguments;
73 std::unique_ptr<Token> clone()
const override
75 return std::make_unique<TokenCommand>(*
this);
85 const std::string string;
87 std::unique_ptr<Token> clone()
const override
89 return std::make_unique<TokenString>(*
this);
95 TokenUUID(
const std::string &str) :
Token(Token::Type::UUID), string(str)
99 const std::string string;
101 std::unique_ptr<Token> clone()
const override
103 return std::make_unique<TokenUUID>(*
this);
106 using CommandHandler =
107 std::function<std::pair<bool, std::string>(
const TokenCommand *cmd, std::deque<int64_t> &stack)>;
108 virtual CommandHandler get_command(
const std::string &cmd);
112 std::pair<bool, std::string> compile();
113 std::pair<bool, std::string> init_error = {
false,
""};
115 std::deque<std::unique_ptr<Token>> tokens;