バージョン

カスタム言語の作成

トピックの概要

目的

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

前提条件

このトピックをより理解するために、以下のトピックを参照することをお勧めします。

トピック 目的

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

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

このトピックは、文章校正を定義するために使用する EBNF ファイル形式の概要を説明します。

このトピックでは、EBNF コンテンツから文章校正を作成するプロセスを説明します。

このトピックの内容

このトピックは、以下のセクションで構成されます。

カスタム言語の作成

概要

文章校正定義が完了すると、その文章校正構造に準拠するドキュメントを解析するために使用できます。その手順を以下に示します。

  • EBNF 文章校正定義から Grammar インスタンスを作成するか、コードで文章校正インスタンスを構築します。

  • LanguageBase から派生し文章校正インスタンスを所有するカスタム言語クラスを作成します。

  • TextDocument を作成し、その Language プロパティをカスタム言語クラスのインスタンスに設定します。

注:

Note

言語の作成に Grammar を使用すると、二度と編集できなくなります。Grammar または Grammar に直接または間接的に所有されるいずれかのオブジェクトを変更しようとすると、例外がスローされます。言語の作成に使用した文章校正は、 IsMutable 読み取り専用プロパティを False に設定します。

文章校正からカスタム言語を作成する方法は 2 通りあります。

CustomLanguage クラスの使用

Grammar インスタンスを LanguageBase から派生する CustomLanguage クラスのコンストラクターに渡すことにより文章校正用カスタム言語を作成できます。これは、提供された Grammar インスタンスに基づいてドキュメントを解析するために特別にビルドされた CustomLanguage インスタンスを作成します。

以下の表には、CustomLanguage クラスで公開されたメンバーが含まれます。

プロパティ 説明

インスタンスを作成するために使用する Grammar インスタンス

この言語でドキュメントが編集される場合にエディターで利用可能なサービスを管理するためのインスタンス

イベント 説明

グローバルな曖昧がドキュメントを解析するときに検出した場合に発生します。詳細は、 「あいまいさ」のトピックを参照してください。

言語クラスの生成

特殊な文章校正定義でドキュメントを解析するために特にビルドされた LanguageBase 派生クラスを生成することにより文章校正からカスタム言語を作成できます。CustomLanguage の作成は言語の動的生成とみなされる一方で、言語クラスは言語を事前にコンパイルするものとして認識されます。字句および構文アナライザーの構築は複雑な文章校正に対してスローになります。CustomLanguage アプローチが使用されると、その構築フェーズは、アプリケーションのそれぞれの実行に対してドキュメントが最初に解析されたときに発生する必要があります。これは、簡易言語の場合または開発者のマシンで文章校正の定義をデバッグする際は許容可能ですが、ユーザーのマシンで複雑な言語が使用される複雑な言語の場合は許容されません。言語生成アプローチを使用することにより、字句および構文アナライザーは開発者のマシン上で一度構築されます。次にアナライザーと 文章校正 の再構築方法に関する情報が生成されたクラス ファイルに書き込まれます。LanguageBase から派生された各生成クラス ファイルには、自身がシングルトン インスタンスを返す静的プロパティの名前付きインスタンスがあります。また、その ServicesManager で異なるサービスで言語の 2 つのコピーが作成される必要のある場合は公開用コンストラクターがあります。また、生成されたクラスには、言語を生成するために使用される Grammar と同一のコピーを返す Grammar プロパティがあります。

注:

Note

Grammar プロパティは元の Grammar のコピーを返しますが、同一の生成された言語型の異なるインスタンス上で Grammar プロパティにアクセスすると、常に同じ Grammar インスタンスが返されます。

言語クラスを生成するためのオプションの 1 つに「部分」修飾子を渡すことがあります。これにより、LanguageBase 上で特定のメンバーをオーバーライドまたは独自に追加できるように、派生言語に別のファイルを作成できます。LanguageBase でオーバーライド可能なメンバーは以下の通りです。

保護された仮想メソッド 説明

エラー メッセージで使用される場合の記号の表示名を含む文字列を返します。詳細については、 「エラー メッセージのカスタマイズ」を参照してください。

言語に対する ServicesManager 内のデフォルト サービスを初期化します。

構文アナライザーがエラーを発見する場合に呼び出されます。詳細については、 「エラー メッセージのカスタマイズ」を参照してください。

グローバルなあいまいさがテキスト解析時に検出されると発生します。詳細は、 「あいまいさ」のトピックを参照してください。

Infragistics.Documents.Parsing 名前空間で LanguageGenerator クラスを使用することにより言語を生成できます。このクラスには以下の静的メソッドがあります。

静的メソッド 説明

指定したオプションを使用して言語ファイルを生成し、ファイルのコンテンツを含む文字列を返します。

指定されたオプションを使用して言語ファイルを生成し、指定されたストリームに書き込みます。

GenerateClass メソッドで引数として使用される LanguageGenerationParams クラスは、言語生成プロセスをカスタマイズするためにいくつかのオプションがあります。これらは以下の通りです:

プロパティ 説明

生成された言語クラスを与えるための名前。

どのコード記述言語でクラス ファイルを生成するかを示します。使用可能な値は以下のとおりです。

  • CSharp

  • VisualBasic

この値のデフォルトは CSharp です。

構文ツリーにてノード表現を持つすべての記号の名前に対して定数を含む生成言語におけるネスト化された SymbolNames クラスを生成するかどうかを示します (構文ツリーから常にプルーニングされる記号には生成される記号名定数は含まれません)。この値のデフォルトは true です。

クラスを生成するために使用される Grammar インスタンス

「部分」修飾子をクラスに追加するべきかどうかを示します。この値のデフォルトは false です。

修飾子をクラスに追加するべきかどうかを示します。false の場合、「内部」修飾子が代わりに追加されます。この値のデフォルトは true です。

「シールド」修飾子をクラスに追加するべきかどうかを示します。この値のデフォルトは true です。

生成された言語クラスを配置する名前空間null の場合、Infragistics.Documents.Parsing 名前空間に配置されます。

クラスに追加するドキュメント概要コメント

関連コンテンツ

トピック

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

トピック 目的

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

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

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