高級言語で記述されたプログラミング言語を、機械語、もしくはそれに似た中間言語と呼ばれる形へ変換するソフトウェアのこと。この変換作業はコンパイルと呼ばれる。
コンパイラは大きく、セルフコンパイラとクロスコンパイラに分けられる。
また、ネイティブコンパイラか、それ以外かにも分けられる。
組み込み機器やゲーム機のように、その環境で直接開発することが難しい場合、パーソナルコンピュータなどで開発し、その装置向けの機械語を作ることになる。
このように、他のアーキテクチャ向けの機械語等を出力するコンパイラを「クロスコンパイラ」という。対してその環境用の機械語を出力するコンパイラを「セルフコンパイラ」という。