我用Delphi (XE)编写了一个小的控制台应用程序,错误地写道:
for I := 0to aList.Count-1 do 注意"0“和"to”之间缺少的空格
直到我运行完程序,我才注意到这一点,我很惊讶编译器接受了这一点。这可能没什么大不了的,但它让我感到好奇。
为什么Delphi接受这个拼写错误?
发布于 2011-10-24 14:40:15
这是出于同样的原因,你不需要在.或-周围有空格。由于在任何可识别的令牌中,t永远不会出现在初始0之后,因此词法分析器只是将0作为整数文本令牌返回,然后将to识别为distinct关键字令牌。如果你犯了一个不同的错误- for I := 0 to10 -你现在就有问题了,因为to10被识别为有效的标识符,这在0之后立即是非法的。
发布于 2011-10-24 15:27:23
如果为了简单起见,我们排除了行注释,那么我们会发现您的代码片段包含以下11个标记:
forI:=0toaList.Count-1do为了让编译器能够识别它们,必须明确地表示它们。也就是说,如果任何两个相邻的标记在相邻放置时对其含义产生歧义,则在它们之间需要分隔符(space,tab,carriage return,line feed)。
现在,如果您使用任何这样的标记对,您将看到两个真正需要分隔符的地方:一个是在for和I之间(forI vs for I),另一个是在to和aList之间(toaList vs to aList)。至于界定0和to,特别是(以及,类似的,1和do),它们不会给编译器造成任何歧义。0是一个数字,而t不是,所以t不可能以任何合理的(对编译器而言)的方式与0形成一个单一的标记。也就是说,只要编译器遇到t,它就会立即将其识别为另一个令牌的开头,而不需要在两者之间使用分隔符。
我们通常在数字和随后的“词”(标识符或关键字)之间加一个空格,因为这样可以提高代码的可读性,但这就是全部。
https://stackoverflow.com/questions/7871986
复制相似问题