-
Notifications
You must be signed in to change notification settings - Fork 0
/
statement.h
135 lines (120 loc) · 3.07 KB
/
statement.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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#ifndef STATEMENT_H
#define STATEMENT_H
#include <QObject>
#include <QWidget>
#include "exp.h"
class MainWindow;
enum stmtType{REM, LET, PRINT, INPUT, GOTO, IF, END, INPUTS, PRINTF};
class statement
{
friend class program;
friend class MainWindow;
protected:
stmtType type;
evalstate *state;
public:
statement(evalstate* st);
virtual ~statement(){}
virtual int excute() = 0;
virtual QString toSyntaxTree(){return QString("");}
static bool isLegalVarName(QString name);
stmtType getType();
};
class remStmt: public statement
{
private:
QString text;
public:
remStmt(QList<QString> tokens, evalstate* st);
int excute() override;
QString toSyntaxTree() override;
static bool isLegal(QList<QString> tokens);
};
class letStmt: public statement
{
private:
QString varible;
Expression* exp;
QString sValue; //字符串类型时字符串值
public:
letStmt(QList<QString> tokens, evalstate* st);
~letStmt() override;
int excute() override;
QString toSyntaxTree() override;
static bool isLegal(QList<QString> tokens);
};
class printStmt: public statement
{
private:
Expression* exp;
public:
printStmt(QList<QString> tokens, evalstate* st);
~printStmt() override;
int getValue();
int excute() override;
QString toSyntaxTree() override;
static bool isLegal(QList<QString> tokens);
};
class inputStmt: public statement
{
QString varible;
public:
inputStmt(QList<QString> tokens, evalstate* st);
int excute() override;
QString getVarName();
QString toSyntaxTree() override;
static bool isLegal(QList<QString> tokens);
};
class gotoStmt: public statement
{
int nextLineNum;
public:
gotoStmt(QList<QString> tokens, evalstate* st);
int excute() override;
QString toSyntaxTree() override;
static bool isLegal(QList<QString> tokens);
};
class ifStmt: public statement
{
Expression *exp1, *exp2;
int thenNum;
QString op;
public:
ifStmt(QList<QString> tokens, evalstate* st);
~ifStmt() override;
int excute() override;
static bool isOp(QString op);
bool condition();
QString toSyntaxTree() override;
static bool isLegal(QList<QString> tokens);
};
class endStmt: public statement
{
public:
endStmt(QList<QString> tokens, evalstate* st);
int excute() override;
QString toSyntaxTree() override;
static bool isLegal(QList<QString> tokens);
};
class inputsStmt: public statement
{
QString varible;
public:
inputsStmt(QList<QString> tokens, evalstate* st);
int excute() override;
QString getVarName();
QString toSyntaxTree() override;
static bool isLegal(QList<QString> tokens);
};
class printfStmt: public statement
{
private:
QList<QString> argv;
public:
printfStmt(QList<QString> tokens, evalstate* st);
QString getText();
int excute() override;
QString toSyntaxTree() override;
static bool isLegal(QList<QString> tokens);
};
#endif // STATEMENT_H