Various error codes:
ERROR_DER_EXPR - expression not in form =
ERROR_INTERNAL - some internal error
ERROR_CONSTANT - invalid numeric constant
ERROR_MISSING_LVALUE - missing lvalue in arithmetic function
ERROR_MISSING_RVALUE - missing rvalue in arithmetic function
ERROR_PARSING_LVALUE - invalid lvalue in arithmetic function
ERROR_PARSING_RVALUE - invalid lvalue in arithmetic function
ERROR_NO_EXPR - missing an expression to run (runtime)
ERROR_INVALID_ARITH - invalid arithmetic function specified
ERROR_NO_VARIABLE - couldn't resolve variable name (runtime)
ERROR_PARSING_GROUP - couldn't parse a parenthetical group
ERROR_NO_FUNC_EXPR - no expression for function
ERROR_FUNC_SYNTAX - syntax error for function
ERROR_VAR_NAME - invalid character in variable name
ERROR_CIRCULAR - circular expression (runtime)
ERROR_FUNC_ARGS - invalid arguments to function (runtime)
ERROR_USER - user-supplied error message
This method sets group info for the current expression,
by iterating over the expression and determining what
the highest parentheses and/or operator is found.
Types of operators (in reverse precedence order):
OPERATOR_NONE - invalid (zero)
OPERATOR_SUB - subtraction
OPERATOR_ADD - addition
OPERATOR_MOD - modulus division
OPERATOR_DIV - division
OPERATOR_MULT - multiplication
OPERATOR_EXP - exponent
OPERATOR_QUESTION - question-mark (first part of ternary op)
OPERATOR_COLON - colon (second part of ternary op)
Because the question mark and the colon operator are so
tightly-coupled, notice that they're relatively close to each
other in the precedence list.