-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMareExecuter.h
77 lines (54 loc) · 2.36 KB
/
MareExecuter.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
#ifndef MARE_EXECUTE_H_INCLUDED
#define MARE_EXECUTE_H_INCLUDED
#include "MareBase.h"
namespace mare_vm {
using namespace std;
class MareExecuter : public MareBase {
public:
MareExecuter(MareUtil &util) : MareBase(0, util), returnValue() {}
void prepareExecute(vector<string> const& params);
void execute(string const& fname, vector<string> const& params);
protected:
MareExecuter(int startPc, MareUtil &util) : MareBase(startPc, util), returnValue() {}
VarObj returnValue; /* 함수의 반환 값 저장용 */
SymKind varSymType; /* getMemAdrs 함수용 */
MareStack mstk;
unsigned short readedCodeCnt;
//CodeSet code; /* 현재 코드 셋 (MareBase로 이동) */
int baseReg; /* 베이스 레지스터 */
int stpReg; /* 스택 포인터 */
int maxCodeLine; /* 프로그램 코드의 끝행 번호 */
char *code_ptr; /* 내부 코드 분석용 포인터 */
bool breakFlag, conFlag, returnFlag, exitFlag; /* 제어용 플래그 */
/* 실행 */
short prepareExecute(string const& fname, vector<string> const& params);
void execute(short startPc);
void statement();
void block();
short opOrder(TknKind kd);
void binaryExpr(TknKind op);
void setEndSubIf(bool& flg);
void callFunction(short fncIdx);
void execFunction(short fncIdx, short argCnt);
void execSysFunc();
int getTopAdrs(CodeSet const& cd);
short getEndLineOfIf(short line_);
void chkEofLine();
TknKind lookCode(short line_);
CodeSet firstCode(short line_);
CodeSet nextCode();
CodeSet chkNextCode(CodeSet const& cd, short kind2);
private:
void setInitArray();
void assignVariable(CodeSet const save, bool declare=false);
int getMemAdrs(CodeSet const& cd, SymKind& objType, DtType& varTp);
VarObj getExpression(short kind1=0, short kind2=0);
void expression(short kind1, short kind2);
void term(short n);
void factor();
short setParams(vector<VarObj>& vs, short numOfParams);
void setPropertyRun(CodeSet const& varCode, SymKind sk);
void updateSymTbl(int adrs, int diff, int frameSz, bool isFixedArray=false);
};
}
#endif