00001 #ifndef OPSEQ_H_
00002 #define OPSEQ_H_
00003
00004 #include <boost/shared_ptr.hpp>
00005 #include <vector>
00006 #include "engine/Variable.h"
00007
00008
00009 class SymbolTable;
00010 class VarTable;
00011
00012
00013 class ParseException
00014 {
00015
00016 public:
00017 ParseException(char* inStr)
00018 {
00019
00020 }
00021 };
00022
00023
00024 namespace green
00025 {
00026
00027 class OpSeq
00028 {
00029 public:
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082 enum OpCodeEnum
00083 {
00084 C_IBIN,
00085 C_FBIN,
00086 C_UNARY,
00087
00088 C_GOTO,
00089 C_GOTO_IF,
00090 C_GOTO_IFN,
00091
00092 C_DECL_INT,
00093 C_DECL_FLOAT,
00094 C_FUNC,
00095
00096 C_ENDTERM,
00097 C_RETURN
00098 };
00099
00100 enum OperatorEnum
00101 {
00102 O_BIN_ADD,
00103 O_BIN_SUB,
00104 O_BIN_MUL,
00105 O_BIN_DIV,
00106 O_BIN_MOD,
00107
00108 O_BIN_LT,
00109 O_BIN_GT,
00110 O_BIN_LE,
00111 O_BIN_GE,
00112 O_BIN_EQ,
00113 O_BIN_NE,
00114
00115 O_BIN_AND,
00116 O_BIN_OR,
00117
00118 O_UNARY_NEG,
00119 O_UNARY_NOT,
00120 O_UNARY_NOTH
00121 };
00122
00123 static const int BIN_ENUM_COUNT = 6;
00124 enum BinEnum
00125 {
00126 B_ETHIS = 0,
00127 B_EPREV = 1,
00128 B_ELAST = 2,
00129 B_BEH = 3,
00130 B_LOCAL = 4,
00131 B_PARAM = 5
00132 };
00133
00134 enum FuncEnum
00135 {
00136 F_SPAWN,
00137 F_DELETE,
00138 F_SEND,
00139 F_RECIEVE,
00140 F_GETMSGNUM
00141 };
00142
00143 private:
00144 std::vector<uint> seqData;
00145
00146
00147 void dispVarFormat(int& cur);
00148
00149 public:
00150
00151 OpSeq();
00152 OpSeq(int* inSeq);
00153
00154 void addValue(int value);
00155 void addVar(int isLit,Variable::Type typeIn,OpSeq::BinEnum binNo,int offset);
00156
00157
00158 int getSize();
00159
00160 void dumpScreen();
00161
00162
00163 std::vector<uint>::iterator getSequence();
00164 };
00165
00166 typedef boost::shared_ptr<OpSeq> OpSeqPtr;
00167
00168 };
00169
00170 #endif