这个计算器满足一元运算符(-)和二元运算符+,- ,*,/以及括号,支持浮点数,即输入以下字符串,能够算出正确结果:
1. 1+2+3*2*4
2. 2+3 * 4 + 4/2
3. -(3+ 4) / 2.5
4. -(3 * 4) + 2
5. 3.3 - 3
核心代码:
<span style="font-family:Courier New;">number_t exp()
{
number_t num = term();
number_t temp;
while (token == '+' || token == '-') {
switch (token)
{
case '+':
match('+');
temp = term();
num = calc('+', num, temp);
break;
case '-':
match('-');
temp = term();
num = calc('-', num, temp);
break;
default:
break;
}
}
return num;
}
number_t term()
{
number_t num = factor();
number_t temp;
while (token == '*' || token == '/') {
switch (token)
{
case '*':
match('*');
temp = term();
num = calc('*', num, temp);
break;
case '/':
match('/');
temp = term();
bool iszero = temp.isfloat ? temp.v.fval == 0 : temp.v.ival == 0;
if (iszero) {
error("divisor can't be 0");
}
num = calc('/', num, temp);
break;
default:
break;
}
}
return num;
}
number_t factor()
{
number_t num;
bool negtive = false;
if (token == '-') {
match('-');
negtive = true;
}
num = value();
if (negtive) {
if (num.isfloat) {
num.v.fval = 0 - num.v.fval;
}
else {
num.v.ival = 0 - num.v.ival;
}
}
return num;
}</span>
完整代码请看我的github:
https://github.com/booirror/toys