aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorRobin Haberkorn <robin.haberkorn@googlemail.com>2015-09-24 04:07:03 +0200
committerRobin Haberkorn <robin.haberkorn@googlemail.com>2015-09-24 04:15:04 +0200
commitdb510ba69e90039a9649a4bf3c8e6b7bdc5a09bd (patch)
tree53c17c17a778e9cab3d14102acb3822bd445ad7c /src
parent812cdd86ed6a05b69da1d137f1eff3a885353fe7 (diff)
downloadsciteco-db510ba69e90039a9649a4bf3c8e6b7bdc5a09bd.tar.gz
cleaned up operator precedence code
* use small values for low precedence
Diffstat (limited to 'src')
-rw-r--r--src/expressions.cpp2
-rw-r--r--src/expressions.h31
2 files changed, 19 insertions, 14 deletions
diff --git a/src/expressions.cpp b/src/expressions.cpp
index 6b1e8fe..b59b409 100644
--- a/src/expressions.cpp
+++ b/src/expressions.cpp
@@ -94,7 +94,7 @@ Expressions::push_calc(Expressions::Operator op)
/* calculate if op has lower precedence than op on stack */
if (first >= 0 &&
- precedence(operators.peek(first)) <= precedence(op))
+ precedence(op) <= precedence(operators.peek(first)))
calc();
return push(op);
diff --git a/src/expressions.h b/src/expressions.h
index e49880c..f357a1d 100644
--- a/src/expressions.h
+++ b/src/expressions.h
@@ -158,27 +158,32 @@ public:
/**
* Operator type.
* The enumeration value divided by 16 represents
- * its precedence (the lower, the higher).
+ * its precedence (small values mean low precedence).
* In other words, the value's lower nibble is
* reserved for enumerating operators of the
* same precedence.
*/
enum Operator {
- OP_NIL = 0,
- OP_POW = 0x10, // ^*
- OP_MOD = 0x20, // ^/
+ /*
+ * Pseudo operators
+ */
+ OP_NIL = 0x00,
+ OP_NEW,
+ OP_BRACE,
+ OP_LOOP,
+ OP_NUMBER,
+ /*
+ * Real operators
+ */
+ OP_POW = 0x60, // ^*
+ OP_MOD = 0x50, // ^/
OP_DIV, // /
OP_MUL, // *
- OP_SUB = 0x30, // -
+ OP_SUB = 0x40, // -
OP_ADD, // +
- OP_AND = 0x40, // &
- OP_XOR = 0x50, // ^#
- OP_OR = 0x60, // #
- // pseudo operators:
- OP_NEW = 0xF0,
- OP_BRACE,
- OP_LOOP,
- OP_NUMBER
+ OP_AND = 0x30, // &
+ OP_XOR = 0x20, // ^#
+ OP_OR = 0x10 // #
};
private: