バージョン

エラー メッセージのカスタマイズ (Syntax Parsing Engine)

トピックの概要

目的

このトピックでは、Syntax Parsing Engine により生成されたエラー メッセージのカスタマイズ方法を説明します。

前提条件

このトピックを理解するためには、以下のトピックを理解しておく必要があります。

トピック 目的

このトピックは、Syntax Parsing Engine の概要を示します。

このトピックは、Syntax Parsing Engine の文章校正の概要を示します。

このトピックは、カスタム言語を作成するプロセスを説明します。

エラー メッセージ

概要

Syntax Parsing Engine は、エラーを検出するとメッセージを生成します。他に指定されない限り、エラー メッセージには以下のフォームが含まれます。

  • トークンが省略される場合: “Unexpected token ‘<text from token>’”

  • 不明ノードが挿入される場合:

    • ノードが非終端記号の場合: “<NonTerminalSymbol.Name> expected”

    • ノードが RegularExpressionComparison 値を持つ終端記号の場合: “<TerminalSymbol.Name> expected”

    • ノードがその他の非終端記号の場合: “<NonTerminalSymbol.Name> expected”

IsError 値が true に設定されている非終端記号を表すノードの場合: “ <NonTerminalSymbol.Name> is incorrect”

エラー メッセージのカスタマイズ

デフォルトのエラー メッセージはアプリケーションの目的には一致しない場合があります。その場合、以下のいずれかのメソッドを使用してメッセージをカスタマイズできます。

GetErrorAlias メソッドのオーバーライド

エラーが発生すると、パーサーは GetErrorAlias メソッドを呼び出します。これは、その言語に指定した Symbol のエイリアスを提供できます。デフォルトで null を返しますオーバーライドし、null 以外の値を返すと、エラー メッセージが以下のように変わります。

  • トークンが省略される場合: “Unexpected token ‘<alias>’”

  • 不明ノードが挿入される場合: “<alias> expected”

  • IsError 値が true に設定されている非終端記号を表すノードの場合: “<alias> is incorrect”

キーワード “End Get” のペアを表す「EndGetStatement」という名前の記号を持つ Visual Basic 言語で使用される例ユーザーがプロパティの get アクセサ-の末尾で「End Get」を省略すると、デフォルトのエラー メッセージ「EndGetStatement 」が使用された場合ユーザーに奇妙に見えます。そうではなく、言語を実装すると GetErrorAlias をオーバーライドし、エラー メッセージが「‘End Get’ expected」と表示されるようにこの記号の「End Get」を返します。

OnError メソッドのオーバーライド

エラー メッセージの表示、追加または削除をより制御するには、代わりに OnError メソッドをオーバーライドできます。OnError メソッドの引数である ParseErrorContext クラスには、エラーを検証しカスタマイズできる以下のメンバーがあります。

プロパティ 説明

エラーのコレクション。パーサーによって検出された単一のエラーのみを含みます。このコレクションは、エラーの場所でドキュメントに添付されるエラーを変更するよう修正できます。

期待されるもののユーザーによって提供されていないため、挿入する必要がある不明構文ノードをエラーに表すかどうかを示します。

ドキュメント内に予期されない省略コンテンツをエラーに表すかどうかを示します。終端記号のみが省略されます。

現在解析中の TextDocumentSnapshot についてドキュメント内にエラーの位置を示します。

ドキュメント内の項目の位置を示します。これは SnapshotSpan と同じですが、スナップショットには関連づけられません。

省略された、または予想されたエラーに関連づけられる 記号

たとえば、C# 内に「IncompleteMember」エラー非終端記号がある場合 (詳細は「 エラー生産」を参照)、「IncompleteMember is incorrect」というエラー メッセージの代わりに「クラスまたは構造体内のメンバー定義が不完全」と全体的に置換する場合があります。

関連コンテンツ

トピック

このトピックの追加情報については、以下のトピックも合わせてご参照ください。

トピック 目的

このトピックは、カスタム言語を作成するプロセスを説明します。

このトピックでは TextDocument を紹介し、TextDocument 上で言語を設定する方法について説明します。

このグループ内のトピックは、構文ツリーでの作業方法を詳細に説明します。