src/Parser.h

changeset 92
3a00d396bce2
parent 91
427eb377d53e
child 97
49e38433b9fd
equal deleted inserted replaced
91:427eb377d53e 92:3a00d396bce2
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,
122 eDoScope, 78 eDoScope,
123 eSwitchScope, 79 eSwitchScope,
124 eElseScope, 80 eElseScope,
125 }; 81 };
126 82
83 enum EAssignmentOperator
84 {
85 EAssign,
86 EAssignAdd,
87 EAssignSub,
88 EAssignMul,
89 EAssignDiv,
90 EAssignMod,
91 };
92
127 // ============================================================================ 93 // ============================================================================
128 // Meta-data about scopes 94 // Meta-data about scopes
129 // 95 //
130 struct ScopeInfo 96 struct ScopeInfo
131 { 97 {
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

mercurial