-
Notifications
You must be signed in to change notification settings - Fork 0
/
minibasic.h
41 lines (33 loc) · 936 Bytes
/
minibasic.h
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
37
38
39
40
41
#pragma once
#include "parser.h"
#include "evalstate.h"
#include <functional>
#include <QtCore/qfile.h>
struct Line {
QString code;
QStringList tree;
Statement *statement = nullptr;
std::function<void()> procedure;
};
class MiniBasic {
public:
MiniBasic() : running(false) {}
std::function<void(qint64)> print;//print interface defined by users
std::function<qint64()> input;//input interface defined by users
void setCode(size_t line, const QString &code);
void removeCode(size_t line);
void loadCode(const QString &filename);
void clearCode();
void run();
void kill() { running = false; }
bool isRunning() { return running; }
QStringList codeHTML();
QStringList treeHTML();
private:
EvaluationState evaluationState;
QMap<size_t, Line> lineList;
QMap<size_t, QString> errorList;
QMap<size_t, Line>::iterator currentPosition;
bool running;
std::function<void()> generateProcedure(Statement *statement);
};