コンパイラ関係を調べてみた。

コンパイラの構造
①プログラム読み込み
 1文字づつ読み取り
②字句解析
 読み込んだ文字列データを字句に分割する。
  ・最長一致
  ・最短一致(コメント)  
構文解析構文木の作成)
  ・LL文法
  ・再帰下向き
  ・演算子順位
  ・構文エラー処理
④意味解析
  ・エラー処理(意味、構文)
  ・属性評価
⑤中間語作成
  ・Javaでいうclassファイル
  ・識別子
  ・バージョン(マイナー、メジャー[バージョンがあがると+1 Java6.0=50])
  ・コンスタントプールの数
  ・コンスタントプールポインタ配列(コンスタントプール配列)
  ・アクセス属性
  ・クラス名称(フルネーム)
  ・親クラス名称(クラスツリーに対し名称でクラス情報を検索するみたい。クラスローダーがその役割っぽい)
  ・インターフェースの数
  ・インターフェースの名称配列
  ・メンバフィールド数
  ・メンバフィールド配列
  ・メソッド数
  ・メソッド配列
  ・属性数
  ・属性情報配列(エラーや、コード長、インナークラス等)
  ・Opcodeに変換(200ちょいのOpcode)基本的にマシン語に近い
  ※若干古いかも
  ※JRubyとかのスクリプト言語はこのフェーズで最適化
⑥最適化
  ・実行回数を減らす
  ・早い命令セットを選択
  ・並列度を上げる
  ・変数の使いまわし(ポインタの使いまわし)
⑦コード生成
  ・レジスタ用コード生成