JavaWeb系列讀書(shū)筆記(三)Java編譯原理

Javac是一種編譯器,編譯器簡(jiǎn)單來(lái)說(shuō)就是個(gè)翻譯器,將一種語(yǔ)言翻譯成另外一種語(yǔ)言,往往是將高級(jí)的語(yǔ)言翻譯成對(duì)機(jī)器友好的底層語(yǔ)言。但是不同機(jī)器之間有差別,為了實(shí)現(xiàn)在各機(jī)器能識(shí)別語(yǔ)言,這個(gè)工作交個(gè)JVM來(lái)完成。而Javac得任務(wù)就是將Java源碼轉(zhuǎn)化為JVM能識(shí)別得語(yǔ)言。

Java源碼(.java)->Javac->Java字節(jié)碼(.class 二進(jìn)制)->JVM->當(dāng)前機(jī)器能識(shí)別得機(jī)器語(yǔ)言

Javac的過(guò)程

1.源碼
2.Token流(詞法分析)
3.語(yǔ)法樹(shù)(語(yǔ)法分析)
4.注解語(yǔ)法樹(shù)(語(yǔ)義分析)
5.字節(jié)碼(代碼生成)

詞法分析:

Javac的接口類是com.sun.tools.javac.parser.Lexer 默認(rèn)實(shí)現(xiàn)類為 xxxxx.Scanner
Scanner會(huì)逐個(gè)讀取Java源文件的單個(gè)字符,然后解析出符合Java語(yǔ)言規(guī)范的Token序列

語(yǔ)法分析:
將token流更加結(jié)構(gòu)化成為一個(gè)語(yǔ)法樹(shù)

語(yǔ)義分析
對(duì)語(yǔ)法樹(shù)進(jìn)一步細(xì)化,去掉無(wú)用代碼,變量自動(dòng)轉(zhuǎn)化,代碼檢查,去除語(yǔ)法糖等

代碼生成
遍歷語(yǔ)法樹(shù),生成最終的字節(jié)碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本文基于周志明的《深入理解java虛擬機(jī) JVM高級(jí)特性與最佳實(shí)踐》所寫(xiě)。特此推薦。 列舉了這3類編譯過(guò)程中一些比...
    陽(yáng)光的技術(shù)小棧閱讀 455評(píng)論 0 0
  • 寒波未消盡,柔雨潤(rùn)春來(lái)。 枯枝生嫩葉,萎園似花開(kāi)。 天廣含薄霧,喜燕迎暖流。 驕陽(yáng)隨風(fēng)起,露滴入青苔。
    何樂(lè)楠閱讀 352評(píng)論 0 0
  • 只是沒(méi)看 一會(huì)兒沒(méi)看 轉(zhuǎn)眼便是一天 只是沒(méi)見(jiàn) 還是沒(méi)見(jiàn) 不曾想又是一年 誰(shuí)能保持不變 誰(shuí)又能記得諾言 我們還是輸給...
    站在風(fēng)口上的豬閱讀 240評(píng)論 0 0
  • 在許多個(gè)安靜的角落 走過(guò)許多安靜的日子 他鄉(xiāng)的鳥(niǎo)鳴清脆 現(xiàn)世的光陰安穩(wěn)
    杜鵑閱讀 195評(píng)論 0 1

友情鏈接更多精彩內(nèi)容