I have an enumeration called TokenType consist of a series of token type bit flags.
Code:
enum TokenType {
TOKEN_TYPE_NUMBER = 0x10,
TOKEN_TYPE_NUMBER_DECIMAL = TOKEN_TYPE_NUMBER | 1,
TOKEN_TYPE_NUMBER_HEXADECIMAL = TOKEN_TYPE_NUMBER | 2,
TOKEN_TYPE_NUMBER_POINT = TOKEN_TYPE_NUMBER | 3,
TOKEN_TYPE_OPERATOR = 0x20,
TOKEN_TYPE_OPERATOR_ASSIGNMENT = TOKEN_TYPE_OPERATOR | 1,
TOKEN_TYPE_OPERATOR_ASSIGNMENT_ADDITION = ?
.
.
TOKEN_TYPE_OPERATOR_ADDITION = TOKEN_TYPE_OPERATOR | 2,
TOKEN_TYPE_OPERATOR_SUBSTRACTION = TOKEN_TYPE_OPERATOR | 3,
TOKEN_TYPE_OPERATOR_MULTIPLICATION = TOKEN_TYPE_OPERATOR | 4,
TOKEN_TYPE_OPERATOR_DIVISION = TOKEN_TYPE_OPERATOR | 5,
TOKEN_TYPE_OPERATOR_MODULATION = TOKEN_TYPE_OPERATOR | 6,
TOKEN_TYPE_PARENTHESIS = 0x40,
TOKEN_TYPE_PARENTHESIS_OPEN = TOKEN_TYPE_PARENTHESIS | 1
TOKEN_TYPE_PARENTHESIS_CLOSE = TOKEN_TYPE_PARENTHESIS | 2
}
#define TOKEN_TYPE enum TokenType
How about TOKEN_TYPE_OPERATOR_ASSIGNMENT_ADDITION value?
It is both operator and operator assignment.
Code:
Token type
`-- Operator
`-- Assignment Operator
`-- Substraction Operator
`-- ...
So I can do something like:
Code:
if(tokenType && TOKEN_TYPE_OPERATOR) {
if(tokenType & TOKEN_TYPE_OPERATOR_ADDITION) {
//parse addition instruction
} else if(tokenType & TOKEN_TYPE_OPERATOR_SUBSTRACTION) {
//parse substraction instruction
} else if(tokenType & TOKEN_TYPE_OPERATOR_ASSIGNMENT) {
if(tokenType & TOKEN_TYPE_OPERATOR_ASSIGNMENT_ADDITION) {
//parse addition assignment instruction
} else if(...) {
//...
}
} else if(...) {
//...
}
}
Is there a formula or something to solve problems like this?
Sorry, I'm not good at math and don't understand bits thing well.
Thanks in advance.