-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgetStatement.cpp
More file actions
48 lines (29 loc) · 902 Bytes
/
getStatement.cpp
File metadata and controls
48 lines (29 loc) · 902 Bytes
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
#include "Statement.h"
#include "Expression.h"
Statement * Statement::getStatement(deque<Declaration*> * params)
{
Statement * result = nullptr;
if (Minst->Match("return")) {
Expression * exp = Expression::getExpression(true, params);
result = new Statement(exp);
}
else
if (Minst->Match("if")) {
Minst->Matching("(");
Expression * condition = Expression::getExpression(false, params);
Minst->Matching(")");
deque<Element*> * elements = new deque<Element*>();
Element * element = nullptr;
if (Minst->Match("{")) {
while ((element = Statement::getStatement(params)) || (element = Expression::getExpression(true, params)))
elements->push_back(element);
Minst->Matching("}");
result = new Statement(condition, elements);
}
else {
element = Expression::getExpression(false, params);
Minst->Match(";");
}
}
return result;
}