Java编译器:Javac
Javac 編譯器的任務(wù)就是講java語言規(guī)范轉(zhuǎn)化成Java虛擬機(jī)語言規(guī)范,完成 “翻譯工作”
什么是Javac
Javac 是一種編譯器,能將一種語言規(guī)范轉(zhuǎn)化成另外一種語言規(guī)范。通常編譯器都是將便于人理解的語言規(guī)范轉(zhuǎn)化成機(jī)器容易理解的語言規(guī)范。如c,c++或者匯編語言都是講遠(yuǎn)嗎直接編譯成目標(biāo)機(jī)器碼,這個(gè)目標(biāo)機(jī)器碼是CPU直接執(zhí)行的指令集合。這些指令集合也就是底曾的一種語言規(guī)范,機(jī)器能夠直接識(shí)別這種識(shí)別這種語言規(guī)范,但是人不可能直接去寫目標(biāo)機(jī)器碼。雖然這種機(jī)器碼執(zhí)行起來非常搞笑,但是對(duì)人太不友好了, 開發(fā)這個(gè)代碼的成本往往遠(yuǎn)高于剩下的機(jī)器的執(zhí)行成本。
從某種意義上來說,有了編譯器才有了程序語言的繁榮,因?yàn)槠黄鹗侨祟惡蜋C(jī)器溝通的一個(gè)紐帶。那么回過頭來,javac的編譯器也是將Java這種對(duì)人非常友好的編程語言編譯成對(duì)所有機(jī)器都非常友好的語言。注意,這種語言不是針對(duì)某個(gè)機(jī)器的,甚至包括不同種類,不同平臺(tái)的機(jī)器。如何系哦啊出不同種類,不同機(jī)器之間的差別,這個(gè)任務(wù)就由JVM來完成,而Javac的任務(wù)就是將Java源代碼語言先轉(zhuǎn)化成JVM能夠識(shí)別的一種語言,然后由JVM將JVM語言再轉(zhuǎn)化成當(dāng)前這個(gè)機(jī)器能夠識(shí)別的機(jī)器語言。所以這樣看來,Java語言向開發(fā)者屏蔽了很多與木鱉機(jī)器相關(guān)的細(xì)節(jié),使得Java語言的執(zhí)行和平臺(tái)無關(guān),這也就成就了java語言的繁榮。
如下圖所示,javac的任務(wù)就是將java源碼編譯成Java字節(jié)碼,也就是JVM能夠識(shí)別的二進(jìn)制碼。從表面上看就是.java文件轉(zhuǎn)成.class文件,而實(shí)際上是將Java的源代碼轉(zhuǎn)化成了一連串二進(jìn)制數(shù)字,這些二進(jìn)制數(shù)字是有格式的,只有JVM能夠正確識(shí)別它們到底表達(dá)了什么意思。
Javac編譯器的基本結(jié)構(gòu)
回憶一下,如何才能編譯程序呢?
1.詞法分析。在讀取源碼時(shí)候,一個(gè)字節(jié)為一節(jié)讀進(jìn)來,找出這些字節(jié)中有哪些是我們規(guī)定的語法關(guān)鍵詞,如if else for while 等,要識(shí)別哪些if是合法的關(guān)鍵詞,哪些不是,這個(gè)步驟就是詞法分析過程。
2.語法分析。檢查這些關(guān)鍵詞組合在一起是不是符合java語言規(guī)范,如在if的后面是不是緊跟著一個(gè)布爾判斷表達(dá)式。與英語中,句子要有主謂賓一樣,都有才算語法正確。
3.語義分析。如果通過語法分析,但是語義是否正確呢?語義分析的主要工作是把一些難懂的,復(fù)雜的語法轉(zhuǎn)化為更加簡潔的語法,江浙步驟對(duì)應(yīng)到我們?nèi)祟惖恼Z言中,就是講難難懂的文言文轉(zhuǎn)化為大家都能懂得白話文,或者注解一下一些成語,便于人們更好滴理解。
語義分析的結(jié)果就是講復(fù)雜的語法轉(zhuǎn)化成最賤的語法,對(duì)應(yīng)到j(luò)ava中,如將foreach轉(zhuǎn)成for虛幻結(jié)構(gòu),還有注解等,最后形成一個(gè)注解過后的抽象語法樹,這棵語法樹更接近目標(biāo)語言的語法規(guī)則。
4.最后,通過字節(jié)碼生成器生產(chǎn)字節(jié)碼,根據(jù)經(jīng)過注解的抽象語法樹生產(chǎn)字節(jié)碼,也就是講一個(gè)數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)化為另一個(gè)數(shù)據(jù)結(jié)構(gòu),就像將所有中文詞語翻譯成英文單詞后,按照英文語法組裝成英文句子。
Javac 的各個(gè)模塊完成了將Java源代碼轉(zhuǎn)化成Java字節(jié)碼的任務(wù),所以javac主要就有4個(gè)模塊
分別是詞法分析器、語法分析器、語義分析器和代碼生成器。
總結(jié)
以上是生活随笔為你收集整理的Java编译器:Javac的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Wifi密码破解】安卓手机、电脑如何破
- 下一篇: 端口转发、映射、代理