コンパイラコンパイラ【compiler compiler】

概要

コンパイラコンパイラとはプログラミング言語の文法や構文規則の定義を入力として受け取り、その言語を処理するコンパイラまたはその構成要素となるプログラムを自動生成するソフトウェアのこと。コンパイラを作成するためのコンパイラであることから、このように呼ばれる。
コンパイラコンパイラのイメージ画像

人間が読み書きしやすい高水準言語で書かれたプログラムはそのままでは実行できないため、コンパイラによって機械語コードや中間コードに変換される。コンパイラは対象言語ごとに個別に開発する必要があるが、字句解析構文解析など言語を問わず共通する処理が多く、新しい言語の処理系を一から実装するには大きな労力を要する。

こうした背景から、言語仕様を記述するだけで必要なプログラムを自動生成する技術が研究され、コンパイラコンパイラが開発されるようになった。コンパイラ字句解析構文解析意味解析、最適化、コード生成などの処理段階から構成されるが、コンパイラコンパイラはこれらの全段階ではなく、特定の処理のみを対象とするものが多い。

文法規則から構文解析器を生成するものは「パーサジェネレータ」(parser generator)、字句規則から字句解析器を生成するものは「スキャナジェネレータ」(scanner generator)と呼ばれる。代表的なパーサジェネレータとして、UNIX系システムで広く使われてきた「yacc」(yet another compiler compiler)がよく知られている。

yaccは文脈自由文法で記述された規則からC言語の構文解析器コードを生成するものであり、コンパイラ全体を生成するわけではない。その後継の「GNU Bison」や、字句解析器を生成する「lex」「flex」、さらに複数のターゲット言語に対応した汎用パーサジェネレータ「ANTLR」(ANother Tool for Language Recognition)なども広く利用されている。

コンパイラコンパイラはコンパイラ開発だけでなく、インタプリタ、設定ファイル解析器、ドメイン固有言語DSL)の処理系クエリ言語処理系など様々な用途に応用されており、言語処理ソフトウェア開発を支える基盤技術の一つとなっている。

(2026.6.10更新)
 
この記事の著者 : (株)インセプト IT用語辞典 e-Words 編集部
1997年8月より「IT用語辞典 e-Words」を執筆・編集しています。累計公開記事数は1万ページ以上、累計サイト訪問者数は1億人以上です。学術論文や官公庁の資料などへも多数の記事が引用・参照されています。