August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
现在,或许我们能够实现完整的计算器程序了。然而,可能前面的设计只有一小部分有用。在计算器程序中如何使用Token?我们可以将输入读到一个Token的vector中:
接下来,我们可以先读取一个表达式,然后对其进行运算。例如,对于11*12可以得到:
我们可以从中找到乘法符号及其操作数,因此非常容易地执行乘法运算,因为数字11和12是作为数字而不是字符串存储的。
接下来看一个更复杂的表达式,如1+2*3,则tok包含5个Token:
通过一个简单的循环就可以找到乘法操作符:
但接下来如何处理乘积d呢?如何确定子表达式的计算顺序呢?因为加法运算符在乘法运算符之前,所以不能直接按照从左到右的顺序计算。我们可以试试从右到左计算!但这么做对1+2*3是正确的,对1*2+3又是错误的了。更糟的是1+2*3+4,必须“由内至外”计算:1+(2*3)+4。又出现了新的问题,我们如何处理括号呢,最终我们到底应该如何做呢?似乎是走进了死胡同。我们必须后退一步,先停止程序的编写,重新考虑如何读取和分析输入表达式,并计算它的值。 ...