Parrot
Parrot のコードには3つの形態がある。バイトコード(Parrot Bytecode, PBC)はネイティブでParrotに解釈される機械語であり、ほかの2つのコードはIMCC(旧バージョン)またはPIRC(新バージョン)によってバイトコードにコンパイルされる中間言語である。
アセンブリ言語(Parrot Assembly Language, PASM) は、バイトコードにほぼ1対1で対応する低レベルの言語である。
Parrot intermediate representation (PIR) はPASMより若干高レベルの言語であるが、直接バイトコードにコンパイルすることができる。Parrot上で動作させる言語処理系は、普通はPASMより扱いやすいPIRへのコンパイラを実装する。
PIRを使うと、Parrotのルーチン間の呼び出し規約の違いを管理・吸収し、またより実効効率のよい命令への変換(命令選択, instruction selection)や、変数のレジスタ割り付けやメモリ退避(レジスタスピル) などの最適化を個別に実装することなくParrot (IMCCやPIRC) に任せることができる。