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