Visual Studio とプログラム言語 (1) - プログラム言語モデル

この文章は Visual Studio 開発者向けドキュメントの英文を読み解きながら、試行錯誤や実験を行っている内容を記録したメモである。第一回は、最初に抑えておくべきこととして、Visual Studio のプログラム言語モデルを取りあげる。

Visual Studio のプログラム言語モデル

Visual Studio 2005 ではプログラム言語を6つのコンポーネントに分割して扱っている。C#VB のプログラム言語サービスはこれらのモデルに沿って作成されており、公開されたインターフェスによってプログラム言語の提供する各種サービスに直接的にアクセスすることも可能になっている。6つのコンポーネントとは、

  • Editor
  • Language Service
  • Compiler
  • Expression evaluator
  • Lexer
  • Parser

であり、大体名前で機能は想像がつくかと思われるが、Editor は Visual Studio のソリューションに含まれる各ファイルや、それに関連付けれれた情報を編集するビュー要素で、Compiler はコンパイラそのもの、Lexer と Parser は字句解析や文法解析を行うコンポーネントであり、Expression evaluator は以前紹介したが、デバッグ時などに変数の値を見たり、インスタンスを指定して特定のメソッドを直接呼び出したりといった処理を実施する。*1
残りすべての機能……キーワードの色付けや括弧の対応チェック、コードスニペットの提供やインテリセンスといったものはすべて Language Service に実装されている。
これらの実装ポイントとして、Editor および Language Service は先日扱った Visual Studio Package 形式によって提供され、Compiler や Lexer, Parser の実装ポイントは特に既定されてはいない。Compiler は可能であれば C#VB のようにコンパイラプロバイダへの登録や、CodeDOM のサポートを行えるようにしておくと、それらを利用したフレームワークに比較的容易にプログラム言語を対応させることができる。*2

*1:コマンドウィンドウからの入力は EE を経由せず Compiler が処理するらしい

*2:たとえば、コードプロバイダから取得可能なプログラム言語は、ASP.NET のプログラム言語として利用できる。