7

DSL(ドメイン固有言語)を定義するANTLR文法があります。この文法は比較的単純です。言語を解析し、Cコードを出力して、非常に基本的な翻訳者を作成します。

この言語は、C#アプリケーションで使用することを目的としており(RichTextBoxまたはカスタムコントロールのいずれであっても、ある種のコントロールに入力されます)、この言語の構文を強調表示する必要があります。私はこれを達成する方法に関するある種の情報を見つけること、またはこれを自分で少し簡単にするためのツールを見つけることを期待してインターネットを精査しました。

あまり多くの情報を見つけなかった後、私の最善の仮定は、ANTLRで生成されたレクサーを使用してトークンを調べ、それに応じて色を付ける必要があるということです。これは正しいアクションパスですか、それともカスタムドメイン固有言語の構文の強調表示を提供する他の方法/ツールがありますか?これが正しい方法である場合、特定のトークンを認識するにはどうすればよいですか?

重要な情報を省略した場合は、お問い合わせください。ありがとう!

4

2 に答える 2

4

私は同じようなプロジェクトでAvalonEditをうまく使用しました。正しい構文が強調表示された小さなエディターを作成しました。

プロジェクトで起動して実行するのは非常に簡単で迅速です。DSLの構文を文書化するための単純なXMLファイルを提供するだけで、WPFコントロールとしてすぐに使用できる色付きの出力が得られます。

使ってから完成設備が追加されたようですが、その部分の経験はありませんが、カラーリングと同じ品質であれば、とてもよくできていると思います。

于 2012-12-14T20:09:03.427 に答える
3

この言語は、C#アプリケーションで使用することを目的としており(RichTextBoxまたはカスタムコントロールのいずれであっても、ある種のコントロールに入力されます)、この言語の構文を強調表示する必要があります。

コントロールにScintillaを使用することを検討してください。これは、IDEスタイルのテキスト編集用のテキストコントロールです。Notepad ++は、元のSciTE IDEと同様に、テキストコントロールに使用します。非公式の.NET固有のバージョンを使用してC#で記述された小さなカスタムIDEプロジェクトで使用しました。これはScintillaNETだったと思います。

Scintillaは、カスタムキーワードの強調表示と、波線の下線などのさまざまなプログラム可能な機能をサポートしています。


使用したいコントロールがある場合は、小さなANTLRレクサーを使用してトークンを生成するのが合理的だと思います。各トークンには、行番号、開始文字の位置、ソーステキスト、トークンタイプが含まれています。これらは、何をどのように強調表示するかを知るために必要なすべてのものです。唯一の面倒は、テキストが変更されるたびにレクサーを介してテキストを実行することです。ドキュメント全体を再字句解析せずにそれを行う効率的な方法がありますが、それでも覚えておくべきことがあります。

于 2012-12-14T19:44:52.030 に答える