1

私は Ada 2012 RM を調べていますが、私の理解に穴があるかどうか、または RM に穴がないかどうかを確認したいと思います。仮定して

    put_line ("-- this is a not a comment");

セクション 2.7 には「コメントは 2 つの隣接するハイフンで始まり、行末まで続く」と記載されているため、RM からその合法性を推測するにはどうすればよいですか? セクション 2.6 には「string_literal は、文字列ブラケットとして使用される 2 つの引用符で囲まれた一連のグラフィック文字 (おそらくなし)。" 2 つのセクションの間に緊張があり、2.7 が勝つように見えますが、明らかにそうではありません。

4

1 に答える 1

6

ここをより明確に理解するには、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 はコメントです。

于 2019-10-10T00:47:03.353 に答える