Class X
ReadOnly Property A
Get
Return Nothing
End Get
End Property
End Class
このトピックは、シンクロナイザーのペアによるエラー処理方法について説明します。
このトピックを理解するためには、以下のトピックを理解しておく必要があります。
シンクロナイザー ペア方法は、パーサーをトークン ストリームに同期するために 1 つの記号を使用する代わりに記号のペアを使用しますが、シンクロナイザー記号方法に似ています。1 つの記号の次に別の記号が続き、構築中の生産における次の位置があいまいさなく決まるときにいつでも使用されます。その例が Visual Basic です。Visual Basic 内の多くのブロック構造は「End <X>」で終わり、このとき <X> は終了される構造です。たとえば、この単純な Visual Basic プログラムを考えてみましょう。
Visual Basic の場合:
Class X
ReadOnly Property A
Get
Return Nothing
End Get
End Property
End Class
ここに終了ブロックがいくつかあります。これらは、End Get」、「End Property」および「End Class」で終わります。これらのいずれかが偶然省略されると、パーサーはどの構造が別のエンディングにより終了するのかを把握しなければなりません。このため、ユーザーが「End Get」を入力し忘れた、またはまだ入力していないとします。
Visual Basic の場合:
Class X
ReadOnly Property A
Get
Return Nothing
End Property
End Class
シンクロナイザー記号エラー処理方法がこのエラーを処理すると、5 行目のキーワード「Property」で検出します。この時点では、2 つのエラーをレポートします。
「Get」が期待されます
「End」が期待されます
最初のエラーは、ユーザーが「End」キーワードの後ろに「Get」を入力し忘れて get アクセサーを閉じてしまったことを示しています。2 つめのエラーは、「End Property」が期待されていたのに「End」がないことを示しています (実際の「End」キーワードは get アクセサ-を閉じるために使用するため)。直感的に、理想的ではないことは明らかです。「End Property」は、真に論理装置として取り扱われるべきです。
シンクロナイザー ペアーのエラー処理方法を使用できます。この方法を有効にするには、「End」キーワードを表す終端記号上で Symbol.IsStartOfErrorRecoveryPair プロパティを True に設定します。エラーが発生し、構文ツリー用に最後に作成されたノードが「End」キーワードに関連づけられた場合、パーサーは、エラー時に構築中であった生産が「End」の後ろに「Property」が続くことを予想していたかどうか判断します。プロパティ宣言を表す生産は、そうであったと示し、そのため get アクセサ-は記述されていない「End Get」構造を書き込むことにより自動的に完成し、「End Get が期待される」と示す単一のエラーメッセージがレポートされます。
このトピックの追加情報については、以下のトピックも合わせてご参照ください。