Add evaluator
diff --git a/ide/NbRuntime.h b/ide/NbRuntime.h
new file mode 100644
index 0000000..2f6a845
--- /dev/null
+++ b/ide/NbRuntime.h
@@ -0,0 +1,37 @@
+#pragma once
+
+#include <QObject>
+#include <QThread>
+#include <QQueue>
+
+#include "Cell.h"
+#include "../Token.h"
+#include "../Evaluator.h"
+#include "../Parser.h"
+
+class NbRuntime : public QThread
+{
+    Q_OBJECT
+
+public:
+    explicit NbRuntime(QObject *parent = nullptr);
+
+public slots:
+    void queueCell(Cell *cell);
+    void unqueueCell(Cell *cell);
+
+signals:
+    void cellFinishedRunning(Cell *cell, RuntimeResult result);
+    void cellFailedToParse(Cell *cell, ParseResult result);
+    void cellWaiting(Cell *cell);
+    void cellRunning(Cell *cell);
+    void cellQuit(Cell *cell);
+
+protected:
+    void evalRemaining();
+
+    Evaluator _eval;
+    QQueue<Cell *> _cells;
+    Cell *_running = nullptr;
+    VarContext _ctx;
+};