ホームページ  >  記事  >  Java  >  javac コンパイルにはどのようなプロセスが含まれますか?

javac コンパイルにはどのようなプロセスが含まれますか?

hzc
hzcオリジナル
2020-06-18 13:38:317377ブラウズ

javac コンパイルにはどのようなプロセスが含まれますか?

javac コンパイルにはどのようなプロセスが含まれますか?

Java コンパイル プロセスは主に次のステップに分かれています:

1 . 字句解析 : ソース コード内の文字 (さまざまなキーワード、変数など) を、単一文字に対するプログラム作成の最小単位であるトークンのセットに変換します。トークンはコンパイル プロセスの最小単位です。

2. 構文分析: トークンのコレクションを抽象構文ツリーに構築します。構文ツリーの各ノードは、コード内の構文構造 (パッケージ、タイプ、インターフェイス、修飾子など) を表します。

3. シンボル テーブルを入力します: シンボル テーブルは、シンボル アドレスとシンボル情報のセットで構成されるテーブルです。シンボル テーブルを埋めるプロセスを終了すると、各抽象構文ツリー (および package-info.java) の最上位ノードを含む保留リストが生成されます。

4. プラグイン注釈プロセッサは注釈を処理します: 注釈プロセッサは、抽象構文ツリーの任意の要素を追加、削除、または変更できます。したがって、注釈プロセッサが構文ツリーを変更するたびに、注釈プロセッサが構文ツリーを変更しなくなるまで、ステップ 1、2、および 3 が再実行されます。各サイクルプロセスはラウンドと呼ばれます。

5. セマンティック分析: 構文ツリー構造が正しいソース プログラムを状況に応じてレビューします。

  • 注釈チェック: 変数が宣言されているかどうか、変数と代入型が一致しているかどうかなど、および定数の折りたたみを含みます。

  • データと制御フローの分析: プログラム コンテキスト ロジックのさらなる検証。使用前に変数に値が割り当てられているかどうか、メソッドに戻り値があるかどうか、例外が正しく処理されるかどうかなどが含まれます。

6. 構文シュガーのデコード: 高度な構文 (ジェネリック、変数パラメーター、アンボックス化など) を基本的な構文構造に変換します。これらは、仮想マシンの実行中はサポートされません。高度な構文。

7. バイトコードの生成: 少量のコード追加と変換作業を実行しながら、構文ツリーとシンボル テーブルの情報をバイトコードに変換してディスクに書き込みます。

上記の内容の大部分は、「Java 仮想マシンの詳細な理解」 -- Zhou Zhiming からの抜粋です。

推奨チュートリアル: 「java チュートリアル

以上がjavac コンパイルにはどのようなプロセスが含まれますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。