首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么"for I := 0 0to aList.Count-1“可以处理缺少的空格?

为什么"for I := 0 0to aList.Count-1“可以处理缺少的空格?
EN

Stack Overflow用户
提问于 2011-10-24 14:31:43
回答 2查看 532关注 0票数 17

我用Delphi (XE)编写了一个小的控制台应用程序,错误地写道:

代码语言:javascript
复制
for I := 0to aList.Count-1 do 

注意"0“和"to”之间缺少的空格

直到我运行完程序,我才注意到这一点,我很惊讶编译器接受了这一点。这可能没什么大不了的,但它让我感到好奇。

为什么Delphi接受这个拼写错误?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-24 14:40:15

这是出于同样的原因,你不需要在.-周围有空格。由于在任何可识别的令牌中,t永远不会出现在初始0之后,因此词法分析器只是将0作为整数文本令牌返回,然后将to识别为distinct关键字令牌。如果你犯了一个不同的错误- for I := 0 to10 -你现在就有问题了,因为to10被识别为有效的标识符,这在0之后立即是非法的。

票数 29
EN

Stack Overflow用户

发布于 2011-10-24 15:27:23

如果为了简单起见,我们排除了行注释,那么我们会发现您的代码片段包含以下11个标记:

  • for
  • I
  • :=
  • 0
  • to
  • aList
  • .
  • Count
  • -
  • 1
  • do

为了让编译器能够识别它们,必须明确地表示它们。也就是说,如果任何两个相邻的标记在相邻放置时对其含义产生歧义,则在它们之间需要分隔符(spacetabcarriage returnline feed)。

现在,如果您使用任何这样的标记对,您将看到两个真正需要分隔符的地方:一个是在forI之间(forI vs for I),另一个是在toaList之间(toaList vs to aList)。至于界定0to,特别是(以及,类似的,1do),它们不会给编译器造成任何歧义。0是一个数字,而t不是,所以t不可能以任何合理的(对编译器而言)的方式与0形成一个单一的标记。也就是说,只要编译器遇到t,它就会立即将其识别为另一个令牌的开头,而不需要在两者之间使用分隔符。

我们通常在数字和随后的“词”(标识符或关键字)之间加一个空格,因为这样可以提高代码的可读性,但这就是全部。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7871986

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档