C语言陷阱与缺陷之词法分析中的“贪心法”

发布于 2015-04-17  1.71k 次阅读


当C编译器读入一个字符'/'后又跟了一个字符'*',那么编译器就必须做出判断:是将其作为两个分别的符号对待,还是合起来作为一个符号对待。C语言对这个问题的解决方案可以归纳为一个很简单的规则:每一个符号应该包含尽可能多的字符。这个处理策略有时被称为“贪心法”,或者,更口语化下点,称为“大嘴法”。词法分析中的“贪心法“,Kernighan与Ritchie对这个方法的表述如下,“如果(编译器的)输入流截止至某个字符之前都已经被分解为一个个符号,那么下一个符号将包括从该字符之后可能组成一个符号的最长字符串。”

接下来看个简单的例子:

这就有两种可能了,是

还是

只要根据贪心法就可以知道是a-- -b了。


公交车司机终于在众人的指责中将座位让给了老太太