Visual Studio とプログラム言語 (2) - Compiler
巨大コンポーネントである Language Service まわりはおいといて、まずは Compiler コンポーネントからチェック。
Compiler
Compiler の実装はプログラム言語設計者に完全にまかされていて、特定のインターフェスを強制されることはない。.NET Framework SDK と Visual 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 は省略可能になっている。