2015-07-03 83 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