A simple scripting language in C++
Ferenc Szontágh
2025-04-18 4abeb5f8a6ad77b32496f3e8b20e1fd1b6f428fb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#ifndef VARIABLEEXPRESSIONNODE_HPP
#define VARIABLEEXPRESSIONNODE_HPP
 
#include <memory>
#include <string>
#include <utility>
 
#include "Interpreter/ExpressionNode.hpp"
#include "Interpreter/Interpreter.hpp"
#include "Symbols/SymbolContainer.hpp"
#include "Symbols/Value.hpp"
 
namespace Interpreter {
class VariableExpressionNode : public ExpressionNode {
    std::string variableName_;
    std::string ns;
 
  public:
    VariableExpressionNode(std::string varName, std::string ns) :
        variableName_(std::move(varName)),
        ns(std::move(ns)) {}
 
    Symbols::Value evaluate(Interpreter & interpreter) const override {
        if (!Symbols::SymbolContainer::instance()->exists(variableName_)) {
            throw std::runtime_error("Variable not found: " + variableName_);
        }
        auto symbol = Symbols::SymbolContainer::instance()->get(ns, variableName_);
        return symbol->getValue();
    }
 
    std::string toString() const override { return "$" + variableName_; }
};
 
};  // namespace Interpreter
 
#endif  // VARIABLEEXPRESSIONNODE_HPP