55 String name; |
55 String name; |
56 ByteMark* target; |
56 ByteMark* target; |
57 }; |
57 }; |
58 |
58 |
59 // ============================================================================ |
59 // ============================================================================ |
60 // Operators |
|
61 // |
|
62 enum EOperator |
|
63 { |
|
64 OPER_ADD, |
|
65 OPER_SUBTRACT, |
|
66 OPER_MULTIPLY, |
|
67 OPER_DIVIDE, |
|
68 OPER_MODULUS, |
|
69 OPER_ASSIGN, |
|
70 OPER_ASSIGNADD, |
|
71 OPER_ASSIGNSUB, |
|
72 OPER_ASSIGNMUL, |
|
73 OPER_ASSIGNDIV, |
|
74 OPER_ASSIGNMOD, // -- 10 |
|
75 OPER_EQUALS, |
|
76 OPER_NOTEQUALS, |
|
77 OPER_LESSTHAN, |
|
78 OPER_GREATERTHAN, |
|
79 OPER_LESSTHANEQUALS, |
|
80 OPER_GREATERTHANEQUALS, |
|
81 OPER_LEFTSHIFT, |
|
82 OPER_RIGHTSHIFT, |
|
83 OPER_ASSIGNLEFTSHIFT, |
|
84 OPER_ASSIGNRIGHTSHIFT, // -- 20 |
|
85 OPER_OR, |
|
86 OPER_AND, |
|
87 OPER_BITWISEOR, |
|
88 OPER_BITWISEAND, |
|
89 OPER_BITWISEEOR, |
|
90 OPER_TERNARY, |
|
91 OPER_STRLEN, |
|
92 }; |
|
93 |
|
94 // ============================================================================ |
|
95 // |
|
96 struct operatorInfo |
|
97 { |
|
98 EOperator opercode; |
|
99 EDataHeader dataheader; |
|
100 EToken token; |
|
101 }; |
|
102 |
|
103 // ============================================================================ |
|
104 // Mark types |
60 // Mark types |
105 // |
61 // |
106 enum eMarkType |
62 enum eMarkType |
107 { |
63 { |
108 eLabelMark, |
64 eLabelMark, |
169 public: |
135 public: |
170 // ==================================================================== |
136 // ==================================================================== |
171 // METHODS |
137 // METHODS |
172 BotscriptParser(); |
138 BotscriptParser(); |
173 ~BotscriptParser(); |
139 ~BotscriptParser(); |
174 ConstantInfo* FindConstant (const String& tok); |
140 ConstantInfo* FindConstant (const String& tok); |
175 void ParseBotscript (String fileName); |
141 void ParseBotscript (String fileName); |
176 DataBuffer* ParseCommand (CommandInfo* comm); |
142 DataBuffer* ParseCommand (CommandInfo* comm); |
177 DataBuffer* ParseAssignment (ScriptVariable* var); |
143 DataBuffer* ParseAssignment (ScriptVariable* var); |
178 int ParseOperator (bool peek = false); |
144 EAssignmentOperator ParseAssignmentOperator (); |
179 String ParseFloat(); |
145 String ParseFloat(); |
180 void PushScope(); |
146 void PushScope(); |
181 DataBuffer* ParseStatement(); |
147 DataBuffer* ParseStatement(); |
182 void AddSwitchCase (DataBuffer* b); |
148 void AddSwitchCase (DataBuffer* b); |
183 void CheckToplevel(); |
149 void CheckToplevel(); |
184 void CheckNotToplevel(); |
150 void CheckNotToplevel(); |
185 bool TokenIs (EToken a); |
151 bool TokenIs (EToken a); |
186 String GetTokenString(); |
152 String GetTokenString(); |
187 String DescribePosition() const; |
153 String DescribePosition() const; |
188 void WriteToFile (String outfile); |
154 void WriteToFile (String outfile); |
189 |
155 |
190 inline int GetNumEvents() const |
156 inline int GetNumEvents() const |
191 { |
157 { |
192 return mNumEvents; |
158 return mNumEvents; |
193 } |
159 } |
256 void ParseLabel(); |
222 void ParseLabel(); |
257 void ParseEventdef(); |
223 void ParseEventdef(); |
258 void ParseFuncdef(); |
224 void ParseFuncdef(); |
259 void writeMemberBuffers(); |
225 void writeMemberBuffers(); |
260 void WriteStringTable(); |
226 void WriteStringTable(); |
261 void ParseExpression (EType reqtype); |
227 DataBuffer* ParseExpression (EType reqtype, bool fromhere = false); |
|
228 EDataHeader GetAssigmentDataHeader (EAssignmentOperator op, ScriptVariable* var); |
262 }; |
229 }; |
263 |
230 |
264 #endif // BOTC_PARSER_H |
231 #endif // BOTC_PARSER_H |