このトピックでは、Syntax Parsing Engine により生成されたエラー メッセージのカスタマイズ方法を説明します。
このトピックを理解するためには、以下のトピックを理解しておく必要があります。
このトピックは、以下のセクションで構成されます。
Syntax Parsing Engine は、エラーを検出するとメッセージを生成します。他に指定されない限り、エラー メッセージには以下のフォームが含まれます。
トークンが省略される場合: “Unexpected token ‘<text from token>’”
不明ノードが挿入される場合:
ノードが非終端記号の場合: “<NonTerminalSymbol.Name> expected”
ノードが RegularExpression
の Comparison 値を持つ終端記号の場合: “<TerminalSymbol.Name> expected”
ノードがその他の非終端記号の場合: “<NonTerminalSymbol.Name> expected”
IsError 値が true
に設定されている非終端記号を表すノードの場合: “ <NonTerminalSymbol.Name> is incorrect”
デフォルトのエラー メッセージはアプリケーションの目的には一致しない場合があります。その場合、以下のいずれかのメソッドを使用してメッセージをカスタマイズできます。
LanguageBase 派生クラス上の GetErrorAlias メソッドをオーバーライド
OnError メソッドをオーバーライド
エラーが発生すると、パーサーは 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
メソッドの引数である ParseErrorContext クラスには、エラーを検証しカスタマイズできる以下のメンバーがあります。
たとえば、C# 内に「IncompleteMember」エラー非終端記号がある場合 (詳細は「 エラー生産」を参照)、「IncompleteMember is incorrect」というエラー メッセージの代わりに「クラスまたは構造体内のメンバー定義が不完全」と全体的に置換する場合があります。
このトピックの追加情報については、以下のトピックも合わせてご参照ください。