Add evaluator
diff --git a/Evaluator.h b/Evaluator.h
index 3eaef52..62fd23f 100644
--- a/Evaluator.h
+++ b/Evaluator.h
@@ -1,5 +1,39 @@
#pragma once
+#include <QMap>
+
+#include "Token.h"
+#include "AstNode.h"
+#include "Function.h"
+#include "VarContext.h"
+
+class RuntimeResult
+{
+public:
+ RuntimeResult(QList<Token> result);
+ RuntimeResult(QString message);
+
+ bool success() const;
+ QString message() const;
+ QList<Token> result() const;
+
+ operator QString() const;
+
+private:
+ bool _success = true;
+ QString _errorMessage;
+ QList<Token> _result;
+};
+
class Evaluator {
public:
+ Evaluator() = default;
+
+ void addFunction(Function func);
+ void clearFunction(QString name);
+ RuntimeResult evaluate(AstNode node, VarContext ctx);
+ RuntimeResult callFunction(QString name, QList<Token> args);
+
+private:
+ QMap<QString, Function> _functions;
};