0

次のステートメントは正しくコンパイルされます。

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

ブロック コメントでコメントしようとすると、コンパイラはテキスト内の右かっこをコメントの終わりと誤って見なします。

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

何か不足していますか?

4

1 に答える 1

8

コメントを開くと、パーサーは、適切なコメントの終端が見つかるまで、後続のテキストを単純に無視します。

  • 終了の場合は//回線の終端です。
  • 終了の場合(*は の次のインスタンスです*)
  • 終了の場合{は の次のインスタンスです}

コンパイラはコメントアウトされたテキストを解析しないため、それが}文字列内にあるときに発生し、コメントが終了したと判断します。

あなたは次のように述べています:

コンパイラは、テキスト内の右かっこをコメントの終わりと誤って見なします。

この声明の誤解は、私が強調したテキストに見ることができます。コメントが開始されると、パーサーは構文、引用符、または実際には何も気にしません。コメントの終端が見つかるまでソースを読むだけです。そのコメント ターミネータが存在するコンテキストには注意を払いません。

したがって、これはコンパイラ エラーではありません。コンパイラは、設計どおりに正しく動作しています。

于 2015-07-03T14:48:33.410 に答える