Inspired by this expression in the CPIT201 book, I decided to write code to parse the expression and obtain the result. Somehow, the code I wrote to parse the expression ended up becoming a very simple language.
There is a small bug with how NOT
works, instead of flipping the given bits, it flips all bits (Bits are stored as a number, not a string). To avoid the bug, use 1111 XOR 1100
instead of NOT 1100
For example, with this line of code
result1 = (input1 AND (NOT input2)) OR ((NOT input1) AND input2)
It will go through this process:
- Convert each part into a '
Token
'
['result1', '=', '(', 'input1', 'AND', '(', 'NOT', 'input2', ')', ')', 'OR', '(', '(', 'NOT', 'input1', ')', 'AND', 'input2', ')']
- Convert the expression into Reverse Polish Notation (also known as Postfix)
['result1', 'input1', 'input2', 'NOT', 'AND', 'input1', 'NOT', 'input2', 'AND', 'OR', '=']
- Then, the Postfix expression will be parsed as such:
- Operands are pushed onto the Stack
- Operators pop the needed operators from the stack
- The result is pushed back onto the stack
- Repeat until the expression is finished