-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathNodeManager.cpp
85 lines (75 loc) · 2.56 KB
/
NodeManager.cpp
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
#include "NodeManager.h"
// - - - - //// - - - - //// - - - - //// - - - - //
//Classi derivanti da NumExpr:
Number* NodeManager::makeNumber(int64_t n){//dato una stringa crea dinamicamente un oggetto di tipo Number
Number* tmp = new Number(n);
allocated.push_back(tmp);
return tmp;
}
Variable* NodeManager::makeVariable(std::string name) {//dato una stringa crea dinamicamente un oggetto di tipo variable
Variable* tmp = new Variable(name);
allocated.push_back(tmp);
return tmp;
}
NumOp* NodeManager::makeNumOp(NumOp::numOpCode o, NumExpr* o1, NumExpr* o2){//date due NumExpr e un numOpCode crea dinamicamente un oggetto NumOp
NumOp* tmp = new NumOp(o, o1, o2);
allocated.push_back(tmp);
return tmp;
}
// - - - - //// - - - - //// - - - - //// - - - - //
//Classi derivanti da BoolExpr
BoolOp* NodeManager::makeBoolOp(BoolOp::boolOpCode operand, BoolExpr* op1, BoolExpr* op2) {//per qualsiasi operando
BoolOp* tmp = nullptr;
if (operand == BoolOp::NOT) {
tmp = new BoolOp(operand, op1, nullptr);//richiamo il costruttore del not
}
else {
tmp = new BoolOp(operand, op1, op2);//chiamo il costruttore generico
}
allocated.push_back(tmp);
return tmp;
}
RelOp* NodeManager::makeRelOp(RelOp::relOpCode operand, NumExpr* op1, NumExpr* op2) {//per qualsiasi operando
RelOp* tmp = new RelOp(operand, op1, op2);//richiamo il costruttore del relOp
allocated.push_back(tmp);
return tmp;
}
BoolConst* NodeManager::makeBoolConst(std::string val) {
BoolConst* tmp = new BoolConst(val);
allocated.push_back(tmp);
return tmp;
}
// - - - - //// - - - - //// - - - - //// - - - - //
//Classi derivanti da Statement
PrintStmt* NodeManager::makePrintStmt(NumExpr* o) {
PrintStmt* tmp = new PrintStmt(o);
allocated.push_back(tmp);
return tmp;
}
SetStmt* NodeManager::makeSetStmt(Variable* s, NumExpr* e) {
SetStmt* tmp = new SetStmt(s, e);
allocated.push_back(tmp);
return tmp;
}
InputStmt* NodeManager::makeInputStmt(Variable* i) {
InputStmt* tmp = new InputStmt(i);
allocated.push_back(tmp);
return tmp;
}
WhileStmt* NodeManager::makeWhileStmt(BoolExpr* c, StmtBlock* b) {
WhileStmt* tmp = new WhileStmt(c, b);
allocated.push_back(tmp);
return tmp;
}
IfStmt* NodeManager::makeIfStmt(BoolExpr* c, StmtBlock* b1, StmtBlock* b2) {
IfStmt* tmp = new IfStmt(c, b1, b2);
allocated.push_back(tmp);
return tmp;
}
// - - - - //// - - - - //// - - - - //// - - - - //
//Classe Block
Block* NodeManager::makeBlock(std::vector<Statement*> sv) {
Block* tmp = new Block(sv);
allocated.push_back(tmp);
return tmp;
}