这是Delphi Xe8编译器错误吗?

Mau*_*ira 0 delphi delphi-xe8

以下语句正确编译:

procedure test ;
var    xx : string;
begin
   xx := 'a' + '}' + 'b';
end;
Run Code Online (Sandbox Code Playgroud)

如果您尝试使用块注释进行注释,则编译器会错误地将文本中的右括号视为注释的结尾.

procedure test ;
var    xx : string;
begin
  {   xx := 'a' + '}' + 'b';  }
end;
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

Dav*_*nan 8

当您打开注释时,解析器只会忽略后面的文本,直到找到相应的注释终止.

  • //终止的情况下是行的结束.
  • (*终止的情况下是下一个实例*).
  • {终止的情况下是下一个实例}.

由于编译器不解析注释掉的文本,因此它发生在您}的字符串内并确定注释已终止.

你说:

编译器错误地将文本中的右括号视为注释的结尾.

在我强调的文本中可以看到本声明中的错误思考.评论开始后,解析器不关心语法,引用或任何事情.它只是读取源,直到它找到注释终止.它不关注评论终止符存在的上下文.

因此,这不是编译器错误.正如设计的那样,编译器的行为正确.