Visual Studio とプログラム言語 (2) - Compiler

巨大コンポーネントである Language Service まわりはおいといて、まずは Compiler コンポーネントからチェック。

Compiler

Compiler の実装はプログラム言語設計者に完全にまかされていて、特定のインターフェスを強制されることはない。.NET Framework SDKVisual Studio SDK に含まれる3つのサンプル Common Lisp, Figure, My C も、それぞれが異なる実装になっている。
第1回で触れたように、CodeDOM や ASP.NETフレームワークに乗せるためには、いくつかのインターフェスに対応する必要がある。しかし、System.CodeDom namespace の機能を利用して C# のプログラムをコンパイルしたりすると、子プロセスとして csc.exe が起動されることなどからわかるように、Compiler コンポーネントが直接的に CodeDOM をサポートする必要もない。
というわけでコンパイラは好きに作りなさい……というとアレなので、CodeProvider への登録方法だけ触れておく。
CodeDomProvider への登録は、構成ファイルを利用して行う。詳しいことは .NET Framework SDK のドキュメントを見てもらうとして、

<configuration>
  <system.codedom>
    <compilers>
      <compiler language="Figure" extension=".fig;.figure;.shape" type="..."/>
      <compiler
          language="c#;cs;csharp"
          extension=".cs"
          type="Microsoft.CSharp.CSharpCodeProvider,
                System, Version=2.0.3600.0, Culture=neutral,
                PublicKeyToken=b77a5c561934e089"
          compilerOptions=""
          warningLevel="1" />
    </compilers>
  </system.codedom>
</configuration>

というような感じで登録するようだ。language と extension にはセミコロン区切りで複数の要素を登録することができ、type 属性で CodeDomProvider 派生クラスの実装を指定するまでが必須要素、compilerOptions と warningLevel は省略可能になっている。