src/Expression.h

changeset 92
3a00d396bce2
parent 91
427eb377d53e
child 93
11a24b697f43
equal deleted inserted replaced
91:427eb377d53e 92:3a00d396bce2
6 class ExpressionSymbol; 6 class ExpressionSymbol;
7 class ExpressionValue; 7 class ExpressionValue;
8 8
9 // ============================================================================= 9 // =============================================================================
10 // 10 //
11 enum EOperator
12 {
13 opNegateLogical,
14 opUnaryMinus,
15 opMultiplication,
16 opDivision,
17 opModulus,
18 opAddition,
19 opSubtraction,
20 opLeftShift,
21 opRightShift,
22 opCompareLesser,
23 opCompareGreater,
24 opCompareAtLeast,
25 opCompareAtMost,
26 opCompareEquals,
27 opCompareNotEquals,
28 opBitwiseAnd,
29 opBitwiseXOr,
30 opBitwiseOr,
31 opLogicalAnd,
32 opLogicalOr,
33 opTernary,
34 };
35
36 // =============================================================================
37 //
11 class Expression final 38 class Expression final
12 { 39 {
13 public: 40 public:
14 Expression (BotscriptParser* parser, EType reqtype, Lexer* lx); 41 Expression (BotscriptParser* parser, Lexer* lx, EType reqtype);
15 ~Expression(); 42 ~Expression();
16 ExpressionValue* GetResult(); 43 ExpressionValue* GetResult();
17 44
18 private: 45 private:
46 BotscriptParser* mParser;
19 Lexer* mLexer; 47 Lexer* mLexer;
20 List<ExpressionSymbol*> mSymbols; 48 List<ExpressionSymbol*> mSymbols;
21 EType mType; 49 EType mType;
22 ExpressionValue* mResult; 50 ExpressionValue* mResult;
23 BotscriptParser* mParser;
24 51
25 ExpressionValue* Evaluate(); // Process the expression and yield a result 52 ExpressionValue* Evaluate(); // Process the expression and yield a result
26 ExpressionSymbol* ParseSymbol(); 53 ExpressionSymbol* ParseSymbol();
27 String GetTokenString(); 54 String GetTokenString();
55 void AdjustOperators();
28 void Verify(); // Ensure the expr is valid 56 void Verify(); // Ensure the expr is valid
29 }; 57 };
30 58
31 // ============================================================================= 59 // =============================================================================
32 // 60 //
33 class ExpressionSymbol 61 class ExpressionSymbol
34 { 62 {
35 public: 63 public:
36 enum EExpressionSymbolType 64 enum EExpressionSymbolType
37 { 65 {
38 eOperator, 66 eOperatorSymbol,
39 eOperand, 67 eValueSymbol,
40 eColon, 68 eColonSymbol,
41 }; 69 };
70
71 ExpressionSymbol (EExpressionSymbolType type) :
72 mType (type) {}
42 73
43 PROPERTY (private, EExpressionSymbolType, Type, NO_OPS, STOCK_WRITE) 74 PROPERTY (private, EExpressionSymbolType, Type, NO_OPS, STOCK_WRITE)
44 }; 75 };
45 76
46 // ============================================================================= 77 // =============================================================================
47 // 78 //
48 class ExpressionOperator final : public ExpressionSymbol 79 class ExpressionOperator final : public ExpressionSymbol
49 { 80 {
50 PROPERTY (public, int, ID, NO_OPS, STOCK_WRITE) 81 PROPERTY (public, EOperator, ID, NO_OPS, STOCK_WRITE)
51 82
52 public: 83 public:
53 ExpressionOperator (int id); 84 ExpressionOperator (EOperator id);
54 }; 85 };
55 86
56 // ============================================================================= 87 // =============================================================================
57 // 88 //
58 class ExpressionValue final : public ExpressionSymbol 89 class ExpressionValue final : public ExpressionSymbol
59 { 90 {
60 PROPERTY (public, int, Value, BOOL_OPS, STOCK_WRITE) 91 PROPERTY (public, int, Value, NUM_OPS, STOCK_WRITE)
61 PROPERTY (public, DataBuffer*, Buffer, NO_OPS, STOCK_WRITE) 92 PROPERTY (public, DataBuffer*, Buffer, NO_OPS, STOCK_WRITE)
62 PROPERTY (public, EType, ValueType, NO_OPS, STOCK_WRITE) 93 PROPERTY (public, EType, ValueType, NO_OPS, STOCK_WRITE)
63 94
64 public: 95 public:
65 ExpressionValue (EType valuetype); 96 ExpressionValue (EType valuetype);
97 ~ExpressionValue();
66 98
67 void ConvertToBuffer(); 99 void ConvertToBuffer();
68 100
69 inline bool IsConstexpr() const 101 inline bool IsConstexpr() const
70 { 102 {
80 // 112 //
81 class ExpressionColon final : public ExpressionSymbol 113 class ExpressionColon final : public ExpressionSymbol
82 { 114 {
83 public: 115 public:
84 ExpressionColon() : 116 ExpressionColon() :
85 mType (eColon) {} 117 ExpressionSymbol (eColonSymbol) {}
86 }; 118 };
87 119
88 #endif // BOTC_EXPRESSION_H 120 #endif // BOTC_EXPRESSION_H

mercurial