以下语句正确编译:
procedure test ;
var xx : string;
begin
xx := 'a' + '}' + 'b';
end;
如果您尝试使用块注释进行注释,则编译器会错误地考虑 文本中的右括号作为评论的结尾。
procedure test ;
var xx : string;
begin
{ xx := 'a' + '}' + 'b'; }
end;
我错过了什么吗?
答案 0 :(得分:8)
当您打开注释时,解析器只会忽略后面的文本,直到找到相应的注释终止。
//
的情况下,终止是该行的结束。 (*
,则终止是*)
的下一个实例。{
,则终止是}
的下一个实例。由于编译器不解析注释掉的文本,因此它发生在字符串中的}
并确定注释已终止。
你说:
编译器错误地将文本中的右括号视为注释的结尾。
在我强调的文本中可以看到本声明中的错误思考。评论开始后,解析器不关心语法,引用或任何事情。它只是读取源,直到它找到注释终止。它不关注评论终止符所在的上下文。
因此,这不是编译器错误。正如设计的那样,编译器的行为正确。