中間表現
中間表現はテキストデータやバイナリデータなどのデータ構造をとる。すなわち任意のデータ構造をとる。Javaバイトコードなどの「バイトコード」はフィールドの区切りや構造の長さなどがバイト指向な中間表現を指す語である。内部的な場合にはアドレスを指すポインタ(またはそれを抽象化したもの)によって要素を指し示すことで効率的な表現が可能だが、ファイルに書き出すなど外部的な場合には何らかの方法で永続化が必要である。内部的な表現としても、ポインタのような密結合で短命な表現ではなく、粗結合な表現を使うこともある。
プログラミング言語やその他の形式言語を扱うコンピュータ・プログラムでは、ソースコード等の入力にある文字列を字句解析器(レキシカルアナライザ)による字句解析によりトークン(字句)に切り分けた後、構文解析器(パーサ)による構文解析により、トークンを葉とする構文木と呼ばれる木構造を構築することが多い(構文解析の過程で直接にコード生成をしたりするものもある)。
構文木で表すことができるデータは抽象構文木の中間表現を用いる。抽象構文木は構文木の抽象化を目的として定義され、特定プラットフォームに依存した構文木から不特定多数プラットフォームに対応できる構文木で表現される。いずれの構文木も同等の情報を保持するデータを表す。命令セットを持つデータは中間表現で抽象化した上で、特定プラットフォームの命令セットと中間表現の命令セットをシンボルテーブルで紐付ける。中間表現とシンボルテーブルをセットで定義し、各プラットフォームの命令セットを中間表現を介して変換する。