ここをより明確に理解するには、RM のセクション 2.2 を確認する必要があります。
2.2 (1) には次のように記載されています。
各コンパイルのテキストは、別個の語彙要素のシーケンスです。各字句要素は一連の文字から形成され、区切り文字、識別子、予約語、numeric_literal、character_literal、string_literal、またはコメントのいずれかです。プログラムの意味は、コメントを除いて、そのコンパイルを形成する字句要素の特定のシーケンスにのみ依存します。
そして2.2(3/2)は次のように述べています:
[場合によっては、隣接する語彙要素を区切るために明示的なセパレーターが必要です。
separator_space スペース文字は、コメント、string_literal、または character_literal 内を除き、区切り文字です。
コードポイント位置が 16#09# の文字 (CHARACTER TABULATION) 文字タブ (HT) は、コメント内以外の区切り文字です。
行の終わりは常にセパレーターです。
各コンパイルの最初の前、または最後のコンパイルの後に、任意の 2 つの隣接する字句要素の間に 1 つ以上の区切り文字を使用できます。」
と
区切り文字は、次の特殊文字のいずれかです。
& ' ( ) * + , – . / : ; < = > |
または、隣接する 2 つの特殊文字で構成される次の複合区切り文字のいずれか
=> .. ** := /= >= <= << >> <>
単一文字区切り文字としてリストされている各特殊文字は、この文字が複合区切り文字の文字として、またはコメント、string_literal、character_literal、または numeric_literal の文字として使用されている場合を除いて、単一区切り文字です。
したがって、プログラム テキストの空白を除外して一連の字句要素に分解すると、文字列リテラルに対応する字句要素は二重引用符で始まり、コメントに対応する字句要素は--.
これらは明らかに異なる構文項目であり、互いに競合しません。
これも理由を説明しています。
X := A - -1
+ B;
とは異なる結果が得られます。
X := A --1
+ B;
ダッシュ間のスペース区切りは、最初のマイナスを -1 とは異なる語彙要素にするため、最初のケースでは -1 は数値リテラルであり、--1 はコメントです。