麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

Java代碼編譯過程簡述

2019-11-14 09:13:36
字體:
供稿:網(wǎng)友

java代碼編譯是由Javac編譯器來完成,流程如下圖1所示:

圖1

Javac是一種編譯器,能將一種語言規(guī)范轉(zhuǎn)化成另外一種語言規(guī)范,通常編譯器都是將便于人理解的語言規(guī)范轉(zhuǎn)化成機(jī)器容易理解的語言規(guī)范,如C/C++或者匯編語言都是將源代碼直接編譯成目標(biāo)機(jī)器碼,這個目標(biāo)機(jī)器代碼是CPU直接執(zhí)行的指令集合。這些指令集合也就是底層的一種語言規(guī)范。

Javac的編譯器也是將Java這種對人非常友好的編程語言編譯成對對所有機(jī)器都非常友好的一種語言。這種語言不是針對某種機(jī)器或某個平臺。怎么消除不通種類,不同平臺之間的差異這個任務(wù)就有JVM來完成,而Javac的任務(wù)就是將Java源代碼語言轉(zhuǎn)化為JVM能夠識別的一種語言,然后由JVM將JVM語言再轉(zhuǎn)化成當(dāng)前這個機(jī)器能夠識別的機(jī)器語言。

Javac的任務(wù)就是將Java源代碼編譯成Java字節(jié)碼,也就是JVM能夠識別的二進(jìn)制代碼,從表面看是將.java文件轉(zhuǎn)化為.class文件。而實際上是將Java源代碼轉(zhuǎn)化成一連串二進(jìn)制數(shù)字,這些二進(jìn)制數(shù)字是有格式的,只有JVM能夠真確的識別他們到底代表什么意思。

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

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

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

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

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

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

語義分析結(jié)果:就是將復(fù)雜的語法轉(zhuǎn)化為簡單的語法,對應(yīng)到Java就是將foreach轉(zhuǎn)化為for循環(huán),還有一些注釋等。最后生成一棵抽象的語法樹,這棵語法樹也就更接近目標(biāo)語言的語法規(guī)則。

4)字節(jié)碼生成:將會根據(jù)經(jīng)過注釋的抽象語法樹生成字節(jié)碼,也就是將一個數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為另外一個數(shù)據(jù)結(jié)構(gòu)。就像將所有的中文詞語翻譯成英文單詞后按照英文語法組裝文英文語句。代碼生成器的結(jié)果就是生成符合java虛擬機(jī)規(guī)范的字節(jié)碼。這個過程中的需要的組件如下圖2所示:

圖2

從上面的描述中我們知道編譯就是將一種語言通過分析分解,再按照一定的方式先形成一個簡單的框架(將Java源文件的字節(jié)流轉(zhuǎn)化為對應(yīng)的token流)然后在通過詳細(xì)的分析按照一定的規(guī)定在這個框架里添加?xùn)|西使這個token流形成更加結(jié)構(gòu)化的語法樹(就是將前面生成的token流中的一個個單詞組裝成一句話),但是這棵樹離我們的目標(biāo)—Java字節(jié)碼還有點差距,所以再進(jìn)行語義分析使那顆粗糙的樹更加完整完善(給類添加默認(rèn)的構(gòu)造函數(shù),檢查變量在使用前有沒有初始化,檢查操作變量類型是否匹配),然后javac編譯器調(diào)用com.sun.tools.javac.jvm.Gen類遍歷這棵語法樹將java方法中的代碼塊轉(zhuǎn)換成符合JVM語法的命令形式的二進(jìn)制數(shù)據(jù)。按照J(rèn)VM的文件組織格式將字節(jié)碼輸出到以class為擴(kuò)展名的文件中,也就是生成最終的java字節(jié)碼。詞法分析就是將關(guān)鍵詞組織成token流即檢查源碼中的的關(guān)鍵詞是否真確并組織成token流,而語法分析就是檢查源碼是否符合java語法規(guī)范并將詞組成語句。語義分析就是簡化復(fù)雜的添加缺少的,檢查變量類型是否合法。代碼生成器就是遍歷這棵樹生成符合JVM規(guī)范的代碼。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 精品欧美一区二区精品久久 | 91情侣在线偷精品国产 | 2023av在线视频 | 爱操影视 | 91精品国产91久久久久久丝袜 | 在线a毛片 | 玩偶姐姐在线观看免费 | 久久经典国产视频 | 主播粉嫩国产在线精品 | 精品一区二区免费视频视频 | 中文字幕亚洲视频 | av不卡免费在线 | 欧美日韩亚洲成人 | 中文字幕一区久久 | 国内精品伊人久久 | 红杏亚洲影院一区二区三区 | 99视频有精品 | 日韩电影一区二区三区 | 亚洲精品一二三区 | a网在线 | 国产精品久久久久久久久久尿 | 主人在调教室性调教女仆游戏 | 免费观看一区 | 91看片免费版 | 神秘电影91 | 女教师~淫辱の动漫在线 | 国产精品免费久久久 | 亚洲综合网站 | 久久情爱网 | 成人做爰www免费看 欧美精品免费一区二区三区 | 337p粉嫩大胆噜噜噜亚瑟影院 | 成人av一区二区免费播放 | 国产精品啪一品二区三区粉嫩 | 日本黄色免费片 | www国产网站 | 国产午夜亚洲精品理论片大丰影院 | v片在线看| 久久伊人精品视频 | 色综合一区二区 | 国产精品久久久久久久久久久久久久久 | 亚洲一区 国产精品 |