【问题标题】:Accidental space inserted - Why does this compile?意外插入空格 - 为什么会编译?
【发布时间】:2013-04-17 12:34:46
【问题描述】:

我不小心按了空格键并写了这个:

lTTEvent .CustUpdateStatus := usUnchanged;

惊讶地发现编译器接受了点前面的空格(实际上是任意数量的空格)。

点是解析器可以正确解释的特殊字符吗?这在 Pascal 中如何工作?

【问题讨论】:

  • 您也可以插入换行符。并删除:= 周围的所有空格。并在;前后添加空格@
  • 是的,换行符也是空白系列的一部分。
  • 您还可以在任何这些位置添加 cmets、制表位和其他空格。空格仅在关键字、标识符和文字中存在问题。

标签: delphi delphi-xe2 pascal


【解决方案1】:

解析器首先将文本转换为标记。所以正文:

lTTEvent .CustUpdateStatus := usUnchanged;

被翻译成记号:

  • 标识符
  • 期间
  • 标识符
  • 变成
  • 标识符
  • 分号

空格是一个空格,它可以有三个功能:

  • 标记之间的分隔符(例如标识符和关键字之间)。
  • 文字空间(在这种情况下,它包含在字符串中。
  • 化妆品。

第一个和最后一个函数空间在转换为标记时会丢失。

标识符和句点没有任何共同的字符,因此不会混淆它们,因此不需要空格,但仍然可以使用。

简短回答

'lTTEvent' 和 '.'是令牌。标记(有时)可以用空格分隔。

【讨论】:

  • 我不记得在 Delphi 中是否是这种情况(我想是这样)但这就是为什么 >= 不能写成 > = 的原因相同(前者是一个令牌,后者是两个。)
  • @LeonardoHerrera,没错。因为 >= 可以是 '>=' 和 '>'、'=',所以需要空格。否则编译器会选择最大的匹配标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-19
相关资源
最近更新 更多