diff options
Diffstat (limited to 'src/expressions.h')
-rw-r--r-- | src/expressions.h | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/expressions.h b/src/expressions.h index f97ec1c..e49880c 100644 --- a/src/expressions.h +++ b/src/expressions.h @@ -150,31 +150,45 @@ public: } }; -/* +/** * Arithmetic expression stacks */ extern class Expressions { public: - /* reflects also operator precedence */ + /** + * Operator type. + * The enumeration value divided by 16 represents + * its precedence (the lower, the higher). + * In other words, the value's lower nibble is + * reserved for enumerating operators of the + * same precedence. + */ enum Operator { - OP_NIL = 0, - OP_POW, // ^* - OP_MOD, // ^/ + OP_NIL = 0, + OP_POW = 0x10, // ^* + OP_MOD = 0x20, // ^/ OP_DIV, // / OP_MUL, // * - OP_SUB, // - + OP_SUB = 0x30, // - OP_ADD, // + - OP_AND, // & - OP_XOR, // ^# - OP_OR, // # + OP_AND = 0x40, // & + OP_XOR = 0x50, // ^# + OP_OR = 0x60, // # // pseudo operators: - OP_NEW, + OP_NEW = 0xF0, OP_BRACE, OP_LOOP, OP_NUMBER }; private: + /** Get operator precedence */ + inline gint + precedence(Operator op) + { + return op >> 4; + } + ValueStack<tecoInt> numbers; ValueStack<Operator> operators; |