Given a mathematical expression as a string you must return the result as a number.
Number may be both whole numbers and/or decimal numbers. The same goes for the returned result.
You need to support the following mathematical operators:
- Multiplication
* - Division
/(as true division) - Addition
+ - Subtraction
-
Operators are always evaluated from left-to-right, and * and / must be
evaluated before + and -.
You need to support multiple levels of nested parentheses, ex.
(2 / (2 + 3.33) * 4) - -6
There may or may not be whitespace between numbers and operators.
An addition to this rule is that the minus sign (-) used for negating numbers
and parentheses will never be separated by whitespace. I.e., all of the
following are valid expressions:
1-1 // 0
1 -1 // 0
1- 1 // 0
1 - 1 // 0
1- -1 // 2
1 - -1 // 2
6 + -(4) // 2
6 + -( -4) // 10
And the following are invalid expressions:
1 - - 1 // Invalid
1- - 1 // Invalid
6 + - (4) // Invalid
6 + -(- 4) // Invalid
You do not need to worry about validation - you will only receive valid mathematical expressions following the above rules.
eval and exec are disallowed in your solution.