VDM++言語のマニュアルを読んでいます。私の質問は、彼が「;」を使用する場合があることです。ステートメントの終わりと同じステートメントのどこかで、彼は「;」を使用していません。
以下は例です
public Top : () ==> Elem
Top() ==
return (hd stack);
if test
then OpCall()
else return FunCall()
VDM++言語のマニュアルを読んでいます。私の質問は、彼が「;」を使用する場合があることです。ステートメントの終わりと同じステートメントのどこかで、彼は「;」を使用していません。
以下は例です
public Top : () ==> Elem
Top() ==
return (hd stack);
if test
then OpCall()
else return FunCall()
セミコロンは、Java や C のターミネーターではなく、VDM のセパレーターです。したがって、2 つの定義や 2 つのステートメントなど、2 つのものが連続している場合はセミコロンが必要です。ただし、「ブロック」に 1 つしかない場合は、区切り記号は必要ありません。
したがって、最初の例では、別の定義が続く場合は末尾のセミコロンが必要になる場合がありますが、「トップ」がクラス/モジュールの最後の定義である場合は必要ありません。
2 番目の例では、「then」句内の単一のステートメントであるため、OpCall() の後にセミコロンは必要ありません。この if/then/else の後に別のステートメントが続く場合は、FunCall() の後にセミコロンが必要になることがありますが、それ以外の場合はそうではありません。
そうは言っても、VDMJ パーサーは寛容であり、厳密には必須ではありませんが、いくつかの場所で誤ったセミコロンを許可します。