src/Expression.h

changeset 94
8915ee6a277d
parent 93
11a24b697f43
child 106
9174be9ac686
equal deleted inserted replaced
93:11a24b697f43 94:8915ee6a277d
3 #include "Parser.h" 3 #include "Parser.h"
4 4
5 class DataBuffer; 5 class DataBuffer;
6 class ExpressionSymbol; 6 class ExpressionSymbol;
7 class ExpressionValue; 7 class ExpressionValue;
8 class ExpressionOperator;
8 9
9 // ============================================================================= 10 // =============================================================================
10 // 11 //
11 enum EOperator 12 enum EOperator
12 { 13 {
54 private: 55 private:
55 BotscriptParser* mParser; 56 BotscriptParser* mParser;
56 Lexer* mLexer; 57 Lexer* mLexer;
57 SymbolList mSymbols; 58 SymbolList mSymbols;
58 EType mType; 59 EType mType;
59 ExpressionValue* mResult;
60 60
61 ExpressionValue* Evaluate(); // Process the expression and yield a result 61 ExpressionValue* Evaluate(); // Process the expression and yield a result
62 ExpressionSymbol* ParseSymbol(); 62 ExpressionSymbol* ParseSymbol();
63 String GetTokenString(); 63 String GetTokenString();
64 void AdjustOperators(); 64 void AdjustOperators();
65 void Verify(); // Ensure the expr is valid 65 void Verify(); // Ensure the expr is valid
66 void TryVerifyValue (bool* verified, SymbolList::Iterator it); 66 void TryVerifyValue (bool* verified, SymbolList::Iterator it);
67 ExpressionValue* EvaluateOperator (const ExpressionOperator* op,
68 const List<ExpressionValue*>& values);
69 SymbolList::Iterator FindPrioritizedOperator();
67 }; 70 };
68 71
69 // ============================================================================= 72 // =============================================================================
70 // 73 //
71 class ExpressionSymbol 74 class ExpressionSymbol
97 100
98 public: 101 public:
99 ExpressionValue (EType valuetype); 102 ExpressionValue (EType valuetype);
100 ~ExpressionValue(); 103 ~ExpressionValue();
101 104
102 void ConvertToBuffer(); 105 void ConvertToBuffer();
106
107 inline ExpressionValue* Clone() const
108 {
109 return new ExpressionValue (*this);
110 }
103 111
104 inline bool IsConstexpr() const 112 inline bool IsConstexpr() const
105 { 113 {
106 return GetBuffer() == null; 114 return GetBuffer() == null;
107 } 115 }

mercurial