src/Expression.h

Tue, 04 Feb 2014 02:28:33 +0200

author
Teemu Piippo <crimsondusk64@gmail.com>
date
Tue, 04 Feb 2014 02:28:33 +0200
changeset 92
3a00d396bce2
parent 91
427eb377d53e
child 93
11a24b697f43
permissions
-rw-r--r--

- now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)

91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
1 #ifndef BOTC_EXPRESSION_H
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
2 #define BOTC_EXPRESSION_H
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
3 #include "Parser.h"
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
4
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
5 class DataBuffer;
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
6 class ExpressionSymbol;
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
7 class ExpressionValue;
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
8
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
9 // =============================================================================
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
10 //
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
11 enum EOperator
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
12 {
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
13 opNegateLogical,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
14 opUnaryMinus,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
15 opMultiplication,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
16 opDivision,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
17 opModulus,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
18 opAddition,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
19 opSubtraction,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
20 opLeftShift,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
21 opRightShift,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
22 opCompareLesser,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
23 opCompareGreater,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
24 opCompareAtLeast,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
25 opCompareAtMost,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
26 opCompareEquals,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
27 opCompareNotEquals,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
28 opBitwiseAnd,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
29 opBitwiseXOr,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
30 opBitwiseOr,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
31 opLogicalAnd,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
32 opLogicalOr,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
33 opTernary,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
34 };
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
35
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
36 // =============================================================================
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
37 //
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
38 class Expression final
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
39 {
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
40 public:
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
41 Expression (BotscriptParser* parser, Lexer* lx, EType reqtype);
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
42 ~Expression();
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
43 ExpressionValue* GetResult();
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
44
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
45 private:
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
46 BotscriptParser* mParser;
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
47 Lexer* mLexer;
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
48 List<ExpressionSymbol*> mSymbols;
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
49 EType mType;
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
50 ExpressionValue* mResult;
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
51
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
52 ExpressionValue* Evaluate(); // Process the expression and yield a result
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
53 ExpressionSymbol* ParseSymbol();
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
54 String GetTokenString();
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
55 void AdjustOperators();
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
56 void Verify(); // Ensure the expr is valid
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
57 };
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
58
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
59 // =============================================================================
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
60 //
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
61 class ExpressionSymbol
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
62 {
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
63 public:
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
64 enum EExpressionSymbolType
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
65 {
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
66 eOperatorSymbol,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
67 eValueSymbol,
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
68 eColonSymbol,
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
69 };
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
70
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
71 ExpressionSymbol (EExpressionSymbolType type) :
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
72 mType (type) {}
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
73
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
74 PROPERTY (private, EExpressionSymbolType, Type, NO_OPS, STOCK_WRITE)
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
75 };
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
76
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
77 // =============================================================================
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
78 //
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
79 class ExpressionOperator final : public ExpressionSymbol
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
80 {
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
81 PROPERTY (public, EOperator, ID, NO_OPS, STOCK_WRITE)
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
82
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
83 public:
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
84 ExpressionOperator (EOperator id);
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
85 };
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
86
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
87 // =============================================================================
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
88 //
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
89 class ExpressionValue final : public ExpressionSymbol
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
90 {
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
91 PROPERTY (public, int, Value, NUM_OPS, STOCK_WRITE)
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
92 PROPERTY (public, DataBuffer*, Buffer, NO_OPS, STOCK_WRITE)
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
93 PROPERTY (public, EType, ValueType, NO_OPS, STOCK_WRITE)
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
94
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
95 public:
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
96 ExpressionValue (EType valuetype);
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
97 ~ExpressionValue();
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
98
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
99 void ConvertToBuffer();
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
100
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
101 inline bool IsConstexpr() const
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
102 {
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
103 return GetBuffer() == null;
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
104 }
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
105 };
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
106
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
107 // =============================================================================
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
108 //
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
109 // This class represents a ":" in the expression. It serves as the colon for the
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
110 // ternary ?: operator. It's not an operand nor is an operator, nor can we just
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
111 // skip it so it is its own thing here.
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
112 //
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
113 class ExpressionColon final : public ExpressionSymbol
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
114 {
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
115 public:
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
116 ExpressionColon() :
92
3a00d396bce2 - now compiles again, further work on expressions (proper parsing + assignment operator handling (albeit unrelated) + operator adjusting)
Teemu Piippo <crimsondusk64@gmail.com>
parents: 91
diff changeset
117 ExpressionSymbol (eColonSymbol) {}
91
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
118 };
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
119
427eb377d53e - committed work so far done on expressions
Teemu Piippo <crimsondusk64@gmail.com>
parents:
diff changeset
120 #endif // BOTC_EXPRESSION_H

mercurial