August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
我们必须“向前”看这一行表达式中有没有乘法或者除法运算符。如果有,必须调整这种简单的从左到右的计算顺序。然而,当我们试图这样做时,立刻遇到了很多困难。
1.我们并没有必须要求表达式在一行输入,例如:
目前的代码能够正确地计算其结果。
2.如何在数字之间搜索“*”(或者“/”)操作符,而且该表达式有可能分散在多行?
3.如何记住“*”操作符的位置?
4.如何不按从左到右的顺序计算表达式的值(如1+2*3)?
让我们做一回极端的乐观主义者,首先解决前三个问题,不去担心最后一个问题,我们将在非常晚的时候考虑它。
我们四处寻求帮助,肯定有人知道如何从输入读取包括数字和操作符在内的表达式的方法,而且以一种看起来非常合理的方式进行存储。答案就是“分词”(tokenize):读取输入字符并组合为单词(token),因此如果键入:
程序将产生一个单词列表
单词(token)是表示可以看作一个单元的一个字符序列,例如数字或者运算符,这也是C++编译器处理源代码的方法。实际上,“分词”在某种形式上是文本分析经常采用的方法。以C++表达式为例,可以看出所需的三种单词类型: ...