2015-07-03 50 views
0

下面的语句正确编译:这是一个Delphi Xe8编译器错误?

procedure test ; 
var xx : string; 
begin 
    xx := 'a' + '}' + 'b'; 
end; 

,如果你尝试用块注释评论,编译器错误地认为 文本为注释的结尾右括号。

procedure test ; 
var xx : string; 
begin 
    { xx := 'a' + '}' + 'b'; } 
end; 

我错过了什么吗?

+2

不,没关系。看到这里的荧光笔。你有评论'{xx:='a'+'}'和语句''+'b'; }'。 – TLama

+0

*“左括号和右括号之间的文本是注释。”*([link](http://docwiki.embarcadero.com/RADStudio/XE8/en/Fundamental_Syntactic_Elements#Comments_and_Compiler_Directives)) –

回答

8

当您打开评论时,解析器会简单地忽略随后的文本,直到找到适当的注释终止。

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

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

幽州:

编译器错误地认为在文本作为注释的结尾右括号

本声明中的错误思想可以在我强调的文本中看到。一旦评论开始,解析器不关心语法,关于引号或者其他任何事情。它所做的只是读取源代码,直到找到注释终止。它不理会评论终结者存在的背景。

因此,这不是编译器错误。按照设计,编译器的行为是正确的。

+0

好的。谢谢。毛里齐奥。 – Maurizio