コンパイラー【compiler】
コンパイラ
何らかのプログラミング言語で記述されたプログラムをコンピュータが実行可能なコードに変換し、その後実行するする言語システムを一般にコンパイラ言語と呼ぶ。コンパイラは、その中でコード変換を行う中核部分もしくは、その技術の名称である。
一般に人間が理解しやすい表現形式を持つ言語を「高級言語」と呼ぶが、この高級言語をコンピュータが実行するには、大きくコンパイラ方式とインタープリタ方式の2つがある。前者は、ソースプログラムを読みこみ、実行可能な機械語からなるバイナリプログラムを出力し、その後実行を行う。インタープリタ方式では、ソースプログラムを読みこみながら、解釈を行い、直接実行を行う。一般にコンパイラ言語のほうが実行効率がよいとされているが、中間言語方式など、両者の方法を取り入れたものなどもあれば、言語仕様によってはインタープリタでも高速な実行が可能な場合もある。
コンパイラ
コンパイラとは、特定のプログラミング言語で記述されたソースコードを読み込み、ターゲットとなるコンピュータ、あるいは、バーチャルマシンが直接実行できる命令語に変換するソフトウェアのことである。
ソフトウェア開発に用いられるプログラミング言語には、アセンブラ言語のような低水準のもの(低級言語)から、より人間に近い表現が可能であるFortran、COBOL、C言語、C++、Pascal、Java、C#といった高水準の言語(高級言語)まで多種である。高級言語でプログラムを作成した場合、そのソースコードは、計算機で直接実行することはできない。コンピュータに実行を指示するためには、CPUが解釈できる機械語で記述された実行プログラムを、あらかじめ記憶装置に格納しておいてから計算機の動作を開始させる必要がある。コンパイラは、あらかじめ高級言語のソースコードを読み込み、実行対象となる計算機のCPUが解釈可能な機械語へと変換するために用いられる。
コンパイラを用いてソースコードを機械語に変換する処理そのものは、コンパイルと呼ばれる。
コンパイラが、最終ターゲットであるCPU固有の機械語を出力する場合、そのコンパイラは特にネイティブコンパイラと呼ばれ、その処理はネイティブコンパイルと呼ばれる。対して、Java仮想マシンのような仮想的な論理計算機をターゲットにしてコンパイルを行うようなコンパイラは、中間言語コンパイラと呼ばれる。中間言語コンパイラにより出力された、中間言語のプログラムを実行するのは、ネイティブな計算機ではなく、Java仮想マシンのようなインタープリタということになる。インタープリタが実行時に、中間言語の一部を部分的にネイティブの機械語に変換してから実行する場合は、動的コンパイル、あるいはジャストインタイムコンパイルと呼ばれる。動的コンパイルに対して、通常のコンパイルは、実行に先立ってあらかじめコンパイルしておくという意味で、事前コンパイル(プリコンパイル)と呼ばれる。
プログラミング言語のうち、高級言語を用いて作成されたプログラムは、特定のターゲットCPUに依存しない。コンパイル時にターゲットCPU向けのコンパイラを用いることにより、特定CPU向けの実行コードを得ることができるため、最終的に任意の計算機で実行できることになる。なお、中間言語方式のコンパイラの場合、コンパイル作業自体は1回だけ行えば、同じ中間言語プログラムをさまざまな計算機上で実行することができる。この場合、コンパイラは1種類で済むものの、コンパイル結果の中間言語プログラムを解釈実行するインタープリタ、あるいは仮想計算機が、ターゲットとなる計算機の種類の分だけ用意する必要がある。
ソフトウェアの規模がある程度以上となる場合、ソフトウェアをモジュールに分割して、モジュールごとにコンパイルを行うこともある。この作業は、特に分割コンパイルと呼ばれる。分割コンパイルを行った場合、その出力としてオブジェクトコードと呼ばれるモジュール単位の出力が得られる。実行に際しては、出力されたオブジェクトコードを一つにまとめ上げ、実行形式のファイルを作成する必要がある。このような操作がリンクと呼ばれる。リンクにより、モジュールごとに記述されている変数やコードが相互に参照できるように相対アドレスの解決を行う。
なお、世界で最初に実用化されたコンパイラは、1957年に開発されたFortranコンパイラである。1960年には、複数のアーキテクチャに対応したCOBOLコンパイラが開発された。1962年には、LISP言語で記述されたLISPコンパイラで自分自身をコンパイルするセルフホスティングコンパイラが初めて開発されている。
Compiler クラス
アセンブリ: cscompmgd (cscompmgd.dll 内)
<ObsoleteAttribute("The recommended alternative is Microsoft.CSharp.CSharpCodeProvider and System.CodeDom.Compiler.ICodeCompiler. The CSharpCodeProvider and CodeDom ICodeCompiler provide a much richer set of functionality for specifying how to launch the compiler.")> _ Public Class Compiler
[ObsoleteAttribute("The recommended alternative is Microsoft.CSharp.CSharpCodeProvider
and System.CodeDom.Compiler.ICodeCompiler. The CSharpCodeProvider and CodeDom
ICodeCompiler provide a much richer set of functionality for specifying how to launch the compiler.")]
public class Compiler
[ObsoleteAttribute(L"The recommended alternative is Microsoft.CSharp.CSharpCodeProvider and System.CodeDom.Compiler.ICodeCompiler. The CSharpCodeProvider and CodeDom ICodeCompiler provide a much richer set of functionality for specifying how to launch the compiler.")] public ref class Compiler
/** @attribute ObsoleteAttribute("The recommended alternative is Microsoft.CSharp.CSharpCodeProvider and System.CodeDom.Compiler.ICodeCompiler. The CSharpCodeProvider and CodeDom ICodeCompiler provide a much richer set of functionality for specifying how to launch the compiler.") */ public class Compiler
ObsoleteAttribute("The recommended alternative is Microsoft.CSharp.CSharpCodeProvider
and System.CodeDom.Compiler.ICodeCompiler. The CSharpCodeProvider and CodeDom
ICodeCompiler provide a much richer set of functionality for specifying how to launch the compiler.")
public class Compiler
Microsoft.CSharp.Compiler
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Compiler クラス
アセンブリ: System.Web (system.web.dll 内)
System.Configuration.ConfigurationElement
System.Web.Configuration.Compiler
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Compiler コンストラクタ
アセンブリ: cscompmgd (cscompmgd.dll 内)
Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Compiler コンストラクタ
アセンブリ: System.Web (system.web.dll 内)
Public Sub New ( _ compilerOptions As String, _ extension As String, _ language As String, _ type As String, _ warningLevel As Integer _ )
Dim compilerOptions As String Dim extension As String Dim language As String Dim type As String Dim warningLevel As Integer Dim instance As New Compiler(compilerOptions, extension, language, type, warningLevel)
public Compiler ( string compilerOptions, string extension, string language, string type, int warningLevel )
public: Compiler ( String^ compilerOptions, String^ extension, String^ language, String^ type, int warningLevel )
public Compiler ( String compilerOptions, String extension, String language, String type, int warningLevel )
public function Compiler ( compilerOptions : String, extension : String, language : String, type : String, warningLevel : int )
Windows 98, Windows 2000 SP4, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition
開発プラットフォームの中には、.NET Framework によってサポートされていないバージョンがあります。サポートされているバージョンについては、「システム要件」を参照してください。
Compiler プロパティ
| 名前 | 説明 | |
|---|---|---|
| | CompilerOptions | コンパイル時に使用されるコンパイラ固有のオプションのリストを取得します。 |
| | ElementInformation | ConfigurationElement オブジェクトのカスタマイズできない情報と機能を格納する ElementInformation オブジェクトを取得します。 ( ConfigurationElement から継承されます。) |
| | Extension | 動的分離コード ファイルで使用されるファイル名の拡張子のリストを指定します。 |
| | Language | 動的コンパイル ファイルで使用されるプログラミング言語のリストを取得します。 |
| | LockAllAttributesExcept | ロックされている属性のコレクションを取得します。 ( ConfigurationElement から継承されます。) |
| | LockAllElementsExcept | ロックされている要素のコレクションを取得します。 ( ConfigurationElement から継承されます。) |
| | LockAttributes | ロックされている属性のコレクションを取得します。 ( ConfigurationElement から継承されます。) |
| | LockElements | ロックされている要素のコレクションを取得します。 ( ConfigurationElement から継承されます。) |
| | LockItem | 要素がロックされているかどうかを示す値を取得または設定します。 ( ConfigurationElement から継承されます。) |
| | Type | 動的コンパイル ファイルの言語プロバイダのコンパイラの種類を示す名前を取得します。 |
| | WarningLevel | コンパイラの警告レベルを取得します。 |
| 名前 | 説明 | |
|---|---|---|
| | ElementProperty | ConfigurationElement オブジェクト自体を表す ConfigurationElementProperty オブジェクトを取得します。 ( ConfigurationElement から継承されます。) |
| | EvaluationContext | ConfigurationElement オブジェクトの ContextInformation オブジェクトを取得します。 ( ConfigurationElement から継承されます。) |
| | Item | オーバーロードされます。 この ConfigurationElement オブジェクトのプロパティ、属性、または子要素を取得または設定します。 ( ConfigurationElement から継承されます。) |
| | Properties | プロパティのコレクションを取得します。 ( ConfigurationElement から継承されます。) |
Compiler メソッド
| 名前 | 説明 | |
|---|---|---|
| | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 ( Object から継承されます。) |
| | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 ( Object から継承されます。) |
| | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
| | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
| | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |
| 名前 | 説明 | |
|---|---|---|
| | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
| | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |
Compiler メソッド
| 名前 | 説明 | |
|---|---|---|
| | Equals | オーバーロードされます。 現在の ConfigurationElement インスタンスを、指定したオブジェクトと比較します。 ( ConfigurationElement から継承されます。) |
| | GetHashCode | 現在の ConfigurationElement インスタンスを表す一意の値を取得します。 ( ConfigurationElement から継承されます。) |
| | GetType | 現在のインスタンスの Type を取得します。 ( Object から継承されます。) |
| | IsReadOnly | ConfigurationElement オブジェクトが読み取り専用かどうかを示す値を取得します。 ( ConfigurationElement から継承されます。) |
| | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 ( Object から継承されます。) |
| | ToString | 現在の Object を表す String を返します。 ( Object から継承されます。) |
| 名前 | 説明 | |
|---|---|---|
| | DeserializeElement | 構成ファイルから XML を読み取ります。 ( ConfigurationElement から継承されます。) |
| | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 ( Object から継承されます。) |
| | Init | ConfigurationElement オブジェクトを初期状態に設定します。 ( ConfigurationElement から継承されます。) |
| | InitializeDefault | ConfigurationElement オブジェクトの既定の値セットを初期化するために使用します。 ( ConfigurationElement から継承されます。) |
| | IsModified | 派生クラスに実装された場合、この構成要素が最後の保存または読み込み以降に変更されたかどうかを示します。 ( ConfigurationElement から継承されます。) |
| | ListErrors | この ConfigurationElement オブジェクトおよびすべてのサブ要素の無効なプロパティのエラーを、渡されたリストに追加します。 ( ConfigurationElement から継承されます。) |
| | MemberwiseClone | 現在の Object の簡易コピーを作成します。 ( Object から継承されます。) |
| | OnDeserializeUnrecognizedAttribute | 逆シリカル化中に不明な属性が発生したかどうかを示す値を取得します。 ( ConfigurationElement から継承されます。) |
| | OnDeserializeUnrecognizedElement | 逆シリカル化中に不明な要素が発生したかどうかを示す値を取得します。 ( ConfigurationElement から継承されます。) |
| | OnRequiredPropertyNotFound | 必須プロパティが見つからなかったかどうかを示す値を取得します。 ( ConfigurationElement から継承されます。) |
| | PostDeserialize | 逆シリアル化後に呼び出されます。 ( ConfigurationElement から継承されます。) |
| | PreSerialize | シリアル化前に呼び出されます。 ( ConfigurationElement から継承されます。) |
| | Reset | ConfigurationElement オブジェクトの内部状態 (ロックやプロパティ コレクションなど) をリセットします。 ( ConfigurationElement から継承されます。) |
| | ResetModified | 派生クラスに実装された場合、IsModified メソッドの値を false にリセットします。 ( ConfigurationElement から継承されます。) |
| | SerializeElement | 派生クラスに実装されている場合、この構成要素の内容を構成ファイルに書き込みます。 ( ConfigurationElement から継承されます。) |
| | SerializeToXmlElement | 派生クラスに実装されている場合、この構成要素の外側のタグを構成ファイルに書き込みます。 ( ConfigurationElement から継承されます。) |
| | SetPropertyValue | プロパティを指定した値に設定します。 ( ConfigurationElement から継承されます。) |
| | SetReadOnly | ConfigurationElement オブジェクトおよびすべてのサブ要素に IsReadOnly プロパティを設定します。 ( ConfigurationElement から継承されます。) |
| | Unmerge | 保存しないすべての値を削除するには、ConfigurationElement オブジェクトを変更します。 ( ConfigurationElement から継承されます。) |
Compiler メンバ
Compiler データ型で公開されるメンバを以下の表に示します。
| 名前 | 説明 | |
|---|---|---|
| | Compiler |
| 名前 | 説明 | |
|---|---|---|
| | Equals | オーバーロードされます。 2 つの Object インスタンスが等しいかどうかを判断します。 (Object から継承されます。) |
| | GetHashCode | 特定の型のハッシュ関数として機能します。GetHashCode は、ハッシュ アルゴリズムや、ハッシュ テーブルのようなデータ構造での使用に適しています。 (Object から継承されます。) |
| | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
| | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
| | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |
| 名前 | 説明 | |
|---|---|---|
| | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
| | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |
Compiler メンバ
Web アプリケーションのコンパイル インフラストラクチャをサポートするために使用されるコンパイラを定義します。このクラスは継承できません。
Compiler データ型で公開されるメンバを以下の表に示します。
| 名前 | 説明 | |
|---|---|---|
| | CompilerOptions | コンパイル時に使用されるコンパイラ固有のオプションのリストを取得します。 |
| | ElementInformation | ConfigurationElement オブジェクトのカスタマイズできない情報と機能を格納する ElementInformation オブジェクトを取得します。 (ConfigurationElement から継承されます。) |
| | Extension | 動的分離コード ファイルで使用されるファイル名の拡張子のリストを指定します。 |
| | Language | 動的コンパイル ファイルで使用されるプログラミング言語のリストを取得します。 |
| | LockAllAttributesExcept | ロックされている属性のコレクションを取得します。(ConfigurationElement から継承されます。) |
| | LockAllElementsExcept | ロックされている要素のコレクションを取得します。(ConfigurationElement から継承されます。) |
| | LockAttributes | ロックされている属性のコレクションを取得します。 (ConfigurationElement から継承されます。) |
| | LockElements | ロックされている要素のコレクションを取得します。(ConfigurationElement から継承されます。) |
| | LockItem | 要素がロックされているかどうかを示す値を取得または設定します。(ConfigurationElement から継承されます。) |
| | Type | 動的コンパイル ファイルの言語プロバイダのコンパイラの種類を示す名前を取得します。 |
| | WarningLevel | コンパイラの警告レベルを取得します。 |
| 名前 | 説明 | |
|---|---|---|
| | ElementProperty | ConfigurationElement オブジェクト自体を表す ConfigurationElementProperty オブジェクトを取得します。(ConfigurationElement から継承されます。) |
| | EvaluationContext | ConfigurationElement オブジェクトの ContextInformation オブジェクトを取得します。(ConfigurationElement から継承されます。) |
| | Item | オーバーロードされます。 この ConfigurationElement オブジェクトのプロパティ、属性、または子要素を取得または設定します。(ConfigurationElement から継承されます。) |
| | Properties | プロパティのコレクションを取得します。(ConfigurationElement から継承されます。) |
| 名前 | 説明 | |
|---|---|---|
| | Equals | オーバーロードされます。 現在の ConfigurationElement インスタンスを、指定したオブジェクトと比較します。 (ConfigurationElement から継承されます。) |
| | GetHashCode | 現在の ConfigurationElement インスタンスを表す一意の値を取得します。 (ConfigurationElement から継承されます。) |
| | GetType | 現在のインスタンスの Type を取得します。 (Object から継承されます。) |
| | IsReadOnly | ConfigurationElement オブジェクトが読み取り専用かどうかを示す値を取得します。 (ConfigurationElement から継承されます。) |
| | ReferenceEquals | 指定した複数の Object インスタンスが同一かどうかを判断します。 (Object から継承されます。) |
| | ToString | 現在の Object を表す String を返します。 (Object から継承されます。) |
| 名前 | 説明 | |
|---|---|---|
| | DeserializeElement | 構成ファイルから XML を読み取ります。 (ConfigurationElement から継承されます。) |
| | Finalize | Object がガベージ コレクションにより収集される前に、その Object がリソースを解放し、その他のクリーンアップ操作を実行できるようにします。 (Object から継承されます。) |
| | Init | ConfigurationElement オブジェクトを初期状態に設定します。 (ConfigurationElement から継承されます。) |
| | InitializeDefault | ConfigurationElement オブジェクトの既定の値セットを初期化するために使用します。 (ConfigurationElement から継承されます。) |
| | IsModified | 派生クラスに実装された場合、この構成要素が最後の保存または読み込み以降に変更されたかどうかを示します。 (ConfigurationElement から継承されます。) |
| | ListErrors | この ConfigurationElement オブジェクトおよびすべてのサブ要素の無効なプロパティのエラーを、渡されたリストに追加します。 (ConfigurationElement から継承されます。) |
| | MemberwiseClone | 現在の Object の簡易コピーを作成します。 (Object から継承されます。) |
| | OnDeserializeUnrecognizedAttribute | 逆シリカル化中に不明な属性が発生したかどうかを示す値を取得します。 (ConfigurationElement から継承されます。) |
| | OnDeserializeUnrecognizedElement | 逆シリカル化中に不明な要素が発生したかどうかを示す値を取得します。 (ConfigurationElement から継承されます。) |
| | OnRequiredPropertyNotFound | 必須プロパティが見つからなかったかどうかを示す値を取得します。 (ConfigurationElement から継承されます。) |
| | PostDeserialize | 逆シリアル化後に呼び出されます。 (ConfigurationElement から継承されます。) |
| | PreSerialize | シリアル化前に呼び出されます。 (ConfigurationElement から継承されます。) |
| | Reset | ConfigurationElement オブジェクトの内部状態 (ロックやプロパティ コレクションなど) をリセットします。 (ConfigurationElement から継承されます。) |
| | ResetModified | 派生クラスに実装された場合、IsModified メソッドの値を false にリセットします。 (ConfigurationElement から継承されます。) |
| | SerializeElement | 派生クラスに実装されている場合、この構成要素の内容を構成ファイルに書き込みます。 (ConfigurationElement から継承されます。) |
| | SerializeToXmlElement | 派生クラスに実装されている場合、この構成要素の外側のタグを構成ファイルに書き込みます。 (ConfigurationElement から継承されます。) |
| | SetPropertyValue | プロパティを指定した値に設定します。 (ConfigurationElement から継承されます。) |
| | SetReadOnly | ConfigurationElement オブジェクトおよびすべてのサブ要素に IsReadOnly プロパティを設定します。 (ConfigurationElement から継承されます。) |
| | Unmerge | 保存しないすべての値を削除するには、ConfigurationElement オブジェクトを変更します。 (ConfigurationElement から継承されます。) |
Compiler
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/02/11 07:15 UTC 版)
|
|
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。 (2016年3月)
|
| Compiler | |
|---|---|
| ジャンル | コメディSF |
| 漫画 | |
| 作者 | 麻宮騎亜 |
| 出版社 | 講談社 |
| 掲載誌 | 月刊アフタヌーン |
| レーベル | アフタヌーンKC |
| 発表号 | 1990年5月号 - 1992年10月号 |
| 巻数 | 全3巻 |
| 漫画:アセンブラ0X | |
| 作者 | 麻宮騎亜 |
| 出版社 | 講談社 |
| 掲載誌 | 月刊アフタヌーン |
| レーベル | アフタヌーンKC |
| 発表号 | 1992年12月号 - 1995年8月号 |
| 巻数 | 全4巻 |
| 漫画:元祖コンパイラ | |
| 作者 | 麻宮騎亜 |
| 出版社 | 少年画報社 |
| 掲載誌 | ヤングキングアワーズ |
| 発表号 | 2021年11月号 - |
| OVA:COMPILER「陰の章」 COMPILER「陽の章」 COMPILER FESTA |
|
| 原作 | 麻宮騎亜 |
| 監督 | 村山靖(陰の章) 加戸誉夫(陽の章) |
| 脚本 | 村山靖(陰の章) 加戸誉夫(陽の章) 菊池通隆(FESTA) |
| キャラクターデザイン | もりやまゆうじ(陰の章、陽の章) 大島康弘(FESTA) |
| 音楽 | 大森俊之 |
| アニメーション制作 | アニメイトフィルム(陰の章、陽の章) スタジオファンタジア(FESTA) |
| 製作 | 講談社、KING RECORDS、ムービック |
| 発表期間 | 1994年3月5日 - 1995年12月21日 |
| 話数 | 全3話 |
| テンプレート - ノート | |
| プロジェクト | 漫画・アニメ |
| ポータル | 漫画・アニメ |
『Compiler』(コンパイラ)は、麻宮騎亜による日本の漫画。『月刊アフタヌーン』(講談社)に連載されていた。続編に、『アセンブラ0X』(アセンブラゼロエックス)と、読切の『Compiler FINAL(検討中)』があるほか、『ヤングキングアワーズ(少年画報社)にて『元祖コンパイラ』が2021年11月号から連載中。
様々な漫画・アニメ・特撮のパロディを多用したコメディSF。キャラクターや技の名前など、全編を通じて電気・通信(主にコンピュータ)関連の用語が用いられている。
巻末には50音順で用語解説が掲載され、元ネタについて触れられている(『アセンブラ0X』には解説はない)。
『サイレントメビウス』などの麻宮騎亜の他の作品とのリンクが見られる。『メビウスクライン』では『Compiler』のキャラクターが登場するほか、『アセンブラ0X』にも『メビウスクライン』にまつわる話がある。また、『カラプリ』や『姫神ガジェット』も同一世界という設定で、『Compiler』のキャラクターが登場する。
あらすじ
|
この節にあるあらすじは作品内容に比して不十分です。
|
Compiler
西暦1997年、練馬区に住む五十嵐那智と五十嵐淑ら兄弟の前に、2人の女性が全裸で降ってくる。それぞれコンパイラとアセンブラと名乗る彼女たちは異世界「電次元」から来た「ルーチン」という存在で、その使命は電次元のルールに則って「ゲーム」を行い、互いに競って勝者が地球を征服するということだった。人間を凌駕する能力を秘めた2人は、五十嵐兄弟をゲームの観客兼ゲーム完遂後のパートナーとして選ぶが、ルールにはパートナーに危害がおよんではならないことが含まれていたため、淑を巻き込んで傷つけてしまった2人はルールを侵したことになってしまう。コンパイラはゲームと無関係に地球征服を遂行してルール違反をチャラにしようと目論むが、ルーチンは水に弱いという致命的な弱点を抱えた存在でもあったため、雨が降ってきたことで地球征服は失敗に終わる。
以降、コンパイラとアセンブラは特に目的もなく五十嵐家に居候し、襲ってくる電次元の刺客をあしらいながら適当に暮らすドタバタの日々を送ることになる。
アセンブラ0X
『Compiler』の続編。アセンブラの人間化とアイドルデビューを軸に物語が描かれる。
登場人物
五十嵐家
- コンパイラ
- 声 - 松井菜桜子
- Compilerの名目上の主人公。破壊の能力を持つルーチンで、電魔ルーチンの呼び名をもつ。
- 外見は20歳前後の美女。ウェーブが掛かった黒髪を腰丈まで伸ばしている。
- 刹那的な楽しみを追求するタイプで、自分が楽しそうだと感じたことには揉め事だろうと何だろうと首を突っ込みたがる。
- 破壊を司ることもあって戦闘能力は高く、ゲームではアセンブラを終始押していた。ゲームが無効になって以降はアセンブラが淑に首ったけなこともあり、電次元からの刺客との戦闘を一手に引き受けている。
- アセンブラ
- 声 - 水谷優子
- 創造の能力を持つルーチンで、電神ルーチンの呼び名をもつ。
- 外見は10代後半の少女で、銀色のセミロングの髪を肩甲骨あたりまで伸ばしている。
- コンパイラとは逆に創造を司っており、破壊された物体を再生する能力に長けているが、戦闘は不得手。
- ゲーム中に淑を怪我させてしまったことをきっかけに淑を異性として意識し始め、ゲームが無効になってパートナーの意味がなくなった後も淑に好意を抱いている。人間社会ではアセンブラ・コードと名乗り、淑の通う高校に帰国子女として転入。電次元からの刺客そっちのけで、恵と淑をめぐる恋のさや当てを繰り広げる。
- アセンブラ0Xでは名目上の主人公。人間に生まれ変わるが、プラズマの策略によって、天堂寺恵とともに「Drink」としてアイドルデビューする羽目に。水谷と林原は実際にイメージCD『ASSEMBLER 0X COOL AND SPARKLING ~清涼と炭酸~』内でDrink名義の曲を歌っている。
- 五十嵐淑(いがらし とし)
- 声 - 佐々木望
- 五十嵐家の次男で高校生。ゲームの観客兼アセンブラのパートナーとして選ばれた。五十嵐家の中では至極真っ当な感覚の持ち主。当初は女性に対する免疫が全くなく、全裸で現れたインタプリタを見て卒倒するほどだった。アセンブラ・恵の両方から想いを寄せられているが、優柔不断な性格が災いしてはっきりと決めかねている。けれど、言う時には言える勇気は持っており、離婚して出て行った母親のことは最後まで離婚に反対したほど慕っていた(母親の離婚の意志が固すぎたため、最終的に引き下がった)。その母親がアセンブラをそそのかして自分を連れ帰ろうとした企みには平手打ちをしてまで諫め、泣きながら本心を吐露している。
- 五十嵐那智(いがらし なち)
- 声 - 山寺宏一
- 淑の兄。ゲームの観客兼コンパイラのパートナーとして選ばれた。ゲーム会社に勤めている。破滅的で常識外れの感覚を持っており、コンパイラとはウマが合う。ただ、その性格ゆえに弟のみならず会社での信用は低いらしく、納期の迫った仕事を真剣にこなしている様を女性の同僚に見られるや否や「みんな大変よー! なっちゃん(=会社での那智のあだ名)が仕事してるわー!」と叫ばれてしまう始末。愛車はジャガー・XJR-15。
電次元
- インタプリタ
- 声 - 川村万梨阿
- 中和の能力を持つルーチン。コンパイラとアセンブラが行うゲームの監視役として評議会から派遣された。コンパイラたちのボケに対して律儀に全てツッコミを返すノリの良い性格。ルーチンの特殊能力を封じることができる。ゲームが無効になって以降もコンパイラたちと接触を続けたために、自らも評議会から狙われる立場となり、改造されてしまう。
- バイアス
- 声 - 堀内賢雄
- ディレクトリと共に電次元から来た刺客。一度はコンパイラに敗北するが、宇宙に飛ばされた際に太陽の力を取り込んでバイアスHG(ハイグレード。雑誌掲載時はBLACK)にパワーアップする。
- ドラマCDにてバイアスDX(デラックス)にもパワーアップ。OVAでは新たな力を授けると言う能書きにより妙齢な美女にされてコンパイラ達の前に現れる。
- ディレクトリ
- 声 - 古田信幸
- バイアスと共に電次元から来た刺客。バイアス同様、コンパイラに敗れて宇宙に飛ばされた際に太陽の力を取り込んでディレクトリEX(エクストラ。雑誌掲載時はRX。バイアスと合わせて元ネタは仮面ライダーBLACK RX)にパワーアップする。
- ドラマCDにてディレクトリSP(スーパー)にもパワーアップ。OVAではディレクトリと共に妙齢な美女にされてコンパイラ達の前に現れる。
- フォトン
- コンパイラが所有する光の魔神。
- フォノン
- コンパイラが所有する音の魔神。
- デバッグ
- 声 - 松本保典
- 電次元から来た刺客。ギャグによって爆発を引き起こす能力を持つルーチン。
- 白コンパイラ
- 声 - 玉川紗己子
- 電次元からの刺客として現れた、髪が白いこと以外は外見がコンパイラとうりふたつの容姿を持った女性。実は本物のコンパイラ。当初、電次元から現れたコンパイラ(黒コンパイラ)はサンプルとして作られたレプリカで、白コンパイラは黒コンパイラに陥れられて立場を奪われていた。
- 本物の座を賭けた対決の末に黒コンパイラと融合してしまい、二心同体になる。
- OVA Compiler Festaでは評議会の作ったコンパイラの新型。自己申告では、4倍に性能アップ、コームも新型でデータ容量は12倍、マウスを使う必要もなく、処理速度は14倍(当社比)、バストも5cm大きい。時空振動弾が埋め込まれており、死亡すると爆発して地球を破壊する。黒コンパイラとの戦闘で規格の違う旧型コームを差し込まれ動作不良で敗北。時空振動弾の爆発を防ぐため、黒コンパイラと融合された。
その他
- 天堂寺恵(てんどうじ めぐみ)
- 声 - 林原めぐみ
- 自称・淑のガールフレンド。天堂寺財閥のお嬢様で、アセンブラの恋のライバル。
- アセンブラ0Xではアセンブラに対抗した結果、アセンブラとユニットを組んでアイドルデビューするが、テレビ番組での企画の際にビキニのブラをはがされ、胸を露にされて泣いたのがきっかけでアイドルを即座に引退(同時に激怒した兄たちが破壊活動を行った。テレビ局は企画を台無しにされたが、天堂寺家が金と権力で黙らせた)。
- どんな些細な事であっても家の財力と兄達に頼ることしかしない救いがたい悪癖があり、それゆえに自力で物事を解決しようとはまずもって考えない、典型的他力本願なお嬢様。
- パーカー
- 執事。本名は羽画(はが)なのだが、まともに呼ばれないので「私はパーカーではありません」と度々ツッコミをする羽目になる。
- モチーフはサンダーバードのアロイシャス・パーカー。
- 五十嵐土鬼(いがらし どき)
- 声 - 若本規夫
- 淑と那智の父親。貿易商を営んでいる関係で家を空けていることが多い。豪快で破滅的な性格をしており、偏見と興味本位で取り返しのつかないことをしては、騒ぎの種になる。那智は父親の性格を色濃く引き継いでいる。
- 鬼門院礼子(きもんいん れいこ)
- 淑と那智の母親。トラブルばかり起こす土鬼に愛想を尽かして離婚し、家を出て姓を戻している。土鬼の血が色濃い那智を毛嫌いしているが、実際は「似た者夫婦」であり、嫌っている理由は「同属嫌悪」に近い。
- 自分に最も近い淑だけでも自分の手元に置こうと画策。アセンブラの恋心に付け込んで彼女を懐柔・利用した強硬手段が仇となり、淑の本気の怒りを買ってしまう。だが、最後まで離婚に反対していた彼の本心と、自分をいまだに慕い続けていた優しさを知って和解する。
- 佐々木(ささき)
- 鬼瓦組の暴力団員。いつもアロハシャツを着ている。当時の別連載作サイレントメビウスの担当編集者がモチーフ。
- 国足天願(こくそく てんがん)
- 声 - 屋良有作
- 81歳の謎の老人。コンパイラたちを陰から意味ありげに見つめるが、ただそれだけの人物。
- 阿部
- 淑のクラスメイト。
- タイガー一文字(タイガーいちもんじ)
- ホンダNSXを駆る外国人の走り屋。
- 明貴実果(あきたか みか)
- 那智の同僚。明貴美加がモチーフ。
- 狭井王子(せまい おうじ)
- 那智が勤めるゲーム会社、有限会社レッドパラダイスの社長。レッドカンパニーの広井王子がモチーフ。
- さんご礁
- コンパイラの力によって動けるようになった南の島のさんご礁。
- メガダイン
- 五十嵐土鬼の姿に似せて作られたロボット。
アセンブラ0Xから登場するキャラ
- プラズマ
- 声 - 本多知恵子
- 電次元のプリンセス。電気を発生させてルーチンの機能をマヒさせる能力を持っている。
- 本当は子供だが、変身に見せかけて大人型の着ぐるみを着脱している。そのため大人の姿では水が平気。また、地面を引きずるほどに長い髪がアースの役目をしているため、本来の姿でも水に少しだけ耐えられる(水たまり以上の環境は流石に無理)。
- 電次元からの刺客だったが、淑に惚れ込み、彼を夫にすべく五十嵐家に居候するようになる。その最大の障害となるアセンブラを敵視し、淑から引き離そうとアセンブラをアイドルにする「ATATWプロジェクト」を実行。アセンブラの名前を使って勝手にオーディションを受け、彼女をアイドルにさせることで一応は成功するが、その後の明確な展開が描かれないまま連載が終了してしまった。
- 神原義人
- アイドル誕生番組のプロデューサー。
- 倉橋
- アセンブラと天堂寺恵のアイドルユニット「Drink」のマネージャー。
- P-ENIX (フェニックス)
- 5人組のアイドルグループ。
- 天鳳院ちあき
- 子供のころより、天堂寺恵をライバル視している。
- 天堂寺恵の父と兄達と博士
- サンダーバードのトレーシー一家とブレインズ博士がモチーフ。なお、精巧かつ緻密にパロディし過ぎた結果、権利問題に抵触してしまい、彼等が登場するエピソードは単行本未収録となってしまっている。
- 兄達は恵の応援・救援要請には一も二もなく応じる。だが、その実態は全員が全員、悲鳴を聞こうものなら「恵をいじめる奴は誰だー!」と周囲を徹底的に破壊するほど過激な、シスコンの枠も超えたレベルのとんでもない兄バカ。
- 葉月巫由伽 (はづき ふゆか)
- テレビ関東のアナウンサー。
- 作者の別作品「サイレントメビウス」からのゲスト出演。同作主人公、香津美・リキュールの母親。
- ギゲルフ・リキュール
- 作者の別作品「サイレントメビウス」からのゲスト出演。同作主人公、香津美・リキュールの父親。
- ネリマクイーン
- 声 - 三石琴乃
- 東京23区の戦士「東京仮面」のひとり。練馬区を守る。
- 普段はOLをしている。
- ミナトクイーン
- 東京23区の戦士「東京仮面」のひとり。港区を守る。
- イタバシクイーン
- 東京23区の戦士「東京仮面」のひとり。板橋区を守る。
- 巨大ロボット東京大仏を操ることができる。
- チヨダクイーン
- 東京23区の戦士「東京仮面」のひとり。千代田区を守る。
- 東京都庁舎移転によりリーダーの座を失い、造反を企む。
- シンジュククイーン
- 東京23区の戦士「東京仮面」のリーダー。新宿区を守る。
- 新宿の目によって真実を自白させる「シンジュク・アイ」を使う。
漫画以外での登場キャラ
- アップロード
- 声 - 吉田理保子
- OVA「陽の章」に登場。実はバイアスをベースに改造されたルーチンである。
- ダウンロード
- 声 - 麻上洋子
- OVA「陽の章」に登場。同じく改造ルーチンで、こちらはディレクトリがベース。
- 大阪を舞台とした「陽の章」に登場するアップロードとダウンロードの声がこのコンビなのはラジオ大阪で放送されていたアニラジ「アニメトピア」へのオマージュである。
- リカちゃん(PC-9801LC)
- 声 - かないみか
用語
- ルーチン
- 電次元からやってきた生命体。地球では人間と全く変わらない姿をしているが、コームと呼ばれる媒体を使用することで、人間の常識を超えたさまざまな特殊能力を操ることができる。その力はコンパイラひとりでアメリカとソ連の合同軍を一蹴するほどのものだが、水に弱いという致命的な弱点を抱えている。
- コーム
- ルーチンが使用する媒体の一種。櫛のような形をしている。ルーチンは首筋にコームを挿入するためのスロットをいくつか持っており、ここにコームを挿入することによって数々の特殊能力を使用する。
- デバイス
- ルーチンが使用する媒体の一種。コームとは異なる形をしており、挿入するスロットも別になっている。アセンブラは淑との仲を親密にするために性格設定デバイスを使用し、自らの性格を「素直で優しい少女」に設定した。
- ゲーム
- コンパイラとアセンブラの当初の目的。最終的な目的は相手に先んじて地球を征服することであり、勝者はパートナー(コンパイラなら那智、アセンブラなら淑)と結ばれてパートナーの子を身籠ることになっている。ただしパートナーに危害がおよんだ場合はゲームは無効となり、評議会から消去(デリート)の対象と見なされてしまう。
- 評議会
- 電次元を統治する組織。地球征服のためにコンパイラとアセンブラをゲームに派遣した。ゲームが無効となって以降はコンパイラたちを消去するために次々と刺客を送り込む。
関連作品
- 漫画
- コンパイラ 全3巻
- アセンブラ0X 全4巻
- コンパイラ Final(検討中) (『麻宮騎亜短編集 ヘキサアライブ』収録)
- ドラマCD
- コミックスイメージ「COMPILER」
- コミックスイメージ「ASSEMBLER」
- コミックスイメージ「INTERPRITER」
- 熱血電波倶楽部「電脳天使COMPILER FX」PLASMA
- 熱血電波倶楽部「電脳天使COMPILER FX」COMPILER-WHITE
- 電脳少女歌劇団 Compiler・サイレントメビウス・聖獣伝承DARK ANGELの麻宮騎亜3作品キャラクターがアイドルオーディションを勝ち抜く設定のギャグドラマ。
OVA
- COMPILER「陰の章」(1994年3月5日発売)
- COMPILER「陽の章」(1994年10月5日発売)
- COMPILER FESTA(1995年12月21日発売)
スタッフ
- 原作 - 麻宮騎亜
- 監督 - 村山靖(陰の章)、加戸誉夫(陽の章)
- 脚本・絵コンテ - 村山靖(陰の章)、加戸誉夫(陽の章)、菊池通隆(FESTA)
- キャラクターデザイン - もりやまゆうじ(陰の章、陽の章)、大島康弘(FESTA)
- 演出 - 村山靖(FESTA)
- 作画監督 - 大島康弘(陰の章、FESTA)、吉田徹(陽の章)
- 美術監督 - 中座洋次
- 色彩設定 - 三笠修(陰の章、陽の章)、永井留美子(FESTA)
- 撮影監督 - 沖野雅英
- 音楽 - 大森俊之
- 音響監督 - 渡辺淳
- プロデューサー - 水尾芳正、古沢譲二(陰の章、陽の章)、島名光二(FESTA)、沢登昌樹、池口和彦(陰の章、陽の章)
- 制作協力 - スタジオファンタジア(陰の章、陽の章)
- 制作 - アニメイトフィルム(陰の章、陽の章)、スタジオファンタジア(FESTA)
- 製作著作 - 講談社、KING RECORDS、ムービック
主題歌
- オープニングテーマ「I WAS BORN TO FALL IN LOVE」
- 作詞 - 有森聡美 / 作曲・編曲・演奏 - 中崎英也 / 歌 - 奥井雅美
- エンディングテーマ「FULL UP MIND」
- 作詞 - 有森聡美 / 作曲・編曲・演奏 - 中崎英也 / 歌 - 奥井雅美
外部リンク
- TRON plus STATION(スタジオトロン公式サイト)
コンパイラ
(Compiler から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2026/03/19 10:08 UTC 版)
|
|
この記事には参考文献や外部リンクの一覧が含まれていますが、脚注による参照が不十分であるため、情報源が依然不明確です。
|
| プログラムの実行 |
|---|
| 一般的な概念 |
| コードの種類 |
| コンパイル戦略 |
| 有名なランタイム |
|
| 有名なコンパイラとツールチェーン |
|
| ソフトウェア開発工程 |
|---|
| 中心となる活動 |
| パラダイムとモデル |
| ソフトウェア開発方法論とフレームワーク |
|
| 開発支援 |
| プラクティス |
| プログラミングツール |
| 標準と機関 |
|
| 用語集 |
|
| |
コンパイラ(英: compiler)は、高水準言語で書かれたコンピュータプログラムを、 コンピュータが実行や解釈できる形式に、一括して変換するソフトウェア[1]。
概説
コンパイラの技術書のバイブルとされるAlfred V.Aho(アルフレッド・エイホ)著 Compilers, Principles, Techniques, and Tools(通称「ドラゴンブック」[注釈 1])の第1章1節の冒頭に、コンパイラとはそもそも何かということについて説明が掲載されており、そこには「簡潔に言うと、コンパイラとは、ある言語(プログラミング言語)で書かれたプログラム(ソースプログラム)を読み、それを別の言語で書かれた等価のプログラム(ターゲットプログラム)へと翻訳(translate)するプログラムである。」と書かれており、さらに続けて「コンパイラは、ソースプログラムに含まれるエラーをユーザに報告するという重要なことを翻訳の1プロセスとして行う。」という説明も加えている[2]。
英語の動詞で、あるプログラム言語で書かれたコードを別の言語で書かれたコードに変換することを"compile"(コンパイル)といい、コンパイラとはその変換を一括して行なうコンピュータプログラムのことである。インタプリタとよく対比される。
(なお、上では「ソースプログラム」「ターゲットプログラム」という古典的用語を含む説明文を紹介したが、最近の技術用語では、変換される前のプログラムを「ソースコード」と呼び、変換後の機械語あるいは中間言語のプログラムなどを「オブジェクトコード」と呼ぶ[3]傾向がある。また機械語は二進数で書かれているので近年では「バイナリコード」ということもある。)
よくあるのは、高水準言語で書かれたプログラムを、コンピュータのプロセッサ[注釈 2]が直接実行できる機械語あるいはアセンブリ言語のような低水準言語あるいは元のプログラムよりも"低いレベル"のコード(例えばバイトコードなどの仮想マシン向け中間表現)に変換するものである。
コンパイラを俯瞰してみると、この世には圧倒されるほど多種類のコンパイラがある[2]。というのは、ソースコード(ソースプログラム)の記述に使われるプログラミング言語だけに着目しても、FORTRANなど歴史の古い言語から始まり近年勃興してきている言語まで含めると数千にもおよぶプログラミング言語があり、他方、オブジェクトコード(ターゲットプログラム)の記述に使われる言語のほうに着目しても、種類がやはり非常に多く、ソースコードの言語とは別の言語であるかも知れないし[注釈 3]、(あるいは中間言語であるかも知れないし)、あるいは機械語であるかも知れないからであり、その機械語もマイクロプロセッサを用いたコンピュータのものからスーパーコンピュータのものまであり多種多様だからである[2]。
またコンパイラの種類には、シングルパス(ワンパスとも。1回で変換作業を完了できるもの)、マルチパス(en:Multi-pass compiler。複数回の作業が必要だが、主記憶が少なくても動くもの)、ロード・アンド・ゴー(変換してすぐに実行を開始するもの)、デバッグ用、最適化用などの種類もある[2]。 →#分類の節で説明
またコンパイルを使ったコンパイル作業は、ひとつのプログラムとして動作する全てのコードをいっぺんにコンパイルするのではなく、モジュール毎などに分けてコンパイルし(「分割コンパイル」)、ライブラリなどはあらかじめコンパイルされているものと合わせて、実行するようにすることも多い[4]。この場合、コンパイラはリロケータブルバイナリを出力し、実行可能ファイルの生成にはリンケージエディタが必要であり、さらに動的リンクで実行する場合はダイナミックリンカ/ローダ(ローダの一種)も必要である。
なお、「コンパイラ(言語) / インタプリタ(言語)」という2分法的な分類は、Java登場以前では一般的で適切だったが、近年では適切でないことも増えている。開発環境などでは、コンパイルした後に実行するというような手続きを1コマンドで行えるものも増えている。そして、Java以降はインタプリタでも実行時コンパイラなどの技術の利用がさかんになってきており、古典的な意味での「コンパイラ」と「インタプリタ」の中間的な性質のツール(プログラム)も増えてきているからである。
なお英語の「compile」はもともと「編集する」「編纂する」という意味であり[5][6]、「compiler」というのは「編集者」という意味の英語である[7][8][9][10]。
歴史
1940年代まで、コンピュータのプログラミングは機械語で直接行なわれていた。プログラムを指して「コード」(英語では暗号を意味する)と呼ぶのは、知らない人間には機械語は全く意味のわからない数値の羅列だからである。しかし、(人間にとって比較的理解のしやすい)十進法の数字で書かれたアドレスを内部表現の二進法に変換する、といったプログラムならばEDSAC(1940年代末に登場した、イギリスのマシン)において既に存在していた。(つまり、この段階で、アセンブラのごく一部の機能に限れば、実現していたことになる)
機械語でのプログラミングは言うに及ばず、アセンブリ言語を用いても、プログラミングというのは面倒な作業である。そういった低水準言語から、人間がより扱いやすい高水準言語が徐々に求められるようになった。また、機械の詳細が抽象化されることにより、高水準なプログラミング言語で書かれた同一のソースコードを元に、詳細仕様が異なる機械でも動くプログラムを生成できる、という利点もあった。1950年代末までに、プログラミング言語がいくつか提案され、実験的なコンパイラがいくつか開発された。
世界初のコンパイラについては、1952年にグレース・ホッパーが書いたA-0 Systemだとされることもある。だが一般的には1957年にIBMのジョン・バッカスのチームが開発したFORTRANコンパイラが世界初の完全なコンパイラであるとされている。一般的なコンパイラの開発では、まず動くものを作ってから最適化の機能が付け加えられるが、最初のFORTRANコンパイラでは、コンパイラが実用になることを示すために、最初から最適化に労力が向けられた。
1960年の、ホッパーらによるCOBOLは複数のアーキテクチャ上でコンパイル可能となった言語の最初期の1つである。
様々なアプリケーション領域で、高水準言語というアイデアは素早く浸透していった。機能が拡張されたプログラミング言語が次々と提案され、コンピュータのアーキテクチャそのものも複雑化していったため、コンパイラはどんどん複雑化していった。
初期のコンパイラはアセンブリ言語で書かれていた。世界初の「セルフホスティングコンパイラ」は、1962年にマサチューセッツ工科大学の Hart と Levin が開発したLISPコンパイラである[11]。1970年代には、特にPascalやC言語などにおいて、コンパイル対象言語でコンパイラを書くことが一般化した。さらにより高水準の言語のコンパイラは、PascalやC言語で実装することも多い。セルフホスティング・コンパイラの構築には、ブートストラップ問題がつきまとう。すなわち、コンパイル対象言語で書かれたコンパイラを最初にコンパイルするには、別の言語で書かれたコンパイラが必要になる。Hart と Levin の LISPコンパイラではコンパイラをインタプリタ上で動作させてコンパイルを行なった。
分類
機械語にコンパイルするコンパイラもあれば、そうでないコンパイラ(後述)もある。機械語コードのことを、ハードウェアであるプロセッサの生のコード、というような意味でネイティブコードなどと言うことがあり、機械語にコンパイルするコンパイラのことをネイティブコンパイラと言うことがある。
コンパイラに限らず、入力と出力を持つあらゆる変換系は、入力の種類がm種類、出力の種類がn種類あるとすると、m×n種類があることになる。コンパイラの場合、プログラミング言語がm種類、コード生成の対象となる命令セットアーキテクチャがn種類、といったような感じになるわけであり、入力側をフロントエンド、出力側をバックエンドと言うが、中間表現の設計いかんでは、残りの中間処理の部分、特に重要な部分であるコンパイラ最適化を共有できるため、1980年代以降に基本設計が為されたGCCやCOINSやLLVMなどでは、そのようにして多言語・多ターゲットに対応している。
汎用OSなど、開発環境と同じ環境で目的プログラムも動作させるような開発を「セルフ開発」と言い、セルフ開発のコンパイラを「セルフコンパイラ」という。それに対し、開発環境とは別の環境で実行するような開発を「クロス開発」といい、そのためのコンパイラをクロスコンパイラという。OSカーネル自身のコンパイルなどは、カーネル自身の実行環境は、そのOSではなくベアメタルであるという意味ではある種のクロスコンパイルのようなものであるし、新しいコンピュータシステムのための環境を最初に作るにはクロス開発の必要がある。あるいは、組み込みシステムやPDAなど、それ自体が開発環境を動作させるだけの機能や性能を持たない場合、といったものもある。
いわゆるネイティブコードではなく中間コードを生成し、さらに別のコンパイラに処理を任せたり、別のインタプリタによって実行したりするものもある。これを中間コードコンパイラ、バイトコードコンパイラなどと呼ぶ。またそのバイトコードを解釈実行する処理系をバイトコードインタプリタなどと呼ぶ。
ワンパスとマルチパス
コンパイラは様々な処理の集合体であり、初期のコンピュータではメモリ容量が不十分であったため、一度に全ての処理を行うことができなかった。このためコンパイラを複数に分割し、ソースコードや何らかの中間的な表現に何度も処理を施すことで解析や変換を行っていた。
一回でコンパイルが可能なものをワンパスコンパイラと呼び、一般にマルチパスコンパイラよりも高速で扱いやすい。Pascalなど、多くの言語はワンパスでコンパイルできるよう意図して設計されている。
言語の設計によっては、コンパイラがソースコードを複数回読み込む必要がある。たとえば、20行目に出現する宣言文が10行目の文の変換に影響を与える場合がある。この場合、一回目のパス(読み込み)で影響を受ける文の後にある宣言に関する情報を集め、二回目のパスで実際の変換を行う。
ワンパスの欠点は、高品質のコードに欠かせない最適化を行いにくいという点が挙げられる。最適化コンパイラが何回読み込みを行うかというのは決まっていないが、最適化の各フェーズで同じ式や文を何度も解析することもあるし、一回しか解析しない箇所もある。
コンパイラを小さなプログラムに分割する手法は、研究レベルでよく行われる。プログラムの正当性の判定は、対象プログラムが小さいほど簡単なためである。
ネイティブコンパイラとその他
ネイティブコンパイラの他にも以下のような、「ネイティブの機械語」以外をターゲットとするコンパイラ(ないしトランスレータ)がある。
- 何らかの高水準言語から、何らかの高水準言語に変換する「トランスレータ」。「トランスコンパイラ」などという語もある。たとえば、OpenMPなどの自動並列化コンパイラは並列化が明示されていないプログラムを、並列化を明示したプログラムに変換する。または、FORTRANの
DOALL文など何らかの言語構文を変換する。 - バイトコードコンパイラ。現在ではJavaが代表的だが、(バイトコードという呼称が付く前から)中間表現を使うものとして例えばpコードマシンなど古くからある。
- Java や Smalltalk やマイクロソフトの共通中間言語システムで使われているJITコンパイラ。JITコンパイラはコンパイラの技術ではなくインタプリタの技術で、実行時に、解釈実行するのではなく機械語にコンパイルして実行する。
コンパイラ言語
もっぱらその言語の処理系がコンパイラとして実装される言語を「コンパイラ言語」などと言い、インタプリタとして実装される言語を「インタプリタ言語」などと言うこともあるが、実験的な実装まで含めればどちらもある言語も多い。Microsoft Visual Studioに付属するF#/C# Interactiveのように、対話環境で入力したプログラムを、コンパイラで共通中間言語(中間表現)にコンパイルし、さらに共通言語ランタイム(仮想マシン)上でネイティブコードにJITコンパイルしてインタプリタ的に実行する、というような処理系もある。JavaやMicrosoft Visual Basicのように、登場当初はインタプリタ方式だったが、のちにネイティブコードへのJITコンパイルやAOTコンパイルをサポートするようになった言語もある。
言語によっては、Common Lisp規格のように実装にコンパイル機能を含むことを義務とするものもある(ただし、ANSI Common Lisp規格は解釈実行の処理系を禁止しているのではない)。また、インタプリタの実装が容易でコンパイラの実装が困難な言語もある(APL、SNOBOL4など)。メタプログラミングの利用、特に文字列をevalすることは、インタプリタ方式では造作ないことだが、コンパイラ方式では実行環境にコンパイラ自体が必要となる(動的プログラミング言語も参照)。
ハードウェア・コンパイラ
ハードウェア記述言語の処理系(合成系)を、ハードウェアコンパイラとかシリコンコンパイラなどと呼ぶことがある。
コンパイルのタイミング
コンパイルをアプリケーションの実行時に行うか、実行前に行うかで2つに分かれる。
- 事前コンパイラ - 実行前に事前にコンパイルする。Ahead-Of-Timeコンパイラ (AOTコンパイラ)。
- 実行時コンパイラ - 実行時にコンパイルする。Just-In-Timeコンパイラ (JITコンパイラ)。
教育用コンパイラ
コンパイラ構築とコンパイラ最適化は、大学での計算機科学や情報工学のカリキュラムの一部となっている。そのようなコースでは適当な言語のコンパイラを実際に作らせることが多い。文書が豊富な例としてはニクラウス・ヴィルトが1970年代に教育用に設計し、教科書中で示した PL/0 がある[12]。PL/0 は単純だが、教育目的にかなった基本が学べるようになっている。PL/0 はPascalで書かれていた。ヴィルトによる教科書は何度か改訂されており、1996年の版ではOberonでOberonのサブセットOberon-0を実装している。
- 段階的改良によるプログラム開発[リンク切れ]の採用
- 再帰下降構文解析の採用
- 拡張BNF記法による文法記述の採用
- Pコードの採用
- ブートストラップ問題をT図式(en:Tombstone diagram)で形式的に記述
インタプリタとの違い
もともとは、コンパイラはしばしばインタプリタと対比されてきたものである。コンパイラは、生成された機械語プログラムなどの実行は行わないが、一度コンパイルすればコンパイラを使わずに何度も実行できるという利点がある。しかし、インタプリタは、バイナリの実行ファイルは生成せず、実行するときに常に必要だが、プログラムを作ったらすぐに実行できるという利点がある[13][14]。
仕組みと設計
コンパイラは、概念的に言うと、一般に次のようなフェーズ(phase(s)、段階)に従い処理を行う[15] [16]。
通常、次のような入・出力図で説明される。[15]
ソースプログラム(ソースコード) ↓ 字句解析器 ↓ 構文解析器 ↓ セマンティック解析器 ↓ 中間コード生成器 ↓ コード最適化器 ↓ コード生成器 ↓ ターゲットプログラム(オブジェクトコード)
太字で表記したものがコンパイラの中に含まれている部分(コンパイラの部品)である。つまり、まず字句解析器(字句解析部)がソースコードを読み込みトークンに分解し、次に構文解析器(構文解析部)がトークン列からプログラムの構文木を構築し、次にセマンティック解析器(意味解析器)が意味論的な解析を行い、次に中間コード作成器が中間コードを生成し、次に最適化器がコードの最適化を行い、最後にコード生成器が最終的なターゲットプログラム(オブジェクトコード)[注釈 4]を生成する。
なお、コンパイラの作成に関することだが、字句規則から字句解析器を生成するlex[17]、構文規則から構文解析器を生成するパーサジェネレータ[18]というプログラムがあり、広く実用的に使われている。つまりコンパイラのプログラムの一部分を自動的に書いてくれるようなプログラムがすでにあり、それのおかげで全部人力で書くようなことはしないで済む。(なお、コンパイラ全体を生成するコンパイラジェネレータも研究されているものの、広く実用に使われるには至っていない。)
コンパイラ設計手法は処理の複雑さ、設計者の経験、利用可能なリソース(人間やツール)に影響される。
コンパイル処理の分割を採用したのはカーネギーメロン大学での Production Quality Compiler-Compiler Project であった。このプロジェクトでは、「フロントエンド」、「ミドルエンド」(今日では滅多に使われない)、「バックエンド」という用語が生み出された。
非常に小さなコンパイラ以外、今日では2段階(2フェーズ)以上に分割されている。しかし、どういったフェーズ分けをしようとも、それらフェーズはフロントエンドかバックエンドの一部と見なすことができる。フロントエンドとバックエンドの分割点はどこかというのは論争の種にもなっている。フロントエンドでは主に文法的な処理と意味論的な処理が行われ、ソースコードよりも低レベルな表現に変換する処理が行われる。
ミドルエンドはソースコードでも機械語でもない形式に対して最適化を施すフェーズとされる。ソースコードや機械語と独立しているため、汎用的な最適化が可能とされ、各種言語や各種プロセッサに共通の処理を行う。
バックエンドはミドルエンドの結果を受けて処理を行う。ここでさらなる解析・変換・最適化を特定のプラットフォーム向けに行う場合もある。そして、特定のプロセッサやOS向けにコードを生成する。
このフロントエンド/ミドルエンド/バックエンドという分割法を採用することにより、異なるプログラミング言語向けのフロントエンドを結合したり、異なるCPU向けのバックエンドを結合したりできる。この手法の具体例としてはGNUコンパイラコレクションや Amsterdam Compiler Kit、LLVM がある。これらは複数のフロントエンドと複数のバックエンドがあり、解析部を共有している。
フロントエンド
フロントエンドはソースコードを分析して、中間表現または IR と呼ばれるプログラムの内部表現を構築する。また、シンボルテーブルを管理し、ソースコード内の各シンボルに対応したデータ構造に位置情報、型情報、スコープなどの情報を格納する。このような処理はいくつかのフェーズで実施される。たとえば以下のようなフェーズがある。
- 行再構築(Line reconstruction) - キーワードにストロッピングを施す場合や識別子に空白を挿入可能な場合、字句解析の前に入力文字列を「正規化」する必要がある。1960年代の一般的なトップダウンの再帰下降型の表駆動構文解析では、ソースコードを一度読み込むだけでトークン化のフェーズは不要だった。ストロッピングを行う言語としては、Atlas Autocode、Edinburgh IMP、一部のALGOL処理系などがあり、これらは「行再構築」フェーズを持っている。ストロッピングとは、キーワードに何らかの記号をつけることでキーワードとして使われている文字列を予約語とせず、同じ文字列を変数名やサブルーチン名に利用できるようにしたものである。たとえば、シングルクオートでキーワードを囲むとか、%記号を先頭につけるなどの記法がある。
- 字句解析 - ソースコードの文字列を、「トークン」と呼ばれる、言語的に意味のある最小単位に分割する。各トークンは最小構成要素であり、たとえばキーワード、識別子、シンボル名、「10」や「365」のような数、などである[19]。トークンは一般に正規言語に従うため、正規表現を解釈する有限オートマトンで認識できる[20]。字句解析を行うソフトウェアを字句解析器(lexical analyzer)と呼ぶ。
- プリプロセッサ - コンパイル前の全処理を行うもの。マクロを実装や、定数の定義、ヘッダファイルの読み込みに使われる。一般にこのフェーズは構文解析や意味解析の前に行われる。プリプロセッサはトークンを操作するものであって、構文を考慮しない[21]。だから、C言語などでは、プリプロセッサでマクロを実装できるが、LISPのような言語では構文解析後にマクロを置き換える必要があり、プリプロセッサは使われない。
- 構文解析 - トークン列を解析し、プログラムの構造を明らかにする。このフェーズで構文木が構築され、単なるトークンの列だったプログラムにその言語の文法を定義した形式文法の規則を適用することで木構造を生成する[22][23]。構文木は、この後の工程で解析され、強化され、変換される。
- 意味解析 - 構文木の要素に意味を追加し、シンボルテーブルを作成する。型チェック(データ型などを間違っていないかのチェック)や、変数や関数の定義と参照箇所を結びつける処理、既定値代入(自動変数の初期化)、意味的に不正なプログラムを検出して通知するなどの処理が行われる。[20]意味解析には完全な構文木が必要であり、理論上構文解析とコード生成の間に行わなければならない。もちろんコンパイラの実装によってはこれらを一度に行うこともある。
バックエンド
「バックエンド」という用語は「コード生成」という用語と混同されることが多い。アセンブリ言語コードを生成するという意味で機能的にも類似しているためである。書籍によっては、バックエンドの汎用解析フェーズと最適化フェーズを「ミドルエンド」と称してマシン依存のコード生成部と区別することがある。
バックエンドに含まれる主なフェーズは以下の通りである。
- 解析部 - 入力から生成された中間表現を使って各種情報を収集する。主な解析としてUD連鎖を構築するデータフロー解析、依存関係解析、エイリアス解析、ポインタ解析、エスケープ解析などがある。正確な解析によってコンパイラ最適化が可能となる。また、コールグラフや制御フローグラフがここで作られることが多い。
- 最適化 - 中間表現を機能的には等価だがより「ベター」な形式に変換する。主な最適化手法としてインライン展開、デッドコード削除、定数伝播、ループ変換、レジスタ割り当て、自動並列化などがある[24]。
- コード生成 - 実際に出力する機械語やバイトコードを生成する。ここでリソースや記憶装置の割り当てが決定される。たとえば、どの変数をレジスタに格納し、どの変数をメモリに格納するか、どの命令をどういう順番で実行するかをアドレッシングモードなどをセシィ-ウルマン法などを用いて決定する。
コンパイラ解析とは、コンパイラ最適化の前に行われる処理で、両者は密接な関係がある。たとえば依存関係解析はループ変換実施に重要な意味を持つ。
さらに、コンパイラ解析と最適化の範囲は様々であり、基本的なブロック単位の場合からプロシージャや関数レベル、さらにはプロシージャの垣根を超えてプログラム全体を対象とすること(プロシージャ間最適化)もある。広範囲を考慮するコンパイラほど最適化に用いることができる「ヒント」が増え、結果としてより良いコードを生成する可能性がある。しかし、広範囲を考慮する解析や最適化はコンパイル時間やメモリ消費のコストが大きい。これは特にプロシージャ間の解析や最適化を行う場合に顕著である。
最近の商用コンパイラはプロシージャ間解析/最適化を備えているのが普通である(IBM、SGI、インテル、マイクロソフト、サン・マイクロシステムズなど)。かつてのオープンソースのGCCはプロシージャ間最適化を持たない点が弱点だったが、現在は改善されている。他のオープンソースのコンパイラで完全な最適化を行うものとしてOpen64がある。
コンパイラ解析と最適化には時間と空間が必要となるため、コンパイラによってはデフォルトでこれらのフェーズを省略するものもある。この場合、ユーザーはオプションを指定して明示的に最適化を指示しなければならない。
簡単な例
|
この節には独自研究が含まれているおそれがあります。
|
以下のプログラムは中置記法で入力された四則演算を逆ポーランド記法を経て、独自の中間表現にコンパイルするC言語で書かれた非常に単純なワンパス・コンパイラである。このコンパイラは中置記法を逆ポーランド記法にコンパイルすると共に、ある種のアセンブリ言語にもコンパイルする。再帰下降型の戦略を採用している。このため、各関数が文法における各非終端記号に対応している。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MODE_POSTFIX 0
#define MODE_ASSEMBLY 1
char lookahead;
int pos;
int compile_mode;
char expression[20+1];
void error()
{
printf("Syntax error!\n");
}
void match( char t )
{
if( lookahead == t )
{
pos++;
lookahead = expression[pos];
}
else
error();
}
void digit()
{
switch( lookahead )
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
if( compile_mode == MODE_POSTFIX )
printf("%c", lookahead);
else
printf("\tPUSH %c\n", lookahead);
match( lookahead );
break;
default:
error();
break;
}
}
void term()
{
digit();
while(1)
{
switch( lookahead )
{
case '*':
match('*');
digit();
printf( "%s", compile_mode == MODE_POSTFIX ? "*"
: "\tPOP B\n\tPOP A\n\tMUL A, B\n\tPUSH A\n");
break;
case '/':
match('/');
digit();
printf( "%s", compile_mode == MODE_POSTFIX ? "/"
: "\tPOP B\n\tPOP A\n\tDIV A, B\n\tPUSH A\n");
break;
default:
return;
}
}
}
void expr()
{
term();
while(1)
{
switch( lookahead )
{
case '+':
match('+');
term();
printf( "%s", compile_mode == MODE_POSTFIX ? "+"
: "\tPOP B\n\tPOP A\n\tADD A, B\n\tPUSH A\n");
break;
case '-':
match('-');
term();
printf( "%s", compile_mode == MODE_POSTFIX ? "-"
: "\tPOP B\n\tPOP A\n\tSUB A, B\n\tPUSH A\n");
break;
default:
return;
}
}
}
int main ( int argc, char** argv )
{
printf("Please enter an infix-notated expression with single digits:\n\n\t");
scanf("%20s", expression);
printf("\nCompiling to postfix-notated expression:\n\n\t");
compile_mode = MODE_POSTFIX;
pos = 0;
lookahead = *expression;
expr();
printf("\n\nCompiling to assembly-notated machine code:\n\n");
compile_mode = MODE_ASSEMBLY;
pos = 0;
lookahead = *expression;
expr();
return 0;
}
この単純なコンパイラの実行例を以下に示す。
Please enter an infix-notated expression with single digits:
3-4*2+2
Compiling to postfix-notated expression:
342*-2+
Compiling to assembly-notated machine code:
PUSH 3
PUSH 4
PUSH 2
POP B
POP A
MUL A, B
PUSH A
POP B
POP A
SUB A, B
PUSH A
PUSH 2
POP B
POP A
ADD A, B
PUSH A
脚注
注釈
- ^ この本の表紙には赤いドラゴンの絵が描かれているのでドラゴンブックと呼ばれている。
- ^ 例えばCPUやGPUなど。
- ^ オブジェクトコードの記述に使われる言語は、要は、その言語から最終的に機械語に翻訳する道筋が1筋(1本)でもあるものであればよい。理論上、機械語にたどり着くまでに途中で何種類もの言語にコンパイル(翻訳)する必要があっても、ともかく最終的に機械語に翻訳するまでの道筋が1本あれば良い。オブジェクトコードの記述に使われる言語は必ずしもアセンブリ言語や機械語でなくてもよい。たとえばC++で書かれたオブジェクトコードを出力するコンパイラやC言語で書かれたオブジェクトコードを出力するコンパイラもある。それぞれ、C++を機械語に、あるいはC言語を機械語に変換するコンパイラを別途用意すれば最終的にCPUが実行できる機械語に変換できる。よくあるのはアセンブリ言語で書かれたオブジェクトコードを出力するコンパイラである。アセンブリ言語で書かれたプログラムも通常そのままでは実行できないが、アセンブラを使ってやはりCPUが実行できる機械語に変換できる。
- ^ 最終的に出力されるターゲットプログラムは、機械語やアセンブリ言語で記述したものが多いが、それらに限るわけではなく、中間コードや高級言語のプログラムを出力するコンパイラもある。
出典
- ^ “コンパイラとは - IT用語辞典”. IT用語辞典 e-Words. 2023年2月22日閲覧。
- ^ a b c d Alfred V. Aho, Compilers, Principles, Techniques, and Tools. Reprinted with corrections March, 1988.(Copyright 1986,Bell Telephone Laboratories, Incorporated), pp.1-2. (Chapter 1.1 "COMPILERS"の節の説明)
- ^ ASCII.jpデジタル用語辞典,デジタル大辞泉,IT用語がわかる辞典. “オブジェクトコード(おぶじぇくとこーど)とは”. コトバンク. 2020年4月26日閲覧。
- ^ “分割コンパイル”. www3.nit.ac.jp. 2020年4月27日閲覧。
- ^ プログレッシブ英和中辞典「compile」
- ^ Oxford Dictionary; Produce (a list or book) by assembling information collected from other sources 「何らかの情報源から集めた情報を元にして、一覧や本を作りだす」
- ^ プログレッシブ英和中辞典「compiler」
- ^ 大辞泉「コンパイラ」
- ^ Oxford Dictionary; compiler: A person who produces a list or book by assembling information or written material collected from other sources.
- ^ bit 編集部『bit 単語帳』共立出版、1990年8月15日、82頁。ISBN 4-320-02526-1。
- ^ “CSAIL Publications”. publications.csail.mit.edu. 2020年6月16日閲覧。
- ^ “https://www.246.dk/” (デンマーク語). 2020年6月16日閲覧。
- ^ 2020年4月13日 8分. “コンパイラとインタプリタの違いは?言語の違いを分かりやすく解説!”. じゃぱざむ. 2020年4月27日閲覧。
- ^ “インタプリタとコンパイラ”. nyumon-info.com. 2020年4月27日閲覧。
- ^ a b Alfred V. Aho, Compilers, Principles, Techniques, and Tools. 1988., pp.10-15. 「1.3(1章3節) THE PHASES OF A COMPILER」
- ^ “コンパイラの構造を解説 | Shinta's Site”. www.gadgety.net. 2020年4月27日閲覧。
- ^ “コマンド:lex: UNIX/Linuxの部屋”. x68000.q-e-d.net. 2020年4月27日閲覧。
- ^ “パーサジェネレータとは - Weblio辞書”. www.weblio.jp. 2020年4月27日閲覧。
- ^ “コンパイラの入り口、「字句解析」のための文字列操作 (1/3)”. @IT. 2020年4月27日閲覧。
- ^ a b コンパイラの構成と最適化. Nakata, Ikuo, 1935-, 中田, 育男, 1935-. Tōkyō: Asakurashoten. (2009). ISBN 978-4-254-12177-3. OCLC 675837876
- ^ “プリプロセッサとは - IT用語辞典”. IT用語辞典 e-Words. 2020年4月27日閲覧。
- ^ “抽象構文木”. home.a00.itscom.net. 2020年4月27日閲覧。
- ^ “VU - exp. - compiler-general”. www.is.s.u-tokyo.ac.jp. 2020年4月27日閲覧。
- ^ MaryCore. “知っておいて損はない「コンパイラ最適化」の数々”. MaryCore 言語知能総合研究所. 2020年4月27日閲覧。
参考文献
- Compiler textbook references コンパイラ構成論の教科書(英語)のリスト
- Compilers: Principles, Techniques and Tools by Alfred V. Aho, Ravi Sethi, and Jeffrey D. Ullman (ISBN 0-201-10088-6)
- 原田賢一 訳、『コンパイラ—原理・技法・ツール<1>』サイエンス社、1990年。ISBN 4781905854
- 原田賢一 訳、『コンパイラ—原理・技法・ツール<2>』サイエンス社、1990年。ISBN 4781905862
- Advanced Compiler Design and Implementation by Steven Muchnick (ISBN 1-55860-320-4).
- Engineering a Compiler by Keith D. Cooper and Linda Torczon . Morgan Kaufmann 2004, ISBN 1-55860-699-8.
- Understanding and Writing Compilers: A Do It Yourself Guide (ISBN 0-333-21732-2) by Richard Bornat - 構文木からの機械語の再帰的生成を説明している貴重な書籍。古いメインフレームやミニコンピュータの経験に基づいており、最近の書籍が見落としがちな部分もカバーしている。著者のサイトにあるPDF版
- An Overview of the Production Quality Compiler-Compiler Project by Leverett, Cattel, Hobbs, Newcomer, Reiner, Schatz and Wulf. Computer 13(8):38-49 (August 1980)
- Compiler Construction by Niklaus Wirth (ISBN 0-201-40353-6) Addison-Wesley 1996, 176 pages, PDF版。再帰下降構文解析の解説。Oberon-0という小型の言語のコンパイラを題材にしている。
- "Programming Language Pragmatics" by Michael Scott (ISBN 0-12-633951-1) Morgan Kaufmann 2005, 2nd edition, 912 pages. 著者のサイト
- "A History of Language Processor Technology in IBM", by F.E. Allen, IBM Journal of Research and Development, v.25, no.5, September 1981.
- ニクラウス・ヴィルト(著)、滝沢徹(訳)、牧野裕子(訳):「ヴィルトのコンパイラ構成法」、星雲社、ISBN 4-7952-9706-1(1997年11月28日)。
- 中田育男:「コンパイラの構成と最適化」、朝倉書店、ISBN 978-4-254-12177-3(第2版)(1999年9月15日初版、2009年11月15日第2版)。
- A.V.エイホ、M.S.ラム、R.セシィ、J.D.ウルマン、原田賢一(訳):「コンパイラ[第2版]」、サイエンス社、ISBN 978-4-7819-1229-5(2009年5月25日第2版、1990年10月10日初版)。
- 五月女健治:「JavaCC:コンパイラコンパイラ for Java」、テクノプレス、ISBN 4-924998-64-8(2003年10月20日)。
- Andrew W. Appel、神林靖、滝本宗宏(訳):「最新コンパイラ構成技法」、翔泳社、ISBN 978-4-7981-1468-2(2009年10月29日)。
- 中田育男、渡邊担、佐々政宏:「コンパイラの基盤技術と実践」、朝倉書店、ISBN 978-4-254-12173-5(2008年6月25日)。
- 柏木餅子、風薬:「きつねさんでもわかるLLVM コンパイラを自作するためのガイドブック」、インプレスジャパン、ISBN 978-4-8443-3415-6(2013年6月21日)。
- 中田育男:「コンパイラ 作りながら学ぶ」、オーム社、 ISBN 978-4-274-22116-3(2017年10月25日)。
関連項目
- アセンブラ
- リンケージエディタ(リンカ)
- プリプロセッサ
- GNUコンパイラコレクション
- make (UNIX)
- Autotools
- オブジェクトコンバータ
- 逆コンパイラ
- 分割コンパイル
- 編集
外部リンク
固有名詞の分類
- Compilerのページへのリンク