亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java代碼到底是如何編譯成機器指令的

Java代碼到底是如何編譯成機器指令的

HUH函數 2018-10-10 12:57:24
查看完整描述

1 回答

?
白衣染霜花

TA貢獻1796條經驗 獲得超10個贊

編譯器把一種語言規范轉化為另一種語言規范的這個過程需要哪些步驟?回答這個問題需要參照《編譯原理》,總結過程如下:

????????1)詞法分析:讀取源代碼,一個字節一個字節的讀進來,找出這些詞法中我們定義的語言關鍵詞如:if、else、while等,識別哪些if是合法的哪些是不合法的。這個步驟就是詞法分析過程。

????????詞法分析的結果:就是從源代碼中找出了一些規范化的token流,就像人類語言中,給你一句話你要分辨出哪些是一個詞語,哪些是標點符號,哪些是動詞,哪些是名詞。

????????2)語法分析:就是對詞法分析中得到的token流進行語法分析,這一步就是檢查這些關鍵詞組合在一起是不是符合Java語言規范。如if的后面是不是緊跟著一個布爾型判斷表達式。

????????語法分析的結果:就是形成一個符合Java語言規定的抽象語法樹,抽象語法樹是一個結構化的語法表達形式,它的作用是把語言的主要詞法用一個結構化的形式組織在一起。這棵語法樹可以被后面按照新的規則再重新組織。

????????3)語義分析:語法分析完成之后也就不存在語法問題了,語義分析的主要工作就是把一些難懂的,復雜的語法轉化成更簡單的語法。就如難懂的文言文轉化為大家都懂的百話文,或者是注釋一下一些不懂的成語。

????????語義分析結果:就是將復雜的語法轉化為簡單的語法,對應到Java就是將foreach轉化為for循環,還有一些注釋等。最后生成一棵抽象的語法樹,這棵語法樹也就更接近目標語言的語法規則。

????????4)字節碼生成:將會根據經過注釋的抽象語法樹生成字節碼,也就是將一個數據結構轉化為另外一個數據結構。就像將所有的中文詞語翻譯成英文單詞后按照英文語法組裝文英文語句。代碼生成器的結果就是生成符合java虛擬機規范的字節碼。
查看完整回答
反對 回復 2018-10-24
  • 1 回答
  • 0 關注
  • 653 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號